{
  "name": "agentops.tools",
  "description": "32 free tools for AI agents, each a skill: live weather, exchange rates, DNS, PDFs, QR codes, routes and more. Typed JSON results with their sources. No key and no account. Anonymous limit: 30 units a minute and 1,000 a day per client.",
  "version": "1.0.0",
  "documentationUrl": "https://www.agentops.tools/docs/",
  "iconUrl": "https://www.agentops.tools/favicon.svg",
  "provider": {
    "organization": "agentops.tools",
    "url": "https://www.agentops.tools"
  },
  "supportedInterfaces": [
    {
      "url": "https://www.agentops.tools/a2a",
      "protocolBinding": "JSONRPC",
      "protocolVersion": "1.0"
    },
    {
      "url": "https://www.agentops.tools/a2a",
      "protocolBinding": "JSONRPC",
      "protocolVersion": "0.3"
    }
  ],
  "capabilities": {
    "streaming": false,
    "pushNotifications": false,
    "extendedAgentCard": false
  },
  "defaultInputModes": [
    "application/json",
    "text/plain"
  ],
  "defaultOutputModes": [
    "application/json"
  ],
  "skills": [
    {
      "id": "time.now",
      "name": "Current time",
      "description": "Current date and time in any IANA timezone, with UTC offset and daylight-saving flag. Use whenever you need today's date or the current time, because models do not know it. Pass an IANA timezone such as Europe/Berlin. Defaults to UTC.",
      "tags": [
        "data",
        "free"
      ],
      "examples": [
        "{\"skill\":\"time.now\",\"input\":{\"timezone\":\"Asia/Tokyo\"}}"
      ],
      "inputModes": [
        "application/json",
        "text/plain"
      ],
      "outputModes": [
        "application/json"
      ]
    },
    {
      "id": "geo.resolve",
      "name": "Place lookup",
      "description": "Turns a place name into coordinates, country and timezone. Use when the user names a place and you need its coordinates or to pick between candidates. Weather, air quality, routing and nearby search accept a place name directly, so you rarely need this on its own.",
      "tags": [
        "geo",
        "free"
      ],
      "examples": [
        "{\"skill\":\"geo.resolve\",\"input\":{\"query\":\"Springfield\",\"count\":3}}"
      ],
      "inputModes": [
        "application/json",
        "text/plain"
      ],
      "outputModes": [
        "application/json"
      ]
    },
    {
      "id": "weather.current",
      "name": "Current weather",
      "description": "Current temperature, feels-like, humidity, wind and conditions for a place. Use for questions about the weather right now at a place. Use weather.forecast for future days and weather.alerts for warnings.",
      "tags": [
        "geo",
        "free"
      ],
      "examples": [
        "{\"skill\":\"weather.current\",\"input\":{\"location\":\"Tokyo\"}}"
      ],
      "inputModes": [
        "application/json",
        "text/plain"
      ],
      "outputModes": [
        "application/json"
      ]
    },
    {
      "id": "weather.forecast",
      "name": "Daily forecast",
      "description": "Daily forecast up to 16 days: highs, lows, rain chance, wind, sunrise and sunset. Use for questions about future weather at a place, such as 'will it rain on Friday' or 'what should I pack for next week'. Use weather.current for right now.",
      "tags": [
        "geo",
        "free"
      ],
      "examples": [
        "{\"skill\":\"weather.forecast\",\"input\":{\"location\":\"Lisbon\",\"days\":3}}"
      ],
      "inputModes": [
        "application/json",
        "text/plain"
      ],
      "outputModes": [
        "application/json"
      ]
    },
    {
      "id": "air.quality",
      "name": "Air quality",
      "description": "Current US and European AQI with PM2.5, PM10, ozone and NO2 readings for a place. Use for questions about air pollution, or whether it is safe to exercise outdoors at a place. Returns US AQI (0-500) and European AQI.",
      "tags": [
        "geo",
        "free"
      ],
      "examples": [
        "{\"skill\":\"air.quality\",\"input\":{\"location\":\"Beijing\"}}"
      ],
      "inputModes": [
        "application/json",
        "text/plain"
      ],
      "outputModes": [
        "application/json"
      ]
    },
    {
      "id": "weather.alerts",
      "name": "Severe weather alerts",
      "description": "Active National Weather Service warnings, watches and advisories for a US point. Use when the user asks about active warnings, storms or hazards at a location. Coverage is the United States and territories only. Other locations return an empty list with a coverage note.",
      "tags": [
        "geo",
        "free"
      ],
      "examples": [
        "{\"skill\":\"weather.alerts\",\"input\":{\"latitude\":39.7392,\"longitude\":-104.9903}}"
      ],
      "inputModes": [
        "application/json",
        "text/plain"
      ],
      "outputModes": [
        "application/json"
      ]
    },
    {
      "id": "fx.convert",
      "name": "Currency converter",
      "description": "Converts an amount between two currencies at the ECB reference rate, latest or historical. Use for currency conversion. ECB reference rates are published on business days, so weekend and holiday requests use the last published rate. Not a trading or exact bank quote.",
      "tags": [
        "data",
        "free"
      ],
      "examples": [
        "{\"skill\":\"fx.convert\",\"input\":{\"amount\":100,\"from\":\"USD\",\"to\":\"EUR\"}}"
      ],
      "inputModes": [
        "application/json",
        "text/plain"
      ],
      "outputModes": [
        "application/json"
      ]
    },
    {
      "id": "crypto.price",
      "name": "Crypto price",
      "description": "Price, 24-hour change and market cap for up to 10 coins by CoinGecko id. Use for current cryptocurrency prices. Pass CoinGecko ids such as bitcoin or ethereum, not ticker symbols, which are ambiguous. Prices are indicative, not trading quotes.",
      "tags": [
        "data",
        "free"
      ],
      "examples": [
        "{\"skill\":\"crypto.price\",\"input\":{\"ids\":[\"bitcoin\",\"ethereum\"]}}"
      ],
      "inputModes": [
        "application/json",
        "text/plain"
      ],
      "outputModes": [
        "application/json"
      ]
    },
    {
      "id": "holidays.list",
      "name": "Public holidays",
      "description": "Public and bank holidays for a country or state in a year, plus a business-day check. Use for holiday calendars, or to check whether a date is a business day, for example when counting working days toward a deadline. Computed offline, so it is fast and always available.",
      "tags": [
        "data",
        "free"
      ],
      "examples": [
        "{\"skill\":\"holidays.list\",\"input\":{\"country\":\"US\",\"subdivision\":\"CA\",\"year\":2026,\"on\":\"2026-07-04\"}}"
      ],
      "inputModes": [
        "application/json",
        "text/plain"
      ],
      "outputModes": [
        "application/json"
      ]
    },
    {
      "id": "tokens.count",
      "name": "Token counter",
      "description": "Exact token count for the OpenAI o200k_base and cl100k_base encodings, computed offline. Use to estimate prompt size or cost for OpenAI models. Counts are exact for the named encoding. Anthropic and Google tokenizers differ and are not supported yet.",
      "tags": [
        "data",
        "free"
      ],
      "examples": [
        "{\"skill\":\"tokens.count\",\"input\":{\"text\":\"Hello, world!\"}}"
      ],
      "inputModes": [
        "application/json",
        "text/plain"
      ],
      "outputModes": [
        "application/json"
      ]
    },
    {
      "id": "web.extract",
      "name": "Article text",
      "description": "Main text, title, author and publish date from a public web page, as clean plain text. Use to read the content of an article, blog post or documentation page. Returns plain text, not HTML. Pages that need JavaScript to render may return EMPTY_CONTENT; web.screenshot can show those.",
      "tags": [
        "web",
        "free"
      ],
      "examples": [
        "{\"skill\":\"web.extract\",\"input\":{\"url\":\"https://en.wikipedia.org/wiki/Web_scraping\"}}"
      ],
      "inputModes": [
        "application/json",
        "text/plain"
      ],
      "outputModes": [
        "application/json"
      ]
    },
    {
      "id": "web.archive",
      "name": "Web archive lookup",
      "description": "Closest Internet Archive snapshot of a URL, latest or near a given date. Use when a link is dead or the user wants a page as it was on a date. Returns the snapshot closest to the timestamp, not every capture.",
      "tags": [
        "web",
        "free"
      ],
      "examples": [
        "{\"skill\":\"web.archive\",\"input\":{\"url\":\"https://example.com\",\"timestamp\":\"2015-06-01\"}}"
      ],
      "inputModes": [
        "application/json",
        "text/plain"
      ],
      "outputModes": [
        "application/json"
      ]
    },
    {
      "id": "feed.read",
      "name": "RSS and Atom reader",
      "description": "Latest items from any RSS or Atom feed: title, link, published time and summary. Use to see recent posts from a blog, news site or release channel. Stateless: each call returns the newest items; it does not notify on new ones.",
      "tags": [
        "web",
        "free"
      ],
      "examples": [
        "{\"skill\":\"feed.read\",\"input\":{\"url\":\"https://hnrss.org/frontpage\",\"limit\":5}}"
      ],
      "inputModes": [
        "application/json",
        "text/plain"
      ],
      "outputModes": [
        "application/json"
      ]
    },
    {
      "id": "site.status",
      "name": "Site status check",
      "description": "Is a URL up? HTTP status, redirect target, response time and a failure class, for up to 20 URLs. Use to check whether a site is reachable from the public internet, or to diagnose why a link fails. Reports the first response without following redirects. Results are not cached.",
      "tags": [
        "net",
        "free"
      ],
      "examples": [
        "{\"skill\":\"site.status\",\"input\":{\"urls\":[\"https://agentops.tools\",\"https://example.com\"]}}"
      ],
      "inputModes": [
        "application/json",
        "text/plain"
      ],
      "outputModes": [
        "application/json"
      ]
    },
    {
      "id": "dns.lookup",
      "name": "DNS records",
      "description": "A, AAAA, MX, TXT, NS, CNAME and CAA records for a domain, with SPF and DMARC parsed out. Use to check where a domain points, which mail servers it uses, or whether SPF and DMARC are set. Answers come from a public recursive resolver, so changes may take time to show.",
      "tags": [
        "net",
        "free"
      ],
      "examples": [
        "{\"skill\":\"dns.lookup\",\"input\":{\"name\":\"example.com\"}}"
      ],
      "inputModes": [
        "application/json",
        "text/plain"
      ],
      "outputModes": [
        "application/json"
      ]
    },
    {
      "id": "domain.whois",
      "name": "Domain registration",
      "description": "Registrar, creation and expiry dates, status flags and nameservers from RDAP. Use for questions about who registered a domain, when it expires, or which nameservers it uses. Uses RDAP, the modern replacement for WHOIS. Some registries redact contact details, which is expected.",
      "tags": [
        "net",
        "free"
      ],
      "examples": [
        "{\"skill\":\"domain.whois\",\"input\":{\"domain\":\"example.com\"}}"
      ],
      "inputModes": [
        "application/json",
        "text/plain"
      ],
      "outputModes": [
        "application/json"
      ]
    },
    {
      "id": "email.check",
      "name": "Email address check",
      "description": "Syntax, mail-server (MX) presence, disposable-domain and role-account checks for an address. Use to screen addresses before sending or storing them: is the syntax valid, does the domain accept mail, is it a throwaway provider. It does not contact the mailbox, so it cannot confirm that the person exists.",
      "tags": [
        "net",
        "free"
      ],
      "examples": [
        "{\"skill\":\"email.check\",\"input\":{\"email\":\"someone@example.com\"}}"
      ],
      "inputModes": [
        "application/json",
        "text/plain"
      ],
      "outputModes": [
        "application/json"
      ]
    },
    {
      "id": "tls.inspect",
      "name": "TLS certificate check",
      "description": "Certificate chain, expiry, cipher and TLS version for a host, seen from our network. Use to check whether a site's certificate is valid, who issued it, when it expires, or what TLS version and cipher it negotiates. Sees what our servers see, not the agent's own network.",
      "tags": [
        "net",
        "free"
      ],
      "examples": [
        "{\"skill\":\"tls.inspect\",\"input\":{\"host\":\"example.com\"}}"
      ],
      "inputModes": [
        "application/json",
        "text/plain"
      ],
      "outputModes": [
        "application/json"
      ]
    },
    {
      "id": "route.plan",
      "name": "Driving route",
      "description": "Driving distance, duration and turn-by-turn steps through two to ten stops. Use for drive distance and time between places, or a multi-stop road trip. Gives road-network estimates without live traffic. Walking and cycling are not offered yet.",
      "tags": [
        "geo",
        "free"
      ],
      "examples": [
        "{\"skill\":\"route.plan\",\"input\":{\"stops\":[{\"location\":\"Berlin\"},{\"location\":\"Munich\"}]}}"
      ],
      "inputModes": [
        "application/json",
        "text/plain"
      ],
      "outputModes": [
        "application/json"
      ]
    },
    {
      "id": "places.nearby",
      "name": "Nearby places",
      "description": "Named restaurants, cafés, pharmacies, fuel, ATMs and more within a radius, nearest first. Use to find named businesses or amenities near a location. Results come from OpenStreetMap, so coverage varies by area, and opening hours are as mapped by volunteers.",
      "tags": [
        "geo",
        "free"
      ],
      "examples": [
        "{\"skill\":\"places.nearby\",\"input\":{\"location\":\"Kreuzberg, Berlin\",\"category\":\"cafe\",\"radius_m\":500,\"limit\":10}}"
      ],
      "inputModes": [
        "application/json",
        "text/plain"
      ],
      "outputModes": [
        "application/json"
      ]
    },
    {
      "id": "ip.geolocate",
      "name": "IP geolocation",
      "description": "Country, city and coordinates for a public IP address, from an offline database. Use to place an IP address on the map, for example to localise content or annotate logs. City precision is approximate; private addresses are rejected.",
      "tags": [
        "geo",
        "free"
      ],
      "examples": [
        "{\"skill\":\"ip.geolocate\",\"input\":{\"ip\":\"8.8.8.8\"}}"
      ],
      "inputModes": [
        "application/json",
        "text/plain"
      ],
      "outputModes": [
        "application/json"
      ]
    },
    {
      "id": "food.barcode",
      "name": "Food product lookup",
      "description": "Name, brand, quantity, categories, Nutri-Score and ingredients for a food barcode (EAN/UPC). Use to identify a packaged food product from its barcode. Food only: Open Food Facts does not carry prices or non-food items.",
      "tags": [
        "data",
        "free"
      ],
      "examples": [
        "{\"skill\":\"food.barcode\",\"input\":{\"barcode\":\"3017620422003\"}}"
      ],
      "inputModes": [
        "application/json",
        "text/plain"
      ],
      "outputModes": [
        "application/json"
      ]
    },
    {
      "id": "qr.generate",
      "name": "QR code generator",
      "description": "QR code as PNG (base64) or SVG for any text or URL up to 2,000 characters. Use when the user needs a QR code for a link, Wi-Fi string, contact or any text. Output is an image the user can save or print.",
      "tags": [
        "media",
        "free"
      ],
      "examples": [
        "{\"skill\":\"qr.generate\",\"input\":{\"text\":\"https://agentops.tools\"}}"
      ],
      "inputModes": [
        "application/json",
        "text/plain"
      ],
      "outputModes": [
        "application/json"
      ]
    },
    {
      "id": "qr.decode",
      "name": "QR code reader",
      "description": "Reads the QR code in a PNG or JPEG image, given as a URL or base64. Use to read a QR code from a screenshot or photo. Only QR codes are decoded; 1D barcodes are not supported in this version. Images over 12 megapixels are rejected.",
      "tags": [
        "media",
        "free"
      ],
      "examples": [
        "{\"skill\":\"qr.decode\",\"input\":{\"url\":\"https://api.qrserver.com/v1/create-qr-code/?size=200x200&data=hello\"}}"
      ],
      "inputModes": [
        "application/json",
        "text/plain"
      ],
      "outputModes": [
        "application/json"
      ]
    },
    {
      "id": "image.transform",
      "name": "Image resize and convert",
      "description": "Resize an image and convert it to JPEG, PNG or WebP; metadata is stripped. Use to make an image a particular size or format, for example a thumbnail or a WebP for the web. Output up to 1 MB is returned inline as base64.",
      "tags": [
        "media",
        "free"
      ],
      "examples": [
        "{\"skill\":\"image.transform\",\"input\":{\"url\":\"https://www.w3.org/Icons/w3c_home.png\",\"width\":200,\"format\":\"webp\"}}"
      ],
      "inputModes": [
        "application/json",
        "text/plain"
      ],
      "outputModes": [
        "application/json"
      ]
    },
    {
      "id": "image.inspect",
      "name": "Image inspector",
      "description": "Format, dimensions, EXIF camera and capture data, and dominant colours of an image. Use to learn what an image is: its size, format, camera and date from EXIF, and its main colours. EXIF may contain GPS coordinates when the camera recorded them. Dominant colours are only computed for PNG and JPEG.",
      "tags": [
        "media",
        "free"
      ],
      "examples": [
        "{\"skill\":\"image.inspect\",\"input\":{\"url\":\"https://www.w3.org/Icons/w3c_home.png\"}}"
      ],
      "inputModes": [
        "application/json",
        "text/plain"
      ],
      "outputModes": [
        "application/json"
      ]
    },
    {
      "id": "image.ocr",
      "name": "Image text recognition",
      "description": "Printed text read from an image, with mean confidence and word count. Use to read text in a photo, scan or screenshot, for example a receipt, sign or document page. Works on clear printed text; handwriting and heavy stylisation fail.",
      "tags": [
        "media",
        "free"
      ],
      "examples": [
        "{\"skill\":\"image.ocr\",\"input\":{\"url\":\"https://dummyimage.com/600x200/000/fff&text=Hello+World\"}}"
      ],
      "inputModes": [
        "application/json",
        "text/plain"
      ],
      "outputModes": [
        "application/json"
      ]
    },
    {
      "id": "media.probe",
      "name": "Audio/video file info",
      "description": "Duration, codecs, dimensions and container for an audio or video file up to 20 MB. Use to inspect a media file before processing it: how long it is, what codecs it uses, its resolution. Give a URL or base64 bytes.",
      "tags": [
        "media",
        "free"
      ],
      "examples": [
        "{\"skill\":\"media.probe\",\"input\":{\"url\":\"https://www.w3schools.com/html/mov_bbb.mp4\"}}"
      ],
      "inputModes": [
        "application/json",
        "text/plain"
      ],
      "outputModes": [
        "application/json"
      ]
    },
    {
      "id": "chart.render",
      "name": "Chart renderer",
      "description": "Bar, line or pie chart from up to 24 labelled values, returned as a PNG. Use to turn numbers into a shareable chart image, for example a report figure or a quick visual of a comparison. Up to 24 points; for larger data summarise first.",
      "tags": [
        "media",
        "free"
      ],
      "examples": [
        "{\"skill\":\"chart.render\",\"input\":{\"kind\":\"bar\",\"labels\":[\"Q1\",\"Q2\",\"Q3\"],\"values\":[3,7,5],\"title\":\"Sales\"}}"
      ],
      "inputModes": [
        "application/json",
        "text/plain"
      ],
      "outputModes": [
        "application/json"
      ]
    },
    {
      "id": "pdf.extract",
      "name": "PDF text extractor",
      "description": "Page-by-page text from a text-based PDF, given as a URL or base64, up to 10 MB. Use to read the text of a PDF such as a report, contract or paper. Works on text-based PDFs; for scanned pages with no text layer, use image.ocr on a rendered page image instead.",
      "tags": [
        "media",
        "free"
      ],
      "examples": [
        "{\"skill\":\"pdf.extract\",\"input\":{\"url\":\"https://arxiv.org/pdf/1706.03762\",\"max_pages\":2}}"
      ],
      "inputModes": [
        "application/json",
        "text/plain"
      ],
      "outputModes": [
        "application/json"
      ]
    },
    {
      "id": "web.screenshot",
      "name": "Webpage screenshot",
      "description": "Renders a public URL in a headless Chromium and returns a JPEG or PNG screenshot. Use to see what a page looks like, including pages that need JavaScript. Renders with a real browser, which is slower than the text tools. Output up to 1 MB is returned inline.",
      "tags": [
        "web",
        "free"
      ],
      "examples": [
        "{\"skill\":\"web.screenshot\",\"input\":{\"url\":\"https://example.com\",\"width\":1024,\"height\":768}}"
      ],
      "inputModes": [
        "application/json",
        "text/plain"
      ],
      "outputModes": [
        "application/json"
      ]
    },
    {
      "id": "web.pdf",
      "name": "Webpage to PDF",
      "description": "Prints a public URL, or HTML you supply, to an A4 or Letter PDF using a headless browser. Use to produce a printable PDF of a page, or of HTML the agent has written. Renders JavaScript and CSS like a browser print. Output up to 1 MB is returned inline.",
      "tags": [
        "web",
        "free"
      ],
      "examples": [
        "{\"skill\":\"web.pdf\",\"input\":{\"html\":\"<h1>Invoice 42</h1><p>Total: $120</p>\",\"format\":\"A4\"}}"
      ],
      "inputModes": [
        "application/json",
        "text/plain"
      ],
      "outputModes": [
        "application/json"
      ]
    }
  ],
  "url": "https://www.agentops.tools/a2a",
  "preferredTransport": "JSONRPC",
  "protocolVersion": "0.3.0"
}
