NicheDB
REMOTE · NICHEDB.DEV · 2 COMPONENTS · SCANNED OCT 14
Sources in, feeds out: an open, ever-growing database of real-time public data, enriched.
Available components
How this component scores in each security and reliability category. Every signal is checked automatically against the live server, and we only credit what we can confirm. How we score → Why this is hard to score →
Endpoint Security57
- The endpoint's TLS certificate is valid, in date, and uses a strong key. View diagnostics → Pass
- Authorisation not fully verified: no authorisation is required to call this server, and 27 tool(s) never declared a destructiveHint. The MCP spec treats an absent hint as destructive by default, so we cannot call this surface safe. See how to fix → View diagnostics → Unverified
- HTTPS is enforced; there's no plaintext access path. View diagnostics → Pass
- HSTS check failed: the Strict-Transport-Security header is absent. See how to fix → View diagnostics → Fail
- DNSSEC check failed: this domain isn't protected by DNSSEC. See how to fix → View diagnostics → Fail
Transport & Reachability100
- Verified streamable-http transport via a live MCP handshake. View diagnostics → Pass
Schema Quality & AI Usability81
- 100% of prompts and resources have a non-trivial description (not blank, and not just the item's name).Pass
- AI-judged instruction clarity (good).Pass
- Context-footprint check failed: tool/resource definitions use about 3666 tokens (~130/item across 28 items; 27 tools + 1 resources), over budget; trim descriptions and params. See how to fix → Fail
- Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management100
- No destabilizing schema changes in the last 30 days.Pass
Tool Coverage98
- 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
- 95% of tool parameters carry a description.Partial
Tool Safety100
- No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.Pass
- We read all 27 captured tool definition(s), and no name or description among them implies an irreversible operation.Pass
- An AI judge read all 29 captured unit(s) of tool text and found none that tries to manipulate the model reading it.Pass
Capabilities100
- Implements a current MCP spec version (2026-07-28).Pass
How do I install the NicheDB MCP server?
NicheDB is a hosted endpoint at https://nichedb.dev/mcp, so there is nothing to install locally. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.
remote · nichedb.dev
claude mcp add --transport http dev-nichedb-nichedb 'https://nichedb.dev/mcp'
{
"mcpServers": {
"dev-nichedb-nichedb": {
"url": "https://nichedb.dev/mcp"
}
}
} {
"servers": {
"dev-nichedb-nichedb": {
"type": "http",
"url": "https://nichedb.dev/mcp"
}
}
} [mcp_servers.dev-nichedb-nichedb] url = "https://nichedb.dev/mcp"
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"dev-nichedb-nichedb": {
"type": "remote",
"url": "https://nichedb.dev/mcp",
"enabled": true
}
}
} openclaw mcp add dev-nichedb-nichedb --url 'https://nichedb.dev/mcp' --transport streamable-http
mcp_servers:
dev-nichedb-nichedb:
url: "https://nichedb.dev/mcp" {
"McpServers": {
"dev-nichedb-nichedb": {
"Transport": "http",
"Url": "https://nichedb.dev/mcp"
}
}
} assistant mcp add dev-nichedb-nichedb -t streamable-http -u 'https://nichedb.dev/mcp'
{
"mcpServers": {
"dev-nichedb-nichedb": {
"type": "http",
"url": "https://nichedb.dev/mcp"
}
}
} The mcpServers block is a cross-client convention. Remote transports vary, so check your client's docs.
Every change we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.
- 5 Oct 26 0
- Stability: 0.97 → pass security
- 4 Oct 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 93 to 97. That category is still filling its 30-day observation window: 28 days of observed history at the previous scan, 29 at this one. The score rises as the window fills, whether or not the server changes.
- 1 Oct 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 83 to 87. That category is still filling its 30-day observation window: 25 days of observed history at the previous scan, 26 at this one. The score rises as the window fills, whether or not the server changes.
- 29 Sept 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 77 to 80. That category is still filling its 30-day observation window: 23 days of observed history at the previous scan, 24 at this one. The score rises as the window fills, whether or not the server changes.
- 28 Sept 26 0
- We updated how we score, so this day's move reflects our rubric, not a change to the server See what changed → functional
- 27 Sept 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 70 to 73. That category is still filling its 30-day observation window: 21 days of observed history at the previous scan, 22 at this one. The score rises as the window fills, whether or not the server changes.
- 26 Sept 26 0
- Schema quality: 109 → 125 ▼ functional
- New tool “check_domain” functional
- New tool “get_tld” functional
- New tool “population” functional
- New tool “search_tlds” functional
- New tool “tld_changes” functional
- 25 Sept 26 +1
- We updated how we score, so this day's move reflects our rubric, not a change to the server See what changed → functional
Diagnostic detail from the automated scan of this channel: what the scanner observed at each step, so you can see exactly where a check passed or failed. It is informational only and never changes the trust score.
Captured 14 Oct 2026 · Probed https://nichedb.dev/mcp
TLS valid
Negotiated TLS 1.3 with TLS_AES_128_GCM_SHA256 .
| Subject | Issuer | Valid from | Valid until | Key | Signature | Serial |
|---|---|---|---|---|---|---|
| CN=nichedb.dev | CN=YE2,O=Let's Encrypt,C=US | 24 Sept 2026 | 23 Dec 2026 | ECDSA 256 | ECDSA-SHA384 | 557422d236b6393694ebfbbe446613c50ce |
| SANs: nichedb.dev, www.nichedb.dev | ||||||
| CN=YE2,O=Let's Encrypt,C=US (CA) | CN=Root YE,O=ISRG,C=US | 3 Sept 2025 | 2 Sept 2028 | ECDSA 384 | ECDSA-SHA384 | 4df3b15dd6c0784c507cd37b58e6f115 |
| CN=Root YE,O=ISRG,C=US (CA) | CN=ISRG Root X2,O=Internet Security Research Group,C=US | 13 May 2026 | 2 Sept 2032 | ECDSA 384 | ECDSA-SHA384 | 872165fc34b6e5fba8add5b3705fb53a |
| CN=ISRG Root X2,O=Internet Security Research Group,C=US (CA) | CN=ISRG Root X1,O=Internet Security Research Group,C=US | 13 May 2026 | 2 Sept 2032 | ECDSA 384 | SHA256-RSA | 6c8f1dc727c7117f7baf853ac980f9cd |
Background: What to check on a remote MCP endpoint →
DNSSEC insecure
Validation of nichedb.dev. — Not signed
| Zone | DS | Keys | Algorithms | Outcome |
|---|---|---|---|---|
| . | trust_anchor | 20326, 38696 | 8, 8 | Verified |
| dev. | present | 60074 | 8 | Verified |
| nichedb.dev. | absent | Unsigned (proven) parent-signed NSEC/NSEC3 proves an unsigned delegation |
Authentication No authorisation required
The endpoint answered without asking for a token. Anyone who knows the URL can reach it.
| Result | No authorisation required |
|---|---|
| HTTP status | 200 |
Background: How OAuth 2.1 works in the 2026 MCP spec →
Transports 2 probes
| Transport | URL | Outcome | Status | Location |
|---|---|---|---|---|
| streamable-http | https://nichedb.dev/mcp | Verified | 200 | |
| http (plaintext) | http://nichedb.dev/mcp | HTTPS enforced | 301 | https://nichedb.dev/mcp |
The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability. A tool's description is untrusted text the model reads on every call, which is what makes this list a security surface and not just an inventory: how tool poisoning works →
add_source ~104
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.
| Name | Type | Req | Description |
|---|---|---|---|
| adapter | string | yes | Adapter name, e.g. github-releases |
| cadence_minutes | integer | – | 5 to 1440 |
| collection | string | – | Collection slug; defaults to the adapter's |
| config | object | – | Adapter config fields |
| name | string | – | Display name |
No output schema declared.
No examples provided.
check_domain ~176
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.
| Name | Type | Req | Description |
|---|---|---|---|
| name | string | yes | foo.watches, or foo, or a.com,b.dev |
| tlds | string | – | Endings to try a bare word under, comma separated (optional) |
No output schema declared.
No examples provided.
claim_profile ~93
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.
| Name | Type | Req | Description |
|---|---|---|---|
| string | – | Admins only: claim it for this email | |
| ref | string | yes | Profile id, slug-id or handle |
No output schema declared.
No examples provided.
create_feed ~221
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.
| Name | Type | Req | Description |
|---|---|---|---|
| bbox | string | – | west,south,east,north; west > east crosses the antimeridian |
| collection | string | yes | Collection slug |
| description | string | – | Optional |
| enrichers | array | – | Enrichers to show; omit for the collection defaults |
| kinds | array | – | Item kinds |
| lat | number | – | Query center latitude; requires long |
| long | number | – | Query center longitude; requires lat |
| name | string | yes | Feed name |
| public | boolean | – | Default true |
| q | string | – | Text match |
| radius | number | – | Default 10; maximum 1000 km |
| sort | string | – | – |
| sources | array | – | Source slugs |
| tags | array | – | Tags, any match |
| unit | string | – | Default km |
| upcoming | boolean | – | – |
No output schema declared.
No examples provided.
feed_items ~152
What a feed selects, newest first. Page with before_id.
| Name | Type | Req | Description |
|---|---|---|---|
| bbox | string | – | west,south,east,north; west > east crosses the antimeridian |
| before_id | integer | – | Keyset cursor; cannot combine with distance sorting |
| feed | string | yes | Feed slug |
| lat | number | – | Query center latitude; requires long |
| limit | integer | – | Default 30, max 200 |
| long | number | – | Query center longitude; requires lat |
| offset | integer | – | Distance pagination offset |
| radius | number | – | Default 10; maximum 1000 km |
| sort | string | – | – |
| unit | string | – | Default km |
No output schema declared.
No examples provided.
find_profile_by_linkedin ~72
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.
| Name | Type | Req | Description |
|---|---|---|---|
| url | string | yes | A LinkedIn URL, e.g. https://www.linkedin.com/in/ada |
No output schema declared.
No examples provided.
follow_feed ~75
Follow a feed as the key owner (needs a key). Channels: webpush, email, webhook.
| Name | Type | Req | Description |
|---|---|---|---|
| channels | array | – | Default webpush,email |
| feed | string | yes | Feed slug |
| webhook_secret | string | – | Shared secret the receiver verifies with |
| webhook_url | string | – | For the webhook channel |
No output schema declared.
No examples provided.
get_item ~25
One item with its full adapter payload.
| Name | Type | Req | Description |
|---|---|---|---|
| id | integer | yes | Item id |
No output schema declared.
No examples provided.
get_profile ~47
One person by id, `<slug>-<id>` or handle: the parsed view and the OpenProfile.md as served.
| Name | Type | Req | Description |
|---|---|---|---|
| ref | string | yes | Profile id, slug-id or handle |
No output schema declared.
No examples provided.
get_tld ~76
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.
| Name | Type | Req | Description |
|---|---|---|---|
| tld | string | yes | The label, with or without the dot; Unicode or xn-- both work |
No output schema declared.
No examples provided.
list_adapters ~28
Every adapter this deployment can run, with the config fields each takes. Use before add_source.
Input schema present but exposes no named parameters.
No output schema declared.
No examples provided.
list_collections ~24
The collections (niches) with their source, feed and item counts.
Input schema present but exposes no named parameters.
No output schema declared.
No examples provided.
list_enrichers ~51
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`.
Input schema present but exposes no named parameters.
No output schema declared.
No examples provided.
list_feeds ~30
Public feeds, most followed first. Optionally one collection.
| Name | Type | Req | Description |
|---|---|---|---|
| collection | string | – | Collection slug |
No output schema declared.
No examples provided.
list_sources ~37
Sources with status, last run and item counts. Optionally one collection.
| Name | Type | Req | Description |
|---|---|---|---|
| collection | string | – | Collection slug, e.g. games |
No output schema declared.
No examples provided.
match_items ~332
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.
| Name | Type | Req | Description |
|---|---|---|---|
| bbox | string | – | west,south,east,north; west > east crosses the antimeridian |
| collection | string | – | Collection slug: screen, channels or sports |
| date | string | – | A day (YYYY-MM-DD) to look for a fixture on, plus a day either side |
| kind | string | – | Item kind: title, channel, fixture |
| lat | number | – | Query center latitude; requires long |
| limit | integer | – | Default 5, max 50 |
| long | number | – | Query center longitude; requires lat |
| q | string | yes | The name as written |
| radius | number | – | Default 10; maximum 1000 km |
| sort | string | – | – |
| unit | string | – | Default km |
| year | integer | – | A year to prefer, when known |
No output schema declared.
No examples provided.
population ~286
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.
| Name | Type | Req | Description |
|---|---|---|---|
| key | string | – | Area key, e.g. us, us-ca, us-ca-los-angeles, us-90210, de (optional) |
| level | string | – | Which children to list: country, state, city or zip (optional) |
| limit | integer | – | Children to list, default 20, max 500 |
| offset | integer | – | Skip this many children, for paging |
| q | string | – | A place name to look up, e.g. Springfield (optional) |
| zip | string | – | A US ZIP code (optional) |
No output schema declared.
No examples provided.
recent_items ~171
Newest items, optionally narrowed to a collection, source or kind.
| Name | Type | Req | Description |
|---|---|---|---|
| bbox | string | – | west,south,east,north; west > east crosses the antimeridian |
| before_id | integer | – | Keyset cursor; cannot combine with distance sorting |
| collection | string | – | Collection slug |
| kind | string | – | Item kind |
| lat | number | – | Query center latitude; requires long |
| limit | integer | – | Default 30, max 200 |
| long | number | – | Query center longitude; requires lat |
| offset | integer | – | Distance pagination offset |
| radius | number | – | Default 10; maximum 1000 km |
| sort | string | – | – |
| source | string | – | Source slug |
| unit | string | – | Default km |
No output schema declared.
No examples provided.
run_source ~36
Fetch a source now instead of waiting for its schedule (needs a key; owner or admin).
| Name | Type | Req | Description |
|---|---|---|---|
| source | string | yes | Source slug |
No output schema declared.
No examples provided.
search_items ~148
Full-text search over titles, summaries and tags. Use this first when you know a name.
| Name | Type | Req | Description |
|---|---|---|---|
| bbox | string | – | west,south,east,north; west > east crosses the antimeridian |
| collection | string | – | Collection slug |
| kind | string | – | Item kind |
| lat | number | – | Query center latitude; requires long |
| limit | integer | – | Default 20, max 100 |
| long | number | – | Query center longitude; requires lat |
| q | string | yes | Query |
| radius | number | – | Default 10; maximum 1000 km |
| sort | string | – | – |
| unit | string | – | Default km |
No output schema declared.
No examples provided.
search_profiles ~233
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).
| Name | Type | Req | Description |
|---|---|---|---|
| company | string | – | Company domain, URL or name (optional) |
| limit | integer | – | Default 30, max 200 |
| q | string | – | Text to match against the name, headline and document (optional) |
| seniority | string | – | Seniority derived from the title (optional) |
| since | string | – | ISO time: only profiles changed after it (optional) |
| tags | array | – | Facet tags every result must carry: title:…, company:…, seniority:… |
| title | string | – | Job title, matched as its tag (`CTO` is title:cto) (optional) |
No output schema declared.
No examples provided.
search_tlds ~365
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.
| Name | Type | Req | Description |
|---|---|---|---|
| idn | boolean | – | true: internationalised labels only; false: ASCII only |
| limit | integer | – | Default 50, max 500 |
| manager | string | – | Exact registry name, as IANA writes it (optional) |
| max_register | number | – | Highest first-year price (optional) |
| max_renew | number | – | Highest renewal price (optional) |
| offset | integer | – | Default 0 |
| order | string | – | asc or desc |
| q | string | – | Text in the label, its Unicode form or the registry name (optional) |
| registrar | string | – | porkbun, dynadot, cloudflare, ovh (optional): only labels it sells, at its prices |
| sort | string | – | renew (default), register, transfer, restore, ratio, tld, registrars, type, manager, first_seen |
| status | string | – | delegated (default), removed, or all |
| trap | boolean | – | Only labels renewing at 2x the first year or more |
| type | string | – | generic, country-code, sponsored, generic-restricted, infrastructure, test; comma separated (optional) |
No output schema declared.
No examples provided.
stats ~24
What this deployment holds: collections, sources, items, items added today, feeds.
Input schema present but exposes no named parameters.
No output schema declared.
No examples provided.
submit_feed ~126
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.
| Name | Type | Req | Description |
|---|---|---|---|
| collection | string | – | Collection slug it belongs in (optional; an admin decides otherwise) |
| string | – | Where to hear back, if you are not sending a key (optional) | |
| note | string | – | Why it belongs here: who publishes it, what it covers (optional) |
| url | string | yes | The feed URL, starting with https:// |
No output schema declared.
No examples provided.
tld_changes ~86
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.
| Name | Type | Req | Description |
|---|---|---|---|
| change | string | – | added, removed or returned (optional) |
| limit | integer | – | Default 100, max 1000 |
| since | string | – | ISO time: only changes after it (optional) |
No output schema declared.
No examples provided.
upcoming ~136
Items dated in the future (releases, launches, deadlines), soonest first.
| Name | Type | Req | Description |
|---|---|---|---|
| bbox | string | – | west,south,east,north; west > east crosses the antimeridian |
| collection | string | – | Collection slug |
| days | integer | – | Horizon, default 30 |
| lat | number | – | Query center latitude; requires long |
| limit | integer | – | Default 50 |
| long | number | – | Query center longitude; requires lat |
| radius | number | – | Default 10; maximum 1000 km |
| sort | string | – | – |
| unit | string | – | Default km |
No output schema declared.
No examples provided.
update_profile ~300
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.
| Name | Type | Req | Description |
|---|---|---|---|
| emoji | string | – | Your mark next to your name: one emoji or an OpenEmoji :shortcode:; empty removes |
| handle | string | – | Your URL: /c/profiles/<handle> |
| headline | string | – | One line |
| identity | object | – | Identity keys: Kind, Emoji, Pronouns, Web, Email, Location, ...; null removes |
| markdown | string | – | A complete OpenProfile.md |
| name | string | – | The name |
| pronouns | string | – | As you write them (she/her, they/them, any); empty removes, never inferred |
| public | boolean | – | Listed and pulled by other directories |
| ref | string | yes | Profile id, slug-id or handle |
| sections | object | – | Section bodies by name (accounts, topics, broadcast, guest, ...); the word none removes one |
| web | string | – | Your home page (Website, Homepage and Site are the same key); empty removes |
No output schema declared.
No examples provided.
What is the NicheDB MCP server?
NicheDB is an MCP server listed in the public MCP registry as dev.nichedb/nichedb. Sources in, feeds out: an open, ever-growing database of real-time public data, enriched. This page covers its hosted endpoint (https://nichedb.dev/mcp).
Is the NicheDB MCP server safe to use?
NicheDB scores 79 out of 100 on VerifyMCP. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.
What tools does the NicheDB MCP server expose?
NicheDB exposes 27 tools: stats, list_collections, list_adapters, list_enrichers, list_sources, and 22 more. Their descriptions and schemas cost roughly 3,454 tokens of context every time the server is loaded.
Does the NicheDB MCP server require authentication?
No. We connected to NicheDB without credentials and it answered, so anything it exposes is reachable by anyone who knows the address.
Is the NicheDB MCP server still maintained?
NicheDB is still listed as active in the MCP registry. We last reached this channel on 14 October 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.