{
 "version": "0.2.0",
 "generated": "2026-11-02",
 "categories": [
  "Sky & space",
  "Earth",
  "Radio",
  "Quantum",
  "Labs & biology",
  "Make things",
  "Mail & print",
  "Calls",
  "Play"
 ],
 "facts_source": "listings.json (verified 2026-11-01)",
 "providers": [
  {
   "slug": "stellardock",
   "name": "StellarDock",
   "url": "https://www.stellardock.net/",
   "category": "Sky & space",
   "what": "Book time on research-grade remote telescopes in Australia, Chile, the USA and Spain, pick a target and filters, and download the images.",
   "pricing_note": "Plans $50/month (Explorer, 50 credits), $150/month (Observer, 150 credits), $300/month (Astronomer, 300 credits); 1 credit = US$1; telescopes 20-150 credits/hour (T80 lowest at 20/hr)",
   "pricing_source": "https://www.stellardock.net/pricing/",
   "access": "Web app (browser agent)",
   "access_detail": "Browser dashboard at app.stellardock.net; no API or MCP mentioned on the site",
   "setup": null,
   "output": "Calibrated FITS files and JPEGs with full FITS headers and calibration frames, as a folder or ZIP",
   "turnaround": "Per session (up to 1-4 hours depending on plan); data downloadable as soon as the session ends",
   "verified": true,
   "notes": "Beta, run by iTelescope Pty Ltd. Access opening in stages: existing iTelescope members first, then everyone, so public purchase may not be open yet. 8 telescopes live; more migrating from iTelescope. Free account only browses; a paid plan is needed to image. Failed sessions refunded.",
   "tools": [
    {
     "byok": false,
     "id": "stellardock.book_session",
     "name": "Book a remote telescope session",
     "description": "Book time on a research-grade remote telescope (Australia, Chile, USA, Spain), choose a target and filters, and download calibrated FITS and JPEG images when the session ends. Browser dashboard only; no API.",
     "price": "20–150 credits/hour ($1 = 1 credit), on a $50–300/month plan",
     "live": false,
     "input_schema": {
      "type": "object",
      "properties": {
       "telescope": {
        "type": "string",
        "description": "Telescope name, e.g. T80"
       },
       "target": {
        "type": "string",
        "description": "Object name or RA/Dec, e.g. M42"
       },
       "filters": {
        "type": "array",
        "items": {
         "type": "string"
        },
        "description": "e.g. [\"L\",\"R\",\"G\",\"B\"]"
       },
       "exposure_s": {
        "type": "number",
        "description": "Seconds per exposure"
       },
       "count": {
        "type": "integer",
        "description": "Exposures per filter"
       }
      },
      "required": [
       "telescope",
       "target"
      ],
      "additionalProperties": false
     },
     "example_input": {
      "telescope": "T80",
      "target": "M42",
      "filters": [
       "L",
       "R",
       "G",
       "B"
      ],
      "exposure_s": 120,
      "count": 5
     },
     "example_output_excerpt": "Provider delivers calibrated FITS files and JPEGs with full FITS headers and calibration frames, as a folder or ZIP."
    }
   ]
  },
  {
   "slug": "pictor",
   "name": "PICTOR",
   "url": "https://www.pictortelescope.com/",
   "category": "Sky & space",
   "what": "Point a 1.5 m radio telescope at the sky and get a hydrogen-line observation back.",
   "pricing_note": "Free",
   "pricing_source": "https://www.pictortelescope.com/",
   "access": "Web form + email",
   "access_detail": "Observation form at https://www.pictortelescope.com/observe (frequency, bandwidth, channels, duration)",
   "setup": null,
   "output": "Radio spectrum of the observation, optional raw data as .csv",
   "turnaround": "Minutes to hours; you get an email when it is done",
   "verified": true,
   "notes": "One shared dish; the observe page carries 'currently observing' and 'under maintenance' notices, so it may be unavailable at times.",
   "tools": [
    {
     "byok": false,
     "id": "pictor.submit_observation",
     "name": "Hydrogen-line observation",
     "description": "Point the PICTOR 1.5 m radio telescope at the sky and get a radio spectrum back by email. Submitted through their web form; one shared dish that may be busy or under maintenance.",
     "price": "Free",
     "live": false,
     "input_schema": {
      "type": "object",
      "properties": {
       "obs_name": {
        "type": "string"
       },
       "f_center": {
        "type": "number",
        "description": "Center frequency in MHz (hydrogen line: 1420)"
       },
       "bandwidth": {
        "type": "number",
        "description": "Bandwidth in MHz"
       },
       "channels": {
        "type": "integer",
        "description": "Number of channels"
       },
       "nbins": {
        "type": "integer",
        "description": "Number of bins"
       },
       "duration": {
        "type": "integer",
        "description": "Observing duration in seconds"
       },
       "raw_data": {
        "type": "boolean",
        "description": "Also send raw data as .csv"
       }
      },
      "required": [
       "obs_name",
       "f_center",
       "bandwidth",
       "channels",
       "nbins",
       "duration"
      ],
      "additionalProperties": false
     },
     "example_input": {
      "obs_name": "milky-way-hi",
      "f_center": 1420,
      "bandwidth": 2.4,
      "channels": 2048,
      "nbins": 100,
      "duration": 60,
      "raw_data": true
     },
     "example_output_excerpt": "Provider emails the radio spectrum of the observation, optionally raw data as .csv."
    }
   ]
  },
  {
   "slug": "global-meteor-network",
   "name": "Global Meteor Network",
   "url": "https://globalmeteornetwork.org/",
   "category": "Sky & space",
   "what": "Download trajectories and orbits of meteors filmed by a worldwide camera network.",
   "pricing_note": "Free",
   "pricing_source": "https://globalmeteornetwork.org/data/",
   "access": "Python library",
   "access_detail": "gmn-python-api (community-maintained, github.com/rickybassom) reading https://globalmeteornetwork.org/data/traj_summary_data/",
   "setup": "pip install gmn-python-api",
   "output": "Meteor trajectories, radiants, orbits, magnitudes and masses",
   "turnaround": "Data updated every 6 hours",
   "verified": true,
   "notes": "Data is CC BY 4.0; cite GMN papers for scientific use. The Python library is not stated to be official.",
   "tools": [
    {
     "byok": false,
     "id": "global_meteor_network.latest_meteors",
     "name": "Newest meteors",
     "description": "The newest meteor trajectories filmed by the Global Meteor Network: time, shower, brightness, speed, mass and where each started and ended in the sky. Filter by shower code (e.g. ORI, STA) or brightness.",
     "price": "Free",
     "live": true,
     "input_schema": {
      "type": "object",
      "properties": {
       "limit": {
        "type": "integer",
        "minimum": 1,
        "maximum": 25,
        "default": 10
       },
       "shower": {
        "type": "string",
        "description": "IAU 3-letter shower code, e.g. ORI, STA, GEM"
       },
       "brighter_than_mag": {
        "type": "number",
        "description": "Only meteors with peak absolute magnitude at or below this (lower is brighter), e.g. -2"
       }
      },
      "required": [],
      "additionalProperties": false
     },
     "example_input": {
      "limit": 3
     },
     "example_output_excerpt": "{\"file\":\"https://globalmeteornetwork.org/data/traj_summary_data/daily/traj_summary_latest_daily.txt\",\"note\":\"Newest trajectories in GMN's latest daily summary (updated every ~6 h). Magnitudes: lower is brighter.\",\"count\":3,\"meteors\":[{\"id\":\"20261101102542_j6aRl\",\"utc\":\"2026-11-01T10:25:42.925Z\",\"shower\":null,\"peak_abs_mag\":0.89,\"mass_kg\":0.0000118,\"v_init_km_s\":55.12,\"v_geo_km_s\":53.68,\"begin\":{\"lat\":40.7118,\"lon\":-75.5272,\"height_km\":107.1},\"end\":{\"lat\":40.7412,\"lon\":-75.7105,\"height_km\":98.8},\"duration_s\":0.33,\"entry_elevation_deg\":27.3,\"stations\":[\"US002B\",\"US002L\"]},{\"id\":\"2026110106461..."
    },
    {
     "byok": false,
     "id": "global_meteor_network.shower_counts",
     "name": "Active meteor showers",
     "description": "Count meteors per shower in GMN's latest daily summary (about the last 24 h), with the sporadic count and the brightest meteor.",
     "price": "Free",
     "live": true,
     "input_schema": {
      "type": "object",
      "properties": {
       "top": {
        "type": "integer",
        "minimum": 1,
        "maximum": 30,
        "default": 10
       }
      },
      "required": [],
      "additionalProperties": false
     },
     "example_input": {
      "top": 5
     },
     "example_output_excerpt": "{\"file\":\"https://globalmeteornetwork.org/data/traj_summary_data/daily/traj_summary_latest_daily.txt\",\"generated\":\"2026-11-01 19:24:53.491169+00:00 UTC\",\"window\":{\"from\":\"2026-10-31T19:07:22.811Z\",\"to\":\"2026-11-01T10:25:42.925Z\"},\"total_trajectories\":1233,\"sporadic\":903,\"showers\":[{\"code\":\"STA\",\"name\":\"Southern Taurids\",\"count\":85},{\"code\":\"ORI\",\"name\":\"Orionids\",\"count\":73},{\"code\":\"DAT\",\"name\":null,\"count\":52},{\"code\":\"NTA\",\"name\":\"Northern Taurids\",\"count\":47},{\"code\":\"STS\",\"name\":null,\"count\":12}],\"brightest\":{\"id\":\"20261101043043_izbu2\",\"utc\":\"2026-11-01T04:30:43.122Z\",\"peak_abs_mag\":-4..."
    },
    {
     "byok": false,
     "id": "global_meteor_network.meteors_near",
     "name": "Meteors near a place",
     "description": "Meteors from GMN's latest daily summary that began within a radius of a latitude/longitude, newest first.",
     "price": "Free",
     "live": true,
     "input_schema": {
      "type": "object",
      "properties": {
       "lat": {
        "type": "number",
        "minimum": -90,
        "maximum": 90,
        "description": "Latitude in decimal degrees"
       },
       "lon": {
        "type": "number",
        "minimum": -180,
        "maximum": 180,
        "description": "Longitude in decimal degrees"
       },
       "radius_km": {
        "type": "number",
        "minimum": 1,
        "maximum": 2000,
        "default": 300,
        "description": "Search radius in km"
       },
       "limit": {
        "type": "integer",
        "minimum": 1,
        "maximum": 25,
        "default": 10
       }
      },
      "required": [
       "lat",
       "lon"
      ],
      "additionalProperties": false
     },
     "example_input": {
      "lat": 51.5,
      "lon": -0.1,
      "radius_km": 400,
      "limit": 2
     },
     "example_output_excerpt": "{\"query\":{\"lat\":51.5,\"lon\":-0.1,\"radius_km\":400},\"file\":\"https://globalmeteornetwork.org/data/traj_summary_data/daily/traj_summary_latest_daily.txt\",\"note\":\"Distance is measured to the point where the meteor started glowing.\",\"matches\":579,\"count\":2,\"meteors\":[{\"id\":\"20261101055046_X5GR9\",\"utc\":\"2026-11-01T05:50:46.027Z\",\"shower\":{\"code\":\"CTA\",\"name\":null},\"peak_abs_mag\":0.43,\"mass_kg\":0.0000199,\"v_init_km_s\":41.26,\"v_geo_km_s\":39.97,\"begin\":{\"lat\":52.653,\"lon\":-5.412,\"height_km\":99.8},\"end\":{\"lat\":52.655,\"lon\":-5.3169,\"height_km\":94.5},\"duration_s\":0.2,\"entry_elevation_deg\":38.9,\"stations\"..."
    }
   ]
  },
  {
   "slug": "noaa-swpc",
   "name": "NOAA Space Weather Prediction Center",
   "url": "https://www.swpc.noaa.gov/",
   "category": "Sky & space",
   "what": "Check geomagnetic storms, solar wind, aurora chances and official space weather alerts.",
   "pricing_note": "Free",
   "pricing_source": "https://www.swpc.noaa.gov/content/data-access",
   "access": "API",
   "access_detail": "JSON products at services.swpc.noaa.gov (no key)",
   "setup": null,
   "output": "Kp index and forecast, NOAA R/S/G scales, solar wind, OVATION aurora probability and alert messages",
   "turnaround": "Real time (1-minute to 3-hour cadence)",
   "verified": true,
   "notes": "Part of NOAA/NWS; public domain under the NWS disclaimer. Terms checked 2026-11-02: https://www.weather.gov/disclaimer",
   "tools": [
    {
     "byok": false,
     "id": "noaa_swpc.space_weather_now",
     "name": "Space weather now",
     "description": "Current planetary Kp index, the 24-hour Kp forecast peak, NOAA radio-blackout / radiation / geomagnetic storm scales with a 3-day outlook, and live solar wind speed and magnetic field.",
     "price": "Free",
     "live": true,
     "input_schema": {
      "type": "object",
      "properties": {},
      "required": [],
      "additionalProperties": false
     },
     "example_input": {},
     "example_output_excerpt": "{\"kp_now\":{\"kp\":2,\"time\":\"2026-11-01T21:00:00Z\",\"storm_level\":\"none\"},\"kp_forecast_24h_max\":{\"kp\":3,\"time\":\"2026-11-02T03:00:00Z\",\"noaa_scale\":null},\"scales_now\":{\"radio_blackout_R\":0,\"solar_radiation_S\":0,\"geomagnetic_storm_G\":0,\"geomagnetic_text\":\"none\"},\"outlook\":[{\"date\":\"2026-11-02\",\"r1_r2_minor_pct\":1,\"r3_major_pct\":1,\"s1_pct\":1,\"g_scale_expected\":0},{\"date\":\"2026-11-03\",\"r1_r2_minor_pct\":1,\"r3_major_pct\":1,\"s1_pct\":1,\"g_scale_expected\":0},{\"date\":\"2026-11-04\",\"r1_r2_minor_pct\":1,\"r3_major_pct\":1,\"s1_pct\":1,\"g_scale_expected\":0}],\"solar_wind\":{\"speed_km_s\":454,\"bt_nt\":4,\"bz_nt\":1,\"tim..."
    },
    {
     "byok": false,
     "id": "noaa_swpc.aurora_chance",
     "name": "Aurora chance at a place",
     "description": "NOAA's OVATION model probability of seeing aurora overhead at a location in the next 30-90 minutes, plus the strongest value a little poleward (aurora on the horizon).",
     "price": "Free",
     "live": true,
     "input_schema": {
      "type": "object",
      "properties": {
       "lat": {
        "type": "number",
        "minimum": -90,
        "maximum": 90,
        "description": "Latitude in decimal degrees"
       },
       "lon": {
        "type": "number",
        "minimum": -180,
        "maximum": 180,
        "description": "Longitude in decimal degrees"
       }
      },
      "required": [
       "lat",
       "lon"
      ],
      "additionalProperties": false
     },
     "example_input": {
      "lat": 64.84,
      "lon": -147.72
     },
     "example_output_excerpt": "{\"query\":{\"lat\":64.84,\"lon\":-147.72},\"observed\":\"2026-11-02T00:28:00Z\",\"forecast_for\":\"2026-11-02T01:28:00Z\",\"aurora_overhead_pct\":0,\"chance_overhead\":\"very low\",\"max_within_8deg_poleward_pct\":5,\"note\":\"OVATION model: probability of visible aurora overhead in the next ~30-90 minutes. A strong value poleward can mean aurora low on the horizon. Needs darkness and clear skies.\",\"page\":\"https://www.swpc.noaa.gov/products/aurora-30-minute-forecast\",\"attribution\":{\"source\":\"NOAA Space Weather Prediction Center\",\"license\":\"Public domain (U.S. Government work)\",\"source_url\":\"https://www.swpc.noaa.g..."
    },
    {
     "byok": false,
     "id": "noaa_swpc.alerts",
     "name": "Space weather alerts",
     "description": "Recent official SWPC alerts, watches and warnings (geomagnetic storms, solar radiation, radio blackouts), newest first.",
     "price": "Free",
     "live": true,
     "input_schema": {
      "type": "object",
      "properties": {
       "days": {
        "type": "integer",
        "minimum": 1,
        "maximum": 30,
        "default": 3,
        "description": "How many days back"
       },
       "limit": {
        "type": "integer",
        "minimum": 1,
        "maximum": 20,
        "default": 5
       }
      },
      "required": [],
      "additionalProperties": false
     },
     "example_input": {
      "days": 3,
      "limit": 3
     },
     "example_output_excerpt": "{\"query\":{\"days\":3,\"limit\":3},\"total\":14,\"count\":3,\"alerts\":[{\"product_id\":\"K04W\",\"issued\":\"2026-11-01T14:57:52Z\",\"title\":\"EXTENDED WARNING: Geomagnetic K-index of 4 expected\",\"message\":\"Space Weather Message Code: WARK04\\nSerial Number: 5446\\nIssue Time: 2026 Nov 01 1457 UTC\\n\\nEXTENDED WARNING: Geomagnetic K-index of 4 expected\\nExtension to Serial Number: 5445\\nValid From: 2026 Oct 31 1235 UTC\\nNow Valid Until: 2026 Nov 01 2359 UTC\\nWarning Condition: Persistence\\n\\n\\nNOAA Space Weather Scale descriptions can be found at\\nwww.swpc.noaa.gov/noaa-scales-explanation\\n\\nPotential Impacts: Ar..."
    }
   ]
  },
  {
   "slug": "raspberry-shake",
   "name": "Raspberry Shake data",
   "url": "https://data.raspberryshake.org/",
   "category": "Earth",
   "what": "Download seismograms from thousands of citizen seismometers worldwide.",
   "pricing_note": "Free for hobbyists, school teachers, researchers and geophysical institutes; commercial use and real-time streaming are by quote",
   "pricing_source": "https://raspberryshake.org/license/",
   "access": "Python library",
   "access_detail": "ObsPy FDSN client: Client('RASPISHAKE') against https://data.raspberryshake.org/fdsnws/",
   "setup": "pip install obspy",
   "output": "Raw-count waveform data (miniSEED) for any station and time window",
   "turnaround": "Seconds; data is 30 minutes old or older",
   "verified": true,
   "notes": "Not connected: the Raspberry Shake license forbids redistributing their data or integrating it into a back-end app, so we do not proxy it. Use their own portal or ObsPy directly. Max 24 h of data per request; 5 requests/s or 30/min; slower after 200 MB per IP. Digital redistribution not allowed. Cite DOI:10.7914/SN/AM.",
   "tools": [
    {
     "byok": false,
     "id": "raspberry_shake.stations_near",
     "name": "Seismometers near a place",
     "description": "Find active Raspberry Shake citizen seismometers near a latitude/longitude (FDSN station service). Query the provider directly: their license forbids proxying.",
     "price": "Free for hobby, school and research use; commercial by quote",
     "live": false,
     "input_schema": {
      "type": "object",
      "properties": {
       "latitude": {
        "type": "number"
       },
       "longitude": {
        "type": "number"
       },
       "maxradius": {
        "type": "number",
        "description": "Degrees"
       },
       "level": {
        "type": "string",
        "enum": [
         "station",
         "channel"
        ],
        "default": "station"
       }
      },
      "required": [
       "latitude",
       "longitude",
       "maxradius"
      ],
      "additionalProperties": false
     },
     "example_input": {
      "latitude": 51.5,
      "longitude": -0.1,
      "maxradius": 0.5,
      "level": "station"
     },
     "example_output_excerpt": "Provider returns FDSN station text: network, station code, latitude, longitude, elevation, site name, start/end time."
    },
    {
     "byok": false,
     "id": "raspberry_shake.waveform",
     "name": "Download a seismogram",
     "description": "Get raw-count waveform data (miniSEED) for one station and time window via the FDSN dataselect service: max 24 h per request, data is 30 minutes old or older. Query the provider directly: their license forbids proxying.",
     "price": "Free for hobby, school and research use; commercial by quote",
     "live": false,
     "input_schema": {
      "type": "object",
      "properties": {
       "network": {
        "type": "string",
        "default": "AM"
       },
       "station": {
        "type": "string",
        "description": "e.g. R10BA"
       },
       "location": {
        "type": "string",
        "default": "00"
       },
       "channel": {
        "type": "string",
        "description": "e.g. EHZ"
       },
       "starttime": {
        "type": "string",
        "format": "date-time"
       },
       "endtime": {
        "type": "string",
        "format": "date-time"
       }
      },
      "required": [
       "station",
       "channel",
       "starttime",
       "endtime"
      ],
      "additionalProperties": false
     },
     "example_input": {
      "network": "AM",
      "station": "R10BA",
      "location": "00",
      "channel": "EHZ",
      "starttime": "2026-11-01T12:00:00",
      "endtime": "2026-11-01T12:10:00"
     },
     "example_output_excerpt": "Provider returns a miniSEED file (raw counts). Cite DOI:10.7914/SN/AM."
    }
   ]
  },
  {
   "slug": "skyfi",
   "name": "SkyFi",
   "url": "https://www.skyfi.com/",
   "category": "Earth",
   "what": "Buy existing satellite images or order a new satellite photo of any place on Earth.",
   "pricing_note": "Archive image starting at $15; new tasking image starting at $200; SAR imagery starting at $450",
   "pricing_source": "https://www.skyfi.com/pricing",
   "access": "Official MCP",
   "access_detail": "Streamable HTTP MCP at https://mcp.skyfi.com/mcp, OAuth sign-in",
   "setup": "Add the MCP server https://mcp.skyfi.com/mcp",
   "output": "Satellite imagery files, plus optional analytics (NDVI, vessel, building detection)",
   "turnaround": "Archive: fast; new tasking: days",
   "verified": true,
   "notes": "Order tools charge your real payment method and cannot be reversed; validate the order (free price check) first. Minimum area not stated on the pricing page.",
   "tools": [
    {
     "byok": true,
     "id": "skyfi.validate_order",
     "name": "Price-check an image order",
     "description": "Validate an archive or tasking order for an area of interest and get the price before buying. Use SkyFi's own MCP with your sign-in.",
     "price": "Free price check",
     "live": false,
     "input_schema": {
      "type": "object",
      "properties": {
       "aoi_wkt": {
        "type": "string",
        "description": "Area of interest as WKT polygon"
       },
       "order_type": {
        "type": "string",
        "enum": [
         "archive",
         "tasking"
        ]
       },
       "archive_id": {
        "type": "string"
       },
       "window_start": {
        "type": "string",
        "format": "date-time"
       },
       "window_end": {
        "type": "string",
        "format": "date-time"
       }
      },
      "required": [
       "aoi_wkt",
       "order_type"
      ],
      "additionalProperties": false
     },
     "example_input": {
      "aoi_wkt": "POLYGON((-97.75 30.26,-97.73 30.26,-97.73 30.28,-97.75 30.28,-97.75 30.26))",
      "order_type": "tasking"
     },
     "example_output_excerpt": "Provider returns the validated order with its price; nothing is charged."
    },
    {
     "byok": true,
     "id": "skyfi.order_archive_image",
     "name": "Buy an existing satellite image",
     "description": "Buy an archive satellite image of an area. Charges your real payment method and cannot be reversed; validate first.",
     "price": "Archive images from $15",
     "live": false,
     "input_schema": {
      "type": "object",
      "properties": {
       "archive_id": {
        "type": "string"
       },
       "aoi_wkt": {
        "type": "string"
       }
      },
      "required": [
       "archive_id",
       "aoi_wkt"
      ],
      "additionalProperties": false
     },
     "example_input": {
      "archive_id": "archive-id-from-search",
      "aoi_wkt": "POLYGON((...))"
     },
     "example_output_excerpt": "Provider delivers satellite imagery files, plus optional analytics."
    },
    {
     "byok": true,
     "id": "skyfi.order_tasking",
     "name": "Order a new satellite photo",
     "description": "Task a satellite to photograph any place on Earth in a time window (optical or SAR). Charges your real payment method and cannot be reversed; validate first.",
     "price": "New satellite photo from $200; SAR imagery from $450",
     "live": false,
     "input_schema": {
      "type": "object",
      "properties": {
       "aoi_wkt": {
        "type": "string"
       },
       "window_start": {
        "type": "string",
        "format": "date-time"
       },
       "window_end": {
        "type": "string",
        "format": "date-time"
       },
       "product_type": {
        "type": "string",
        "enum": [
         "optical",
         "sar"
        ]
       }
      },
      "required": [
       "aoi_wkt",
       "window_start",
       "window_end"
      ],
      "additionalProperties": false
     },
     "example_input": {
      "aoi_wkt": "POLYGON((...))",
      "window_start": "2026-11-05T00:00:00Z",
      "window_end": "2026-11-12T00:00:00Z",
      "product_type": "optical"
     },
     "example_output_excerpt": "Provider delivers new imagery days later, with optional NDVI, vessel or building detection."
    }
   ]
  },
  {
   "slug": "usgs-earthquakes",
   "name": "USGS Earthquake Hazards Program",
   "url": "https://earthquake.usgs.gov/",
   "category": "Earth",
   "what": "Search the U.S. Geological Survey's worldwide earthquake catalog, updated within minutes of each quake.",
   "pricing_note": "Free",
   "pricing_source": "https://earthquake.usgs.gov/fdsnws/event/1/",
   "access": "API",
   "access_detail": "FDSN event web service at https://earthquake.usgs.gov/fdsnws/event/1/ (no key; 20,000 events per query)",
   "setup": null,
   "output": "Magnitude, place, time, depth, tsunami flag and PAGER alert level per earthquake (GeoJSON)",
   "turnaround": "Real time (events appear within minutes)",
   "verified": true,
   "notes": "U.S. Government work in the public domain; USGS asks for credit (\"U.S. Geological Survey\"). Terms checked 2026-11-02: https://www.usgs.gov/information-policies-and-instructions/copyrights-and-credits",
   "tools": [
    {
     "byok": false,
     "id": "usgs_earthquakes.recent",
     "name": "Recent earthquakes",
     "description": "Earthquakes from the USGS worldwide catalog in the last 1-30 days, newest or biggest first, optionally within a radius of a place. Returns magnitude, place, time, depth, tsunami flag, PAGER alert and the USGS event page.",
     "price": "Free",
     "live": true,
     "input_schema": {
      "type": "object",
      "properties": {
       "min_magnitude": {
        "type": "number",
        "minimum": -1,
        "maximum": 10,
        "default": 4.5,
        "description": "Smallest magnitude to include"
       },
       "days": {
        "type": "integer",
        "minimum": 1,
        "maximum": 30,
        "default": 1,
        "description": "How many days back to search"
       },
       "order": {
        "type": "string",
        "enum": [
         "time",
         "magnitude"
        ],
        "default": "time"
       },
       "lat": {
        "type": "number",
        "minimum": -90,
        "maximum": 90,
        "description": "Optional: latitude to search around (give with lon)"
       },
       "lon": {
        "type": "number",
        "minimum": -180,
        "maximum": 180,
        "description": "Optional: longitude to search around (give with lat)"
       },
       "radius_km": {
        "type": "number",
        "minimum": 1,
        "maximum": 5000,
        "default": 500,
        "description": "Search radius when lat/lon are given"
       },
       "limit": {
        "type": "integer",
        "minimum": 1,
        "maximum": 50,
        "default": 10
       }
      },
      "required": [],
      "additionalProperties": false
     },
     "example_input": {
      "min_magnitude": 2.5,
      "days": 7,
      "lat": 37.77,
      "lon": -122.42,
      "radius_km": 200,
      "limit": 5
     },
     "example_output_excerpt": "{\"query\":{\"min_magnitude\":2.5,\"days\":7,\"order\":\"time\",\"lat\":37.77,\"lon\":-122.42,\"radius_km\":200},\"count\":5,\"earthquakes\":[{\"id\":\"nc75460382\",\"magnitude\":2.92,\"mag_type\":\"md\",\"place\":\"27 km WSW of Westley, CA\",\"time\":\"2026-10-31T16:44:50.250Z\",\"lat\":37.4236679077148,\"lon\":-121.457664489746,\"depth_km\":2.4,\"distance_km\":93.1,\"tsunami_flag\":false,\"pager_alert\":null,\"felt_reports\":null,\"status\":\"automatic\",\"page\":\"https://earthquake.usgs.gov/earthquakes/eventpage/nc75460382\"},{\"id\":\"nc75459362\",\"magnitude\":2.67,\"mag_type\":\"md\",\"place\":\"12 km SW of Ridgemark, CA\",\"time\":\"2026-10-29T12:38:05.010Z\"..."
    }
   ]
  },
  {
   "slug": "nws",
   "name": "NOAA National Weather Service",
   "url": "https://www.weather.gov/",
   "category": "Earth",
   "what": "Get active U.S. weather alerts and the official 7-day forecast for any U.S. location.",
   "pricing_note": "Free",
   "pricing_source": "https://www.weather.gov/documentation/services-web-api",
   "access": "API",
   "access_detail": "api.weather.gov (no key; a User-Agent identifying the app is required; rate limit not published)",
   "setup": null,
   "output": "Alerts (event, severity, areas, timing, instructions) and forecast periods (temperature, wind, precipitation chance)",
   "turnaround": "Real time",
   "verified": true,
   "notes": "Public domain. NWS asks that reformatted data not be presented as an official product or imply endorsement; we label it. Terms checked 2026-11-02: https://www.weather.gov/disclaimer",
   "tools": [
    {
     "byok": false,
     "id": "nws.alerts",
     "name": "Active weather alerts",
     "description": "Active U.S. National Weather Service alerts (warnings, watches, advisories) for a state or a point, most severe first, with areas, timing, a shortened description and the link to the full alert.",
     "price": "Free",
     "live": true,
     "input_schema": {
      "type": "object",
      "properties": {
       "area": {
        "type": "string",
        "description": "U.S. state or territory code, e.g. \"CA\", \"TX\", \"PR\""
       },
       "lat": {
        "type": "number",
        "minimum": -90,
        "maximum": 90,
        "description": "Or a point: latitude (give with lon)"
       },
       "lon": {
        "type": "number",
        "minimum": -180,
        "maximum": 180,
        "description": "Or a point: longitude (give with lat)"
       },
       "min_severity": {
        "type": "string",
        "enum": [
         "Minor",
         "Moderate",
         "Severe",
         "Extreme"
        ],
        "default": "Minor"
       },
       "limit": {
        "type": "integer",
        "minimum": 1,
        "maximum": 25,
        "default": 10
       }
      },
      "required": [],
      "additionalProperties": false
     },
     "example_input": {
      "area": "CA",
      "min_severity": "Moderate",
      "limit": 3
     },
     "example_output_excerpt": "{\"query\":{\"area\":\"CA\",\"lat\":null,\"lon\":null,\"min_severity\":\"Moderate\"},\"total_active\":7,\"count\":3,\"alerts\":[{\"event\":\"Flood Watch\",\"severity\":\"Severe\",\"urgency\":\"Future\",\"certainty\":\"Possible\",\"headline\":\"Flood Watch issued November 1 at 1:36PM PST until November 2 at 4:00AM PST by NWS Las Vegas NV\",\"areas\":\"Northwest Plateau; Lake Havasu and Fort Mohave; Lake Mead - AZ side; Lake Mohave - AZ side; Hualapai Mountains; Northwest Deserts; San Bernardino County-Upper Colorado River Valley; Lincoln County; Northeast Clark County; Lake Mead - NV side; Lake Mohave - NV side\",\"sent\":\"2026-11-01T13..."
    },
    {
     "byok": false,
     "id": "nws.forecast",
     "name": "U.S. weather forecast",
     "description": "The National Weather Service forecast for a U.S. location: day and night periods with temperature, wind, chance of precipitation and a short summary.",
     "price": "Free",
     "live": true,
     "input_schema": {
      "type": "object",
      "properties": {
       "lat": {
        "type": "number",
        "minimum": -90,
        "maximum": 90,
        "description": "Latitude (U.S. locations only)"
       },
       "lon": {
        "type": "number",
        "minimum": -180,
        "maximum": 180,
        "description": "Longitude (U.S. locations only)"
       },
       "periods": {
        "type": "integer",
        "minimum": 1,
        "maximum": 14,
        "default": 6,
        "description": "Number of 12-hour periods"
       }
      },
      "required": [
       "lat",
       "lon"
      ],
      "additionalProperties": false
     },
     "example_input": {
      "lat": 38.8894,
      "lon": -77.0352,
      "periods": 4
     },
     "example_output_excerpt": "{\"found\":true,\"location\":{\"lat\":38.8894,\"lon\":-77.0352,\"near\":\"Washington, DC\",\"office\":\"LWX\",\"time_zone\":\"America/New_York\"},\"updated\":\"2026-11-01T23:53:19+00:00\",\"periods\":[{\"name\":\"Tonight\",\"start\":\"2026-11-01T19:00:00-05:00\",\"is_daytime\":false,\"temperature\":45,\"unit\":\"F\",\"precip_chance_pct\":1,\"wind\":\"2 mph SE\",\"short\":\"Mostly Cloudy\",\"detail\":\"Mostly cloudy, with a low around 45. Southeast wind around 2 mph.\"},{\"name\":\"Monday\",\"start\":\"2026-11-02T06:00:00-05:00\",\"is_daytime\":true,\"temperature\":67,\"unit\":\"F\",\"precip_chance_pct\":5,\"wind\":\"0 to 5 mph S\",\"short\":\"Partly Sunny\",\"detail\":\"Par..."
    }
   ]
  },
  {
   "slug": "noaa-tides",
   "name": "NOAA Tides & Currents",
   "url": "https://tidesandcurrents.noaa.gov/",
   "category": "Earth",
   "what": "Get high and low tide predictions and the latest measured water level at NOAA's U.S. tide stations.",
   "pricing_note": "Free",
   "pricing_source": "https://api.tidesandcurrents.noaa.gov/api/prod/",
   "access": "API",
   "access_detail": "CO-OPS Data API and Metadata API at api.tidesandcurrents.noaa.gov (no key)",
   "setup": null,
   "output": "High/low tide times and heights (MLLW datum) and the latest observed water level",
   "turnaround": "Real time (water levels every 6 minutes)",
   "verified": true,
   "notes": "Public domain. Observed data are preliminary and not for navigation. Terms checked 2026-11-02: https://tidesandcurrents.noaa.gov/disclaimers.html",
   "tools": [
    {
     "byok": false,
     "id": "noaa_tides.tides_near",
     "name": "Tides near a place",
     "description": "Finds the nearest NOAA tide prediction station to a U.S. coastal location and returns the coming high and low tides (MLLW, metres, UTC) plus the latest measured water level when the station has a gauge.",
     "price": "Free",
     "live": true,
     "input_schema": {
      "type": "object",
      "properties": {
       "lat": {
        "type": "number",
        "minimum": -90,
        "maximum": 90,
        "description": "Latitude in decimal degrees"
       },
       "lon": {
        "type": "number",
        "minimum": -180,
        "maximum": 180,
        "description": "Longitude in decimal degrees"
       },
       "hours": {
        "type": "integer",
        "minimum": 6,
        "maximum": 96,
        "default": 48,
        "description": "How far ahead to predict"
       },
       "max_distance_km": {
        "type": "number",
        "minimum": 1,
        "maximum": 500,
        "default": 100,
        "description": "Give up if the nearest station is farther than this"
       }
      },
      "required": [
       "lat",
       "lon"
      ],
      "additionalProperties": false
     },
     "example_input": {
      "lat": 37.8,
      "lon": -122.47,
      "hours": 24
     },
     "example_output_excerpt": "{\"found\":true,\"station\":{\"id\":\"9414290\",\"name\":\"SAN FRANCISCO (Golden Gate)\",\"state\":\"CA\",\"lat\":37.80630555555555,\"lon\":-122.4658888888889,\"distance_km\":0.8,\"page\":\"https://tidesandcurrents.noaa.gov/stationhome.html?id=9414290\"},\"datum\":\"MLLW (mean lower low water), metres, times in UTC\",\"tides\":[{\"time\":\"2026-11-02T07:04:00Z\",\"type\":\"low\",\"height_m\":-0.04},{\"time\":\"2026-11-02T14:35:00Z\",\"type\":\"high\",\"height_m\":1.53},{\"time\":\"2026-11-02T19:51:00Z\",\"type\":\"low\",\"height_m\":0.84}],\"latest_observed\":{\"time\":\"2026-11-02T00:30:00Z\",\"height_m\":2.07},\"attribution\":{\"source\":\"NOAA CO-OPS Tides & Cu..."
    }
   ]
  },
  {
   "slug": "usgs-water",
   "name": "USGS Water Data",
   "url": "https://waterdata.usgs.gov/",
   "category": "Earth",
   "what": "Read live river flow and water levels from thousands of U.S. Geological Survey stream gauges.",
   "pricing_note": "Free",
   "pricing_source": "https://api.waterdata.usgs.gov/docs/ogcapi/keys/",
   "access": "API",
   "access_detail": "OGC API at api.waterdata.usgs.gov (works without a key at a lower hourly limit; a free key raises it). Replaces waterservices.usgs.gov, which is decommissioned on 2027-02-22.",
   "setup": null,
   "output": "Latest streamflow (ft3/s) or gage height (ft) per site, with site name and location",
   "turnaround": "Real time (most gauges report every 15 minutes)",
   "verified": true,
   "notes": "Public domain; recent data are provisional. Keyless hourly limit is not published. Terms checked 2026-11-02.",
   "tools": [
    {
     "byok": false,
     "id": "usgs_water.readings_near",
     "name": "River flow and levels near a place",
     "description": "Latest readings from USGS stream gauges near a U.S. location: streamflow (ft3/s) or gage height (ft), nearest first, with site names and links.",
     "price": "Free",
     "live": true,
     "input_schema": {
      "type": "object",
      "properties": {
       "lat": {
        "type": "number",
        "minimum": -90,
        "maximum": 90,
        "description": "Latitude in decimal degrees"
       },
       "lon": {
        "type": "number",
        "minimum": -180,
        "maximum": 180,
        "description": "Longitude in decimal degrees"
       },
       "radius_km": {
        "type": "number",
        "minimum": 1,
        "maximum": 50,
        "default": 25,
        "description": "Search radius in km"
       },
       "measure": {
        "type": "string",
        "enum": [
         "discharge",
         "gage_height"
        ],
        "default": "discharge",
        "description": "Streamflow or water level"
       },
       "limit": {
        "type": "integer",
        "minimum": 1,
        "maximum": 15,
        "default": 8
       }
      },
      "required": [
       "lat",
       "lon"
      ],
      "additionalProperties": false
     },
     "example_input": {
      "lat": 38.95,
      "lon": -77.13,
      "radius_km": 20,
      "limit": 3
     },
     "example_output_excerpt": "{\"query\":{\"lat\":38.95,\"lon\":-77.13,\"radius_km\":20,\"measure\":\"discharge\"},\"measure\":\"Streamflow (discharge)\",\"count\":3,\"sites\":[{\"id\":\"USGS-01646500\",\"name\":\"POTOMAC RIVER NEAR WASH, DC LITTLE FALLS PUMP STA\",\"state\":\"Maryland\",\"distance_km\":0.2,\"lat\":38.94978,\"lon\":-77.12764,\"value\":2210,\"unit\":\"ft^3/s\",\"time\":\"2026-11-01T23:50:00+00:00\",\"approval\":\"Provisional\",\"page\":\"https://waterdata.usgs.gov/monitoring-location/01646500/\"},{\"id\":\"USGS-01646305\",\"name\":\"DEAD RUN AT WHANN AVENUE NEAR MCLEAN, VA\",\"state\":\"Virginia\",\"distance_km\":4.1,\"lat\":38.95978,\"lon\":-77.17567,\"value\":0.59,\"unit\":\"ft^3..."
    }
   ]
  },
  {
   "slug": "carbon-intensity",
   "name": "Carbon Intensity API",
   "url": "https://carbonintensity.org.uk/",
   "category": "Earth",
   "what": "See how clean Great Britain's electricity is right now and when it will be cleanest, nationally or by postcode.",
   "pricing_note": "Free",
   "pricing_source": "https://github.com/carbon-intensity/terms/",
   "access": "API",
   "access_detail": "REST API at api.carbonintensity.org.uk (no key; rate limited, limit not published)",
   "setup": null,
   "output": "Carbon intensity (gCO2/kWh), index, generation mix and a 48-hour half-hourly forecast",
   "turnaround": "Updated every 30 minutes",
   "verified": true,
   "notes": "Run by the National Energy System Operator (NESO). Licensed CC BY 4.0; the terms forbid selling access to the API. Energy data, filed under Earth. Terms checked 2026-11-02.",
   "tools": [
    {
     "byok": false,
     "id": "carbon_intensity.now",
     "name": "How clean is GB electricity now",
     "description": "Current carbon intensity (gCO2/kWh) and generation mix of Great Britain's electricity, plus the regional figure for an outward postcode if given.",
     "price": "Free",
     "live": true,
     "input_schema": {
      "type": "object",
      "properties": {
       "postcode": {
        "type": "string",
        "description": "Optional GB outward postcode (first half), e.g. \"RG10\" or \"SW1A\""
       }
      },
      "required": [],
      "additionalProperties": false
     },
     "example_input": {
      "postcode": "RG10"
     },
     "example_output_excerpt": "{\"window\":{\"from\":\"2026-11-02T00:00Z\",\"to\":\"2026-11-02T00:30Z\"},\"national\":{\"intensity_gco2_kwh\":128,\"forecast_gco2_kwh\":127,\"actual_gco2_kwh\":128,\"index\":\"moderate\"},\"generation_mix_pct\":{\"biomass\":13.5,\"coal\":0,\"imports\":6.1,\"gas\":25.9,\"nuclear\":20.1,\"other\":0,\"hydro\":0,\"solar\":0,\"wind\":34.4},\"region\":{\"postcode\":\"RG10\",\"region\":\"South England\",\"dno\":\"SSE South\",\"forecast_gco2_kwh\":203,\"index\":\"high\",\"generation_mix_pct\":{\"biomass\":12.5,\"coal\":0,\"imports\":3.6,\"gas\":47.7,\"nuclear\":11.7,\"other\":0,\"hydro\":0,\"solar\":0,\"wind\":24.5}},\"note\":\"Great Britain only. Intensity in grams of CO2 per kWh..."
    },
    {
     "byok": false,
     "id": "carbon_intensity.forecast",
     "name": "Cleanest time to use electricity",
     "description": "Half-hourly carbon intensity forecast for Great Britain (or a region by outward postcode) for the next 1-48 hours, with the greenest and dirtiest slots picked out.",
     "price": "Free",
     "live": true,
     "input_schema": {
      "type": "object",
      "properties": {
       "postcode": {
        "type": "string",
        "description": "Optional GB outward postcode (first half), e.g. \"RG10\""
       },
       "hours": {
        "type": "integer",
        "minimum": 1,
        "maximum": 48,
        "default": 24
       }
      },
      "required": [],
      "additionalProperties": false
     },
     "example_input": {
      "hours": 12
     },
     "example_output_excerpt": "{\"query\":{\"postcode\":null,\"hours\":12},\"greenest\":{\"from\":\"2026-11-02T04:30Z\",\"to\":\"2026-11-02T05:00Z\",\"forecast_gco2_kwh\":76,\"index\":\"low\"},\"dirtiest\":{\"from\":\"2026-11-02T08:30Z\",\"to\":\"2026-11-02T09:00Z\",\"forecast_gco2_kwh\":135,\"index\":\"moderate\"},\"count\":24,\"slots\":[{\"from\":\"2026-11-02T00:00Z\",\"to\":\"2026-11-02T00:30Z\",\"forecast_gco2_kwh\":127,\"index\":\"moderate\"},{\"from\":\"2026-11-02T00:30Z\",\"to\":\"2026-11-02T01:00Z\",\"forecast_gco2_kwh\":121,\"index\":\"moderate\"},{\"from\":\"2026-11-02T01:00Z\",\"to\":\"2026-11-02T01:30Z\",\"forecast_gco2_kwh\":102,\"index\":\"moderate\"},{\"from\":\"2026-11-02T01:30Z\",\"to\":\"2026..."
    }
   ]
  },
  {
   "slug": "kiwisdr",
   "name": "KiwiSDR",
   "url": "https://kiwisdr.com/",
   "category": "Radio",
   "what": "Tune hundreds of volunteer-run shortwave receivers around the world and record what they hear.",
   "pricing_note": "Free",
   "pricing_source": "https://github.com/jks-prv/kiwiclient",
   "access": "Python library",
   "access_detail": "kiwiclient (kiwirecorder.py), cloned from github.com/jks-prv/kiwiclient; not on PyPI (the PyPI package named 'kiwiclient' is unrelated)",
   "setup": "git clone https://github.com/jks-prv/kiwiclient.git",
   "output": "WAV audio, IQ .wav with GNSS timestamps, waterfall data (.npy)",
   "turnaround": "Seconds (live)",
   "verified": false,
   "notes": "kiwisdr.com and rx.kiwisdr.com returned 503 / connection reset on 2026-11-01, so free public access and receiver count could not be confirmed on the official site today. Each receiver has a few user slots and owners may set time limits. Needs Python 3 and numpy.",
   "tools": [
    {
     "byok": false,
     "id": "kiwisdr.list_receivers",
     "name": "List public shortwave receivers",
     "description": "List the volunteer-run KiwiSDR receivers that are open to the public, with location, band coverage and free user slots.",
     "price": "Free",
     "live": false,
     "input_schema": {
      "type": "object",
      "properties": {
       "near_lat": {
        "type": "number"
       },
       "near_lon": {
        "type": "number"
       },
       "limit": {
        "type": "integer",
        "default": 20
       }
      },
      "required": [],
      "additionalProperties": false
     },
     "example_input": {
      "near_lat": 52.4,
      "near_lon": 4.9,
      "limit": 5
     },
     "example_output_excerpt": "Not connected: the public receiver list (rx.kiwisdr.com) was down on 2026-11-01 and owners set their own automation rules."
    },
    {
     "byok": false,
     "id": "kiwisdr.record_audio",
     "name": "Record from a receiver",
     "description": "Tune one KiwiSDR receiver to a frequency and record audio, IQ or waterfall data with kiwirecorder.py. Each receiver has a few user slots and owner-set time limits; ask the owner before automating.",
     "price": "Free",
     "live": false,
     "input_schema": {
      "type": "object",
      "properties": {
       "server_host": {
        "type": "string",
        "description": "Receiver host (kiwirecorder -s)"
       },
       "server_port": {
        "type": "integer",
        "default": 8073,
        "description": "Receiver port (-p)"
       },
       "frequency_khz": {
        "type": "number",
        "description": "Tuning frequency in kHz (-f)"
       },
       "mode": {
        "type": "string",
        "enum": [
         "am",
         "lsb",
         "usb",
         "cw",
         "nbfm",
         "iq"
        ],
        "description": "Demodulation mode (-m)"
       },
       "duration_s": {
        "type": "integer",
        "maximum": 600,
        "description": "Recording length (--tlimit)"
       }
      },
      "required": [
       "server_host",
       "frequency_khz",
       "mode",
       "duration_s"
      ],
      "additionalProperties": false
     },
     "example_input": {
      "server_host": "example-kiwi.local",
      "server_port": 8073,
      "frequency_khz": 4625,
      "mode": "usb",
      "duration_s": 60
     },
     "example_output_excerpt": "kiwirecorder.py writes WAV audio (or IQ .wav with GNSS timestamps) and waterfall .npy files."
    }
   ]
  },
  {
   "slug": "satnogs",
   "name": "SatNOGS",
   "url": "https://network.satnogs.org/",
   "category": "Radio",
   "what": "Pull recordings and decoded telemetry from a worldwide network of volunteer satellite ground stations.",
   "pricing_note": "Free",
   "pricing_source": "https://network.satnogs.org/",
   "access": "API",
   "access_detail": "REST API at https://network.satnogs.org/api/ (observations, stations, jobs)",
   "setup": null,
   "output": "Audio, waterfalls and decoded telemetry frames from satellite passes (CC BY-SA)",
   "turnaround": "Past observations instantly; new ones after the next satellite pass",
   "verified": true,
   "notes": "Site says the network is open to anyone, but only station owners (and operators/moderators) can schedule new observations; ordinary registered users can only browse and download. Site does not state a price; free is inferred from 'open to anyone'.",
   "tools": [
    {
     "byok": false,
     "id": "satnogs.satellite",
     "name": "Look up a satellite",
     "description": "Look up a satellite in SatNOGS DB by NORAD catalog number: names, status, launch date, countries, telemetry decoders and how many radio transmitters it has.",
     "price": "Free",
     "live": true,
     "input_schema": {
      "type": "object",
      "properties": {
       "norad_id": {
        "type": "integer",
        "minimum": 1,
        "description": "NORAD catalog number, e.g. 25544 for the ISS"
       }
      },
      "required": [
       "norad_id"
      ],
      "additionalProperties": false
     },
     "example_input": {
      "norad_id": 25544
     },
     "example_output_excerpt": "{\"found\":true,\"norad_id\":25544,\"name\":\"ISS\",\"other_names\":\"ZARYA, RS0ISS, NA1SS\",\"status\":\"in orbit\",\"launched\":\"1998-11-20T00:00:00Z\",\"decayed\":null,\"countries\":\"RU,US\",\"operator\":null,\"website\":\"https://www.nasa.gov/mission_pages/station/main/index.html\",\"telemetry_decoders\":[\"iss\"],\"transmitters_total\":50,\"transmitters_alive\":41,\"page\":\"https://db.satnogs.org/satellite/XSKZ-5603-1870-9019-3066\",\"attribution\":{\"source\":\"SatNOGS DB (Libre Space Foundation)\",\"license\":\"CC BY-SA 4.0\",\"source_url\":\"https://db.satnogs.org/\"}}"
    },
    {
     "byok": false,
     "id": "satnogs.transmitters",
     "name": "Satellite radio transmitters",
     "description": "List a satellite's known radio transmitters from SatNOGS DB: downlink/uplink frequency in MHz, mode (FM, AFSK, BPSK...), baud rate and whether it is still alive.",
     "price": "Free",
     "live": true,
     "input_schema": {
      "type": "object",
      "properties": {
       "norad_id": {
        "type": "integer",
        "minimum": 1,
        "description": "NORAD catalog number"
       },
       "alive_only": {
        "type": "boolean",
        "default": true,
        "description": "Only transmitters marked alive"
       }
      },
      "required": [
       "norad_id"
      ],
      "additionalProperties": false
     },
     "example_input": {
      "norad_id": 25544
     },
     "example_output_excerpt": "{\"norad_id\":25544,\"count\":41,\"total_in_db\":50,\"transmitters\":[{\"description\":\"Mode V APRS\",\"type\":\"Transceiver\",\"alive\":true,\"status\":\"active\",\"downlink_mhz\":145.825,\"downlink_high_mhz\":null,\"uplink_mhz\":145.825,\"mode\":\"AFSK\",\"baud\":1200,\"service\":\"Unknown\"},{\"description\":\"Mode V/V FM (crew R2+3)\",\"type\":\"Transceiver\",\"alive\":true,\"status\":\"active\",\"downlink_mhz\":145.8,\"downlink_high_mhz\":null,\"uplink_mhz\":144.49,\"mode\":\"FM\",\"baud\":null,\"service\":\"Unknown\"},{\"description\":\"Mode V/V FM (crew R1)\",\"type\":\"Transceiver\",\"alive\":true,\"status\":\"active\",\"downlink_mhz\":145.8,\"downlink_high_mhz\":nu..."
    },
    {
     "byok": false,
     "id": "satnogs.observations",
     "name": "Recorded satellite passes",
     "description": "Find recent SatNOGS ground-station recordings of a satellite (or by one station): pass times, station, frequency, plus direct links to the waterfall PNG and audio OGG.",
     "price": "Free",
     "live": true,
     "input_schema": {
      "type": "object",
      "properties": {
       "norad_id": {
        "type": "integer",
        "minimum": 1,
        "description": "NORAD catalog number"
       },
       "station_id": {
        "type": "integer",
        "minimum": 1,
        "description": "SatNOGS ground station id"
       },
       "status": {
        "type": "string",
        "enum": [
         "good",
         "bad",
         "failed",
         "unknown",
         "future"
        ],
        "default": "good",
        "description": "Vetting status; \"future\" lists scheduled passes"
       },
       "limit": {
        "type": "integer",
        "minimum": 1,
        "maximum": 20,
        "default": 10
       }
      },
      "required": [],
      "additionalProperties": false
     },
     "example_input": {
      "norad_id": 25544,
      "status": "good",
      "limit": 3
     },
     "example_output_excerpt": "{\"query\":{\"norad_id\":25544,\"station_id\":null,\"status\":\"good\"},\"count\":3,\"observations\":[{\"id\":15337438,\"norad_id\":25544,\"satellite\":\"ISS (ZARYA)\",\"start\":\"2026-11-01T22:54:00Z\",\"end\":\"2026-11-01T23:00:40Z\",\"status\":\"good\",\"station_id\":5104,\"station_name\":\"VK4ATW - Discone\",\"station_lat\":-27.693659,\"station_lng\":152.91687,\"max_altitude_deg\":52,\"frequency_mhz\":437.825,\"mode\":\"AFSK\",\"transmitter\":\"Mode U APRS test\",\"waterfall_png\":\"https://s3.eu-central-1.wasabisys.com/satnogs-network/data_obs/2026/11/1/22/15337438/waterfall_15337438_2026-11-01T22-54-00.png\",\"audio_ogg\":\"https://network-satnog..."
    },
    {
     "byok": false,
     "id": "satnogs.stations_near",
     "name": "Ground stations near a place",
     "description": "Find SatNOGS volunteer ground stations near a latitude/longitude, nearest first, with antenna bands, success rate and when each was last online.",
     "price": "Free",
     "live": true,
     "input_schema": {
      "type": "object",
      "properties": {
       "lat": {
        "type": "number",
        "minimum": -90,
        "maximum": 90,
        "description": "Latitude in decimal degrees"
       },
       "lon": {
        "type": "number",
        "minimum": -180,
        "maximum": 180,
        "description": "Longitude in decimal degrees"
       },
       "radius_km": {
        "type": "number",
        "minimum": 1,
        "maximum": 5000,
        "default": 500,
        "description": "Search radius in km"
       },
       "status": {
        "type": "string",
        "enum": [
         "online",
         "testing",
         "offline"
        ],
        "default": "online"
       },
       "limit": {
        "type": "integer",
        "minimum": 1,
        "maximum": 25,
        "default": 10
       }
      },
      "required": [
       "lat",
       "lon"
      ],
      "additionalProperties": false
     },
     "example_input": {
      "lat": 51.5,
      "lon": -0.1,
      "radius_km": 300,
      "limit": 3
     },
     "example_output_excerpt": "{\"query\":{\"lat\":51.5,\"lon\":-0.1,\"radius_km\":300,\"status\":\"online\"},\"count\":3,\"stations\":[{\"id\":3944,\"name\":\"(M7GQV) Crystal Radio Receiver Earth Station\",\"distance_km\":20,\"lat\":51.586,\"lng\":-0.354,\"altitude_m\":53,\"status\":\"Online\",\"bands\":[\"L\",\"VHF\",\"UHF\"],\"antennas\":[\"Parabolic\",\"Yagi\",\"Yagi\"],\"success_rate_pct\":77,\"observations\":8457,\"last_seen\":\"2026-11-01T23:05:54Z\",\"page\":\"https://network.satnogs.org/stations/3944/\"},{\"id\":5197,\"name\":\"GN-ABRIDGE\",\"distance_km\":23,\"lat\":51.65305,\"lng\":0.12345,\"altitude_m\":28,\"status\":\"Online\",\"bands\":[\"VHF\",\"UHF\"],\"antennas\":[\"Other Omni-Directional\",\"..."
    }
   ]
  },
  {
   "slug": "remotehamradio",
   "name": "RemoteHamRadio",
   "url": "https://www.remotehamradio.com/",
   "category": "Radio",
   "what": "Operate world-class ham radio stations remotely from a web browser.",
   "pricing_note": "$20/month or $99/year, plus airtime $0.19/min to $1.25/min",
   "pricing_source": "https://www.remotehamradio.com/#pricing",
   "access": "Web app (browser agent)",
   "access_detail": "RHR browser console (Chrome, Edge or Safari)",
   "setup": null,
   "output": "Live on-air contacts (QSOs) and received audio",
   "turnaround": "Live",
   "verified": true,
   "notes": "Requires an FCC amateur radio license (non-US operators can get one via VEA). Transmitting requires the licensed operator.",
   "tools": [
    {
     "byok": false,
     "id": "remotehamradio.operate_station",
     "name": "Operate a remote HF station",
     "description": "Operate a world-class ham radio station from the RHR browser console. Transmitting needs a licensed operator using their own callsign.",
     "price": "$20/month or $99/year, plus airtime $0.19/min to $1.25/min",
     "live": false,
     "input_schema": {
      "type": "object",
      "properties": {
       "station": {
        "type": "string"
       },
       "band": {
        "type": "string",
        "description": "e.g. 20m"
       },
       "mode": {
        "type": "string",
        "enum": [
         "SSB",
         "CW",
         "FT8",
         "RTTY"
        ]
       },
       "minutes": {
        "type": "integer"
       },
       "callsign": {
        "type": "string",
        "description": "Licensed operator callsign"
       }
      },
      "required": [
       "station",
       "band",
       "mode",
       "callsign"
      ],
      "additionalProperties": false
     },
     "example_input": {
      "station": "W1RHR",
      "band": "20m",
      "mode": "SSB",
      "minutes": 30,
      "callsign": "YOURCALL"
     },
     "example_output_excerpt": "Live on-air contacts (QSOs) and received audio."
    }
   ]
  },
  {
   "slug": "adsb-lol",
   "name": "adsb.lol",
   "url": "https://www.adsb.lol/",
   "category": "Radio",
   "what": "See live aircraft positions picked up by a community network of ADS-B radio receivers.",
   "pricing_note": "Free",
   "pricing_source": "https://www.adsb.lol/docs/open-data/api/",
   "access": "API",
   "access_detail": "REST API at api.adsb.lol (no key today; rate limits are dynamic; the project says keys may be required in future)",
   "setup": null,
   "output": "Callsign, registration, type, altitude, speed, heading and position per aircraft",
   "turnaround": "Real time (seconds)",
   "verified": true,
   "notes": "Data licensed ODbL 1.0 (attribution, share-alike for derived databases). Run by one volunteer. Terms checked 2026-11-02.",
   "tools": [
    {
     "byok": false,
     "id": "adsb_lol.aircraft_near",
     "name": "Aircraft overhead",
     "description": "Live aircraft near a place, received over ADS-B radio by community receivers: callsign, registration, type, altitude, speed, heading and distance, nearest first.",
     "price": "Free",
     "live": true,
     "input_schema": {
      "type": "object",
      "properties": {
       "lat": {
        "type": "number",
        "minimum": -90,
        "maximum": 90,
        "description": "Latitude in decimal degrees"
       },
       "lon": {
        "type": "number",
        "minimum": -180,
        "maximum": 180,
        "description": "Longitude in decimal degrees"
       },
       "radius_km": {
        "type": "number",
        "minimum": 1,
        "maximum": 400,
        "default": 25,
        "description": "Search radius in km"
       },
       "limit": {
        "type": "integer",
        "minimum": 1,
        "maximum": 50,
        "default": 15
       }
      },
      "required": [
       "lat",
       "lon"
      ],
      "additionalProperties": false
     },
     "example_input": {
      "lat": 51.47,
      "lon": -0.45,
      "radius_km": 25,
      "limit": 5
     },
     "example_output_excerpt": "{\"query\":{\"lat\":51.47,\"lon\":-0.45,\"radius_km\":25},\"time\":\"2026-11-02T00:36:54.001Z\",\"total\":7,\"count\":5,\"aircraft\":[{\"icao_hex\":\"42584b\",\"callsign\":null,\"registration\":\"TWR\",\"type\":\"TWR\",\"altitude_ft\":\"ground\",\"ground_speed_kt\":0,\"track_deg\":null,\"vertical_rate_fpm\":null,\"squawk\":null,\"emergency\":null,\"lat\":51.47057,\"lon\":-0.447043,\"distance_km\":0.2,\"seen_s_ago\":0.1,\"map\":\"https://adsb.lol/?icao=42584b\"},{\"icao_hex\":\"408120\",\"callsign\":null,\"registration\":\"G-VEYR\",\"type\":\"A339\",\"altitude_ft\":\"ground\",\"ground_speed_kt\":0,\"track_deg\":null,\"vertical_rate_fpm\":null,\"squawk\":\"2000\",\"emergency\":n..."
    }
   ]
  },
  {
   "slug": "amazon-braket",
   "name": "Amazon Braket",
   "url": "https://aws.amazon.com/braket/",
   "category": "Quantum",
   "what": "Run quantum circuits on real quantum processors from Rigetti, IQM, IonQ, AQT and QuEra.",
   "pricing_note": "$0.30 per task + per shot: Rigetti Cepheus $0.000425, IQM Garnet $0.00145, IQM Emerald $0.0016, QuEra Aquila $0.01, AQT IBEX-Q1 $0.0235, IonQ Forte $0.08",
   "pricing_source": "https://aws.amazon.com/braket/pricing/",
   "access": "API",
   "access_detail": "Amazon Braket SDK for Python (amazon-braket-sdk) with an AWS account",
   "setup": "pip install amazon-braket-sdk",
   "output": "Measured qubit results (shot counts)",
   "turnaround": "Minutes to hours (device queue)",
   "verified": true,
   "notes": "Needs an AWS account with billing. IonQ requires at least 2,500 shots per task when using error mitigation. A 1,000-shot Rigetti task is about $0.73.",
   "tools": [
    {
     "byok": true,
     "id": "amazon_braket.run_circuit",
     "name": "Run a circuit on a quantum processor",
     "description": "Submit an OpenQASM 3 circuit to a real QPU (Rigetti, IQM, IonQ, AQT, QuEra) on Amazon Braket and get measured shot counts back. Needs your own AWS account with billing.",
     "price": "$0.30 per task + from $0.000425 per shot (about $0.73 for 1,000 shots on Rigetti)",
     "live": false,
     "input_schema": {
      "type": "object",
      "properties": {
       "device_arn": {
        "type": "string",
        "description": "e.g. arn:aws:braket:us-west-1::device/qpu/rigetti/Cepheus-1-108Q"
       },
       "openqasm": {
        "type": "string",
        "description": "OpenQASM 3 program source"
       },
       "shots": {
        "type": "integer",
        "minimum": 1,
        "description": "Number of shots (IonQ with error mitigation: at least 2,500)"
       },
       "s3_output_bucket": {
        "type": "string",
        "description": "Your S3 bucket for results"
       }
      },
      "required": [
       "device_arn",
       "openqasm",
       "shots"
      ],
      "additionalProperties": false
     },
     "example_input": {
      "device_arn": "arn:aws:braket:us-west-1::device/qpu/rigetti/Cepheus-1-108Q",
      "openqasm": "OPENQASM 3; qubit[2] q; bit[2] c; h q[0]; cnot q[0], q[1]; c = measure q;",
      "shots": 1000
     },
     "example_output_excerpt": "Provider returns measured qubit results as shot counts (illustrative Bell pair: mostly \"00\" and \"11\")."
    }
   ]
  },
  {
   "slug": "ibm-quantum",
   "name": "IBM Quantum",
   "url": "https://www.ibm.com/quantum",
   "category": "Quantum",
   "what": "Run circuits on IBM's real quantum computers.",
   "pricing_note": "Open Plan free: up to 10 minutes of runtime per month; Pay-As-You-Go starts at $96/minute, billed per second",
   "pricing_source": "https://www.ibm.com/quantum/pricing",
   "access": "Python library",
   "access_detail": "Qiskit + qiskit-ibm-runtime with an IBM Quantum API key",
   "setup": "pip install qiskit qiskit-ibm-runtime",
   "output": "Measured qubit results",
   "turnaround": "Seconds plus queue time",
   "verified": true,
   "notes": "Free tier is capped at 10 runtime minutes per month.",
   "tools": [
    {
     "byok": true,
     "id": "ibm_quantum.run_sampler",
     "name": "Sample a circuit on IBM hardware",
     "description": "Run a circuit with the Qiskit Runtime Sampler on one of IBM's real quantum computers and get measurement counts. Needs your own IBM Quantum API key.",
     "price": "Free up to 10 min/month; then $96/minute, billed per second",
     "live": false,
     "input_schema": {
      "type": "object",
      "properties": {
       "backend": {
        "type": "string",
        "description": "Backend name, e.g. ibm_brisbane"
       },
       "openqasm": {
        "type": "string",
        "description": "OpenQASM 2 or 3 circuit source"
       },
       "shots": {
        "type": "integer",
        "minimum": 1,
        "default": 1024
       }
      },
      "required": [
       "backend",
       "openqasm"
      ],
      "additionalProperties": false
     },
     "example_input": {
      "backend": "ibm_brisbane",
      "openqasm": "OPENQASM 2.0; include \"qelib1.inc\"; qreg q[2]; creg c[2]; h q[0]; cx q[0],q[1]; measure q -> c;",
      "shots": 1024
     },
     "example_output_excerpt": "Provider returns measured qubit results as counts (illustrative Bell pair: mostly \"00\" and \"11\")."
    }
   ]
  },
  {
   "slug": "adaptyv-bio",
   "name": "Adaptyv Bio",
   "url": "https://www.adaptyvbio.com/",
   "category": "Labs & biology",
   "what": "Send protein sequences your agent designed to a wet lab and get real binding, expression or stability measurements back.",
   "pricing_note": "From $149 / protein (includes 2 replicates, standard delivery)",
   "pricing_source": "https://www.adaptyvbio.com/",
   "access": "Official MCP",
   "access_detail": "MCP at https://mcp.adaptyvbio.com/mcp/ with a Foundry API token; also REST API (devs.adaptyvbio.com/api/v1) and Python SDK adaptyv-sdk",
   "setup": "Add the MCP server https://mcp.adaptyvbio.com/mcp/ with your Foundry API token in the Authorization header",
   "output": "Lab data such as binding affinity (KD), expression and thermostability",
   "turnaround": "3 weeks standard; Adaptyv Prime as little as 3 days (private beta)",
   "verified": true,
   "notes": "API tokens are created in the Foundry portal (Organization > Settings > Tokens). SDK is installed from GitHub, not PyPI. Exact price depends on assay configuration.",
   "tools": [
    {
     "byok": true,
     "id": "adaptyv_bio.submit_experiment",
     "name": "Test designed proteins in a wet lab",
     "description": "Send protein sequences to Adaptyv's lab and get real binding (KD), expression or thermostability measurements back. Uses your own Foundry API token via their MCP or REST API.",
     "price": "From $149 / protein (includes 2 replicates, standard delivery)",
     "live": false,
     "input_schema": {
      "type": "object",
      "properties": {
       "assay": {
        "type": "string",
        "enum": [
         "binding",
         "expression",
         "thermostability"
        ]
       },
       "target": {
        "type": "string",
        "description": "Target protein for binding assays"
       },
       "sequences": {
        "type": "array",
        "items": {
         "type": "object",
         "properties": {
          "name": {
           "type": "string"
          },
          "aa_sequence": {
           "type": "string"
          }
         },
         "required": [
          "name",
          "aa_sequence"
         ]
        }
       }
      },
      "required": [
       "assay",
       "sequences"
      ],
      "additionalProperties": false
     },
     "example_input": {
      "assay": "binding",
      "target": "EGFR",
      "sequences": [
       {
        "name": "design-001",
        "aa_sequence": "MKV..."
       }
      ]
     },
     "example_output_excerpt": "Provider returns lab data such as binding affinity (KD), expression and thermostability, about 3 weeks later."
    }
   ]
  },
  {
   "slug": "plasmidsaurus",
   "name": "Plasmidsaurus",
   "url": "https://www.plasmidsaurus.com/",
   "category": "Labs & biology",
   "what": "Mail in a DNA sample and get its full plasmid sequence back.",
   "pricing_note": "$15 per sample (standard, under 25 kb); $30 per sample (big, 25-125 kb)",
   "pricing_source": "https://plasmidsaurus.com/plasmid_sequencing",
   "access": "Mail-in + web order",
   "access_detail": "Order at app.plasmidsaurus.com, then ship or drop the sample at one of 1,300+ drop boxes",
   "setup": null,
   "output": "Full plasmid sequence report by email",
   "turnaround": "Target 1 day after receipt (standard)",
   "verified": true,
   "notes": "A human must prepare and mail the physical DNA sample. No public API found.",
   "tools": [
    {
     "byok": false,
     "id": "plasmidsaurus.sequence_plasmid",
     "name": "Sequence a plasmid",
     "description": "Order whole-plasmid sequencing at app.plasmidsaurus.com; a human ships the DNA sample or drops it at a drop box, and the full sequence report arrives by email.",
     "price": "$15 per sample (standard, under 25 kb); $30 per sample (big, 25-125 kb)",
     "live": false,
     "input_schema": {
      "type": "object",
      "properties": {
       "sample_name": {
        "type": "string"
       },
       "size": {
        "type": "string",
        "enum": [
         "standard",
         "big"
        ]
       },
       "expected_length_kb": {
        "type": "number"
       }
      },
      "required": [
       "sample_name",
       "size"
      ],
      "additionalProperties": false
     },
     "example_input": {
      "sample_name": "pUC19-test",
      "size": "standard",
      "expected_length_kb": 2.7
     },
     "example_output_excerpt": "Provider emails a full plasmid sequence report, target 1 day after receipt."
    }
   ]
  },
  {
   "slug": "ou-remote-sem",
   "name": "Open University Remote SEM",
   "url": "https://emsuite.stem.open.ac.uk/services/remote-sem",
   "category": "Labs & biology",
   "what": "Drive a real scanning electron microscope over the internet to image a sample you posted to England.",
   "pricing_note": "Starting at £45 for 30 minutes",
   "pricing_source": "https://emsuite.stem.open.ac.uk/services/remote-sem",
   "access": "Web form + email",
   "access_detail": "Book via the 'Contact us' link; staff schedule a slot and send login credentials for the browser session",
   "setup": null,
   "output": "Electron micrographs you capture and save, with size measurements",
   "turnaround": "Scheduled session after the sample arrives",
   "verified": true,
   "notes": "A human must post the sample (or drop it off in Milton Keynes). Booking is by contact, not instant. Page lists industrial and academic users and does not say outright that individuals can book.",
   "tools": [
    {
     "byok": false,
     "id": "ou_remote_sem.book_session",
     "name": "Drive an electron microscope",
     "description": "Book a scheduled session on a real scanning electron microscope in England and drive it in a browser over a sample you posted. Booked by contact, not instant.",
     "price": "Starting at £45 for 30 minutes",
     "live": false,
     "input_schema": {
      "type": "object",
      "properties": {
       "sample_description": {
        "type": "string"
       },
       "minutes": {
        "type": "integer",
        "minimum": 30
       },
       "preferred_dates": {
        "type": "array",
        "items": {
         "type": "string",
         "format": "date"
        }
       }
      },
      "required": [
       "sample_description",
       "minutes"
      ],
      "additionalProperties": false
     },
     "example_input": {
      "sample_description": "Dried ant, gold-coated",
      "minutes": 30
     },
     "example_output_excerpt": "You capture and save electron micrographs with size measurements during the session."
    }
   ]
  },
  {
   "slug": "twist-bioscience",
   "name": "Twist Bioscience",
   "url": "https://www.twistbioscience.com/",
   "category": "Labs & biology",
   "what": "Order synthetic DNA (genes or gene fragments) made to your sequence.",
   "pricing_note": "Gene Fragments: $35/sequence (0.3-0.5 kb), 7¢/bp (0.5-1.8 kb); Clonal Genes: from 9¢/bp (0.3-1.8 kb, low/medium complexity)",
   "pricing_source": "https://www.twistbioscience.com/products/genes",
   "access": "Web app (browser agent)",
   "access_detail": "Twist ecommerce ordering platform; TAPI API on request (registered emails + IP whitelist)",
   "setup": null,
   "output": "Synthetic DNA shipped to you",
   "turnaround": "Gene Fragments 2-4 business days; Clonal Genes 4-15 business days",
   "verified": true,
   "notes": "Needs an eCommerce account. API access by contacting Twist; tokens sent by one-time email link and limited to whitelisted IPs. Sequences go through feasibility checks.",
   "tools": [
    {
     "byok": false,
     "id": "twist_bioscience.order_gene_fragment",
     "name": "Order synthetic DNA",
     "description": "Order gene fragments or clonal genes made to your sequence on Twist's ecommerce platform. Needs a screened customer account; sequences go through feasibility and biosecurity checks.",
     "price": "Gene fragments from $35 per sequence",
     "live": false,
     "input_schema": {
      "type": "object",
      "properties": {
       "name": {
        "type": "string"
       },
       "sequence": {
        "type": "string",
        "description": "DNA sequence (A/C/G/T), 300-1,800 bp for gene fragments"
       },
       "product": {
        "type": "string",
        "enum": [
         "gene_fragment",
         "clonal_gene"
        ]
       }
      },
      "required": [
       "name",
       "sequence",
       "product"
      ],
      "additionalProperties": false
     },
     "example_input": {
      "name": "frag-01",
      "sequence": "ATGC...",
      "product": "gene_fragment"
     },
     "example_output_excerpt": "Synthetic DNA shipped: gene fragments in 2-4 business days."
    }
   ]
  },
  {
   "slug": "uniprot",
   "name": "UniProt",
   "url": "https://www.uniprot.org/",
   "category": "Labs & biology",
   "what": "Look up any protein's function, genes, organism and sequence length in the UniProt knowledgebase.",
   "pricing_note": "Free",
   "pricing_source": "https://www.uniprot.org/help/license",
   "access": "API",
   "access_detail": "REST API at rest.uniprot.org (no key; fair use, no published hard limit)",
   "setup": null,
   "output": "Accession, protein and gene names, organism, length and curated function text",
   "turnaround": "Instant",
   "verified": true,
   "notes": "Licensed CC BY 4.0; cite the UniProt Consortium. Terms checked 2026-11-02.",
   "tools": [
    {
     "byok": false,
     "id": "uniprot.search_proteins",
     "name": "Look up proteins",
     "description": "Search UniProtKB by name, gene, organism or accession (e.g. \"insulin human\", \"BRCA1\", \"P69905\") and get protein name, genes, organism, length and curated function.",
     "price": "Free",
     "live": true,
     "input_schema": {
      "type": "object",
      "properties": {
       "query": {
        "type": "string",
        "description": "Search text or a UniProt accession"
       },
       "reviewed_only": {
        "type": "boolean",
        "default": true,
        "description": "Only manually reviewed (Swiss-Prot) entries"
       },
       "limit": {
        "type": "integer",
        "minimum": 1,
        "maximum": 10,
        "default": 5
       }
      },
      "required": [
       "query"
      ],
      "additionalProperties": false
     },
     "example_input": {
      "query": "hemoglobin human",
      "limit": 3
     },
     "example_output_excerpt": "{\"query\":{\"query\":\"hemoglobin human\",\"reviewed_only\":true},\"count\":3,\"proteins\":[{\"accession\":\"P68871\",\"entry_name\":\"HBB_HUMAN\",\"protein\":\"Hemoglobin subunit beta\",\"genes\":[\"HBB\"],\"organism\":\"Homo sapiens\",\"taxon_id\":9606,\"length_aa\":147,\"reviewed\":true,\"function\":\"Involved in oxygen transport from the lung to the various peripheral tissues\",\"page\":\"https://www.uniprot.org/uniprotkb/P68871/entry\"},{\"accession\":\"P02042\",\"entry_name\":\"HBD_HUMAN\",\"protein\":\"Hemoglobin subunit delta\",\"genes\":[\"HBD\"],\"organism\":\"Homo sapiens\",\"taxon_id\":9606,\"length_aa\":147,\"reviewed\":true,\"function\":\"Involved i..."
    }
   ]
  },
  {
   "slug": "rcsb-pdb",
   "name": "RCSB Protein Data Bank",
   "url": "https://www.rcsb.org/",
   "category": "Labs & biology",
   "what": "Search and read 3D structures of proteins, DNA and RNA solved by labs worldwide.",
   "pricing_note": "Free",
   "pricing_source": "https://www.rcsb.org/pages/usage-policy",
   "access": "API",
   "access_detail": "Data API (data.rcsb.org) and Search API (search.rcsb.org), no key",
   "setup": null,
   "output": "Title, method, resolution, chains, organisms, UniProt links and mmCIF/PDB download links",
   "turnaround": "Instant",
   "verified": true,
   "notes": "Data are CC0 1.0; RCSB asks users to attribute the original structure authors. Terms checked 2026-11-02.",
   "tools": [
    {
     "byok": false,
     "id": "rcsb_pdb.structure",
     "name": "3D structure details",
     "description": "Details for one PDB entry: title, experimental method, resolution, release date, authors, citation, molecules with chains, organisms and UniProt links, plus download links.",
     "price": "Free",
     "live": true,
     "input_schema": {
      "type": "object",
      "properties": {
       "pdb_id": {
        "type": "string",
        "description": "4-character PDB ID, e.g. \"4HHB\""
       }
      },
      "required": [
       "pdb_id"
      ],
      "additionalProperties": false
     },
     "example_input": {
      "pdb_id": "4HHB"
     },
     "example_output_excerpt": "{\"found\":true,\"pdb_id\":\"4HHB\",\"title\":\"THE CRYSTAL STRUCTURE OF HUMAN DEOXYHAEMOGLOBIN AT 1.74 ANGSTROMS RESOLUTION\",\"keywords\":\"OXYGEN TRANSPORT\",\"method\":[\"X-RAY DIFFRACTION\"],\"resolution_angstrom\":1.74,\"molecular_weight_kda\":64.74,\"deposited_atoms\":4779,\"deposited\":\"1984-03-07\",\"released\":\"1984-07-17\",\"authors\":[\"Fermi, G.\",\"Perutz, M.F.\"],\"citation\":{\"title\":\"The crystal structure of human deoxyhaemoglobin at 1.74 A resolution\",\"journal\":\"J.Mol.Biol.\",\"year\":1984,\"doi\":null,\"pubmed\":null},\"entities\":[{\"entity\":\"1\",\"description\":\"Hemoglobin subunit alpha\",\"organism\":\"Homo sapiens\",\"chain..."
    },
    {
     "byok": false,
     "id": "rcsb_pdb.search",
     "name": "Search 3D structures",
     "description": "Full-text search of the Protein Data Bank; returns the best-matching experimental structures with title, method, resolution and release date.",
     "price": "Free",
     "live": true,
     "input_schema": {
      "type": "object",
      "properties": {
       "query": {
        "type": "string",
        "description": "Search text, e.g. \"SARS-CoV-2 spike\" or \"insulin receptor\""
       },
       "limit": {
        "type": "integer",
        "minimum": 1,
        "maximum": 10,
        "default": 5
       }
      },
      "required": [
       "query"
      ],
      "additionalProperties": false
     },
     "example_input": {
      "query": "SARS-CoV-2 spike",
      "limit": 3
     },
     "example_output_excerpt": "{\"query\":{\"query\":\"SARS-CoV-2 spike\"},\"total_matches\":2666,\"count\":3,\"structures\":[{\"pdb_id\":\"7LM9\",\"title\":\"Crystal structure of SARS-CoV spike protein receptor-binding domain in complex with a cross-neutralizing antibody CV38-142 Fab isolated from COVID-19 patient\",\"method\":[\"X-RAY DIFFRACTION\"],\"resolution_angstrom\":1.53,\"released\":\"2021-03-31\",\"page\":\"https://www.rcsb.org/structure/7LM9\"},{\"pdb_id\":\"8UPX\",\"title\":\"Omicron-S-MERS-RBD\",\"method\":[\"ELECTRON MICROSCOPY\"],\"resolution_angstrom\":3.4,\"released\":\"2024-08-21\",\"page\":\"https://www.rcsb.org/structure/8UPX\"},{\"pdb_id\":\"7WXZ\",\"title\":\"..."
    }
   ]
  },
  {
   "slug": "sendcutsend",
   "name": "SendCutSend",
   "url": "https://sendcutsend.com/",
   "category": "Make things",
   "what": "Upload a CAD file and get laser-cut metal or plastic parts shipped to you.",
   "pricing_note": "$9.41/ea example (3.6 x 2.5 in, 5052 aluminum .187 in, qty 1); exact price quoted on upload",
   "pricing_source": "https://sendcutsend.com/",
   "access": "Web app (browser agent)",
   "access_detail": "Upload .ai, .dxf, .dwg, .eps, .stp or .step files at sendcutsend.com",
   "setup": null,
   "output": "Physical cut parts shipped to you",
   "turnaround": "Ships in as little as 24 hours; rush options",
   "verified": true,
   "notes": "No public API on the site. Shipping cost and standard lead time not listed.",
   "tools": [
    {
     "byok": false,
     "id": "sendcutsend.order_parts",
     "name": "Laser-cut parts from CAD",
     "description": "Upload a 2D CAD file (.dxf, .dwg, .ai, .eps, .step) and get laser-cut metal or plastic parts shipped. Web checkout only; price is quoted on upload.",
     "price": "Quoted on upload (their example: $9.41 for one aluminum part)",
     "live": false,
     "input_schema": {
      "type": "object",
      "properties": {
       "file_url": {
        "type": "string",
        "description": "CAD file"
       },
       "material": {
        "type": "string",
        "description": "e.g. 5052 aluminum"
       },
       "thickness_in": {
        "type": "number"
       },
       "quantity": {
        "type": "integer",
        "minimum": 1
       }
      },
      "required": [
       "file_url",
       "material",
       "thickness_in",
       "quantity"
      ],
      "additionalProperties": false
     },
     "example_input": {
      "file_url": "https://example.com/bracket.dxf",
      "material": "5052 aluminum",
      "thickness_in": 0.187,
      "quantity": 1
     },
     "example_output_excerpt": "Physical cut parts shipped, in as little as 24 hours."
    }
   ]
  },
  {
   "slug": "jlcpcb",
   "name": "JLCPCB",
   "url": "https://jlcpcb.com/",
   "category": "Make things",
   "what": "Order manufactured printed circuit boards from Gerber files.",
   "pricing_note": "From $2.00 / 5 pcs (FR-4), build time 24 hours",
   "pricing_source": "https://jlcpcb.com/",
   "access": "API",
   "access_detail": "JLCAPI (api.jlcpcb.com): PCB, components, stencil and 3D printing APIs; sign up and apply for free API access",
   "setup": null,
   "output": "Physical PCBs shipped to you",
   "turnaround": "24-hour build plus shipping",
   "verified": true,
   "notes": "API is aimed at enterprise users and distributors and needs an application; approval criteria not published. Agents without API access can use the web order flow. Price depends on size, layers, finish and quantity.",
   "tools": [
    {
     "byok": false,
     "id": "jlcpcb.order_pcb",
     "name": "Manufacture PCBs",
     "description": "Order printed circuit boards from Gerber files. API access (JLCAPI) needs an approved application; otherwise use the web order flow.",
     "price": "From $2.00 / 5 pcs (FR-4), build time 24 hours",
     "live": false,
     "input_schema": {
      "type": "object",
      "properties": {
       "gerber_zip_url": {
        "type": "string"
       },
       "layers": {
        "type": "integer",
        "enum": [
         1,
         2,
         4,
         6
        ]
       },
       "quantity": {
        "type": "integer",
        "minimum": 5
       },
       "thickness_mm": {
        "type": "number",
        "default": 1.6
       },
       "surface_finish": {
        "type": "string",
        "enum": [
         "HASL",
         "LeadFree HASL",
         "ENIG"
        ]
       }
      },
      "required": [
       "gerber_zip_url",
       "layers",
       "quantity"
      ],
      "additionalProperties": false
     },
     "example_input": {
      "gerber_zip_url": "https://example.com/board.zip",
      "layers": 2,
      "quantity": 5
     },
     "example_output_excerpt": "Physical PCBs shipped after a 24-hour build."
    }
   ]
  },
  {
   "slug": "pcbway",
   "name": "PCBWay",
   "url": "https://www.pcbway.com/",
   "category": "Make things",
   "what": "Order prototype printed circuit boards from Gerber files.",
   "pricing_note": "From $5 / 10 pcs (1-2 layer), build time 24 hours",
   "pricing_source": "https://www.pcbway.com/",
   "access": "Web app (browser agent)",
   "access_detail": "Online order at pcbway.com; partner API only by approval via email",
   "setup": null,
   "output": "Physical PCBs shipped to you",
   "turnaround": "24-hour build plus shipping",
   "verified": true,
   "notes": "API is only for approved partners that build their own websites; approval is by email review of your company. Ordinary buyers use the web form.",
   "tools": [
    {
     "byok": false,
     "id": "pcbway.order_pcb",
     "name": "Prototype PCBs",
     "description": "Order prototype printed circuit boards from Gerber files via the PCBWay web form (partner API by approval only).",
     "price": "From $5 / 10 pcs (1-2 layer), build time 24 hours",
     "live": false,
     "input_schema": {
      "type": "object",
      "properties": {
       "gerber_zip_url": {
        "type": "string"
       },
       "layers": {
        "type": "integer"
       },
       "quantity": {
        "type": "integer",
        "minimum": 5
       },
       "thickness_mm": {
        "type": "number",
        "default": 1.6
       }
      },
      "required": [
       "gerber_zip_url",
       "layers",
       "quantity"
      ],
      "additionalProperties": false
     },
     "example_input": {
      "gerber_zip_url": "https://example.com/board.zip",
      "layers": 2,
      "quantity": 10
     },
     "example_output_excerpt": "Physical PCBs shipped after a 24-hour build."
    }
   ]
  },
  {
   "slug": "lob",
   "name": "Lob",
   "url": "https://www.lob.com/",
   "category": "Mail & print",
   "what": "Send real postcards and letters through the mail with an API call.",
   "pricing_note": "Postcards starting at $0.905/piece; letters starting at $0.828/piece; Developer plan starting at $0/month",
   "pricing_source": "https://www.lob.com/pricing/print-mail",
   "access": "API",
   "access_detail": "Lob Print & Mail REST API; Python client lob-python",
   "setup": "pip install lob-python",
   "output": "A physical postcard or letter delivered by mail, with tracking events",
   "turnaround": "Days (printing plus postal delivery)",
   "verified": true,
   "notes": "Prices are 'starting at' and vary by format and volume. US-focused.",
   "tools": [
    {
     "byok": true,
     "id": "lob.send_postcard",
     "name": "Mail a postcard",
     "description": "Print and mail a real postcard through Lob's Print & Mail API, with tracking events. Uses your own Lob API key.",
     "price": "From $0.905 per postcard",
     "live": false,
     "input_schema": {
      "type": "object",
      "properties": {
       "to": {
        "type": "object",
        "properties": {
         "name": {
          "type": "string"
         },
         "address_line1": {
          "type": "string"
         },
         "address_line2": {
          "type": "string"
         },
         "address_city": {
          "type": "string"
         },
         "address_state": {
          "type": "string"
         },
         "address_zip": {
          "type": "string"
         },
         "address_country": {
          "type": "string",
          "default": "US"
         }
        },
        "required": [
         "name",
         "address_line1",
         "address_city",
         "address_state",
         "address_zip"
        ]
       },
       "from": {
        "type": "object",
        "properties": {
         "name": {
          "type": "string"
         },
         "address_line1": {
          "type": "string"
         },
         "address_line2": {
          "type": "string"
         },
         "address_city": {
          "type": "string"
         },
         "address_state": {
          "type": "string"
         },
         "address_zip": {
          "type": "string"
         },
         "address_country": {
          "type": "string",
          "default": "US"
         }
        },
        "required": [
         "name",
         "address_line1",
         "address_city",
         "address_state",
         "address_zip"
        ]
       },
       "front": {
        "type": "string",
        "description": "HTML or URL of the front artwork"
       },
       "back": {
        "type": "string",
        "description": "HTML or URL of the back"
       },
       "size": {
        "type": "string",
        "enum": [
         "4x6",
         "6x9",
         "6x11"
        ],
        "default": "4x6"
       }
      },
      "required": [
       "to",
       "front",
       "back"
      ],
      "additionalProperties": false
     },
     "example_input": {
      "to": {
       "name": "Recipient",
       "address_line1": "123 Example St",
       "address_city": "Springfield",
       "address_state": "IL",
       "address_zip": "62701"
      },
      "front": "<html>Hello</html>",
      "back": "<html>From your agent</html>",
      "size": "4x6"
     },
     "example_output_excerpt": "Provider returns a postcard object (id psc_..., expected_delivery_date, tracking events)."
    },
    {
     "byok": true,
     "id": "lob.send_letter",
     "name": "Mail a letter",
     "description": "Print and mail a real letter through Lob's Print & Mail API, with tracking events. Uses your own Lob API key.",
     "price": "From $0.828 per letter",
     "live": false,
     "input_schema": {
      "type": "object",
      "properties": {
       "to": {
        "type": "object",
        "properties": {
         "name": {
          "type": "string"
         },
         "address_line1": {
          "type": "string"
         },
         "address_line2": {
          "type": "string"
         },
         "address_city": {
          "type": "string"
         },
         "address_state": {
          "type": "string"
         },
         "address_zip": {
          "type": "string"
         },
         "address_country": {
          "type": "string",
          "default": "US"
         }
        },
        "required": [
         "name",
         "address_line1",
         "address_city",
         "address_state",
         "address_zip"
        ]
       },
       "from": {
        "type": "object",
        "properties": {
         "name": {
          "type": "string"
         },
         "address_line1": {
          "type": "string"
         },
         "address_line2": {
          "type": "string"
         },
         "address_city": {
          "type": "string"
         },
         "address_state": {
          "type": "string"
         },
         "address_zip": {
          "type": "string"
         },
         "address_country": {
          "type": "string",
          "default": "US"
         }
        },
        "required": [
         "name",
         "address_line1",
         "address_city",
         "address_state",
         "address_zip"
        ]
       },
       "file": {
        "type": "string",
        "description": "HTML, or URL of a PDF"
       },
       "color": {
        "type": "boolean",
        "default": false
       }
      },
      "required": [
       "to",
       "from",
       "file"
      ],
      "additionalProperties": false
     },
     "example_input": {
      "to": {
       "name": "Recipient",
       "address_line1": "123 Example St",
       "address_city": "Springfield",
       "address_state": "IL",
       "address_zip": "62701"
      },
      "from": {
       "name": "Sender",
       "address_line1": "1 Sender Rd",
       "address_city": "Austin",
       "address_state": "TX",
       "address_zip": "78701"
      },
      "file": "<html>Letter body</html>",
      "color": false
     },
     "example_output_excerpt": "Provider returns a letter object (id ltr_..., expected_delivery_date, tracking events)."
    }
   ]
  },
  {
   "slug": "kaicalls",
   "name": "KaiCalls",
   "url": "https://www.kaicalls.com/",
   "category": "Calls",
   "what": "Give your agent a phone line that can place calls to businesses and answer incoming calls.",
   "pricing_note": "Kai Backup $10/month (48 call minutes, ~20 calls); Kai Line $79/month (408 minutes, ~170 calls); Kai Office $349/month (1,920 minutes, ~800 calls)",
   "pricing_source": "https://www.kaicalls.com/pricing",
   "access": "Official MCP",
   "access_detail": "MCP at https://www.kaicalls.com/api/mcp (OAuth in Claude, or API key as bearer token); make_call tool places outbound calls",
   "setup": "Add a custom connector in Claude with the URL https://www.kaicalls.com/api/mcp",
   "output": "Call recordings, transcripts and summaries",
   "turnaround": "Live calls",
   "verified": true,
   "notes": "Free browser demo; Kai Backup is $10 a month with a $2 first week; a paid plan is needed before live calls or a phone number. Calls must follow TCPA rules.",
   "tools": [
    {
     "byok": false,
     "id": "kaicalls.make_call",
     "name": "Place a phone call",
     "description": "Have your agent place a phone call to a business through KaiCalls' own MCP (make_call) and get the recording, transcript and summary. Calls must follow TCPA rules.",
     "price": "From $10/month (Kai Backup); $79/month Kai Line",
     "live": false,
     "input_schema": {
      "type": "object",
      "properties": {
       "to": {
        "type": "string",
        "description": "E.164 phone number of a business"
       },
       "purpose": {
        "type": "string",
        "description": "What the call should accomplish"
       }
      },
      "required": [
       "to",
       "purpose"
      ],
      "additionalProperties": false
     },
     "example_input": {
      "to": "+15555550100",
      "purpose": "Ask whether they have a table for two at 7pm"
     },
     "example_output_excerpt": "Provider returns the call recording, transcript and summary."
    }
   ]
  },
  {
   "slug": "toreba",
   "name": "Toreba",
   "url": "https://www.toreba.net/",
   "category": "Play",
   "what": "Play real claw machines in Japan over live video and have won prizes shipped home.",
   "pricing_note": "Price not published",
   "pricing_source": "https://www.toreba.net/support/guide/toreba_guide/guide_03",
   "access": "Web app (browser agent)",
   "access_detail": "Web version of Toreba at toreba.net (also installable to phone home screen)",
   "setup": null,
   "output": "A physical prize shipped to your door, plus play replays",
   "turnaround": "About a minute per play; shipping after a delivery request",
   "verified": false,
   "notes": "Plays cost TP (Toreba Points) bought by card/PayPal/Amazon Pay, but the site shows no per-play or TP pack price publicly. Shipping is free for paid-won prizes if 7+ days since your last shipping request; otherwise 5,000 TP (campaign rate). Site is in Japanese.",
   "tools": [
    {
     "byok": false,
     "id": "toreba.play_claw_machine",
     "name": "Play a real claw machine",
     "description": "Play a physical claw machine in Japan over live video in the Toreba web app; won prizes can be shipped home. Browser agent only.",
     "price": "Not published (plays cost Toreba Points)",
     "live": false,
     "input_schema": {
      "type": "object",
      "properties": {
       "machine_id": {
        "type": "string",
        "description": "Machine shown in the Toreba lobby"
       },
       "plays": {
        "type": "integer",
        "minimum": 1,
        "default": 1
       }
      },
      "required": [
       "machine_id"
      ],
      "additionalProperties": false
     },
     "example_input": {
      "machine_id": "lobby-machine-id",
      "plays": 1
     },
     "example_output_excerpt": "Provider gives play replays; a physical prize ships after a delivery request."
    }
   ]
  },
  {
   "slug": "lichess",
   "name": "Lichess",
   "url": "https://lichess.org/",
   "category": "Play",
   "what": "Get the daily chess puzzle from Lichess, the free and open-source chess server.",
   "pricing_note": "Free",
   "pricing_source": "https://lichess.org/terms-of-service",
   "access": "API",
   "access_detail": "Public API at lichess.org/api (no key for public endpoints; one request at a time, back off a minute on HTTP 429)",
   "setup": null,
   "output": "Puzzle position (FEN), rating, themes and solution moves",
   "turnaround": "New puzzle daily",
   "verified": true,
   "notes": "Terms allow personal and commercial use of the API; the puzzle database is CC0. Terms checked 2026-11-02.",
   "tools": [
    {
     "byok": false,
     "id": "lichess.daily_puzzle",
     "name": "Daily chess puzzle",
     "description": "Today's Lichess puzzle: the position (FEN), side to move, rating, themes, the solution in UCI moves and a link to play it.",
     "price": "Free",
     "live": true,
     "input_schema": {
      "type": "object",
      "properties": {},
      "required": [],
      "additionalProperties": false
     },
     "example_input": {},
     "example_output_excerpt": "{\"puzzle_id\":\"Mifvr\",\"rating\":2160,\"plays\":13655,\"themes\":[\"endgame\",\"fork\",\"long\",\"advantage\"],\"fen\":\"5qk1/p5pp/1p1p4/1bn5/3B4/P3Q1P1/6BP/6K1 w - - 0 1\",\"to_move\":\"white\",\"last_move_uci\":\"c4b5\",\"solution_uci\":[\"d4c5\",\"d6c5\",\"e3b3\",\"g8h8\",\"b3b5\"],\"from_game\":{\"id\":\"DkFW1Cc1\",\"speed\":\"Rapid\",\"clock\":\"10+5\",\"rated\":true,\"url\":\"https://lichess.org/DkFW1Cc1\"},\"play\":\"https://lichess.org/training/Mifvr\",\"note\":\"Moves are in UCI notation (e.g. e2e4). Hide solution_uci if you want to solve it yourself.\",\"attribution\":{\"source\":\"Lichess.org\",\"license\":\"CC0 1.0\",\"source_url\":\"https://lichess.org/api..."
    }
   ]
  }
 ]
}
