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.AronSoto/verbaly

NPM · @VERBALY/MCP

i18n for coding agents: extract, check and translate an app's text, with drafts a person approves

Available components

85 Trust /100

Last scanned (13 hours ago)

Scores higher than 87% of npm servers

Category Developer Tools

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
  • 30 of 105 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 AronSoto/verbaly). View diagnostics → Pass
  • Clear OSI-approved license (MIT).Pass
  • Actively maintained (last published 1 days ago).Pass
  • Publishes a security disclosure policy (SECURITY.md).Pass
Schema Quality & AI Usability82
  • 100% of prompts and resources have a non-trivial description (not blank, and not just the item's name).Pass
  • AI-judged instruction clarity (excellent).Pass
  • Context-footprint check failed: tool/resource definitions use about 1579 tokens (~143/item across 11 items; 9 tools + 2 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 Management17
  • Stability observed for 5 of 30 days with no destabilising changes; credit accrues until the full window elapses.Partial
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
  • 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 9 captured tool definition(s), and no name or description among them implies an irreversible operation.Pass
  • An AI judge read all 10 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
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.

  • 5 Nov 26 +1

    No change was recorded against any check on this day. Stability & Change Management went from 13 to 17. That category is still filling its 30-day observation window: 4 days of observed history at the previous scan, 5 at this one. The score rises as the window fills, whether or not the server changes.

  • 4 Nov 26 +11
    • Known CVEs: unverified → pass ▲ security
    • Dependency health: unverified → 0.88 ▲ functional
  • 3 Nov 26 −11
    • Known CVEs: pass → unverified ▼ security
    • Schema quality: 119 → 143 ▼ functional
    • Dependency health: 0.88 → unverified ▼ functional
    • Schema quality: good → excellent functional
    • Package version: 0.78.0 → 0.79.0 functional
  • 2 Nov 26 +1

    No change was recorded against any check on this day. Stability & Change Management went from 3 to 7. That category is still filling its 30-day observation window: 1 days of observed history at the previous scan, 2 at this one. The score rises as the window fills, whether or not the server changes.

  • 1 Nov 26 +15
    • Tool safety: pass → unverified ▼ security
    • Malware scan: unverified → pass ▲ security
    • Stability: Stability not yet verified: we do not have a sandbox capture of the MCP schema this version of the package serves yet. security
    • Capabilities: pass → unverified ▼ functional
    • Tool coverage: 100 → unverified ▼ functional
    • Schema quality: 100 → unverified ▼ functional
    • Stability: unverified → 0.03 ▲ functional
    • Package version: 0.77.0 → 0.78.0 functional
  • 31 Oct 26 68

    First indexed and scored.

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 5 Nov 2026 · Analysed npm/@verbaly/mcp@0.79.0

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 AronSoto/verbaly
Certificate issuer https://token.actions.githubusercontent.com
Certificate SAN https://github.com/AronSoto/verbaly/.github/workflows/release.yml@refs/heads/develop
Rekor log index 3658719013
Predicate type SLSA build provenance https://slsa.dev/provenance/v1
Subject digest sha512:6dee95ff66b418a91143d80dab64a715d237a7a8a77916cc043b0bb9af546747837b12969273b49f15287855b65949c08d4ea532133e11182667afd5b

Background: How many MCP packages publish verified provenance →

Dependencies 105 packages
Packages resolved 105
Stale 30
Tree resolution Complete

Background: SBOMs and build attestations, explained →

MCP tools · 9 exposed · ~1,481 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
verbaly_doctor ~143

Diagnose a Verbaly project end to end (what `verbaly doctor` does). It checks the config file, the catalogs and their JSON, the bundler plugin for the detected framework, the generated types, files the parser could not read, a t imported from a package that never exports it, orphan keys, and every failure `verbaly check` would report, and it reports them all at once instead of stopping at the first. Run it first when something does not work. Read-only. For the missing or broken translations themselves, use verbaly_missing.

NameTypeReqDescription
rootstring–Project root holding verbaly.config (defaults to the server working directory)
NameTypeReqDescription
entriesarrayyes–
okbooleanyesFalse when an entry is an error, which is when the CLI exits 1

No examples provided.

verbaly_drafts ~138

Every machine translation still waiting for a human, each with the source text and what the provider wrote, so a person can read both and decide. Read-only. Approving is deliberately not a tool here and never will be: a machine translation is unreviewed by definition, so accepting one is `verbaly review --approve`, run by a human. For how many drafts each locale has, verbaly_status is enough; verbaly_missing lists them next to the gate.

NameTypeReqDescription
localesarray–Target locales (default: all)
rootstring–Project root holding verbaly.config (defaults to the server working directory)
NameTypeReqDescription
entriesarrayyes–
totalnumberyes–

No examples provided.

verbaly_extract ~156

Scan the source files, add new messages to the locale catalogs and refresh the generated types (what `verbaly extract` does). It writes the catalogs unless dryRun is set, and with the same code a second run changes nothing. prune also drops keys the code no longer references, translations included, and waits while any source file fails to parse. In a project without Verbaly, run verbaly_init first; for text still hardcoded in JSX, verbaly_wrap.

NameTypeReqDescription
dryRunboolean–Report what would change, write nothing
pruneboolean–Drop keys no longer referenced (deletes their translations)
rootstring–Project root holding verbaly.config (defaults to the server working directory)
NameTypeReqDescription
addedarrayyes–
collisionsarrayyesKeys written with more than one text: every place shows the text of the first site, so give each text its own key
dryRunbooleanyes–
escapedarrayyesPlural or format blocks inside a tagged template, which render as literal text
inCodenumberyesHow many of those messages the code writes as text: 0 when the project keeps its text in the catalog and reads it with t(key)
localesarrayyes–
lockobject–This run created verbaly.lock, moved an older state file (from) into it, or rewrote it whole after a merge conflict (merged): it belongs in git with the catalogs, so tell the user to commit it
messagesnumberyesMessages the source catalog holds after this run
positionalarrayyesMessages that hand a translator a nameless value like {_0}: put the value in a named variable first
prunedarrayyes–
renamedarrayyesTagged templates on t under another name (const tr = useT()): never extracted, so they stay in the source language until the binding is named t
replacedarrayyesSource texts the code wrote over: before is what the catalog said, code is the text that ships. An edit made in the code reads like this too
stateProblemstring–The state file could not be read or written: the catalogs were written, drafts and outdated tracking were not
unparsedarrayyesSource files the parser could not read: their messages are not extracted, and prune drops nothing until they parse

No examples provided.

verbaly_init ~157

Create the config file and the locale catalogs, and detect the bundler or meta-framework so the answer names the package to add and the line to wire (what `verbaly init` does). A file already there is kept, never overwritten, so running it again is safe. Use it when verbaly_doctor finds no config; once the project is set up, verbaly_doctor is the one to run.

NameTypeReqDescription
dirstring–Directory for the catalogs (default: locales)
localesarray–Every locale, source included
rootstring–Project root holding verbaly.config (defaults to the server working directory)
sourceLocalestring–The language you write in (default: en)
NameTypeReqDescription
configFilestringyes–
createdarrayyesFiles written, relative to the project root
foundstring–Catalogs the project already had, which the new config points at
hoststring–Bundler or meta-framework detected from the dependencies
nextarrayyesWhat a human still has to do, in order
refusedarrayyesLocales left out: not a locale tag, and no sure way to fix one
renamedarrayyesLocales written with the hyphen a locale tag takes (pt_BR became pt-BR)
skippedarrayyesFiles already there, left untouched

No examples provided.

verbaly_missing ~212

The gate `verbaly check` runs in CI, as lists: missing translations, unknown keys, keys written with two texts (collisions: every place shows the first text) and translations that cannot render what the source renders. A dropped {param}, a lost rich tag or a flattened plural block is that last kind. Warnings never fail the gate and are listed too: an incomplete plural set for the locale, keys only a translation has (extra), texts the code and the source catalog disagree on (divergent: the text in the code ships) and translations written for an older source text (outdated). With drafts set, it also lists the machine translations awaiting review. Read-only. For counts use verbaly_status, to review drafts with their source text verbaly_drafts, and for setup problems verbaly_doctor.

NameTypeReqDescription
draftsboolean–Also list machine translations awaiting human review
rootstring–Project root holding verbaly.config (defaults to the server working directory)
NameTypeReqDescription
brokenarrayyes–
collisionsarrayyesOne key, several texts: every place shows the first site, so it fails the gate. Give each text its own key
divergentarrayyesThe source catalog says one text and the code another: the code's text ships. Never fails the gate
extraarrayyesKeys only a translation has; files are where the code reads one, which the source language then shows as the key itself. Never fails the gate
missingarrayyes–
okbooleanyesWhether `verbaly check` would pass (warnings never fail it)
outdatedarrayyesTranslations written for an older source text: rewrite them, or a human keeps them with verbaly review --approve. Never fails the gate
stateProblemstring–The state file could not be read, so outdated translations are not listed
unknownarrayyes–
unreviewedarrayyes–

No examples provided.

verbaly_status ~114

Translation coverage of the Verbaly project as numbers per locale: total messages, translated, machine translations awaiting review (drafts), broken, and translations written for an older source text (outdated). It scans the source like verbaly_extract but writes nothing. Read-only. For the entries behind the numbers, use verbaly_missing (what is missing or broken) or verbaly_drafts (each draft with its source text).

NameTypeReqDescription
rootstring–Project root holding verbaly.config (defaults to the server working directory)
NameTypeReqDescription
localesarrayyes–
messagesnumberyesMessages the project has, source catalog plus code
sourcestringyesSource locale
stateProblemstring–The state file could not be read, so drafts and outdated are counted as zero

No examples provided.

verbaly_translate ~183

Fill missing translations with the configured provider (what `verbaly translate` does). The default provider is Claude, which needs @anthropic-ai/sdk and ANTHROPIC_API_KEY. Every new translation is saved as a draft awaiting human review (`verbaly review`), which no tool here can approve. A batch the provider never answers is reported in failed and everything else stays written, so a retry only asks for what is left. dryRun lists what would be translated without calling the provider. To see what is missing first, use verbaly_missing; to save translations you wrote yourself, verbaly_write_drafts.

NameTypeReqDescription
dryRunboolean–List missing entries per locale, call no provider
localesarray–Target locales (default: all)
rootstring–Project root holding verbaly.config (defaults to the server working directory)
NameTypeReqDescription
dryRunbooleanyes–
failedarrayyesBatches the provider never answered, safe to retry
invalidarrayyesRejected: params or tags were not preserved
keptarrayyesWritten on disk by someone else while the provider worked, so left as they were
pendingarrayyesdryRun only: what would be translated
translatedarrayyesSaved as drafts, a human still has to approve them

No examples provided.

verbaly_wrap ~191

Find hardcoded user-visible text in JSX/TSX files and wrap it in a t tagged template so the compiler can extract it (what `verbaly wrap` does). This is how an existing codebase is onboarded, and verbaly_extract then adds the wrapped texts to the catalogs. It only reports unless write is set, and text already wrapped is skipped, so running it again is safe. Text it cannot wrap safely (a sentence split across markup, an expression rendering JSX) is listed as needing a human. A file that does not bind t is never written, because the rewrite would not compile. It comes back in blocked, with whether it is a client component, so you can add the binding and run again.

NameTypeReqDescription
rootstring–Project root holding verbaly.config (defaults to the server working directory)
writeboolean–Apply the rewrites instead of only reporting
NameTypeReqDescription
blockedarrayyes–
changedarrayyesFiles the rewrite touched, or would touch
filesnumberyesJSX/TSX files scanned
skippedarrayyes–
wrappedarrayyes–
writebooleanyes–

No examples provided.

verbaly_write_drafts ~187

Save translations you wrote yourself, so neither a catalog nor the state file is ever edited by hand. Each one is checked the way verbaly_translate checks a provider (params, rich tags and plural cases must survive), written only for keys the source catalog has, and marked as a draft awaiting human review. Existing translations are kept unless overwrite is set, which is how an outdated one gets rewritten. Approving is not a tool here: a human reads the drafts (verbaly_drafts lists them) and runs `verbaly review --approve`.

NameTypeReqDescription
entriesarrayyesThe translations, by catalog key
localestringyesTarget locale, one of the project's non-source locales
overwriteboolean–Replace translations that already exist, for example outdated ones
rootstring–Project root holding verbaly.config (defaults to the server working directory)
NameTypeReqDescription
invalidarrayyesRejected: empty, or the params, tags or plural cases were not preserved
keptarrayyesAlready translated, left as they were (overwrite replaces them)
unknownarrayyesNot in the source catalog, so nothing was written
writtenarrayyesSaved as drafts, a human still has to approve them

No examples provided.

Install

How do I install the io.github.AronSoto/verbaly MCP server?

io.github.AronSoto/verbaly runs locally as an npm package, launched with npx -y @verbaly/mcp. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.

npm · @verbaly/mcp

# add to Claude Code
claude mcp add aronsoto-verbaly -- npx -y @verbaly/mcp
Common questions

What is the io.github.AronSoto/verbaly MCP server?

io.github.AronSoto/verbaly is an MCP server listed in the public MCP registry as io.github.AronSoto/verbaly. i18n for coding agents: extract, check and translate an app's text, with drafts a person approves. This page covers its npm package (@verbaly/mcp).

Is the io.github.AronSoto/verbaly MCP server safe to use?

io.github.AronSoto/verbaly scores 85 out of 100 on VerifyMCP. We found no known CVEs affecting it as of 5 November 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.AronSoto/verbaly MCP server expose?

io.github.AronSoto/verbaly exposes 9 tools: verbaly_init, verbaly_doctor, verbaly_wrap, verbaly_extract, verbaly_status, and 4 more. Their descriptions and schemas cost roughly 1,481 tokens of context every time the server is loaded.

Is the io.github.AronSoto/verbaly MCP server still maintained?

io.github.AronSoto/verbaly is still listed as active in the MCP registry. We last reached this channel on 5 November 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.AronSoto/verbaly MCP server under?

io.github.AronSoto/verbaly declares the MIT licence, which is OSI-approved. That covers the source only, and says nothing about the cost of any service it calls.