NicheDB
Measured conclusion: Alive, not deep-tested. L2 outcome: not_attempted.
Sources in, feeds out: an open, ever-growing database of real-time public data, enriched.
| Author | dev.nichedb |
|---|---|
| Access | mixed |
| Publisher key required | No |
| Measured state | Alive, not deep-tested |
| L1 liveness | alive |
| L1 latency | 2009 ms |
| Last measured | 2026-10-26 |
Add to your agent
Copy this into your MCP client config:
{
"mcpServers": {
"NicheDB": {
"url": "https://nichedb.dev/mcp",
"transport": "streamable-http"
}
}
}
Measured tools (31)
statsWhat this deployment holds: collections, sources, items, items added today, feeds.
Hints: read-only not declared · destructive not declared · idempotent not declared · open-world not declared
list_collectionsThe collections (niches) with their source, feed and item counts.
Hints: read-only not declared · destructive not declared · idempotent not declared · open-world not declared
list_adaptersEvery adapter this deployment can run, with the config fields each takes. Use before add_source.
Hints: read-only not declared · destructive not declared · idempotent not declared · open-world not declared
list_enrichersEvery 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`.
Hints: read-only not declared · destructive not declared · idempotent not declared · open-world not declared
list_sourcesSources with status, last run and item counts. Optionally one collection.
Parameters:
collection— string — Collection slug, e.g. games
Hints: read-only not declared · destructive not declared · idempotent not declared · open-world not declared
list_feedsPublic feeds, most followed first. Optionally one collection.
Parameters:
collection— string — Collection slug
Hints: read-only not declared · destructive not declared · idempotent not declared · open-world not declared
feed_itemsWhat a feed selects, newest first. Page with before_id.
Parameters:
feed(required) — string — Feed sluglat— number — Query center latitude; requires longbbox— string — west,south,east,north; west > east crosses the antimeridianlong— number — Query center longitude; requires latsort— stringunit— string — Default kmlimit— integer — Default 30, max 200offset— integer — Distance pagination offsetradius— number — Default 10; maximum 1000 kmbefore_id— integer — Keyset cursor; cannot combine with distance sorting
Hints: read-only not declared · destructive not declared · idempotent not declared · open-world not declared
recent_itemsNewest items, optionally narrowed to a collection, source or kind.
Parameters:
lat— number — Query center latitude; requires longbbox— string — west,south,east,north; west > east crosses the antimeridiankind— string — Item kindlong— number — Query center longitude; requires latsort— stringunit— string — Default kmlimit— integer — Default 30, max 200offset— integer — Distance pagination offsetradius— number — Default 10; maximum 1000 kmsource— string — Source slugbefore_id— integer — Keyset cursor; cannot combine with distance sortingcollection— string — Collection slug
Hints: read-only not declared · destructive not declared · idempotent not declared · open-world not declared
upcomingItems dated in the future (releases, launches, deadlines), soonest first.
Parameters:
lat— number — Query center latitude; requires longbbox— string — west,south,east,north; west > east crosses the antimeridiandays— integer — Horizon, default 30long— number — Query center longitude; requires latsort— stringunit— string — Default kmlimit— integer — Default 50radius— number — Default 10; maximum 1000 kmcollection— string — Collection slug
Hints: read-only not declared · destructive not declared · idempotent not declared · open-world not declared
search_itemsFull-text search over titles, summaries and tags. Use this first when you know a name.
Parameters:
q(required) — string — Querylat— number — Query center latitude; requires longbbox— string — west,south,east,north; west > east crosses the antimeridiankind— string — Item kindlong— number — Query center longitude; requires latsort— stringunit— string — Default kmlimit— integer — Default 20, max 100radius— number — Default 10; maximum 1000 kmcollection— string — Collection slug
Hints: read-only not declared · destructive not declared · idempotent not declared · open-world not declared
match_itemsWhich 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.
Parameters:
q(required) — string — The name as writtenlat— number — Query center latitude; requires longbbox— string — west,south,east,north; west > east crosses the antimeridiandate— string — A day (YYYY-MM-DD) to look for a fixture on, plus a day either sidekind— string — Item kind: title, channel, fixturelong— number — Query center longitude; requires latsort— stringunit— string — Default kmyear— integer — A year to prefer, when knownlimit— integer — Default 5, max 50radius— number — Default 10; maximum 1000 kmcollection— string — Collection slug: screen, channels or sports
Hints: read-only not declared · destructive not declared · idempotent not declared · open-world not declared
get_itemOne item with its full adapter payload.
Parameters:
id(required) — integer — Item id
Hints: read-only not declared · destructive not declared · idempotent not declared · open-world not declared
populationPopulation 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.
Parameters:
q— string — A place name to look up, e.g. Springfield (optional)key— string — Area key, e.g. us, us-ca, us-ca-los-angeles, us-90210, de (optional)zip— string — A US ZIP code (optional)level— string — Which children to list: country, state, city or zip (optional)limit— integer — Children to list, default 20, max 500offset— integer — Skip this many children, for paging
Hints: read-only not declared · destructive not declared · idempotent not declared · open-world not declared
where_to_buy_bookWhere 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.
Parameters:
zip— string — A US ZIP code for shops near you (optional)isbn— string — ISBN-10 or ISBN-13 (optional)item— string — A books-collection item id (optional)title— string — Title, when there is no ISBN (optional)author— string — Author, with a title (optional)
Hints: read-only not declared · destructive not declared · idempotent not declared · open-world not declared
create_feedSave a query as a feed (needs a key). Sources, kinds and tags narrow; q is a text match; upcoming keeps only future-dated items.
Parameters:
collection(required) — string — Collection slugname(required) — string — Feed nameq— string — Text matchlat— number — Query center latitude; requires longbbox— string — west,south,east,north; west > east crosses the antimeridianlong— number — Query center longitude; requires latsort— stringtags— array — Tags, any matchunit— string — Default kmkinds— array — Item kindspublic— boolean — Default trueradius— number — Default 10; maximum 1000 kmsources— array — Source slugsupcoming— booleanenrichers— array — Enrichers to show; omit for the collection defaultsdescription— string — Optional
Hints: read-only not declared · destructive not declared · idempotent not declared · open-world not declared
follow_feedFollow a feed as the key owner (needs a key). Channels: webpush, email, webhook.
Parameters:
feed(required) — string — Feed slugchannels— array — Default webpush,emailwebhook_url— string — For the webhook channelwebhook_secret— string — Shared secret the receiver verifies with
Hints: read-only not declared · destructive not declared · idempotent not declared · open-world not declared
submit_feedSuggest 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.
Parameters:
url(required) — string — The feed URL, starting with https://note— string — Why it belongs here: who publishes it, what it covers (optional)email— string — Where to hear back, if you are not sending a key (optional)collection— string — Collection slug it belongs in (optional; an admin decides otherwise)
Hints: read-only not declared · destructive not declared · idempotent not declared · open-world not declared
search_profilesPeople: 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).
Parameters:
q— string — Text to match against the name, headline and document (optional)tags— array — Facet tags every result must carry: title:…, company:…, seniority:…limit— integer — Default 30, max 200since— string — ISO time: only profiles changed after it (optional)title— string — Job title, matched as its tag (`CTO` is title:cto) (optional)company— string — Company domain, URL or name (optional)seniority— string — Seniority derived from the title (optional)
Hints: read-only not declared · destructive not declared · idempotent not declared · open-world not declared
find_profile_by_linkedinThe 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.
Parameters:
url(required) — string — A LinkedIn URL, e.g. https://www.linkedin.com/in/ada
Hints: read-only not declared · destructive not declared · idempotent not declared · open-world not declared
get_profileOne person by id, `<slug>-<id>` or handle: the parsed view and the OpenProfile.md as served.
Parameters:
ref(required) — string — Profile id, slug-id or handle
Hints: read-only not declared · destructive not declared · idempotent not declared · open-world not declared
claim_profileClaim 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.
Parameters:
ref(required) — string — Profile id, slug-id or handleemail— string — Admins only: claim it for this email
Hints: read-only not declared · destructive not declared · idempotent not declared · open-world not declared
update_profileEdit 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.
Parameters:
ref(required) — string — Profile id, slug-id or handleweb— string — Your home page (Website, Homepage and Site are the same key); empty removesname— string — The nameemoji— string — Your mark next to your name: one emoji or an OpenEmoji :shortcode:; empty removeshandle— string — Your URL: /c/profiles/<handle>public— boolean — Listed and pulled by other directoriesheadline— string — One lineidentity— object — Identity keys: Kind, Emoji, Pronouns, Web, Email, Location, ...; null removesmarkdown— string — A complete OpenProfile.mdpronouns— string — As you write them (she/her, they/them, any); empty removes, never inferredsections— object — Section bodies by name (accounts, topics, broadcast, guest, ...); the word none removes one
Hints: read-only not declared · destructive not declared · idempotent not declared · open-world not declared
add_sourceAdd a source: an adapter with a config, fetched on a schedule (needs a key; admins and Pro). Call list_adapters first for the fields.
Parameters:
adapter(required) — string — Adapter name, e.g. github-releasesname— string — Display nameconfig— object — Adapter config fieldscollection— string — Collection slug; defaults to the adapter'scadence_minutes— integer — 5 to 1440
Hints: read-only not declared · destructive not declared · idempotent not declared · open-world not declared
run_sourceFetch a source now instead of waiting for its schedule (needs a key; owner or admin).
Parameters:
source(required) — string — Source slug
Hints: read-only not declared · destructive not declared · idempotent not declared · open-world not declared
search_tldsTop-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.
Parameters:
q— string — Text in the label, its Unicode form or the registry name (optional)idn— boolean — true: internationalised labels only; false: ASCII onlysort— string — renew (default), register, transfer, restore, ratio, tld, registrars, type, manager, first_seentrap— boolean — Only labels renewing at 2x the first year or moretype— string — generic, country-code, sponsored, generic-restricted, infrastructure, test; comma separated (optional)limit— integer — Default 50, max 500order— string — asc or descoffset— integer — Default 0status— string — delegated (default), removed, or allmanager— string — Exact registry name, as IANA writes it (optional)max_renew— number — Highest renewal price (optional)registrar— string — porkbun, dynadot, cloudflare, ovh (optional): only labels it sells, at its pricesmax_register— number — Highest first-year price (optional)
Hints: read-only not declared · destructive not declared · idempotent not declared · open-world not declared
get_tldOne 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.
Parameters:
tld(required) — string — The label, with or without the dot; Unicode or xn-- both work
Hints: read-only not declared · destructive not declared · idempotent not declared · open-world not declared
tld_changesTop-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.
Parameters:
limit— integer — Default 100, max 1000since— string — ISO time: only changes after it (optional)change— string — added, removed or returned (optional)
Hints: read-only not declared · destructive not declared · idempotent not declared · open-world not declared
check_domainIs 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.
Parameters:
name(required) — string — foo.watches, or foo, or a.com,b.devtlds— string — Endings to try a bare word under, comma separated (optional)
Hints: read-only not declared · destructive not declared · idempotent not declared · open-world not declared
business_standingIs 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.
Parameters:
ein— string — US EIN, kept to identify it, never checked (optional)name— string — Company name, e.g. Profullstack, Inc.state— string — Two-letter US state it is registered in (optional)domain— string — Its website or mail domain (optional)number— string — State entity number, e.g. 4218574 (optional)
Hints: read-only not declared · destructive not declared · idempotent not declared · open-world not declared
reputation_lookupIs 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.
Parameters:
indicator(required) — string — An IP address or a domain, e.g. 203.0.113.9 or evil.example
Hints: read-only not declared · destructive not declared · idempotent not declared · open-world not declared
traffic_listThe 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.
Parameters:
days— number — Only addresses seen in the last N days (optional)limit— number — Rows to return, up to 1000 with an API keyoffset— number — Rows to skip, with an API keycategory— string — exploit, brute-force, scanner, spam or other (optional)
Hints: read-only not declared · destructive not declared · idempotent not declared · open-world not declared
Measured by MCPYP probing. Untested fields are omitted, never estimated. Listing is always free; MCPYP never proxies calls or stores user tokens.