The Tab (scvd-tab)
NPM · SCVD-TAB
Every tool a builder signs up for, on one tab: trials, burn, price drift. Local JSONL, zero deps.
Available components
Last scanned (13 hours ago)
Scores higher than 99% of npm servers
Category Finance and Payments
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 Security100
- 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
- No production dependencies, so there is no dependency health to assess. View diagnostics → Pass
Provenance & Transparency100
- Source repository is publicly reachable at the declared URL. View diagnostics → Pass
- Cryptographically verified build provenance (signed, bound to seancrecord/scvd-general-store-repo). View diagnostics → Pass
- Clear OSI-approved license (MIT).Pass
- Actively maintained (last published 6 days ago).Pass
- Publishes a security disclosure policy (SECURITY.md).Pass
Schema Quality & AI Usability85
- AI-judged instruction clarity (excellent).Pass
- Context-footprint check failed: tool/resource definitions use about 2816 tokens (~156/item across 18 items; 18 tools + 0 resources), over budget; trim descriptions and params. See how to fix → Fail
- Tools include usage examples.Pass
Stability & Change Management100
- No destabilizing schema changes in the last 30 days.Pass
Tool Coverage100
- 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
- 100% of tool parameters carry a description.Pass
Tool Safety100
- No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.Pass
- We read all 18 captured tool definition(s), and no name or description among them implies an irreversible operation.Pass
- An AI judge read all 19 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
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.
- 21 Oct 26 0
- Stability: 0.97 → pass security
- 20 Oct 26 0
- Stability: pass → 0.97 functional
- 16 Oct 26 +2
- Stability: 0.80 → unverified ▼ security
- Tool safety: pass → unverified ▼ security
- Stability: 0.80 → pass security
- Capabilities: pass → unverified ▼ functional
- Tool coverage: 100 → unverified ▼ functional
- First check of Schema quality: unverified functional
- Package version: 0.11.2 → 0.11.4 functional
- 15 Oct 26 −2
- Stability: pass → 0.80 functional
- 14 Oct 26 0
- Stability: 0.97 → pass security
- 13 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.
- 12 Oct 26 −1
- Stability: pass → 0.93 functional
- 4 Oct 26 0
- Stability: 0.97 → pass security
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 23 Oct 2026 · Analysed npm/scvd-tab@0.11.4
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 | seancrecord/scvd-general-store-repo |
| Certificate issuer | https://token.actions.githubusercontent.com |
| Certificate SAN | https://github.com/seancrecord/scvd-general-store-repo/.github/workflows/publish-npm.yml@refs/heads/main |
| Rekor log index | 3283700279 |
| Predicate type | SLSA build provenance https://slsa.dev/provenance/v1 |
| Subject digest | sha512:31e93db10131422688bcf42db8cb8c889ff540e7e24db2123c493448020e6c5c6067734b3705e0700aaadc11e7d8a97f15a1e90549585a956cd5da365 |
Background: How many MCP packages publish verified provenance →
Dependencies 0 packages
| Packages resolved | 0 |
|---|---|
| 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 →
acknowledge_pages Acknowledge Pages ~77
You put these pages to the builder in their own words. Marks them spent so they stop coming back. Only acknowledge what you actually said — the tab counts pages that aged out unspoken, and a false acknowledgment is the one lie that makes the count useless.
| Name | Type | Req | Description |
|---|---|---|---|
| page_ids | array | yes | the ids whats_due returned and you actually said |
No output schema declared.
{"page_ids":["page_example"]} burn_rollup Burn Rollup ~114
The monthly number and what it is made of: category subtotals, annualized, the idle share, the trajectory since a past date with the signups that account for the change, an anonymized shareable badge, and the coverage block saying what the figure cannot see. Facts and arithmetic; no advice.
| Name | Type | Req | Description |
|---|---|---|---|
| since_days | integer | – | how far back the trajectory reads, in days; default 90 |
| unused_days | integer | – | days of silence before a tool counts as idle; default 45 |
No output schema declared.
{}{"since_days":30} capture_tool_event Quick Capture ~302
QUICK CAPTURE (/log): dump a fragment about a tool the builder just signed up for and it lands, always. Never refuses — missing fields come back named so the rounds can ask later. Use this at the moment of signup; use log_tool_event when you have the full picture.
| Name | Type | Req | Description |
|---|---|---|---|
| captured_text | string | – | the raw fragment, kept verbatim |
| category | string | – | the closed category list, if known |
| confidence | string | – | stated when the source said it; inferred when you worked it out |
| dedupe_key | string | – | message id when captured from mail — stops a re-found receipt double-counting |
| event | string | – | which lifecycle moment, if known |
| notes | string | – | anything else, kept verbatim |
| occurred_at | string | – | ISO date it really happened; defaults to now |
| price | object | – | {amount, currency, period}, as much of it as the fragment states |
| problem_solved | string | – | the job the tool was taken on for, if said |
| retroactive | boolean | – | true when backfilling; pair with occurred_at |
| signup_friction | string | – | what the signup path demanded |
| source | string | – | where the fragment came from |
| tool_name | string | yes | canonical lowercase name — the only required field |
| trial_ends | string | – | ISO date the trial converts, if stated |
No output schema declared.
{"captured_text":"Welcome to Linear — your 14-day trial has started","source":"capture","tool_name":"linear"} check_before_signup Check Before Signup ~67
Call BEFORE the builder signs up for something: their history with the tool, what currently covers the category, facts only.
| Name | Type | Req | Description |
|---|---|---|---|
| category | string | – | what it would cover, so the overlap can be read |
| tool_name | string | yes | canonical lowercase name of the tool being considered |
No output schema declared.
{"category":"analytics","tool_name":"posthog"} confirm_entry Confirm an Entry ~91
A human looked at a swept entry and says it is real (or marks it private). Confirmation is the load-bearing layer: machine-found claims never reach the pooled corpus without it.
| Name | Type | Req | Description |
|---|---|---|---|
| private | boolean | – | keep it on the tab, never let it leave the box — not in a delta, not in a shared count |
| tool_name | string | yes | the swept entry to confirm, by canonical name |
No output schema declared.
{"tool_name":"vercel"} contribute_anonymized_delta Contribute an Anonymized Delta ~167
Deliberately send one anonymized delta (opened or outcome) to the scvd aggregation endpoint. Requires consent on record; refuses fields the privacy sentence forbids.
| Name | Type | Req | Description |
|---|---|---|---|
| category | string | yes | the closed category list |
| kind | string | yes | opened when a trial began; outcome when it resolved |
| outcome | string | – | outcome only: how the trial resolved |
| replaced_with | string | – | replaced only: the tool that took over |
| signup_friction | string | – | what the signup path demanded |
| tool_name | string | yes | canonical lowercase name |
| week | string | – | ISO week the delta belongs to, e.g. 2026-W35 |
| weeks_held | integer | – | outcome only: whole weeks between opening and resolving |
No output schema declared.
{"category":"hosting","kind":"opened","tool_name":"vercel","week":"2026-W35"} export_tab Export the Tab ~54
Full export of the builder's tab, jsonl or csv. Any time, no charge, no lock-in.
| Name | Type | Req | Description |
|---|---|---|---|
| format | string | – | jsonl is the tab as stored; csv flattens it for a spreadsheet |
No output schema declared.
{"format":"csv"} log_tool_event Log a Tool Event ~456
Record a tool lifecycle event on the builder's tab: trial_started, paid_started, adopted, canceled, replaced, renewed, or price_changed. Validated; rejected writes explain themselves. Use retroactive:true with occurred_at for backfill.
| Name | Type | Req | Description |
|---|---|---|---|
| category | string | yes | the closed category list; other when nothing fits |
| event | string | yes | which lifecycle moment this is |
| notes | string | – | anything else, kept verbatim |
| occurred_at | string | – | ISO date the event really happened, for backfill; defaults to now |
| payment_method | string | – | how it is paid — card, invoice, crypto, free. The builder's own label; refused on a swept entry, which cannot know it |
| previous_price | object | – | price_changed only: the price before, same shape as price |
| price | object | – | {amount, currency, period: month|quarter|year|week|once, basis?: fixed|metered|free_with_paid_path}. basis marks what kind of number amount is: absent/fixed = the bill; metered = your ESTIMATE of a u… |
| problem_solved | string | yes | the job the tool was taken on for, in the builder's words |
| replaced_with | string | – | replaced only: canonical name of the tool that took over |
| retroactive | boolean | – | true when backfilling; pair with occurred_at |
| signup_friction | string | – | what the signup path demanded: agent_native (API key, no human), email_only, phone_required, kyc_required, human_only. Log it when you hit the wall — the tab remembers so the next attempt doesn't dea… |
| source_url | string | – | the page or receipt this came from. Refused on a swept entry: a letter's link is its own words in a different coat |
| tool_name | string | yes | canonical lowercase name |
| trial_ends | string | – | ISO date the trial converts — the number the pager runs on |
No output schema declared.
{"category":"hosting","event":"trial_started","price":{"amount":20,"currency":"USD","period":"month"},"problem_solved":"preview deploys for the app","tool_name":"vercel","trial_ends":"2026-09-16"} needs_attention Needs Attention ~66
What the rounds should ask about, dearest first and capped: unconfirmed sweep findings, entries captured with gaps, tools gone quiet, trials past their end. Ask two, not two hundred.
| Name | Type | Req | Description |
|---|---|---|---|
| limit | integer | – | how many to return, dearest first; default 3 |
No output schema declared.
{} reconcile_card_statement Reconcile a Card Statement ~165
GROUND TRUTH, monthly, by hand: the builder exports the bank's CSV, you parse every debit row, and this compares statement against tab in BOTH directions — charges the tab cannot place, tools the statement never charged, actuals against metered estimates, and charges on tools the tab holds as canceled. Writes nothing to the tab; every finding is a question for the builder, not an entry. Pass the rows unfiltered — a pre-filtered statement is the mail sweep's counting mistake with money on it.
| Name | Type | Req | Description |
|---|---|---|---|
| charges | array | yes | every debit row on the statement, unfiltered |
| statement_from | string | yes | ISO date the statement window opens — off the export, not remembered |
| statement_to | string | yes | ISO date the statement window closes |
No output schema declared.
{"charges":[{"amount":20,"date":"2026-08-03","descriptor":"VERCEL INC"}],"statement_from":"2026-08-01","statement_to":"2026-08-31"} record_coverage Record Sweep Coverage ~269
The sweep reports what it saw: addresses read, the window, and money-shaped mail it could NOT attribute to any tool. THE COUNTING OBLIGATION: every message you read belongs in exactly one bucket — matched, unmatched_transactional, or not_transactional — and `scanned` must be the total you actually looked at, BEFORE any filtering. Mail you dropped as unparseable still counts. A sweep that filters before it counts reports a flattering gap, and the tab publishes the leftover as `unclassified` rather than absorbing it.
| Name | Type | Req | Description |
|---|---|---|---|
| addresses_swept | array | – | the mailboxes the sweep read |
| attributed_amount | number | – | money in this window the sweep DID place on a tool, in the same units as the unmatched amounts |
| matched | integer | – | messages placed on a tool |
| not_transactional | integer | – | messages read and classified as carrying no money |
| scanned | integer | – | every message read in the window, counted BEFORE filtering — the denominator. Omitting it marks the whole report unaudited. |
| unmatched_transactional | array | – | money-shaped mail no tool claimed, one row each |
| window_from | string | – | ISO date the sweep started from |
| window_to | string | – | ISO date the sweep read through |
No output schema declared.
{"addresses_swept":["me@example.com"],"attributed_amount":184,"matched":9,"not_transactional":401,"scanned":412,"unmatched_transactional":[{"amount":12,"currency":"USD","sender":"billing.example.net"}],"window_from":"2026-08-01","window_to":"2026-08-31"} set_consent Set Consent ~60
Turn contribution on or off. Recorded as a consent_changed event in the tab itself — auditable like everything else. Off also disables pooled reads.
| Name | Type | Req | Description |
|---|---|---|---|
| contribute | boolean | yes | true to allow anonymized deltas to leave the box; false to stop |
No output schema declared.
{"contribute":true} stack_audit Stack Audit ~62
The burn report: monthly total, active paid tools, trials converting soon, the unused list (commitment silence, honestly labeled), category overlaps, price drift.
| Name | Type | Req | Description |
|---|---|---|---|
| unused_days | integer | – | days of silence before a tool counts as unused; default 45 |
No output schema declared.
{} sweep_finish Finish a Sweep ~98
Close a sweep and file its coverage record, DERIVED from the tally: scanned, matched, the unmatched list, attributed amount, window and addresses all come off the ledger of what you actually reported, so the books balance by construction and nobody restates a number from memory. A finished sweep refuses further batches — a new window is a new sweep_id.
| Name | Type | Req | Description |
|---|---|---|---|
| sweep_id | string | yes | the sweep to close — the same id every batch carried |
No output schema declared.
{"sweep_id":"sweep_2026-08"} sweep_tally Sweep Tally ~245
THE SWEEP'S RUNNING COUNT — use this while executing SWEEP.md instead of counting in your head. Report every message you read, in batches, each with its message_id and exactly one bucket: matched (include the entry; it is written to the tab for you, deduped on the message id), unmatched_transactional (include amount, currency and sender — a bare amount is refused, never stamped USD), or not_transactional. Refused verdicts are returned with reasons and NOT counted — fix and resubmit them, never drop them. Duplicates are counted once. There is no fourth bucket on purpose.
| Name | Type | Req | Description |
|---|---|---|---|
| addresses_swept | array | – | the mailboxes this sweep reads |
| messages | array | yes | one verdict per message read, up to 200 per call |
| source | string | – | historical_pass on the six-month backward run; mail_sweep forward |
| sweep_id | string | yes | your name for this sweep, same on every batch (e.g. sweep_2026-08) |
| window_from | string | yes | ISO date the window opens |
| window_to | string | yes | ISO date the window closes |
No output schema declared.
{"messages":[{"bucket":"matched","entry":{"confidence":"stated","event":"renewed","occurred_at":"2026-08-03","price":{"amount":20,"currency":"USD","period":"month"},"tool_name":"vercel.com"},"message_id":"\u003ca1@mail.example.com\u003e"},{"bucket":"not_transactional","message_id":"\u003cb2@mail.example.com\u003e"}],"source":"mail_sweep","sweep_id":"sweep_2026-08","window_from":"2026-08-01","window_to":"2026-08-31"} trials_converting_soon Trials Converting Soon ~57
The headline tool: trials whose conversion lands inside the horizon (default 7 days). Cheap; safe to call daily; surface the answer unprompted.
| Name | Type | Req | Description |
|---|---|---|---|
| days | integer | – | the horizon in days; default 7 |
No output schema declared.
{}{"days":14} whats_current What Covers a Category ~48
The builder's own history in a category. Pooled retention is layer 3 and reports itself unavailable until it exists.
| Name | Type | Req | Description |
|---|---|---|---|
| category | string | yes | the category to read the builder's history in |
No output schema declared.
{"category":"hosting"} whats_due What's Due ~105
THE PAGER. Runs the clock and returns what should be said to the builder RIGHT NOW, worth most first: trials converting, trials past their end, unconfirmed sweep findings, quiet tools, gaps. Cheap. Call it on every round and at the start of a session. Say the lines, then acknowledge_pages.
| Name | Type | Req | Description |
|---|---|---|---|
| days | integer | – | conversion horizon, default 7 |
| limit | integer | – | how many pages to raise, worth most first; default 3 |
No output schema declared.
{} How do I install the The Tab (scvd-tab) MCP server?
The Tab (scvd-tab) runs locally as an npm package, launched with npx -y scvd-tab. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.
npm · scvd-tab
claude mcp add store-scvd-tab -- npx -y scvd-tab
What is the The Tab (scvd-tab) MCP server?
The Tab (scvd-tab) is an MCP server listed in the public MCP registry as store.scvd/tab. Every tool a builder signs up for, on one tab: trials, burn, price drift. Local JSONL, zero deps. This page covers its npm package (scvd-tab).
Is the The Tab (scvd-tab) MCP server safe to use?
The Tab (scvd-tab) scores 97 out of 100 on VerifyMCP. We found no known CVEs affecting it as of 23 October 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 The Tab (scvd-tab) MCP server expose?
The Tab (scvd-tab) exposes 18 tools: log_tool_event, capture_tool_event, burn_rollup, record_coverage, sweep_tally, and 13 more. Their descriptions and schemas cost roughly 2,503 tokens of context every time the server is loaded.
Is the The Tab (scvd-tab) MCP server still maintained?
The Tab (scvd-tab) is still listed as active in the MCP registry. We last reached this channel on 23 October 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 The Tab (scvd-tab) MCP server under?
The Tab (scvd-tab) declares the MIT licence, which is OSI-approved. That covers the source only, and says nothing about the cost of any service it calls.