_ registry / mcp streamable-http · checked 1h ago

nichedb

https://nichedb.dev

Registry code: 7756207bd00fa4f8

api record

NicheDB is an open, ever-growing database of real-time public data: collections

(games, packages, filings, ...), each fed by sources that fetch on a schedule, cut into

endpoint
https://nichedb.dev/mcp
protocol
streamable-http ·2025-06-18
authentication
none observed
public key
none — nobody has proven they own this listing · is it yours? claim it
karma
0 · newcomer
_ is it live, free and safe measured by this hub
Is nichedb live?
Yes — it answered the hub's last check (checked 1h ago). It answered 100% of checks over the last 30 days.
Is nichedb free to use?
Partly — some of its tools are open, others need a key or payment.
What tools does nichedb have?
42 tools: feed_items, find_profile_by_linkedin, business_standing, where_to_buy_book, follow_feed, update_webhook, update_profile, add_source, ….
Is nichedb safe to connect?
The hub found no text in its card or tool descriptions aimed at the agent reading them. It measures what the server answers, not its code — grant it only the access its tools need.
reachable
live
uptime, 30 days
99.6%

90 days 99.7%· all time 99.7%

latency
340ms

last good check

priced tools
0

of 42 tools

_ answered our checks, 90 days 355 checks · signed record
  • degraded → live
  • live → degraded· timeout after 20000ms
  • unknown → live
_ what it is for
used for
  • search public data items
  • list upcoming dated items
  • check whether a domain is registered
  • get population data by area
  • create and follow a feed
takes → gives
text → data
tools
19 reads6 changes data
_ usage and payments 30 days

Calls placed through this hub's router, from its own receipts. Every caller and every payer counts the same; the chain total is counted from three payers.

accounts
0

through this hub

calls served
0

successful

paid through this hub
0 USDC

what callers paid

_ what it can do 42 tools
16 open2 auth-required 24 never probed 18 of 42 classified

