io.github.smeet666/mcp-stashbox
NPM · MCP-STASHBOX · 2 COMPONENTS · SCANNED SEP 20
Search scenes, performers, studios and tags across the public stash-box catalogues.
Available components
How this component scores in each security and reliability category. Every signal is checked automatically from public evidence about the published package, including repeated runs of it in an isolated sandbox, and we only credit what we can confirm. How we score → Why this is hard to score →
Supply Chain Security98
- No malware found by supply-chain analysis.Pass
- No known CVEs affecting this package version or its production dependencies.Pass
- No install/post-install scripts declared.Pass
- 31 of 95 dependencies flagged as unhealthy. View diagnostics → Partial
Provenance & Transparency100
- Source repository is publicly reachable at the declared URL. View diagnostics → Pass
- Cryptographically verified build provenance (signed, bound to smeet666/mcp-stashbox). View diagnostics → Pass
- Clear OSI-approved license (MIT).Pass
- Actively maintained (last published 21 days ago).Pass
- Publishes a security disclosure policy (SECURITY.md).Pass
Schema Quality & AI Usability50
- AI-judged instruction clarity (good).Pass
- Context-footprint check failed: tool/resource definitions use about 2578 tokens (~257/item across 10 items; 10 tools + 0 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 Coverage82
- 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
- 38% of tool parameters carry a description.Partial
- Structured output schemas are declared (100% of tools); any adoption earns full credit.Pass
Tool Safety100
- No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.Pass
- We read all 10 captured tool definition(s), and no name or description among them implies an irreversible operation.Pass
- An AI judge read all 11 captured unit(s) of tool text and found none that tries to manipulate the model reading it.Pass
Capabilities100
- Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.Pass
How do I install the io.github.smeet666/mcp-stashbox server?
io.github.smeet666/mcp-stashbox runs locally as an npm package, launched with npx -y mcp-stashbox. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.
npm · mcp-stashbox
claude mcp add smeet666-mcp-stashbox -- npx -y mcp-stashbox
{
"mcpServers": {
"smeet666-mcp-stashbox": {
"command": "npx",
"args": [
"-y",
"mcp-stashbox"
]
}
}
} {
"servers": {
"smeet666-mcp-stashbox": {
"command": "npx",
"args": [
"-y",
"mcp-stashbox"
]
}
}
} codex mcp add smeet666-mcp-stashbox -- npx -y mcp-stashbox
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"smeet666-mcp-stashbox": {
"type": "local",
"command": [
"npx",
"-y",
"mcp-stashbox"
],
"enabled": true
}
}
} openclaw mcp add smeet666-mcp-stashbox --command npx --arg -y --arg mcp-stashbox
mcp_servers:
smeet666-mcp-stashbox:
command: "npx"
args: ["-y", "mcp-stashbox"] {
"McpServers": {
"smeet666-mcp-stashbox": {
"Transport": "stdio",
"Command": "npx",
"Arguments": [
"-y",
"mcp-stashbox"
]
}
}
} assistant mcp add smeet666-mcp-stashbox -t stdio -c npx -a -y mcp-stashbox
{
"mcpServers": {
"smeet666-mcp-stashbox": {
"command": "npx",
"args": [
"-y",
"mcp-stashbox"
]
}
}
} 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.
- 20 Sept 26 0
- Stability: 0.97 → pass security
- 19 Sept 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.
- 17 Sept 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 87 to 90. That category is still filling its 30-day observation window: 26 days of observed history at the previous scan, 27 at this one. The score rises as the window fills, whether or not the server changes.
- 15 Sept 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 80 to 83. That category is still filling its 30-day observation window: 24 days of observed history at the previous scan, 25 at this one. The score rises as the window fills, whether or not the server changes.
- 14 Sept 26 −3
- Stability: pass → 0.80 functional
- 10 Sept 26 0
- Stability: 0.97 → pass security
- 9 Sept 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.
- 7 Sept 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 87 to 90. That category is still filling its 30-day observation window: 26 days of observed history at the previous scan, 27 at this one. The score rises as the window fills, whether or not the server changes.
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 20 Sept 2026 · Analysed npm/mcp-stashbox@2.0.1
Provenance Verified
A signed build attestation was found and verified, binding this exact artifact to the source repository it claims to come from.
| Result | Verified |
|---|---|
| Ecosystem | npm |
| Reason | Verified |
| Discovered via | Registry attestation endpoint |
| Source repo | smeet666/mcp-stashbox |
| Certificate issuer | https://token.actions.githubusercontent.com |
| Certificate SAN | https://github.com/smeet666/mcp-stashbox/.github/workflows/publish.yml@refs/tags/v2.0.1 |
| Rekor log index | 2644890414 |
| Predicate type | https://slsa.dev/provenance/v1 |
| Subject digest | sha512:7004f546fee70a6f5188a1a6fb037ed4124e48c149e2ace5574a7219f12576f55191bcc2b89615d61483dedf7ef9ad3e605279c29ac9136f4741bba10 |
Background: How many MCP packages publish verified provenance →
Dependencies 95 packages
| Packages resolved | 95 |
|---|---|
| Stale | 31 |
| Tree resolution | Complete |
Background: SBOMs and build attestations, explained →
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 →
find_by_fingerprint Find scenes by fingerprint ~170
Identify a file from the hashes held for it, across every configured stash-box catalogue. MD5 and OSHASH name the bytes of a file; PHASH states a likeness a re-encode, a crop or another scene from one shoot can satisfy. Each record reached is answered as one card, read on every catalogue that holds it.
| Name | Type | Req | Description |
|---|---|---|---|
| fingerprints | array | yes | – |
| prefer | array | – | The order the catalogues are preferred in where they disagree on a field. Left out, the registry's own order stands, and every card states the order applied. |
| sections | array | – | The blocks read beside the record's own fields, which come back whatever is written here. Each name adds a block, and 'basic' asks for those fields alone. |
| sources | array | – | – |
| Name | Type | Req | Description |
|---|---|---|---|
| asked | array | yes | – |
| cached | boolean | – | – |
| match_count | number | yes | One per card here. Every hash that reached a record names it on one card, and a record reached both by an exact hash and by a perceptual one stands as two, since the two claim different things about… |
| matches | array | yes | – |
| not_searched | array | yes | Hashes and the catalogues that answered without searching their algorithm, so they were never put to those. Nobody looked there, which is no evidence about the files behind them. |
| notes | array | yes | – |
| per_source | array | yes | – |
| records_named | number | yes | Distinct records an exact hash named. Two hashes reaching one record count once, and a perceptual match names no record. |
| resemblances | number | yes | Matches a perceptual hash reached, each a likeness and no claim about any file's bytes. |
| unattributed | number | yes | Records the catalogues answered with that carry none of the hashes asked. Which hash reached them is unknown, so they stand as no match and are counted apart. |
| unmatched | array | yes | The hashes put to a catalogue that answered, which reached no record there. A catalogue named as unasked says nothing about them either way. |
No examples provided.
get_performer Get one performer ~204
Read one performer from the catalogue its identifier names, written instance:uuid. The answer is one card, read on every catalogue that holds the record and reached by the link each of them publishes to the same record elsewhere. Every value names the catalogues that said it, and where they disagree the reading nobody preferred is published beside the one that won. Name 'sources' to read one catalogue alone.
| Name | Type | Req | Description |
|---|---|---|---|
| id | string | yes | – |
| prefer | array | – | The order the catalogues are preferred in where they disagree on a field. Left out, the registry's own order stands, and every card states the order applied. |
| sections | array | – | The blocks read beside the record's own fields, which come back whatever is written here. Each name adds a block, and 'basic' asks for those fields alone. 'studios' is the whole table of studios they… |
| sources | array | – | – |
| Name | Type | Req | Description |
|---|---|---|---|
| cached | boolean | – | – |
| card | object | yes | – |
No examples provided.
get_scene Get one scene ~181
Read one scene from the catalogue its identifier names, written instance:uuid. The answer is one card, read on every catalogue that holds the record and reached by the link each of them publishes to the same record elsewhere. Every value names the catalogues that said it, and where they disagree the reading nobody preferred is published beside the one that won. Name 'sources' to read one catalogue alone.
| Name | Type | Req | Description |
|---|---|---|---|
| id | string | yes | – |
| prefer | array | – | The order the catalogues are preferred in where they disagree on a field. Left out, the registry's own order stands, and every card states the order applied. |
| sections | array | – | The blocks read beside the record's own fields, which come back whatever is written here. Each name adds a block, and 'basic' asks for those fields alone. |
| sources | array | – | – |
| Name | Type | Req | Description |
|---|---|---|---|
| cached | boolean | – | – |
| card | object | yes | – |
No examples provided.
get_sources What each catalogue answers ~60
What each configured stash-box catalogue was measured answering, and the day its surface was read from it. Whether a key is held for a catalogue is a fact about this install and changes nothing about what the catalogue does. Reaches no catalogue and takes no argument.
Input schema present but exposes no named parameters.
| Name | Type | Req | Description |
|---|---|---|---|
| notes | array | yes | – |
| sources | array | yes | – |
No examples provided.
get_studio Get one studio ~142
Read one studio from the catalogue its identifier names, written instance:uuid. The answer is one card, read on every catalogue that holds the record and reached by the link each of them publishes to the same record elsewhere. Every value names the catalogues that said it, and where they disagree the reading nobody preferred is published beside the one that won. Name 'sources' to read one catalogue alone.
| Name | Type | Req | Description |
|---|---|---|---|
| id | string | yes | – |
| prefer | array | – | The order the catalogues are preferred in where they disagree on a field. Left out, the registry's own order stands, and every card states the order applied. |
| sources | array | – | – |
| Name | Type | Req | Description |
|---|---|---|---|
| cached | boolean | – | – |
| card | object | yes | – |
No examples provided.
get_tag Get one tag ~141
Read one tag from the catalogue its identifier names, written instance:uuid. The answer is one card, read on every catalogue that holds the record and reached by the link each of them publishes to the same record elsewhere. Every value names the catalogues that said it, and where they disagree the reading nobody preferred is published beside the one that won. Name 'sources' to read one catalogue alone.
| Name | Type | Req | Description |
|---|---|---|---|
| id | string | yes | – |
| prefer | array | – | The order the catalogues are preferred in where they disagree on a field. Left out, the registry's own order stands, and every card states the order applied. |
| sources | array | – | – |
| Name | Type | Req | Description |
|---|---|---|---|
| cached | boolean | – | – |
| card | object | yes | – |
No examples provided.
search_performers Search performers ~454
Search performers across every configured stash-box catalogue. Two exclusive paths: 'query' runs each catalogue's own text index, which reads the words as a union, and the typed arguments narrow as an intersection. Writing both is refused. The answer says per catalogue which of three it met: a failure, a catalogue nobody asked, and an emptiness it established. Counts are never added across them.
| Name | Type | Req | Description |
|---|---|---|---|
| alias | string | – | No catalogue's faceted route applies it, though every faceted input declares it: a request carrying it answers as wide as one carrying none, so it is never sent and the answer names it as a narrowing… |
| birth_year | integer | – | – |
| career_end_year | integer | – | No catalogue's faceted route applies it, though every faceted input declares it: a request carrying it answers as wide as one carrying none, so it is never sent and the answer names it as a narrowing… |
| career_start_year | integer | – | No catalogue's faceted route applies it, though every faceted input declares it: a request carrying it answers as wide as one carrying none, so it is never sent and the answer names it as a narrowing… |
| country | string | – | – |
| direction | string | – | – |
| disambiguation | string | – | – |
| ethnicity | string | – | – |
| gender | string | – | – |
| limit | integer | – | How many rows one page of one catalogue carries. An answer holding several carries up to this many from each: their pages are their own and nothing here interleaves them into one. |
| name | string | – | – |
| page | integer | – | Which page of its own order every catalogue asked is read at, counted from 1. A search written with words alone reads the first rows each text index answers with, since those routes take no page. |
| performed_with | string | – | – |
| query | string | – | Words for the catalogue's own text index, which reads them as a union. It is exclusive with the typed arguments, which narrow as an intersection. |
| sort | string | – | – |
| sources | array | – | – |
| studio_id | string | – | – |
| Name | Type | Req | Description |
|---|---|---|---|
| cached | boolean | – | Replayed from this client's store. |
| notes | array | yes | – |
| ordering | string | yes | How the rows were laid out, which a reader needs before reading the first. |
| per_source | array | yes | – |
| result_count | number | yes | How many rows this page carries. |
| results | array | yes | – |
| window | object | – | The page and the row limit this answer was read at, absent where no catalogue answered. |
No examples provided.
search_scenes Search scenes ~460
Search scenes across every configured stash-box catalogue. Two exclusive paths: 'query' runs each catalogue's own text index, which reads the words as a union, and the typed arguments narrow as an intersection. Writing both is refused. The answer says per catalogue which of three it met: a failure, a catalogue nobody asked, and an emptiness it established. Counts are never added across them.
| Name | Type | Req | Description |
|---|---|---|---|
| alias | string | – | No catalogue's faceted route applies it, though every faceted input declares it: a request carrying it answers as wide as one carrying none, so it is never sent and the answer names it as a narrowing… |
| code | string | – | – |
| date | string | – | – |
| date_compare | string | – | These catalogues compare a date against one bound and answer no range, so the comparison is written rather than assumed. |
| direction | string | – | – |
| limit | integer | – | How many rows one page of one catalogue carries. An answer holding several carries up to this many from each: their pages are their own and nothing here interleaves them into one. |
| match | string | – | How performer_ids and tag_ids are read, which are the only arguments it governs. 'all', the default, asks for scenes carrying every identifier of a list; 'any' for scenes carrying at least one, which… |
| page | integer | – | Which page of its own order every catalogue asked is read at, counted from 1. A search written with words alone reads the first rows each text index answers with, since those routes take no page. |
| parent_studio_id | string | – | – |
| performer_ids | array | – | – |
| query | string | – | Words for the catalogue's own text index, which reads them as a union. It is exclusive with the typed arguments, which narrow as an intersection. |
| sort | string | – | – |
| sources | array | – | – |
| studio_ids | array | – | – |
| tag_ids | array | – | – |
| title | string | – | – |
| Name | Type | Req | Description |
|---|---|---|---|
| cached | boolean | – | Replayed from this client's store. |
| notes | array | yes | – |
| ordering | string | yes | How the rows were laid out, which a reader needs before reading the first. |
| per_source | array | yes | – |
| result_count | number | yes | How many rows this page carries. |
| results | array | yes | – |
| window | object | – | The page and the row limit this answer was read at, absent where no catalogue answered. |
No examples provided.
search_studios Search studios ~258
Search studios across every configured stash-box catalogue. Two exclusive paths: 'query' runs each catalogue's own text index, which reads the words as a union, and the typed arguments narrow as an intersection. Writing both is refused. The answer says per catalogue which of three it met: a failure, a catalogue nobody asked, and an emptiness it established. Counts are never added across them.
| Name | Type | Req | Description |
|---|---|---|---|
| direction | string | – | – |
| has_parent | boolean | – | – |
| limit | integer | – | How many rows one page of one catalogue carries. An answer holding several carries up to this many from each: their pages are their own and nothing here interleaves them into one. |
| name | string | – | – |
| page | integer | – | Which page of its own order every catalogue asked is read at, counted from 1. A search written with words alone reads the first rows each text index answers with, since those routes take no page. |
| parent_id | string | – | – |
| query | string | – | Words for the catalogue's own text index, which reads them as a union. It is exclusive with the typed arguments, which narrow as an intersection. |
| sort | string | – | – |
| sources | array | – | – |
| Name | Type | Req | Description |
|---|---|---|---|
| cached | boolean | – | Replayed from this client's store. |
| notes | array | yes | – |
| ordering | string | yes | How the rows were laid out, which a reader needs before reading the first. |
| per_source | array | yes | – |
| result_count | number | yes | How many rows this page carries. |
| results | array | yes | – |
| window | object | – | The page and the row limit this answer was read at, absent where no catalogue answered. |
No examples provided.
search_tags Search tags ~249
Search tags across every configured stash-box catalogue. Two exclusive paths: 'query' runs each catalogue's own text index, which reads the words as a union, and the typed arguments narrow as an intersection. Writing both is refused. The answer says per catalogue which of three it met: a failure, a catalogue nobody asked, and an emptiness it established. Counts are never added across them.
| Name | Type | Req | Description |
|---|---|---|---|
| category_id | string | – | – |
| direction | string | – | – |
| limit | integer | – | How many rows one page of one catalogue carries. An answer holding several carries up to this many from each: their pages are their own and nothing here interleaves them into one. |
| name | string | – | – |
| page | integer | – | Which page of its own order every catalogue asked is read at, counted from 1. A search written with words alone reads the first rows each text index answers with, since those routes take no page. |
| query | string | – | Words for the catalogue's own text index, which reads them as a union. It is exclusive with the typed arguments, which narrow as an intersection. |
| sort | string | – | – |
| sources | array | – | – |
| Name | Type | Req | Description |
|---|---|---|---|
| cached | boolean | – | Replayed from this client's store. |
| notes | array | yes | – |
| ordering | string | yes | How the rows were laid out, which a reader needs before reading the first. |
| per_source | array | yes | – |
| result_count | number | yes | How many rows this page carries. |
| results | array | yes | – |
| window | object | – | The page and the row limit this answer was read at, absent where no catalogue answered. |
No examples provided.
What is the io.github.smeet666/mcp-stashbox server?
io.github.smeet666/mcp-stashbox is listed in the public MCP registry as io.github.smeet666/mcp-stashbox. Search scenes, performers, studios and tags across the public stash-box catalogues. This page covers its npm package (mcp-stashbox).
Is the io.github.smeet666/mcp-stashbox server safe to use?
io.github.smeet666/mcp-stashbox scores 89 out of 100 on VerifyMCP. We found no known CVEs affecting it as of 20 September 2026. It declares no install or post-install scripts. Its build provenance is signed and verified. 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 io.github.smeet666/mcp-stashbox server expose?
io.github.smeet666/mcp-stashbox exposes 10 tools: get_sources, search_scenes, search_performers, search_studios, search_tags, and 5 more. Their descriptions and schemas cost roughly 2,319 tokens of context every time the server is loaded.
Is the io.github.smeet666/mcp-stashbox server still maintained?
io.github.smeet666/mcp-stashbox is still listed as active in the MCP registry. We last reached this channel on 20 September 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.
What licence is the io.github.smeet666/mcp-stashbox server under?
io.github.smeet666/mcp-stashbox declares the MIT licence, which is OSI-approved. That covers the source only, and says nothing about the cost of any service it calls.