# KarmoLab (npm · karmolab-mcp)

MCP server for what LLMs get wrong: exact hashes, real randomness, and Korean rules.

- Trust score: 75/100 (medium)
- Registry status: active
- Liveness: live
- Owner verified: no
- Last scored: 2026-08-14

## Components

- npm · `karmolab-mcp`: 75/100 (this document), [markdown](https://verifymcp.io/servers/mascari4615-karmolab-mcp/karmolab-mcp.md), [page](https://verifymcp.io/servers/mascari4615-karmolab-mcp/karmolab-mcp)

## Channel facts

- Registry: `npm`
- Package: `karmolab-mcp`
- Version: `0.1.1`
- Transport: `stdio`

## Trust breakdown

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. Scores are 0–100 per category. Scoring method: https://verifymcp.io/docs/scoring (what has changed: https://verifymcp.io/docs/scoring/changelog)

Scored 2026-08-14.

- **Supply Chain Security**: 100/100
  - No malware found by supply-chain analysis.
  - No known CVEs affecting this package version or its production dependencies.
  - No install/post-install scripts declared.
  - No production dependencies, so there is no dependency health to assess.
- **Provenance & Transparency**: 97/100
  - Source repository is publicly reachable at the declared URL.
  - Cryptographically verified build provenance (signed, bound to mascari4615/mascari4615.github.io).
  - Clear OSI-approved license (MIT).
  - Actively maintained (last published 4 days ago).
  - Disclosure check failed: no security disclosure policy was found in the source repository.
- **Schema Quality & AI Usability**: 71/100
  - AI-judged instruction clarity (good).
  - Tool/resource definitions use about 3900 tokens (~86/item across 45 items; 45 tools + 0 resources), lean.
  - Usage-examples check failed: none of the tools include examples.
- **Stability & Change Management**: 0/100
  - Stability not yet verified: not enough scan history yet (needs a 30-day window).
- **Tool Coverage**: 67/100
  - 100% of tools have a non-trivial description (not blank, and not just the tool's name).
  - 0% of tool parameters carry a description.
- **Capabilities**: 100/100
  - Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.

**Unverified: 1 category.** A category scored 0 because we could not verify it: a data source with nothing on this package, evidence we could not reach, or a check we could not run. We only credit what we can confirm.

## Install

### Claude

```bash
claude mcp add mascari4615-karmolab-mcp -- npx -y karmolab-mcp
```

### Codex

```bash
codex mcp add mascari4615-karmolab-mcp -- npx -y karmolab-mcp
```

### opencode

```json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "mascari4615-karmolab-mcp": {
      "type": "local",
      "command": [
        "npx",
        "-y",
        "karmolab-mcp"
      ],
      "enabled": true
    }
  }
}
```

### OpenClaw

```bash
openclaw mcp add mascari4615-karmolab-mcp --command npx --arg -y --arg karmolab-mcp
```

### Hermes

```yaml
mcp_servers:
  mascari4615-karmolab-mcp:
    command: "npx"
    args: ["-y", "karmolab-mcp"]
```

### Other

```json
{
  "mcpServers": {
    "mascari4615-karmolab-mcp": {
      "command": "npx",
      "args": [
        "-y",
        "karmolab-mcp"
      ]
    }
  }
}
```

## Changelog

Every change recorded for this component, newest first. Days that predate change tracking, or that we cannot explain, say so: "we were watching and nothing happened" and "we were not watching" are different claims.

### 2026-08-11 (score 75, +5)

- [functional] We updated how we score, so this day's move reflects our rubric, not a change to the server

### 2026-08-09 (score 70)

First indexed and scored.

## MCP tools (45)

### `base64_encode` (~65 tokens)

Encode text to Base64. Handles non-ASCII via UTF-8, so Korean does not break (plain btoa does). / 텍스트를 Base64 로. 한글 안 깨짐.

Input parameters:

- `text` (string, required)
- `urlSafe` (boolean)

### `base64_decode` (~43 tokens)

Base64 를 텍스트로 되돌린다. URL-safe 표기와 빠진 = 채움도 함께 처리한다.

Input parameters:

- `code` (string, required)

### `birth_info` (~91 tokens)

From a birth date: the three Korean ages (international / year-age / traditional), zodiac, star sign, weekday born, days lived, next birthday. Korea still uses all three ages in different laws, so all three are returned. / 한국식 나이 3종·띠·별자리·태어난 요일·산 날수·다음 생일.

Input parameters:

- `date` (string, required)

### `bizno_check` (~92 tokens)

Validate a Korean business registration number (10 digits) or corporate registration number (13 digits) against its check-digit rule. Format only — it cannot tell you whether the number is actually registered (that needs the NTS lookup). / 한국 사업자등록번호·법인등록번호가 검증 숫자 규칙에 맞는지 계산한다. 형식만 본다.

Input parameters:

- `number` (string, required)

### `charcount_count` (~102 tokens)

Count text every way at once — with/without spaces, words, sentences, lines, paragraphs, UTF-8 and EUC-KR bytes, Korean manuscript pages, and a breakdown by script. Emoji count as one character as a person sees them (naive .length says 2–7 for one emoji). / 글자수를 여러 기준으로 한 번에. 이모지는 보이는 대로 한 글자.

Input parameters:

- `text` (string, required)

### `charcount_fits` (~73 tokens)

Check whether text fits a limit, choosing the basis (with/without spaces, or bytes) — forms disagree on which one they mean. / 한도에 들어가는지. 기준을 골라서.

Input parameters:

- `basis` (string)
- `limit` (number, required)
- `text` (string, required)

### `csvjson_toJson` (~99 tokens)

CSV 를 JSON 배열로 바꾼다. 따옴표 안의 쉼표·줄바꿈을 규칙대로(RFC 4180) 처리한다. delimiter 기본은 쉼표, coerce 를 켜면 숫자/true/false/null 을 그 타입으로 바꾼다.

Input parameters:

- `coerce` (boolean)
- `csv` (string, required)
- `delimiter` (string)

### `csvjson_toCsv` (~60 tokens)

JSON 배열을 CSV 로 바꾼다. 값에 쉼표·따옴표·줄바꿈이 있으면 규칙대로 감싼다.

Input parameters:

- `delimiter` (string)
- `json` (string, required)

### `datecalc_shift` (~102 tokens)

Add or subtract days/weeks/months/years. Jan 31 + 1 month clamps to the last day of February instead of rolling over into March, which is what naive date math does. / 날짜 더하기·빼기. 없는 날은 그 달 마지막 날로.

Input parameters:

- `date` (string, required)
- `days` (number)
- `months` (number)
- `weeks` (number)
- `years` (number)

### `datecalc_between` (~75 tokens)

Days, weeks and weekdays between two dates — reported both inclusive and exclusive of the end date, because that off-by-one is the whole argument. / 두 날짜 사이 일수·주수·평일수. 끝날 포함/제외 둘 다.

Input parameters:

- `end` (string, required)
- `start` (string, required)

### `datecalc_dday` (~80 tokens)

Days until (or since) a target date. Reports both the D-Day convention (start day counts as day 1) and the plain difference — they differ by one and that is where the confusion lives. / D-Day. 관례 계산과 단순 차이를 함께.

Input parameters:

- `date` (string, required)
- `today` (string)

### `epoch_toDate` (~78 tokens)

Turn a Unix timestamp into a readable time, detecting seconds / milliseconds / microseconds / nanoseconds from the digit count — guessing wrong lands you in 1970 or the year 55000. / 유닉스 타임스탬프 → 사람이 읽는 시각. 단위 자동 판별.

Input parameters:

- `ts` (string, required)

### `epoch_toStamp` (~42 tokens)

ISO 8601 시각을 유닉스 타임스탬프(초)로 바꾼다.

Input parameters:

- `date` (string, required)

### `filehash_verify` (~88 tokens)

Compare two checksum strings. Publishers hand out values in mixed case, with a `sha256:` prefix, or wrapped across lines — comparing those literally reports "different" for identical files. / 체크섬 두 개를 맞춰 본다. 대문자·머리말·줄바꿈을 정리해서.

Input parameters:

- `actual` (string, required)
- `expected` (string, required)

### `grade_gpa` (~95 tokens)

Korean university GPA from "credits grade" lines, e.g. "3 A+\n3 B0\n2 A-" — credit-weighted, not a plain average. scale = 4.5 (default, the Korean norm) or 4.3. / 학점 가중 평점. scale 45(기본)·43.

Input parameters:

- `courses` (string, required)
- `scale` (string)

### `grade_needed` (~81 tokens)

What average the remaining credits must earn to reach a target GPA — and it says so plainly when even straight A+ cannot get there. / 목표 평점에 필요한 남은 평균. 불가능하면 불가능하다고.

Input parameters:

- `courses` (string, required)
- `future` (number, required)
- `scale` (string)
- `target` (number, required)

### `hangulkey_toKorean` (~93 tokens)

Recover Hangul typed without switching the IME (2-beolsik layout). dkssudgktpdy → 안녕하세요. Not a substitution table — it replays the composition automata (final consonants move to the next syllable when a vowel follows). / 한영키를 안 누르고 친 영문을 한글로 되돌린다.

Input parameters:

- `text` (string, required)

### `hangulkey_toEnglish` (~59 tokens)

Turn Hangul into the 2-beolsik key sequence. 안녕하세요 → dkssudgktpdy. / 한글을 두벌식 자판의 영문 키 나열로.

Input parameters:

- `text` (string, required)

### `hangulkey_auto` (~50 tokens)

Detect the direction and convert. Any Hangul present means Hangul → keys. / 어느 쪽인지 알아서 판단해 반대로 바꾼다.

Input parameters:

- `text` (string, required)

### `hashgen_text` (~152 tokens)

Hash a string to hex — the value an LLM will otherwise invent. Give algo for one, omit for all 7 (MD5, SHA-1, SHA-256, SHA-512, SHA3-512 (FIPS-202), Keccak-512 (pre-standard), RIPEMD-160). SHA3-512 and Keccak-512 are listed separately on purpose: most libraries call Keccak "SHA-3" and the values differ. / 문자열 해시를 16진수로. algo 를 주면 그것만, 안 주면 7종 전부.

Input parameters:

- `algo` (string)
- `text` (string, required)
- `upper` (boolean)

### `interest_deposit` (~83 tokens)

Korean time deposit (simple interest) — maturity interest and the amount actually received, after the 15.4% interest income tax that quoted rates never include. / 정기예금 단리. 이자소득세 15.4% 반영.

Input parameters:

- `amount` (number, required)
- `months` (number, required)
- `rate` (number, required)

### `interest_saving` (~96 tokens)

Korean installment savings (simple interest). Only the early deposits earn a full year, so the real interest is roughly half of total × rate — the single most common money miscalculation here. The gap is shown explicitly. / 정기적금 단리. 「총액 × 연이율」과의 차이를 함께.

Input parameters:

- `monthly` (number, required)
- `months` (number, required)
- `rate` (number, required)

### `interest_loan` (~67 tokens)

Equal-payment loan — monthly payment, total repaid, total interest. / 원리금균등 대출. 월 상환액·총 상환액·총 이자.

Input parameters:

- `amount` (number, required)
- `months` (number, required)
- `rate` (number, required)

### `jamo_split` (~85 tokens)

Split Hangul syllables into initial / medial / final jamo, and extract initials (used for Korean initial-consonant search). Compound finals (ㄳ ㄺ ㅄ) stay whole. / 한글을 초성·중성·종성으로 쪼갠다. 초성 뽑기 포함.

Input parameters:

- `text` (string, required)

### `jamo_join` (~75 tokens)

Recompose a jamo sequence (ㄱㅏㅇ) back into syllables (강) — e.g. filenames that came out of macOS decomposed (NFD). / 자모 나열을 다시 글자로. NFD 로 풀린 파일 이름 되돌리기.

Input parameters:

- `text` (string, required)

### `jamo_initials` (~56 tokens)

Extract only the initial consonants (ㅎㄱ ← 한글) — for building a Korean initial-search index. / 초성만 뽑는다. 초성 검색 색인용.

Input parameters:

- `text` (string, required)

### `loan_schedule` (~123 tokens)

Full amortization schedule. method = equal (equal payment, default) | principal (equal principal) | bullet (interest-only then lump sum). grace = interest-only months, extra = extra paid monthly. / 대출 상환표. 원리금균등·원금균등·만기일시, 거치·추가상환 포함.

Input parameters:

- `amount` (number, required)
- `extra` (number)
- `grace` (number)
- `method` (string)
- `months` (number, required)
- `rate` (number, required)

### `loan_compare` (~71 tokens)

Compare all three repayment methods side by side — total interest and first-month payment, the two numbers that actually decide the choice. / 세 상환 방식 비교. 총이자·첫 달 상환액.

Input parameters:

- `amount` (number, required)
- `months` (number, required)
- `rate` (number, required)

### `passgen_strength` (~134 tokens)

Rate a password by guessing cost, not by character classes. The usual "has upper, lower, digit, symbol" rule passes Password1! and fails correcthorsebatterystaple — exactly backwards. This scores common words, leet substitutions, sequences, repeats, years and keyboard runs as single cheap chunks, and reports the LOWER of that and the naive pool entropy, plus crack time at offline (1e10/s) and online (100/s) rates. / 비밀번호 세기를 「뚫는 비용」으로 잰다. 글자 종류 규칙 X.

Input parameters:

- `password` (string, required)

### `qrgen_svg` (~76 tokens)

Make a QR code as SVG — no external API, so the contents never leave the machine. level = L/M/Q/H error correction (default M), size in pixels. / 내용을 QR SVG 로. 외부 API 없음.

Input parameters:

- `level` (string)
- `size` (number)
- `text` (string, required)

### `qrgen_wifi` (~97 tokens)

WiFi 접속 QR 을 만든다. 스캔하면 그 네트워크에 바로 붙는다. encryption = WPA(기본) · WEP · nopass. 비밀번호에 ; : , \ 가 있어도 규칙대로 처리한다.

Input parameters:

- `encryption` (string)
- `hidden` (boolean)
- `password` (string)
- `size` (number)
- `ssid` (string, required)

### `qrgen_contact` (~68 tokens)

Make a contact (vCard) QR — scanning it adds the contact directly. / 연락처(vCard) QR.

Input parameters:

- `email` (string)
- `name` (string, required)
- `org` (string)
- `size` (number)
- `tel` (string)

### `tableconv_convert` (~99 tokens)

Convert a table between formats, detecting the input (Excel paste / CSV / Markdown) on its own. Column widths count CJK characters as two cells, so aligned Markdown actually lines up. to = markdown (default), csv, tsv, json. / 표 꼴 변환. 들어온 꼴은 스스로 알아본다.

Input parameters:

- `align` (boolean)
- `table` (string, required)
- `to` (string)

### `timecalc_shift` (~86 tokens)

Add or subtract a duration from a time, rolling into the next day past 24:00. duration accepts "1:25", "85m" or "1.5h". / 시각에 시간 더하기·빼기. 자정 넘김 처리.

Input parameters:

- `duration` (string, required)
- `minus` (boolean)
- `start` (string, required)

### `timecalc_sum` (~77 tokens)

Sum durations (timesheets). One per line; "7:45", "8h" and "90m" can be mixed — base-60 addition is where hand-tallied hours go wrong. / 시간 합계. 한 줄에 하나, 표기 섞여도 됨.

Input parameters:

- `times` (string, required)

### `unitconv_convert` (~150 tokens)

Convert units, including Korean/Japanese traditional ones — pyeong(평), geun(근), don(돈), nyang(냥), doe(되), mal(말), ja(자), ri(리). Models answer these with rounded folklore (1 pyeong is 3.3057851 m², not 3.3 — on an apartment that gap is visible money). No currency here: that would need live rates. / 단위 변환. 한국·일본 전통 단위 포함. 환율은 없다.

Input parameters:

- `category` (string)
- `from` (string, required)
- `to` (string, required)
- `value` (number, required)

### `unitconv_list` (~31 tokens)

List available units by category. / 쓸 수 있는 단위 목록.

Input parameters:

- `category` (string)

### `uuidgen_generate` (~120 tokens)

Generate IDs from a cryptographic RNG. An LLM asked for a "random" value returns something from its training data — using that as a token or password is a hole. kind = uuid4 (default), uuid7 (sortable by time), ulid, nanoid, password. count, length (nanoid/password), symbols (password). / 암호학적으로 안전한 난수로 ID 생성.

Input parameters:

- `count` (number)
- `kind` (string)
- `length` (number)
- `symbols` (boolean)

### `vat_add` (~89 tokens)

Add Korean VAT to a net amount (net × 1.1). Rounds so that net + VAT equals the total exactly — rounding the three lines separately makes them disagree by a won. / 공급가에 부가세를 더한다. 세 줄이 서로 맞게 반올림.

Input parameters:

- `amount` (number, required)
- `rate` (number)
- `rounding` (string)

### `vat_extract` (~111 tokens)

Extract the net amount and VAT from a VAT-inclusive total (total ÷ 1.1), which is NOT the same as subtracting 10% — that common shortcut gives 99,000 instead of 100,000 for a 110,000 total. / 총액에서 공급가·세액을 빼낸다. 10% 를 빼는 것과 다르다.

Input parameters:

- `amount` (number, required)
- `rate` (number)
- `rounding` (string)

### `wordfreq_count` (~112 tokens)

Word frequency, with Korean particles (을/를/에서는…) stripped so inflected forms collapse. Without that, 도구를 / 도구가 / 도구는 count as three different words and the top list is useless. Also returns repeated two-word phrases. / 낱말 빈도. 한국어 조사를 떼어 같은 말로 묶는다.

Input parameters:

- `particles` (boolean)
- `stopwords` (boolean)
- `text` (string, required)
- `top` (number)

### `workdays_after` (~121 tokens)

N business days after a start date — excluding weekends, public holidays AND substitute holidays. Substitute holidays are a table, not a rule (2025-01-27 was a one-off). Years not in the table are reported as unknown instead of guessed. region defaults to KR (JP/US also available). / 영업일 N일 뒤. 주말 + 공휴일 + 대체공휴일 제외.

Input parameters:

- `days` (number, required)
- `region` (string)
- `saturday` (boolean)
- `start` (string, required)

### `workdays_between` (~78 tokens)

Count business days between two dates, and list which days were skipped and why (a bare number cannot be checked). / 두 날짜 사이 영업일 수. 어떤 날을 뺐는지도 함께.

Input parameters:

- `end` (string, required)
- `region` (string)
- `saturday` (boolean)
- `start` (string, required)

### `worldclock_convert` (~88 tokens)

Convert a time from one zone to another, applying DST as it stood on that date (not as it stands today). Zones are IANA names: Asia/Seoul, America/New_York. / 도시 간 시각 변환. 그 날짜의 서머타임 반영.

Input parameters:

- `from` (string, required)
- `time` (string, required)
- `to` (string, required)

### `worldclock_offset` (~87 tokens)

Offset between two zones for a given date. It will disagree with the number you memorised: DST moves it twice a year, and the two hemispheres do not move together. / 두 시간대 시차. 그 날짜 기준 — 외운 숫자와 다를 수 있다.

Input parameters:

- `date` (string)
- `from` (string, required)
- `to` (string, required)

## Diagnostics

Captured diagnostic sections: Provenance, Dependencies. The full working is on the page: https://verifymcp.io/servers/mascari4615-karmolab-mcp/karmolab-mcp#diagnostics

## Score history

- 2026-08-14: 75
- 2026-08-13: 75
- 2026-08-12: 75
- 2026-08-11: 75
- 2026-08-10: 70
- 2026-08-09: 70

## Links

- npm package: https://www.npmjs.com/package/karmolab-mcp
- Socket report: https://socket.dev/npm/package/karmolab-mcp
- Repository: https://github.com/mascari4615/mascari4615.github.io
- Website: https://blog.mascari4615.com/karmolab/
- Changelog RSS feed: https://verifymcp.io/servers/mascari4615-karmolab-mcp/karmolab-mcp.xml
- Changelog JSON feed: https://verifymcp.io/servers/mascari4615-karmolab-mcp/karmolab-mcp.json
- HTML version of this page: https://verifymcp.io/servers/mascari4615-karmolab-mcp/karmolab-mcp