Price is per tool, not per server. An agent whose handshake is open can hold tools that demand a key or a payment, and one figure for the whole agent sends callers into a wall.

  • get_item reads open 34h ago

    One item with its full adapter payload.

    mcp-tool

    {
      "type": "object",
      "required": [
        "id"
      ],
      "properties": {
        "id": {
          "type": "integer",
          "description": "Numeric item id from any listing, e.g. 81234567"
        }
      }
    }
    arguments 12 lines
  • list_feeds reads open 12h ago

    Public feeds, most followed first. Optionally one collection.

    mcp-tool

    {
      "type": "object",
      "properties": {
        "collection": {
          "type": "string",
          "description": "Collection slug, e.g. games (see list_collections)"
        }
      }
    }
    arguments 9 lines
  • list_collections reads open 16h ago

    The collections (niches) with their source, feed and item counts.

    mcp-tool

    {
      "type": "object",
      "properties": {}
    }
    arguments 4 lines
  • tld_changes reads open 9h ago

    Top-level domains added to or removed from IANA's root, newest first, with the IANA list version each happened in. Nobody else publishes this diff.

    mcp-tool

    {
      "type": "object",
      "properties": {
        "limit": {
          "type": "integer",
          "description": "Rows to return, integer 1-1000, default 100, e.g. 25"
        },
        "since": {
          "type": "string",
          "description": "ISO 8601 time: only changes after it (optional), e.g. 2026-01-01T00:00:00Z"
        },
        "change": {
          "type": "string",
          "description": "added, removed or returned (optional), e.g. added"
        }
      }
    }
    arguments 17 lines
  • search_tlds reads open 1h ago

    Top-level domains: every label in IANA's root, with type, registry, RDAP server and each registrar's one-year register/renew/transfer price (Porkbun, Dynadot, Cloudflare, OVHcloud). Sorted by renewal by default, because the first year is a promotion. `best` is the cheapest USD price across registrars; with `registrar` it is that registrar's own price in its currency. Answers carry facet counts. `trap: true` keeps only labels that renew at 2x the first year or more.

    mcp-tool

    {
      "type": "object",
      "properties": {
        "q": {
          "type": "string",
          "description": "Text in the label, its Unicode form or the registry name (optional)"
        },
        "idn": {
          "type": "boolean",
          "description": "true: internationalised labels only; false: ASCII only"
        },
        "sort": {
          "type": "string",
          "description": "renew (default), register, transfer, restore, ratio, tld, registrars, type, manager, first_seen"
        },
        "trap": {
          "type": "boolean",
          "description": "Only labels renewing at 2x the first year or more"
        },
        "type": {
          "type": "string",
          "description": "generic, country-code, sponsored, generic-restricted, infrastructure, test; comma separated (optional)"
        },
        "limit": {
          "type": "integer",
          "description": "Rows to return, integer 1-500, default 50, e.g. 100"
        },
        "order": {
          "type": "string",
          "description": "Sort direction: asc or desc, e.g. desc"
        },
        "offset": {
          "type": "integer",
          "description": "Rows to skip for paging, integer, default 0, e.g. 50"
        },
        "status": {
          "type": "string",
          "description": "delegated (default), removed, or all, e.g. removed"
        },
        "manager": {
          "type": "string",
          "description": "Exact registry name, as IANA writes it (optional)"
        },
        "max_renew": {
          "type": "number",
          "description": "Highest renewal price (optional)"
        },
        "registrar": {
          "type": "string",
          "description": "porkbun, dynadot, cloudflare, ovh (optional): only labels it sells, at its prices"
        },
        "max_register": {
          "type": "number",
          "description": "Highest first-year price (optional)"
        }
      }
    }
    arguments 57 lines
  • traffic_list open 16h ago

    The nichedb /traffic blocklist: IP addresses our own servers banned for exploit attempts, scanning, brute force or spam, each published only after a reviewer (a person, or riotcoder applying published rules) read the evidence and approved it. Newest approvals first. Optional `days` keeps addresses seen in the last N days, `category` one of exploit, brute-force, scanner, spam, other. Without an API key the newest 100 are returned; with one, `limit` (up to 1000) and `offset` page the whole list.

    mcp-tool

    {
      "type": "object",
      "properties": {
        "days": {
          "type": "number",
          "description": "Only addresses seen in the last N days (optional)"
        },
        "limit": {
          "type": "number",
          "description": "Rows to return, up to 1000 with an API key"
        },
        "offset": {
          "type": "number",
          "description": "Rows to skip, with an API key"
        },
        "category": {
          "type": "string",
          "description": "exploit, brute-force, scanner, spam or other (optional)"
        }
      }
    }
    arguments 21 lines
  • search_items reads open 23h ago

    Full-text search over titles, summaries and tags. Use this first when you know a name.

    mcp-tool

    {
      "type": "object",
      "required": [
        "q"
      ],
      "properties": {
        "q": {
          "type": "string",
          "description": "Search words, e.g. elden ring"
        },
        "lat": {
          "type": "number",
          "maximum": 90,
          "minimum": -90,
          "description": "Query center latitude; requires long"
        },
        "bbox": {
          "type": "string",
          "description": "west,south,east,north; west > east crosses the antimeridian"
        },
        "kind": {
          "type": "string",
          "description": "Item kind, e.g. release, title, filing (optional)"
        },
        "long": {
          "type": "number",
          "maximum": 180,
          "minimum": -180,
          "description": "Query center longitude; requires lat"
        },
        "sort": {
          "enum": [
            "id",
            "published",
            "updated",
            "distance"
          ],
          "type": "string",
          "description": "Result order. distance (needs lat and long) puts the nearest first, e.g. \"distance\"; anything else keeps newest first"
        },
        "unit": {
          "enum": [
            "km",
            "mi"
          ],
          "type": "string",
          "description": "Default km"
        },
        "limit": {
          "type": "integer",
          "description": "Rows to return, integer 1-100, default 20, e.g. 10"
        },
        "radius": {
          "type": "number",
          "description": "Default 10; maximum 1000 km",
          "exclusiveMinimum": 0
        },
        "collection": {
          "type": "string",
          "description": "Collection slug, e.g. games (see list_collections)"
        }
      }
    }
    arguments 63 lines
  • match_items reads open 1h ago

    Which title, channel or fixture is this name? Give a file name, a release name or a playlist entry ("Top.Gun.Maverick.2022.1080p.mkv", "US: ESPN2 HD"); it is cleaned (year, season and episode, quality tags, playlist decorations) and matched by similarity. A matchup ("NFL: Chiefs vs Bills", "Lakers @ Celtics", "Rangers at Celtic 19:45") is answered by the fixture whose two teams those are, kicking off between 36 hours ago and 7 days ahead unless date narrows it. Each result carries a score in 0..1. Use screen for films and TV, channels for television channels, sports for fixtures.

    mcp-tool

    {
      "type": "object",
      "required": [
        "q"
      ],
      "properties": {
        "q": {
          "type": "string",
          "description": "The name as written, e.g. Top.Gun.Maverick.2022.1080p.mkv or US: ESPN2 HD"
        },
        "lat": {
          "type": "number",
          "maximum": 90,
          "minimum": -90,
          "description": "Query center latitude; requires long"
        },
        "bbox": {
          "type": "string",
          "description": "west,south,east,north; west > east crosses the antimeridian"
        },
        "date": {
          "type": "string",
          "description": "A day (YYYY-MM-DD) to look for a fixture on, plus a day either side, e.g. 2026-11-02"
        },
        "kind": {
          "type": "string",
          "description": "Item kind: title, channel or fixture (optional), e.g. title"
        },
        "long": {
          "type": "number",
          "maximum": 180,
          "minimum": -180,
          "description": "Query center longitude; requires lat"
        },
        "sort": {
          "enum": [
            "id",
            "published",
            "updated",
            "distance"
          ],
          "type": "string",
          "description": "Result order. distance (needs lat and long) puts the nearest first, e.g. \"distance\"; anything else keeps newest first"
        },
        "unit": {
          "enum": [
            "km",
            "mi"
          ],
          "type": "string",
          "description": "Default km"
        },
        "year": {
          "type": "integer",
          "description": "A four-digit year to prefer, when known, e.g. 2022"
        },
        "limit": {
          "type": "integer",
          "description": "Rows to return, integer 1-50, default 5, e.g. 3"
        },
        "radius": {
          "type": "number",
          "description": "Default 10; maximum 1000 km",
          "exclusiveMinimum": 0
        },
        "collection": {
          "type": "string",
          "description": "Collection slug: screen, channels or sports (optional), e.g. screen"
        }
      }
    }
    arguments 71 lines
  • list_sources reads open 12h ago

    Sources with status, last run and item counts. Optionally one collection.

    mcp-tool

    {
      "type": "object",
      "properties": {
        "collection": {
          "type": "string",
          "description": "Collection slug, e.g. games (optional; see list_collections)"
        }
      }
    }
    arguments 9 lines
  • stats reads open 20h ago

    What this deployment holds: collections, sources, items, items added today, feeds.

    mcp-tool

    {
      "type": "object",
      "properties": {}
    }
    arguments 4 lines
  • recent_items reads open 9h ago

    Newest items, optionally narrowed to a collection, source or kind.

    mcp-tool

    {
      "type": "object",
      "properties": {
        "lat": {
          "type": "number",
          "maximum": 90,
          "minimum": -90,
          "description": "Query center latitude; requires long"
        },
        "bbox": {
          "type": "string",
          "description": "west,south,east,north; west > east crosses the antimeridian"
        },
        "kind": {
          "type": "string",
          "description": "Item kind, e.g. release, title, filing (optional)"
        },
        "long": {
          "type": "number",
          "maximum": 180,
          "minimum": -180,
          "description": "Query center longitude; requires lat"
        },
        "sort": {
          "enum": [
            "id",
            "published",
            "updated",
            "distance"
          ],
          "type": "string",
          "description": "Result order. distance (needs lat and long) puts the nearest first, e.g. \"distance\"; anything else keeps newest first"
        },
        "unit": {
          "enum": [
            "km",
            "mi"
          ],
          "type": "string",
          "description": "Default km"
        },
        "limit": {
          "type": "integer",
          "description": "Rows to return, integer 1-200, default 30, e.g. 50"
        },
        "offset": {
          "type": "integer",
          "description": "Rows to skip when sort=distance, integer, e.g. 30"
        },
        "radius": {
          "type": "number",
          "description": "Default 10; maximum 1000 km",
          "exclusiveMinimum": 0
        },
        "source": {
          "type": "string",
          "description": "Source slug, e.g. steam-new-releases (see list_sources)"
        },
        "before_id": {
          "type": "integer",
          "description": "Keyset cursor: the smallest item id from the previous page, e.g. 81234567; not with sort=distance"
        },
        "collection": {
          "type": "string",
          "description": "Collection slug, e.g. games (see list_collections)"
        }
      }
    }
    arguments 68 lines
  • population reads open 9h ago

    Population and demography, drilled down from the world to the ZIP code. Give a `key` (us, us-ca, us-ca-los-angeles, gb, gb-england-london), a US `zip`, or a place name in `q`; no argument is the world. Answers with the area (population, year, measures: age, income, home value, rent, poverty, education, unemployment, race and Hispanic origin for the US; growth, age structure, births, deaths, fertility, life expectancy, migration, GDP per head and Gini for countries), how many areas of each level it contains, and the largest of its children at `level` (country, state, city or zip). Sources: World Bank, US Census ACS 5-year, GeoNames.

    mcp-tool

    {
      "type": "object",
      "properties": {
        "q": {
          "type": "string",
          "description": "A place name to look up, e.g. Springfield (optional)"
        },
        "key": {
          "type": "string",
          "description": "Area key, e.g. us, us-ca, us-ca-los-angeles, us-90210, de (optional)"
        },
        "zip": {
          "type": "string",
          "description": "A US ZIP code (optional), 5 digits, e.g. 90210"
        },
        "level": {
          "type": "string",
          "description": "Which children to list: country, state, city or zip (optional)"
        },
        "limit": {
          "type": "integer",
          "description": "Children to list, default 20, max 500"
        },
        "offset": {
          "type": "integer",
          "description": "Skip this many children, for paging"
        }
      }
    }
    arguments 29 lines
  • list_enrichers reads open 12h ago

    Every enricher (YouTube videos, Wikipedia, repo stats, downloads, company profiles, TL;DRs) and which collections turn it on by default. Items carry their results under `enrichment`.

    mcp-tool

    {
      "type": "object",
      "properties": {}
    }
    arguments 4 lines
  • list_adapters reads open 16h ago

    Every adapter this deployment can run, with the config fields each takes. Use before add_source.

    mcp-tool

    {
      "type": "object",
      "properties": {}
    }
    arguments 4 lines
  • upcoming reads open 5h ago

    Items dated in the future (releases, launches, deadlines), soonest first.

    mcp-tool

    {
      "type": "object",
      "properties": {
        "lat": {
          "type": "number",
          "maximum": 90,
          "minimum": -90,
          "description": "Query center latitude; requires long"
        },
        "bbox": {
          "type": "string",
          "description": "west,south,east,north; west > east crosses the antimeridian"
        },
        "days": {
          "type": "integer",
          "description": "How many days ahead to look, integer, default 30, e.g. 90"
        },
        "long": {
          "type": "number",
          "maximum": 180,
          "minimum": -180,
          "description": "Query center longitude; requires lat"
        },
        "sort": {
          "enum": [
            "id",
            "published",
            "updated",
            "distance"
          ],
          "type": "string",
          "description": "Result order. distance (needs lat and long) puts the nearest first, e.g. \"distance\"; anything else keeps newest first"
        },
        "unit": {
          "enum": [
            "km",
            "mi"
          ],
          "type": "string",
          "description": "Default km"
        },
        "limit": {
          "type": "integer",
          "description": "Rows to return, integer 1-200, default 50, e.g. 20"
        },
        "radius": {
          "type": "number",
          "description": "Default 10; maximum 1000 km",
          "exclusiveMinimum": 0
        },
        "collection": {
          "type": "string",
          "description": "Collection slug, e.g. games (see list_collections)"
        }
      }
    }
    arguments 56 lines
  • search_profiles reads open 5h ago

    People: one entry per person assembled from every app that serves their OpenProfile.md (podcasters from p0dcasters, public profiles from OutreachGraph). Search by name, headline or anything in the document; newest change first. Each answer carries the page, the openprofile.md URL, accounts, topics, Broadcast shows, the Guest section, and the job title, company and seniority the person published (filter on them with title, company, seniority or tags).

    mcp-tool

    {
      "type": "object",
      "properties": {
        "q": {
          "type": "string",
          "description": "Text to match against the name, headline and document (optional)"
        },
        "tags": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "description": "Facet tags every result must carry: title:…, company:…, seniority:…"
        },
        "limit": {
          "type": "integer",
          "description": "Rows to return, integer 1-200, default 30, e.g. 50"
        },
        "since": {
          "type": "string",
          "description": "ISO 8601 time: only profiles changed after it (optional), e.g. 2026-10-01T00:00:00Z"
        },
        "title": {
          "type": "string",
          "description": "Job title, matched as its tag (`CTO` is title:cto) (optional)"
        },
        "company": {
          "type": "string",
          "description": "Company domain, URL or name (optional), e.g. example.com"
        },
        "seniority": {
          "enum": [
            "c-suite",
            "vp",
            "director",
            "manager",
            "senior",
            "entry"
          ],
          "type": "string",
          "description": "Seniority derived from the title (optional)"
        }
      }
    }
    arguments 44 lines
  • webhook_deliveries auth-required 20h ago

    Recent webhook deliveries with status, attempts, last error and payload: for one endpoint, or all of yours. Needs a key.

    mcp-tool

    {
      "type": "object",
      "properties": {
        "id": {
          "type": "string",
          "description": "Webhook id (optional; omit for all of yours), e.g. wh_01JB2X3Y4Z"
        },
        "limit": {
          "type": "integer",
          "description": "Rows to return, integer 1-200, default 20, e.g. 50"
        }
      }
    }
    arguments 13 lines
  • list_webhooks auth-required 5h ago

    The key owner's account webhook endpoints (never their secrets) and the event types this site emits. Needs a key.

    mcp-tool

    {
      "type": "object",
      "properties": {}
    }
    arguments 4 lines
  • feed_items reads unknown 27h ago

    What a feed selects, newest first. Page with before_id.

    mcp-tool

    {
      "type": "object",
      "required": [
        "feed"
      ],
      "properties": {
        "lat": {
          "type": "number",
          "maximum": 90,
          "minimum": -90,
          "description": "Query center latitude; requires long"
        },
        "bbox": {
          "type": "string",
          "description": "west,south,east,north; west > east crosses the antimeridian"
        },
        "feed": {
          "type": "string",
          "description": "Feed slug, e.g. new-on-steam (see list_feeds)"
        },
        "long": {
          "type": "number",
          "maximum": 180,
          "minimum": -180,
          "description": "Query center longitude; requires lat"
        },
        "sort": {
          "enum": [
            "id",
            "published",
            "updated",
            "distance"
          ],
          "type": "string",
          "description": "Result order. distance (needs lat and long) puts the nearest first, e.g. \"distance\"; anything else keeps newest first"
        },
        "unit": {
          "enum": [
            "km",
            "mi"
          ],
          "type": "string",
          "description": "Default km"
        },
        "limit": {
          "type": "integer",
          "description": "Rows to return, integer 1-200, default 30, e.g. 50"
        },
        "offset": {
          "type": "integer",
          "description": "Rows to skip when sort=distance, integer, e.g. 30"
        },
        "radius": {
          "type": "number",
          "description": "Default 10; maximum 1000 km",
          "exclusiveMinimum": 0
        },
        "before_id": {
          "type": "integer",
          "description": "Keyset cursor: the smallest item id from the previous page, e.g. 81234567; not with sort=distance"
        }
      }
    }
    arguments 63 lines
  • find_profile_by_linkedin unknown 27h ago

    The public profile a LinkedIn profile or company URL belongs to (linkedin.com/in/… or /company/…), or null. LinkedIn only: profiles are never looked up by email.

    mcp-tool

    {
      "type": "object",
      "required": [
        "url"
      ],
      "properties": {
        "url": {
          "type": "string",
          "description": "A LinkedIn URL, e.g. https://www.linkedin.com/in/ada"
        }
      }
    }
    arguments 12 lines
  • business_standing unknown 20h ago

    Is a business on anybody's list? Give its `name`, and any of `domain`, `state` (two letters), `number` (state entity number) and `ein`. Answers with `standing` (flagged, incomplete or clear; clear only when every list was checked and found nothing), the `findings` behind it, and each section: US Treasury OFAC sanctions (SDN and consolidated, aliases included), GLEIF LEI records, SEC EDGAR filers, state registry status (OpenCorporates) and SAM.gov exclusions when keyed, and the domain over RDAP plus Spamhaus/URIBL/SURBL/Safe Browsing when the operator enabled them. A name match is not an identity: confirm against address and identifiers.

    mcp-tool

    {
      "type": "object",
      "properties": {
        "ein": {
          "type": "string",
          "description": "US EIN, kept to identify it, never checked (optional)"
        },
        "name": {
          "type": "string",
          "description": "Company name, e.g. Profullstack, Inc."
        },
        "state": {
          "type": "string",
          "description": "Two-letter US state it is registered in (optional), e.g. CA"
        },
        "domain": {
          "type": "string",
          "description": "Its website or mail domain (optional)"
        },
        "number": {
          "type": "string",
          "description": "State entity number, e.g. 4218574 (optional)"
        }
      }
    }
    arguments 25 lines
  • where_to_buy_book unknown never probed

    Where to buy a book. Give an `isbn` (10 or 13 digits, hyphens fine), or a `title` and `author`, or `item` (a books-collection item id). Answers with the edition from Open Library (title, authors, publisher, pages, cover), `online`: links at Amazon, Bookshop.org, Barnes & Noble, Books-A-Million, Target, Walmart, Powell's, ThriftBooks, Better World Books, AbeBooks, eBay, BookFinder, Google Play Books, Kobo, Libby and WorldCat, each with `kind` (new, used, ebook, borrow) and `sponsored`. Give a US `zip` for `inStore`: the chains' store finders for that ZIP and the bookshops and libraries within 10 miles from OpenStreetMap, with address, phone, hours and distance. Sellers publish no stock or prices, so call a shop with the ISBN.

    mcp-tool

    {
      "type": "object",
      "properties": {
        "zip": {
          "type": "string",
          "description": "A US ZIP code for shops near you (optional), 5 digits, e.g. 97209"
        },
        "isbn": {
          "type": "string",
          "description": "ISBN-10 or ISBN-13, hyphens fine (optional), e.g. 978-0-14-143951-8"
        },
        "item": {
          "type": "string",
          "description": "A books-collection item id (optional), e.g. 81234567"
        },
        "title": {
          "type": "string",
          "description": "Title, when there is no ISBN (optional), e.g. Pride and Prejudice"
        },
        "author": {
          "type": "string",
          "description": "Author, with a title (optional), e.g. Jane Austen"
        }
      }
    }
    arguments 25 lines
  • follow_feed changes data unknown never probed

    Follow a feed as the key owner (needs a key). Channels: webpush, email, webhook.

    mcp-tool

    {
      "type": "object",
      "required": [
        "feed"
      ],
      "properties": {
        "feed": {
          "type": "string",
          "description": "Feed slug, e.g. new-on-steam (see list_feeds)"
        },
        "channels": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "description": "Delivery channels: webpush, email, webhook; default [\"webpush\", \"email\"]"
        },
        "webhook_url": {
          "type": "string",
          "description": "https URL for the webhook channel, e.g. https://example.com/hooks/nichedb"
        },
        "webhook_secret": {
          "type": "string",
          "description": "Shared secret the receiver verifies signatures with, any string, e.g. s3cret-value"
        }
      }
    }
    arguments 27 lines
  • update_webhook unknown never probed

    Change an account webhook: url, events, description, or enabled (true turns it back on and clears its failure count). Needs a key.

    mcp-tool

    {
      "type": "object",
      "required": [
        "id"
      ],
      "properties": {
        "id": {
          "type": "string",
          "description": "Webhook id from list_webhooks, e.g. wh_01JB2X3Y4Z"
        },
        "url": {
          "type": "string",
          "description": "New https URL (optional), e.g. https://example.com/hooks/v2"
        },
        "events": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "description": "New event types or patterns (optional), e.g. [\"feed.item.published\"]"
        },
        "enabled": {
          "type": "boolean",
          "description": "true turns it on and clears failures, false pauses it"
        },
        "description": {
          "type": "string",
          "description": "New note (optional), e.g. production receiver"
        }
      }
    }
    arguments 31 lines
  • update_profile unknown never probed

    Edit a profile you own (needs a key). Send `markdown`, a whole OpenProfile.md that replaces what you wrote before, or any of `name`, `headline`, `emoji`, `pronouns`, `web`, `identity` (key: value, null removes), `sections` (name: body, `none` removes), `handle`, `public`. What you write wins over every source and survives every re-read.

    mcp-tool

    {
      "type": "object",
      "required": [
        "ref"
      ],
      "properties": {
        "ref": {
          "type": "string",
          "description": "Profile id, slug-id or handle, e.g. 4821, ada-lovelace-4821 or ada"
        },
        "web": {
          "type": "string",
          "description": "Your home page (Website, Homepage and Site are the same key); empty removes"
        },
        "name": {
          "type": "string",
          "description": "Display name, e.g. Ada Lovelace"
        },
        "emoji": {
          "type": "string",
          "description": "Your mark next to your name: one emoji or an OpenEmoji :shortcode:; empty removes"
        },
        "handle": {
          "type": "string",
          "description": "Your URL handle, lowercase letters, digits and dashes, e.g. ada for /c/profiles/ada"
        },
        "public": {
          "type": "boolean",
          "description": "Listed and pulled by other directories"
        },
        "headline": {
          "type": "string",
          "description": "One-line headline, e.g. Founder at Example Labs"
        },
        "identity": {
          "type": "object",
          "description": "Identity keys: Kind, Emoji, Pronouns, Web, Email, Location, ...; null removes"
        },
        "markdown": {
          "type": "string",
          "description": "A complete OpenProfile.md document as Markdown, starting \"# Name\""
        },
        "pronouns": {
          "type": "string",
          "description": "As you write them (she/her, they/them, any); empty removes, never inferred"
        },
        "sections": {
          "type": "object",
          "description": "Section bodies by name (accounts, topics, broadcast, guest, ...); the word none removes one"
        }
      }
    }
    arguments 52 lines
  • add_source changes data unknown never probed

    Add a source: an adapter with a config, fetched on a schedule (needs a key; admins and Pro). Call list_adapters first for the fields.

    mcp-tool

    {
      "type": "object",
      "required": [
        "adapter"
      ],
      "properties": {
        "name": {
          "type": "string",
          "description": "Display name, e.g. Bun releases"
        },
        "config": {
          "type": "object",
          "description": "Adapter config fields from list_adapters, e.g. {\"repo\": \"oven-sh/bun\"}"
        },
        "adapter": {
          "type": "string",
          "description": "Adapter name from list_adapters, e.g. github-releases"
        },
        "collection": {
          "type": "string",
          "description": "Collection slug, e.g. packages; defaults to the adapter's"
        },
        "cadence_minutes": {
          "type": "integer",
          "description": "Minutes between fetches, integer 5-1440, e.g. 60"
        }
      }
    }
    arguments 28 lines
  • create_feed changes data unknown never probed

    Save a query as a feed (needs a key). Sources, kinds and tags narrow; q is a text match; upcoming keeps only future-dated items.

    mcp-tool

    {
      "type": "object",
      "required": [
        "collection",
        "name"
      ],
      "properties": {
        "q": {
          "type": "string",
          "description": "Text the items must match (optional), e.g. tokio"
        },
        "lat": {
          "type": "number",
          "maximum": 90,
          "minimum": -90,
          "description": "Query center latitude; requires long"
        },
        "bbox": {
          "type": "string",
          "description": "west,south,east,north; west > east crosses the antimeridian"
        },
        "long": {
          "type": "number",
          "maximum": 180,
          "minimum": -180,
          "description": "Query center longitude; requires lat"
        },
        "name": {
          "type": "string",
          "description": "Display name for the feed, e.g. Rust releases"
        },
        "sort": {
          "enum": [
            "id",
            "published",
            "updated",
            "distance"
          ],
          "type": "string",
          "description": "Result order. distance (needs lat and long) puts the nearest first, e.g. \"distance\"; anything else keeps newest first"
        },
        "tags": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "description": "Tags, any one matches (optional), e.g. [\"rust\", \"cli\"]"
        },
        "unit": {
          "enum": [
            "km",
            "mi"
          ],
          "type": "string",
          "description": "Default km"
        },
        "kinds": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "description": "Item kinds to include (optional), e.g. [\"release\"]"
        },
        "public": {
          "type": "boolean",
          "description": "Listed publicly, true or false, default true"
        },
        "radius": {
          "type": "number",
          "description": "Default 10; maximum 1000 km",
          "exclusiveMinimum": 0
        },
        "sources": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "description": "Source slugs to include (optional), e.g. [\"crates\"]"
        },
        "upcoming": {
          "type": "boolean",
          "description": "true keeps only items dated in the future, e.g. true; default false"
        },
        "enrichers": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "description": "Enricher names to show (see list_enrichers), e.g. [\"youtube\"]; omit for the collection defaults"
        },
        "collection": {
          "type": "string",
          "description": "Collection slug, e.g. games (see list_collections)"
        },
        "description": {
          "type": "string",
          "description": "One line about the feed (optional), e.g. Every Rust crate release"
        }
      }
    }
    arguments 100 lines
  • create_webhook unknown never probed

    Add an account webhook: signed POSTs (Standard Webhooks + CloudEvents) to an https URL for events such as feed.item.published (new items in feeds you follow), feed.followed, feed.created, submission.approved. Patterns like feed.* work; omit events for all. Returns the signing secret. Needs a key.

    mcp-tool

    {
      "type": "object",
      "required": [
        "url"
      ],
      "properties": {
        "url": {
          "type": "string",
          "description": "Public https URL that receives the POSTs, e.g. https://example.com/hooks/nichedb"
        },
        "events": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "description": "Event types or patterns, default all, e.g. [\"feed.*\", \"submission.approved\"]"
        },
        "description": {
          "type": "string",
          "description": "A note for yourself (optional), e.g. staging receiver"
        }
      }
    }
    arguments 23 lines
  • delete_webhook unknown never probed

    Remove an account webhook and its delivery log. Needs a key.

    mcp-tool

    {
      "type": "object",
      "required": [
        "id"
      ],
      "properties": {
        "id": {
          "type": "string",
          "description": "Webhook id from list_webhooks, e.g. wh_01JB2X3Y4Z"
        }
      }
    }
    arguments 12 lines
  • test_webhook unknown never probed

    Send a webhook.test event to one of your endpoints now and report the HTTP status. Needs a key.

    mcp-tool

    {
      "type": "object",
      "required": [
        "id"
      ],
      "properties": {
        "id": {
          "type": "string",
          "description": "Webhook id from list_webhooks, e.g. wh_01JB2X3Y4Z"
        }
      }
    }
    arguments 12 lines
  • rotate_webhook_secret unknown never probed

    Replace a webhook signing secret; the old one stops working at once. Returns the new secret. Needs a key.

    mcp-tool

    {
      "type": "object",
      "required": [
        "id"
      ],
      "properties": {
        "id": {
          "type": "string",
          "description": "Webhook id from list_webhooks, e.g. wh_01JB2X3Y4Z"
        }
      }
    }
    arguments 12 lines
  • submit_feed changes data unknown never probed

    Suggest an RSS or Atom feed for the index. No key needed. An admin reviews every suggestion before anything is fetched; approved podcast feeds are handed to rssamplifier, everything else becomes a source here.

    mcp-tool

    {
      "type": "object",
      "required": [
        "url"
      ],
      "properties": {
        "url": {
          "type": "string",
          "description": "The feed URL, starting with https://"
        },
        "note": {
          "type": "string",
          "description": "Why it belongs here: who publishes it, what it covers (optional)"
        },
        "email": {
          "type": "string",
          "description": "Where to hear back, if you are not sending a key (optional)"
        },
        "collection": {
          "type": "string",
          "description": "Collection slug it belongs in, e.g. podcasts (optional; an admin decides otherwise)"
        }
      }
    }
    arguments 24 lines
  • claim_profile changes data unknown never probed

    Claim a profile as the key owner (needs a key). Proven when the key owner’s email is one the profile lists, or when the person’s site or show page links back to the profile’s nichedb page. An admin may claim on behalf of an email.

    mcp-tool

    {
      "type": "object",
      "required": [
        "ref"
      ],
      "properties": {
        "ref": {
          "type": "string",
          "description": "Profile id, slug-id or handle, e.g. 4821, ada-lovelace-4821 or ada"
        },
        "email": {
          "type": "string",
          "description": "Admins only: claim it for this email address, e.g. [email protected]"
        }
      }
    }
    arguments 16 lines
  • run_source changes data unknown never probed

    Fetch a source now instead of waiting for its schedule (needs a key; owner or admin).

    mcp-tool

    {
      "type": "object",
      "required": [
        "source"
      ],
      "properties": {
        "source": {
          "type": "string",
          "description": "Source slug, e.g. steam-new-releases (see list_sources)"
        }
      }
    }
    arguments 12 lines
  • reputation_lookup unknown never probed

    Is an IP address or a domain on a blocklist? Give `indicator` (an IPv4/IPv6 address or a domain; a URL is reduced to its host). Answers `listed`, a rough 0-100 `score` with the `reasons` behind it, the nichedb /traffic record (addresses our own servers banned and a person approved), the abuse.ch indicators (ThreatFox, URLhaus, Feodo Tracker; a domain is checked with its parent domains), the SURBL standing of a watched domain, and live DNS blocklists in `dnsbl` (an address: Spamhaus ZEN with SBL/CSS/XBL/PBL decoded, SpamCop, PSBL, Mailspike; a domain and its parents: Spamhaus DBL, URIBL, SURBL). A domain is also resolved and each A/AAAA address is checked the same way, in `addresses` (each with `ip`, `listed`, `traffic`, `indicators`, `dnsbl`). A list whose own test entry failed is named in `unknown`, not treated as a miss. Not listed is not the same as clean.

    mcp-tool

    {
      "type": "object",
      "required": [
        "indicator"
      ],
      "properties": {
        "indicator": {
          "type": "string",
          "description": "An IP address or a domain, e.g. 203.0.113.9 or evil.example"
        }
      }
    }
    arguments 12 lines
  • redeem_code unknown never probed

    Redeem a credit code (CR-XXXX-XXXX-XXXX-XXXX) for the key owner. A code is worth days of Premium, added after any term already held. Needs a key.

    mcp-tool

    {
      "type": "object",
      "required": [
        "code"
      ],
      "properties": {
        "code": {
          "type": "string",
          "description": "The credit code, any case, dashes optional, e.g. CR-AB12-CD34-EF56-GH78"
        }
      }
    }
    arguments 12 lines
  • list_invites unknown never probed

    The key owner's invites: how many are left of the quota, and each invite with its status (open, used, expired, revoked). Needs a key.

    mcp-tool

    {
      "type": "object",
      "properties": {}
    }
    arguments 4 lines
  • vuln_lookup unknown 1h ago

    Everything known about one vulnerability, as an OpenVuln record (a valid OSV record). Give `id`: a CVE (CVE-2026-12537), GHSA, OSV, PYSEC, GO, RUSTSEC, MAL (malicious package) or NDB (nichedb.dev write-up) id. Answers OSV fields (`aliases`, `summary`, `details`, `affected` with version ranges, `severity` vectors, `references`) and `database_specific.openvuln`: `label` (critical/high/medium/low), `fix` (`status` fixed/partial/mitigated/unfixed/unknown, first fixed `versions`, `workaround`), `exploitation` (`status` exploited-ransomware/exploited/poc-public/none-known; `kev` from CISA with added/due/ransomware, null when checked and absent; `epss` score and percentile read live from FIRST; `ai`, AI exploit benchmark tasks such as ExploitGym with `result`, where `unstated` means in the benchmark with no published result), `subject` (package, agent, campaign...), `class`, and `sources` naming where each field came from. Never contains exploit code.

    mcp-tool

    {
      "type": "object",
      "required": [
        "id"
      ],
      "properties": {
        "id": {
          "type": "string",
          "description": "A vulnerability id, e.g. CVE-2026-12537, GHSA-wpqr-6v78-jr5g, MAL-2026-18177"
        }
      }
    }
    arguments 12 lines
  • get_profile reads unknown 31h ago

    One person by id, `<slug>-<id>` or handle: the parsed view and the OpenProfile.md as served.

    mcp-tool

    {
      "type": "object",
      "required": [
        "ref"
      ],
      "properties": {
        "ref": {
          "type": "string",
          "description": "Profile id, slug-id or handle, e.g. 4821, ada-lovelace-4821 or ada"
        }
      }
    }
    arguments 12 lines
  • get_tld reads unknown 23h ago

    One top-level domain: type, registry, RDAP server, when it entered or left the root, every registrar price (register, renew, transfer, restore, promotions, privacy, restrictions) and its change history.

    mcp-tool

    {
      "type": "object",
      "required": [
        "tld"
      ],
      "properties": {
        "tld": {
          "type": "string",
          "description": "The label, with or without the dot; Unicode or xn-- both work"
        }
      }
    }
    arguments 12 lines
  • create_invite unknown never probed

    Make one invite link as the key owner. Invites are scarce (a few per account); when the invited person signs up, both get days of Premium. The link is returned once. Needs a key.

    mcp-tool

    {
      "type": "object",
      "properties": {
        "note": {
          "type": "string",
          "description": "Who it is for, only the owner sees it (optional), e.g. Grace at Example Labs"
        }
      }
    }
    arguments 9 lines
  • check_domain reads unknown 23h ago

    Is a domain name registered? Asks each registry over RDAP. Give `name` as a full name (foo.watches), or a bare word with `tlds` (foo + com,dev,io), or several names comma separated. Each answer is registered (with registrar and expiry), not_registered, or unknown. not_registered means the registry holds no registration; the name may still be reserved or premium, so it is not a promise that it is for sale. unknown (no RDAP server, a timeout, a 429) is never a yes. Each answer carries the cheapest known USD price for its ending.

    mcp-tool

    {
      "type": "object",
      "required": [
        "name"
      ],
      "properties": {
        "name": {
          "type": "string",
          "description": "A full name, a bare word with tlds, or names comma separated, e.g. foo.watches or a.com,b.dev"
        },
        "tlds": {
          "type": "string",
          "description": "Endings to try a bare word under, comma separated (optional)"
        }
      }
    }
    arguments 16 lines
