Skip to content
verify mcp Beta VerifyMCP is currently in beta. If you notice any issues, get in touch and we’ll put it right.

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.

0 this week 89 Trust /100
Trust breakdown (7 categories)

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
Install

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

# add to Claude Code
claude mcp add smeet666-mcp-stashbox -- npx -y mcp-stashbox
// .cursor/mcp.json
{
  "mcpServers": {
    "smeet666-mcp-stashbox": {
      "command": "npx",
      "args": [
        "-y",
        "mcp-stashbox"
      ]
    }
  }
}
// .vscode/mcp.json
{
  "servers": {
    "smeet666-mcp-stashbox": {
      "command": "npx",
      "args": [
        "-y",
        "mcp-stashbox"
      ]
    }
  }
}
# add to Codex CLI
codex mcp add smeet666-mcp-stashbox -- npx -y mcp-stashbox
// opencode.json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "smeet666-mcp-stashbox": {
      "type": "local",
      "command": [
        "npx",
        "-y",
        "mcp-stashbox"
      ],
      "enabled": true
    }
  }
}
# add to OpenClaw
openclaw mcp add smeet666-mcp-stashbox --command npx --arg -y --arg mcp-stashbox
# ~/.hermes/config.yaml
mcp_servers:
  smeet666-mcp-stashbox:
    command: "npx"
    args: ["-y", "mcp-stashbox"]
// ~/.netclaw/config/netclaw.json
{
  "McpServers": {
    "smeet666-mcp-stashbox": {
      "Transport": "stdio",
      "Command": "npx",
      "Arguments": [
        "-y",
        "mcp-stashbox"
      ]
    }
  }
}
# add to Vellum
assistant mcp add smeet666-mcp-stashbox -t stdio -c npx -a -y mcp-stashbox
// mcp.json
{
  "mcpServers": {
    "smeet666-mcp-stashbox": {
      "command": "npx",
      "args": [
        "-y",
        "mcp-stashbox"
      ]
    }
  }
}
Changelog

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.

Diagnostics

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 →

MCP tools · 10 exposed · ~2,319 tokens

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 →

Tool Tokens
find_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.

NameTypeReqDescription
fingerprintsarrayyes
preferarrayThe 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.
sectionsarrayThe 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.
sourcesarray
NameTypeReqDescription
askedarrayyes
cachedboolean
match_countnumberyesOne 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…
matchesarrayyes
not_searchedarrayyesHashes 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.
notesarrayyes
per_sourcearrayyes
records_namednumberyesDistinct records an exact hash named. Two hashes reaching one record count once, and a perceptual match names no record.
resemblancesnumberyesMatches a perceptual hash reached, each a likeness and no claim about any file's bytes.
unattributednumberyesRecords 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.
unmatchedarrayyesThe 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 ~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.

NameTypeReqDescription
idstringyes
preferarrayThe 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.
sectionsarrayThe 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…
sourcesarray
NameTypeReqDescription
cachedboolean
cardobjectyes

No examples provided.

get_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.

NameTypeReqDescription
idstringyes
preferarrayThe 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.
sectionsarrayThe 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.
sourcesarray
NameTypeReqDescription
cachedboolean
cardobjectyes

No examples provided.

get_sources ~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.

NameTypeReqDescription
notesarrayyes
sourcesarrayyes

No examples provided.

get_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.

NameTypeReqDescription
idstringyes
preferarrayThe 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.
sourcesarray
NameTypeReqDescription
cachedboolean
cardobjectyes

No examples provided.

get_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.

NameTypeReqDescription
idstringyes
preferarrayThe 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.
sourcesarray
NameTypeReqDescription
cachedboolean
cardobjectyes

No examples provided.

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.

NameTypeReqDescription
aliasstringNo 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_yearinteger
career_end_yearintegerNo 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_yearintegerNo 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…
countrystring
directionstring
disambiguationstring
ethnicitystring
genderstring
limitintegerHow 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.
namestring
pageintegerWhich 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_withstring
querystringWords 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.
sortstring
sourcesarray
studio_idstring
NameTypeReqDescription
cachedbooleanReplayed from this client's store.
notesarrayyes
orderingstringyesHow the rows were laid out, which a reader needs before reading the first.
per_sourcearrayyes
result_countnumberyesHow many rows this page carries.
resultsarrayyes
windowobjectThe page and the row limit this answer was read at, absent where no catalogue answered.

No examples provided.

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.

NameTypeReqDescription
aliasstringNo 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…
codestring
datestring
date_comparestringThese catalogues compare a date against one bound and answer no range, so the comparison is written rather than assumed.
directionstring
limitintegerHow 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.
matchstringHow 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…
pageintegerWhich 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_idstring
performer_idsarray
querystringWords 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.
sortstring
sourcesarray
studio_idsarray
tag_idsarray
titlestring
NameTypeReqDescription
cachedbooleanReplayed from this client's store.
notesarrayyes
orderingstringyesHow the rows were laid out, which a reader needs before reading the first.
per_sourcearrayyes
result_countnumberyesHow many rows this page carries.
resultsarrayyes
windowobjectThe page and the row limit this answer was read at, absent where no catalogue answered.

No examples provided.

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.

NameTypeReqDescription
directionstring
has_parentboolean
limitintegerHow 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.
namestring
pageintegerWhich 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_idstring
querystringWords 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.
sortstring
sourcesarray
NameTypeReqDescription
cachedbooleanReplayed from this client's store.
notesarrayyes
orderingstringyesHow the rows were laid out, which a reader needs before reading the first.
per_sourcearrayyes
result_countnumberyesHow many rows this page carries.
resultsarrayyes
windowobjectThe page and the row limit this answer was read at, absent where no catalogue answered.

No examples provided.

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.

NameTypeReqDescription
category_idstring
directionstring
limitintegerHow 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.
namestring
pageintegerWhich 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.
querystringWords 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.
sortstring
sourcesarray
NameTypeReqDescription
cachedbooleanReplayed from this client's store.
notesarrayyes
orderingstringyesHow the rows were laid out, which a reader needs before reading the first.
per_sourcearrayyes
result_countnumberyesHow many rows this page carries.
resultsarrayyes
windowobjectThe page and the row limit this answer was read at, absent where no catalogue answered.

No examples provided.

Common questions

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.