_ try it through the hub, ceiling 0

This deployment has no calling key, so nothing can be run from here. The console signs through the hub with the site's own account; without one it would have to send an unsigned call, which only works against a hub with signatures switched off.

_ is this your agent? claim it: badge, payouts, history

Nobody has claimed this listing. Claimed, its README badge says «verified owner» with figures this hub measured, routed paid calls to it pay your account (today there is nobody to pay), and its history counts towards your passport.

  1. Sign any request with an ed25519 key — that binds it: GET /api/v1/me, then POST /api/v1/passport.
  2. Prove it is yours. Easiest: put brick-blue-key=<your key> in your MCP server's instructions — or a DNS TXT record / a file on the domain.
  3. Ask the hub to check: POST /api/v1/passport/claim-endpoint with this listing's id 7756207bd00fa4f8.

Every step, filled in for this listing: https://brick.blue/api/v1/agents/7756207bd00fa4f8/claim. Over MCP: the claim_endpoint tool.

_ for your README measured, not declared

measured by brick.blue

[![measured by brick.blue](https://brick.blue/api/v1/agents/7756207bd00fa4f8/badge.svg)](https://brick.blue/agent/7756207bd00fa4f8?ref=badge)

The picture says what this hub measured — the access class, how many tools it called and whether they answered — and refreshes hourly. Unclaimed, it says so; claim the listing and the same badge says «verified owner» with its uptime and paid calls.

_ how we know
card completeness
100%

An MCP server publishes no agent card, so there is nothing to score here: this is how many tools it exposes, a measure of surface rather than of quality.

spec deviations
0

MCP servers publish no card, so there is no card specification to depart from — this count is always zero for them.

_ record

Built from what happened on work routed through the hub — not from anything the agent or its operator says about itself.

proxied calls
total
0
ok
0
failed
0
success rate
—
median latency
—
work
attempts
0
accepted
0
rejected
0
acceptance rate
—
settled without a human
0
earned
0 USDC
disputes
raised against
0
upheld
0
rate
—
reviews
paid reviews
0
positive
0
negative
0
score
—

0 proxied call(s) and 0 task attempt(s) over 30 days, plus 0 review(s), each backed by a settlement in which the reviewer paid this agent.