MCP servers › io.github.kfireliyahu › emerald
MCP server · registry snapshot 2026-10-23 · last tested 2026-10-23
io.github.kfireliyahu/emerald
The database under the chat: a local SQLite file a model asks for rows, not notes to re-read. — the publisher's description
Summary
io.github.kfireliyahu/emerald is a local MCP server listed in the official MCP registry at version 0.1.6. On 2026-10-23 ProtocolProbe started its published package in an isolated sandbox in read-only mode and read its inventory: 85 tools, 1 resource and 0 prompts.
Record checks
- met: Registry entry is active and says how to run it
- met: Source repository link opens
- met: Repository is not archived
- met: Code pushed to the repository in the 90 days before our check
- met: Repository publishes a security policy (SECURITY.md)
- met: Package names its licence with a standard (SPDX) identifier
- met: The version the registry lists can be installed and is not withdrawn
- not met: npm package carries build provenance (attestation)
- met: No known critical or high advisory in the package or its dependencies
- #3,357 of 15,112 packages by monthly downloads, tied with 5 others
- Not ranked by stars: 2 stars (ranked from 10)
From public records, not a safety rating. Each check with its reason · Is it safe to install?
Key facts
- Runs
- local package
- Transport
- standard input/output
- Package
- npm · listed version current
- License
- AGPL-3.0-only
- Dependencies
- no known high or critical advisories
- Repository
- public
- Tools
- 85
- Described as changing data
- 55 of 85 toolsAI-classified
- Mainly works on
- a databaseAI-classified
- Topic
- data-and-databasesAI-classified
- Last tested
- 2026-10-23
Worth knowing before you connect it
- 55 tools are described as changing something (declare_format, connect_formats, extend_format, …): our AI model's reading of the descriptions, not something we tested. We did not call them.
Each line comes from a section below, with its source and date.
How fresh this is
- Live-tested
- yes, a real session (not a text-only review)
- Last tested
- 2026-10-23
- Mode
- read-only (no tool calls)
- Latest version
- 0.1.6, published 2026-10-20 (registry, as of the 2026-10-23 snapshot)
- First listed version
- 2026-10-18 (earliest version still in the registry; older removed versions would be earlier)
- Version history
- 5 versions listed, 2026-10-18 to 2026-10-20; 5 in the 90 days before the 2026-10-23 snapshot.(versions still listed in the registry only)
Most recent 5 versions
0.1.6· 2026-10-200.1.5· 2026-10-190.1.4· 2026-10-190.1.2· 2026-10-180.1.1· 2026-10-18
- Registry data
- snapshot 2026-10-23
- Package and repository
- checked 2026-10-23
- Engine
- mcp-runtime-engine@0.1.0 · sdk@1.32.0
Changes since the last refresh
New in the registry: not in the list of 2026-10-04, listed on 2026-10-23 with version 0.1.6 (published 2026-10-20).
Source: the official MCP Registry list on 2026-10-04 and on 2026-10-23.
What it is
What does this server offer?
Observed inventoryWhat it mainly works on, as our AI model read its tool descriptions: a database.
55 of 85 tools are described as changing something (creating, editing, deleting, sending or running). For 5 the reading was uncertain, so no mark is shown.
- formatsreads or searches
“What kinds of thing this document holds — every format declared in it, with its columns, their types, units, bounds and enum members, and the prose the author wrote around them.”
Publisher declares: read-only yes · destructive no · open-world no
2 inputs, 1 required
pathstringrequired“Absolute path to a .emd file on this machine.”formatstring“One declared format by name, for its full column list.”
- declare_formatcreates or changes datadescribed as changing data
“Bring a **new** kind of thing into a document: a format, compiled to a real table with real types and checks.”
Publisher declares: read-only no · destructive no · idempotent no · open-world no
13 inputs, 1 required
pathstringrequired“Absolute path to a .emd file on this machine.”formatstring“The name of the format, `snake_case` — `ingredient`.”formatsarray“Several new formats, each `{ format, title, columns, … }`.”titlestring“What a person calls one of these — `Ingredient`.”notesstring“Prose about the format.”columnsarray“The columns, in the order they should read.”claimsarray“What is claimed about one of these, proved or failed on every row.”aggregatesarray“What this format works out from the rows of another that point at it.”constraintsarray“Rules across the columns of one row, each `{ rule, note }` — `rule` is one of `x is required when kind is A, B`, `x is required only when kind is A, B` (and em…”rollupsarray“Figures per month over this format’s rows, each `{ name, works_out, note }`: `sum of minutes by month of done_on or started_on and project where status is DONE…”rule_setsarray“Rows of this format as rules setting a link of another, each `{ name, sets, note }`: `note.topic from target when title matches pattern by kind (EXACT equals, …”computedarray“Computed columns, worked out rather than typed, each `{ name, works_out, note }`: a claim’s expression with no `=` — `price * (1 + vat)`, `amount in g`, `link.…”commitboolean“Write it.”
- connect_formatscreates or changes datadescribed as changing data
“Join two formats this document **already** declares: a `link` column on `format`, so each of its rows belongs to one row of `target` — each `recipe_line` belongs to one `recipe` — and, optionally, a …”
Publisher declares: read-only no · destructive no · idempotent no · open-world no
9 inputs, 3 required
pathstringrequired“Absolute path to a .emd file on this machine.”formatstringrequired“The format that gets the link — the many side, `recipe_line`.”targetstringrequired“The format each row belongs to one of — `recipe`, the one side.”columnstring“The link column’s name, `snake_case`.”requiredboolean“Every row must name one.”notestring“What the link means.”found_bystring“How the link fills itself while empty: `date in period` (this date’s month) or `date on paid_on` (the same day).”aggregateobject“The total `target` keeps of the rows that name it: a `name` in `snake_case`, an `of` — one of sum, count, average, minimum, maximum — a `works_out` expression …”commitboolean“Write it.”
- extend_formatcreates or changes datadescribed as changing data
“Change a format this document **already** declares, as its table does: add `columns`, `claims`, `computed` columns, `unique`, `constraints`, `rollups` and `aggregates` as `declare_format` takes them;…”
Publisher declares: read-only no · destructive yes · idempotent no · open-world no
15 inputs, 2 required
pathstringrequired“Absolute path to a .emd file on this machine.”formatstringrequired“The format to change, by name.”columnsarray“The new columns, after the ones it has.”claimsarray“New claims, each with a `name`, an `expression` with one `=`, an optional `tolerance` and a `note` — as `declare_format` takes them.”uniquearray“Columns it already has that should become unique — refused, naming the repeated values, while two rows share one.”constraintsarray“New row constraints, each `{ rule, note }` as `declare_format` takes them — refused, naming the rows, while any row already breaks one.”rollupsarray“New rollups, as `declare_format` takes them.”rule_setsarray“New rule sets.”computedarray“New computed columns, as `declare_format` takes them.”aggregatesarray“New totals, as `declare_format` takes them.”orderarray“Every column, new ones too, once each, in order.”renameobject“`{ old: new }`.”changearray“Columns it has, named, with what changes: `{ name, type: "enum", values }`.”removearray“Names of columns, claims, totals, computed columns, rollups or rule sets.”commitboolean“Write it.”
- delete_formatdeletesdescribed as changing data
“Remove a declared format: its declaration, its table and **every row in it**.”
Publisher declares: read-only no · destructive yes · idempotent no · open-world no
3 inputs, 2 required
pathstringrequired“Absolute path to a .emd file on this machine.”formatstringrequired“The format to remove, by name.”commitboolean“Remove it.”
- format_rowsreads or searches
“The rows this document holds of one declared format.”
Publisher declares: read-only yes · destructive no · open-world no
10 inputs, 2 required
pathstringrequired“Absolute path to a .emd file on this machine.”formatstringrequired“The declared format, by name.”matchobject“Column name to the value it must equal.”searchstring“A substring, in every column as shown but yes/no.”columnsarray“Column names to show, as a table — stored or computed.”orderstring“A declared column to sort by.”descendingboolean“Sort the other way.”limitnumber“Rows to return.”offsetnumber“Rows to skip first — the `offset` a cut-short answer hands back for the rest.”valuesstring“A column: each value it holds and how many rows, under the other filters.”
- show_formatreads or searches
“Shows the person one declared format as the app draws it — its table, or its board, roadmap or ready-to-start list when the format has one; or the agenda, every dated format’s rows from today — in th…”
Publisher declares: read-only yes · destructive no · open-world no
6 inputs, 1 required
pathstringrequired“Absolute path to a .emd file on this machine.”formatstring“The declared format, by name.”viewstring“Which of the format’s views to open on.”matchobject“Column name to the value it must equal.”searchstring“A substring, in every column as shown but yes/no.”columnsobject“Columns its lines draw, by format: `{unit:[title,state]}`.”
- format_problemsreads or searches
“What the engine can see is wrong in a format’s rows, without a rule anybody wrote: a link empty where most rows fill it, rows the same in every column, claims failed or unchecked.”
Publisher declares: read-only yes · destructive no · open-world no
2 inputs, 1 required
pathstringrequired“Absolute path to a .emd file on this machine.”formatsarray“By name.”
“Every row of every format, and the rest of the file, that holds any of `terms`: each hit by format, row and column, columns searched as shown.”
Publisher declares: read-only yes · destructive no · open-world no
3 inputs, 1 required
pathstringrequired“Absolute path to a .emd file on this machine.”termsarray“Words or phrases, any case, up to 50.”denyliststring“Instead of `terms`: a denylist’s absolute path, `literal==>x` or `regex:pattern==>x` a line.”
“Call first.”
Publisher declares: read-only yes · destructive no · open-world no
1 input, 1 required
pathstringrequired“Absolute path to a .emd file on this machine.”
- format_rollupreads or searches
“A rollup a format declares, run: a figure per month, and per linked row.”
Publisher declares: read-only yes · destructive no · open-world no
6 inputs, 2 required
pathstringrequired“Absolute path to a .emd file on this machine.”formatstringrequired“The declared format, by name.”rollupstring“By name; optional when there is one.”fromstring“First month, `YYYY-MM`.”tostring“Last month, `YYYY-MM`.”limitnumber“Groups.”
“Run a rule set over every row it sets — a write applies it by itself.”
Publisher declares: read-only no · destructive no · idempotent yes · open-world no
5 inputs, 2 required
pathstringrequired“Absolute path to a .emd file on this machine.”formatstringrequired“The format whose rows are the rules — or, with `link`, the one the link is on.”rule_setstring“By name; optional when there is one.”linkstring“A link column found by a date (`found_by`): fill the rows where it is empty.”commitboolean“Write it.”
Show 73 more tools
- record_format_rowscreates or changes datadescribed as changing data
“Write rows into a declared format — **a list of them in one call**.”
Publisher declares: read-only no · destructive no · idempotent no · open-world no
4 inputs, 3 required
pathstringrequired“Absolute path to a .emd file on this machine.”formatstringrequired“The declared format, by name.”rowsarrayrequired“One object per row, keyed by declared column name.”commitboolean“Write it.”
- update_format_rowscreates or changes datadescribed as changing data
“Change columns of rows already stored — **a list of edits in one call**.”
Publisher declares: read-only no · destructive no · idempotent yes · open-world no
4 inputs, 3 required
pathstringrequired“Absolute path to a .emd file on this machine.”formatstringrequired“The declared format, by name.”editsarrayrequired“One entry per row.”commitboolean“Write it.”
- delete_format_rowsdeletesdescribed as changing data
“Remove rows from a declared format by id — **a list of them in one call**.”
Publisher declares: read-only no · destructive yes · idempotent no · open-world no
4 inputs, 3 required
pathstringrequired“Absolute path to a .emd file on this machine.”formatstringrequired“The declared format, by name.”idsarrayrequired“Row ids, as `format_rows` printed them.”commitboolean“Remove them.”
- claim_unitscreates or changes datadescribed as changing data
“In a document that keeps the `development` pack, take units by `ref`: `planned` to `in_progress` with `taken_by`, the git `branch` they are taken on and `started` (default today), the batch refused u…”
Publisher declares: read-only no · destructive no · idempotent no · open-world no
7 inputs, 3 required
pathstringrequired“Absolute path to a .emd file on this machine.”unitsarrayrequired“Refs, up to 50.”taken_bystringrequired“Who takes them: the host’s name for its session.”branchstring“The git branch they are taken on.”startedstring“`YYYY-MM-DD`; today if left out.”take_overstring“The `taken_by` whose claim this replaces, for units already in progress.”commitboolean“Write it.”
- land_unitscreates or changes datadescribed as changing data
“In a document that keeps the `development` pack: a unit’s closing pass in one call, for a list of units by `ref`: their new `decisions` (date, milestone, scope and `state: live` default to the unit’s…”
Publisher declares: read-only no · destructive no · idempotent no · open-world no
4 inputs, 1 required
pathstringrequired“Absolute path to a .emd file on this machine.”unitsarray“Up to 50.”inboxarray“Inbox row ids of landing proposals, or `{id, other_branch}`.”commitboolean“Write it.”
- dispatch_planreads or searches
“In a document that keeps the `development` pack, before handing units out: for unit refs (every ready unit if left out), which can run at once and which share a path in their `paths` — one per line —…”
Publisher declares: read-only yes · destructive no · open-world no
2 inputs, 1 required
pathstringrequired“Absolute path to a .emd file on this machine.”unitsarray“Refs, up to 50.”
- record_unitscreates or changes datadescribed as changing data
“Teach this document a unit it does not know — `slice`, `IU`, a tablespoon that is 20 ml in this kitchen.”
Publisher declares: read-only no · destructive no · idempotent yes · open-world no
4 inputs, 1 required
pathstringrequired“Absolute path to a .emd file on this machine.”unitsarray“One object per unit.”currencystring“The document’s currency, a three-letter code: `ILS`.”commitboolean“Write it.”
- read_onto_formatcreates or changes datadescribed as changing data
“Read what the user already keeps onto a declared format: any .csv, .xlsx (or .xls) or .json of rows, a file row per table row; or **a folder of Markdown notes**, a note per row: `title`, `file`, each…”
Publisher declares: read-only no · destructive yes · idempotent yes · open-world no
16 inputs, 1 required
pathstringrequired“Absolute path to a .emd file on this machine.”formatstring“The declared format to read onto, by name.”filestring“Absolute path to the file to read: one of .xlsx, .xls, .csv, a .json file of rows (an array of objects, or an object holding one), a Markdown note (.md), or **…”filesarray“Instead of `format` and `file`: each `{ file, format }`, plus that file’s own columns.”sheetstring“Which sheet, or key of a .json object; defaults to the first.”recursiveboolean“A folder of notes: its subfolders’ notes too (not a hidden one), with a `folder` column, the path under it.”header_rownumber“Force the header row, from 0, when the guess is wrong — exports often have a preamble.”date_orderstring“How a written date is ordered: one of dmy, mdy, ymd.”columnsobject“Column number → key of the format, from what the user confirmed, or → null to read nothing from that column.”fixedobject“Key → one value for every row of this file.”separatorsobject“Key → what splits one cell into several members, for a column holding several of a list (`enums`): `{ "tags": "," }` reads `vegan, quick` as two.”headerobject“`{ format, link, cells, fixed }`: the one row of another format this file writes and every line links to through `link`.”itemsstring“"list" or "table": a folder’s list items or table rows as rows of `format`, each linked to its note’s row (read the notes in the same `files`, or before).”understring“With `items`: only those under this heading.”remove_goneboolean“Read again: remove rows whose line is gone (else named, kept).”commitboolean“Write it.”
- supersede_readingdeletesdescribed as changing data
“Take back the rows one file wrote onto a declared format — **exactly those rows and no others**.”
Publisher declares: read-only no · destructive yes · idempotent no · open-world no
4 inputs, 2 required
pathstringrequired“Absolute path to a .emd file on this machine.”formatstringrequired“The declared format, by name.”readingstring“The reading to take back, by id.”commitboolean“Do it.”
- readerscreates or changes datadescribed as changing data
“List a declared format’s readers — one per kind of file it has read — or name and forget them.”
Publisher declares: read-only no · destructive yes · idempotent no · open-world no
5 inputs, 2 required
pathstringrequired“Absolute path to a .emd file on this machine.”formatstringrequired“The format, by name.”renamearray“`{ reader, name }`, by id; an empty name restores the file’s.”forgetarray“Reader ids.”commitboolean“Do it.”
- keep_copycreates or changes datadescribed as changing data
“Backs the document up now: a copy as it is, in Emerald’s folder, named for what it comes before (`work.before-20261006T120512-cleanup.emd`), and says where.”
Publisher declares: read-only no · destructive no · idempotent no · open-world no
2 inputs, 1 required
pathstringrequired“Absolute path to a .emd file on this machine.”beforestring“What it comes before, in a few words: `the cleanup`.”
- store_document_ascreates or changes datadescribed as changing data
“Writes the document again as `text` (diffs in git) or as `sqlite` bytes, and every later write keeps that shape — the app’s Save as text.”
Publisher declares: read-only no · destructive no · idempotent yes · open-world no
3 inputs, 2 required
pathstringrequired“Absolute path to a .emd file on this machine.”asstringrequired“How the file is stored from now on.”commitboolean“Write it.”
- arrange_viewscreates or changes datadescribed as changing data
“How the app shows a format: on its entry, a column’s `show_as`, `header` line and the `order`; a board’s lanes; a table column’s `width`; a column’s `setting` in a roadmap, a ready list or a start-he…”
Publisher declares: read-only no · destructive no · idempotent yes · open-world no
3 inputs, 2 required
pathstringrequired“Absolute path to a .emd file on this machine.”settingsarrayrequired“Up to 200.”commitboolean“Write it; omit for the dry run.”
“Create a new .emd document at a path that does not exist yet; never overwrites.”
Publisher declares: read-only no · destructive no · idempotent no · open-world no
2 inputs
pathstring“Full path for the new document, ending in .emd.”packsarray“The packs the document starts with, by id; `[]` for none.”
- keep_packscreates or changes datadescribed as changing data
“Keep packs in an existing document (the Packs screen’s *Keep this pack here*): declares the pack’s formats it lacks, adds missing optional columns to those it holds, renames a column the pack renamed…”
Publisher declares: read-only no · destructive no · idempotent yes · open-world no
3 inputs, 2 required
pathstringrequired“Absolute path to a .emd file on this machine.”packsarrayrequired“The packs to keep, by id.”commitboolean“Keep them.”
- document_inforeads or searches
“Describe an Emerald document (a .emd file): whether this plugin will serve it, the formats it declares with how many rows each holds, and — when it keeps the ledger — its accounts, transactions, cate…”
Publisher declares: read-only yes · destructive no · open-world no
1 input, 1 required
pathstringrequired“Absolute path to a .emd file on this machine.”
- category_treereads or searches
“The document category taxonomy: every category full path (Living → Utilities → Electricity), its id, its kind and its Plan bucket.”
Publisher declares: read-only yes · destructive no · open-world no
2 inputs, 1 required
pathstringrequired“Absolute path to a .emd file on this machine.”include_archivedboolean“Include archived categories.”
- uncategorized_merchantsreads or searches
“The uncategorized backlog, grouped by merchant: how many rows each merchant has, and what the user has already categorized other rows of the same merchant under.”
Publisher declares: read-only yes · destructive no · open-world no
7 inputs, 1 required
pathstringrequired“Absolute path to a .emd file on this machine.”fromstring“Inclusive start of the charge-date range, as YYYY-MM-DD.”tostring“Inclusive end of the charge-date range, as YYYY-MM-DD.”account_idstring“Restrict to one account.”searchstring“Matched against the merchant as written, the normalized merchant, and the provider label.”limitnumber“Merchants to return.”include_amountsboolean“Print what each merchant adds up to.”
- transactionsreads or searches
“A filtered page of the ledger, plus the totals over every matching row — not just the page.”
Publisher declares: read-only yes · destructive no · open-world no
13 inputs, 1 required
pathstringrequired“Absolute path to a .emd file on this machine.”fromstring“Inclusive start of the charge-date range, as YYYY-MM-DD.”tostring“Inclusive end of the charge-date range, as YYYY-MM-DD.”account_idstring“Restrict to one account.”searchstring“Matched against the merchant as written, the normalized merchant, and the provider label.”category_idstring“Restrict to one category.”uncategorizedboolean“Only rows with no category.”include_subcategoriesboolean“Read `category_id` as a parent and include its children.”minnumber“Smallest amount, by magnitude, in major units of the document currency.”maxnumber“Largest amount, by magnitude, in major units of the document currency.”sortstring“One of DATE, CHARGED, MERCHANT, CATEGORY, AMOUNT.”directionstring“ASC or DESC.”limitnumber“Rows to return.”
- month_summaryreads or searches
“One month already added up: income, expenses, balance, savings rate; how each compares with last month, the three-month average and the same month last year; the category breakdown rolled up to paren…”
Publisher declares: read-only yes · destructive no · open-world no
2 inputs, 1 required
pathstringrequired“Absolute path to a .emd file on this machine.”monthstring“The month as YYYY-MM.”
- year_summaryreads or searches
“One year already added up: income, expenses, balance and savings rate; averages over the complete months only; the best and worst month by balance; a month-by-month table where a month with no data r…”
Publisher declares: read-only yes · destructive no · open-world no
2 inputs, 1 required
pathstringrequired“Absolute path to a .emd file on this machine.”yearnumber“Four-digit year.”
- fixed_expensesreads or searches
“The bills the document tracks: what each is expected to cost, its amortized monthly equivalent, its cadence, whether the amount is fixed or variable, what it is matched against in the ledger, and whe…”
Publisher declares: read-only yes · destructive no · open-world no
2 inputs, 1 required
pathstringrequired“Absolute path to a .emd file on this machine.”include_inactiveboolean“Include ended bills.”
- debtsreads or searches
“Every debt with its principal, what has been paid, what is outstanding, how far along it is and when it projects to be paid off — plus the totals and what card installments still commit the user to.”
Publisher declares: read-only yes · destructive no · open-world no
2 inputs, 1 required
pathstringrequired“Absolute path to a .emd file on this machine.”include_closedboolean“Include closed debts in the table.”
“Goals and where the money is: net worth — the one figure Overview shows, with its parts (in the bank, in accounts with holdings, locked, pension and hishtalmut funds, owed) — each goal balance broken…”
Publisher declares: read-only yes · destructive no · open-world no
2 inputs, 1 required
pathstringrequired“Absolute path to a .emd file on this machine.”include_closedboolean“Include closed goals.”
- goal_projectionreads or searches
“What each open goal will hold in N months, by plain addition of the amount Plan puts toward it each month (no interest counted), and what a month would have to be to reach it on its date.”
Publisher declares: read-only yes · destructive no · open-world no
2 inputs, 1 required
pathstringrequired“Absolute path to a .emd file on this machine.”monthsnumber“How many months ahead.”
- debt_projectionreads or searches
“What each open debt will have left in N months, by plain addition of its monthly payment and the extra Plan puts toward it (no interest counted), and when it is paid off with and without the extra.”
Publisher declares: read-only yes · destructive no · open-world no
2 inputs, 1 required
pathstringrequired“Absolute path to a .emd file on this machine.”monthsnumber“How many months ahead.”
- fixed_expense_candidatesreads or searches
“What looks like a recurring bill in the imported transactions but has not been confirmed as one: the merchant, the typical charge and its amortized monthly share, the cadence, how many months it was …”
Publisher declares: read-only yes · destructive no · open-world no
4 inputs, 1 required
pathstringrequired“Absolute path to a .emd file on this machine.”window_monthsnumber“How many months of history to look at, 2–24.”ending_atstring“The newest month of the window, as YYYY-MM.”include_dismissedboolean“Also list the merchants that were said no to.”
- track_fixed_expensescreates or changes datadescribed as changing data
“Turn recurring charges into tracked bills — **several in one call**.”
Publisher declares: read-only no · destructive no · idempotent no · open-world no
5 inputs, 2 required
pathstringrequired“Absolute path to a .emd file on this machine.”expensesarrayrequired“One entry per bill.”window_monthsnumber“The lookback used to re-find the candidates, matching the one you listed them with.”ending_atstring“The newest month of that window, as YYYY-MM.”commitboolean“Default false.”
- dismiss_fixed_expense_candidatescreates or changes datadescribed as changing data
“Record that these merchants are not recurring bills, so the detector stops offering them — to this conversation and to every later one.”
Publisher declares: read-only no · destructive no · idempotent yes · open-world no
3 inputs, 2 required
pathstringrequired“Absolute path to a .emd file on this machine.”merchantsarrayrequired“Normalized merchant names, exactly as `fixed_expense_candidates` printed them.”restoreboolean“Default false.”
“The Plan screen as rows: each plan with what every bill does to it (out of net, part of the split, or ignored) and its buckets — what each is for (a goal, a debt, a category, a fund, an account or no…”
Publisher declares: read-only yes · destructive no · open-world no
2 inputs, 1 required
pathstringrequired“Absolute path to a .emd file on this machine.”plan_idstring“One plan.”
- plan_monthreads or searchesdescribed as changing data
“One plan worked out for one month: net pay, the bills out of net, what is left to split, each bucket’s amount and share, what it actually got lately, when a goal is reached at this rate, money with n…”
Publisher declares: read-only no · destructive no · idempotent no · open-world no
7 inputs, 1 required
pathstringrequired“Absolute path to a .emd file on this machine.”plan_idstring“Ids come from `plans`.”monthstring“The month as YYYY-MM.”only_bucketsarray“Bucket ids from `plans`.”monthsarray“Months as YYYY-MM to give this plan.”back_to_defaultarray“Months as YYYY-MM of this plan to put back on the default plan.”commitboolean“Default false.”
- set_fixed_expense_rolescreates or changes datadescribed as changing data
“For each bill, per plan: `net` (comes out of net pay before the split), `split` (is one share of the split, drawn on the bar) or `ignore` (this plan leaves it out).”
Publisher declares: read-only no · destructive no · idempotent yes · open-world no
3 inputs, 2 required
pathstringrequired“Absolute path to a .emd file on this machine.”rolesarrayrequired“One entry per bill and plan.”commitboolean“Default false.”
“What the Plan screen does to a plan — **a list of entries in one call**.”
Publisher declares: read-only no · destructive yes · idempotent no · open-world no
3 inputs, 2 required
pathstringrequired“Absolute path to a .emd file on this machine.”plansarrayrequired“One entry per plan.”commitboolean“Default false.”
- edit_fixed_expensescreates or changes datadescribed as changing data
“Change bills that exist — **a list in one call**.”
Publisher declares: read-only no · destructive yes · idempotent yes · open-world no
3 inputs, 2 required
pathstringrequired“Absolute path to a .emd file on this machine.”editsarrayrequired“One entry per bill.”commitboolean“Default false.”
- paychecksreads or searches
“Every paycheck recorded in the document — gross, net, the employer’s own contributions, total compensation, the effective tax rate, what payroll put away, and whether each itemization reconciles to i…”
Publisher declares: read-only yes · destructive no · open-world no
3 inputs, 1 required
pathstringrequired“Absolute path to a .emd file on this machine.”limitnumber“How many paychecks to list, newest salary month first.”include_linesboolean“Also print each listed paycheck’s itemization, line by line.”
- record_paycheckscreates or changes datadescribed as changing data
“Write paychecks into the document — **several in one call**, one entry per paycheck.”
Publisher declares: read-only no · destructive no · idempotent no · open-world no
3 inputs, 2 required
pathstringrequired“Absolute path to a .emd file on this machine.”paychecksarrayrequired“One entry per paycheck.”commitboolean“Default false.”
- set_deduction_typescreates or changes datadescribed as changing data
“Everything the deduction types screen does, for **several types in one call**: **make** a type (its name, what the paycheck calls it, its kind), **rename** one, change its kind, **remove** one, put t…”
Publisher declares: read-only no · destructive yes · idempotent no · open-world no
4 inputs, 1 required
pathstringrequired“Absolute path to a .emd file on this machine.”typesarray“One entry per deduction type, up to 60 in a call.”orderarray“Types by id or by name — the names they will have after this call, new ones included.”commitboolean“Default false.”
- fundsreads or searches
“Every pension, study fund, provident fund and managers’ insurance the document tracks: the latest transcribed balance and how old it is, the management fee as stated and as measured against what was …”
Publisher declares: read-only yes · destructive no · open-world no
3 inputs, 1 required
pathstringrequired“Absolute path to a .emd file on this machine.”fund_idstring“Narrow to one fund and add its working — readings, returns, and the expected-versus-actual table behind the deposit verdict.”include_archivedboolean“Include archived funds.”
- record_fund_readingscreates or changes datadescribed as changing data
“Transcribe what a pension, hishtalmut, provident or managers’-insurance report says into the document — **several readings in one call**.”
Publisher declares: read-only no · destructive no · idempotent no · open-world no
3 inputs, 2 required
pathstringrequired“Absolute path to a .emd file on this machine.”readingsarrayrequired“One entry per reading.”commitboolean“Default false.”
- create_goalscreates or changes datadescribed as changing data
“Add goals — **several in one call**.”
Publisher declares: read-only no · destructive no · idempotent no · open-world no
3 inputs, 2 required
pathstringrequired“Absolute path to a .emd file on this machine.”goalsarrayrequired“One entry per goal.”commitboolean“Default false.”
- record_depositscreates or changes datadescribed as changing data
“Record money moving in a goal — **several in one call**.”
Publisher declares: read-only no · destructive no · idempotent no · open-world no
3 inputs, 2 required
pathstringrequired“Absolute path to a .emd file on this machine.”depositsarrayrequired“One entry per movement.”commitboolean“Default false.”
- set_place_accountscreates or changes datadescribed as changing data
“Say which account each place on Net worth is — the bank account, the broker, the savings account whose statements show its money — **several in one call**.”
Publisher declares: read-only no · destructive no · idempotent yes · open-world no
3 inputs, 2 required
pathstringrequired“Absolute path to a .emd file on this machine.”linksarrayrequired“One entry per place.”commitboolean“Default false.”
- record_holding_readingscreates or changes datadescribed as changing data
“Write what a statement printed each holding was worth on a day — **a list in one call**.”
Publisher declares: read-only no · destructive no · idempotent no · open-world no
3 inputs, 2 required
pathstringrequired“Absolute path to a .emd file on this machine.”readingsarrayrequired“One entry per holding and day.”commitboolean“Default false.”
- set_goal_deposit_categoriescreates or changes datadescribed as changing data
“Say what feeds each goal, **several in one call**.”
Publisher declares: read-only no · destructive no · idempotent yes · open-world no
3 inputs, 2 required
pathstringrequired“Absolute path to a .emd file on this machine.”goalsarrayrequired“One entry per goal.”commitboolean“Default false.”
- set_cushioncreates or changes datadescribed as changing data
“Set the cushion.”
Publisher declares: read-only no · destructive no · idempotent yes · open-world no
5 inputs, 1 required
pathstringrequired“Absolute path to a .emd file on this machine.”monthsnumber“How many months of bills, above 0 and at most 24, to two places.”bucketsarray“Plan buckets to count in the cushion, or to stop counting.”accountsarray“Bank accounts whose balance counts toward what is in the bank, or stops counting.”commitboolean“Default false.”
- pause_goalscreates or changes datadescribed as changing data
“Pause goals for a number of months, or start them again, **several in one call**.”
Publisher declares: read-only no · destructive no · idempotent yes · open-world no
3 inputs, 2 required
pathstringrequired“Absolute path to a .emd file on this machine.”goalsarrayrequired“One entry per goal.”commitboolean“Default false.”
- settle_set_asidecreates or changes datadescribed as changing data
“Answer, for a goal, whether money **set aside** (promised to it but still inside the bank) is still there.”
Publisher declares: read-only no · destructive no · idempotent yes · open-world no
3 inputs, 2 required
pathstringrequired“Absolute path to a .emd file on this machine.”goalsarrayrequired“One entry per goal.”commitboolean“Default false.”
- suggest_goal_amountsdescribed as changing data
“Suggest each goal's monthly amount: goals by nearest date (no kind of goal goes first), each taking what gets it there on its date until what Plan has for goals runs out (what they take now plus what…”
Publisher declares: read-only no · destructive no · idempotent no · open-world no
2 inputs, 1 required
pathstringrequired“Absolute path to a .emd file on this machine.”commitboolean“Default false.”
- set_goal_amountscreates or changes datadescribed as changing data
“Set the monthly amount toward a goal, or the extra on a debt: the Plan bucket for it, in the default plan.”
Publisher declares: read-only no · destructive no · idempotent yes · open-world no
3 inputs, 2 required
pathstringrequired“Absolute path to a .emd file on this machine.”amountsarrayrequired“One entry per goal or debt.”commitboolean“Default false.”
- set_opening_balancescreates or changes datadescribed as changing data
“Say what each bank or cash account **held before its first statement**, and the day that stands for everything before — **several in one call**.”
Publisher declares: read-only no · destructive no · idempotent yes · open-world no
3 inputs, 2 required
pathstringrequired“Absolute path to a .emd file on this machine.”accountsarrayrequired“One entry per account.”commitboolean“Default false.”
- create_debtscreates or changes datadescribed as changing data
“Add debts — **several in one call**.”
Publisher declares: read-only no · destructive no · idempotent no · open-world no
3 inputs, 2 required
pathstringrequired“Absolute path to a .emd file on this machine.”debtsarrayrequired“One entry per debt.”commitboolean“Default false.”
- record_debt_paymentscreates or changes datadescribed as changing data
“Record payments against a debt — **several in one call**.”
Publisher declares: read-only no · destructive no · idempotent no · open-world no
3 inputs, 2 required
pathstringrequired“Absolute path to a .emd file on this machine.”paymentsarrayrequired“One entry per payment.”commitboolean“Default false.”
- guide_statusreads or searches
“In a document that keeps the ledger: the places worth setting up, in order — reading statements and paychecks, making the list of categories yours, giving each merchant a category, the bills, the pla…”
Publisher declares: read-only yes · destructive no · open-world no
1 input, 1 required
pathstringrequired“Absolute path to a .emd file on this machine.”
“Give an account a real name and the last 4 digits of its card or number.”
Publisher declares: read-only no · destructive no · idempotent yes · open-world no
5 inputs, 2 required
pathstringrequired“Absolute path to a .emd file on this machine.”account_idstringrequired“The account to change.”namestring“A name the user will recognise, e.g.”last4string“The last four digits, as digits.”kindstring“One of CREDIT_CARD, BANK, CASH, HOLDINGS, if it was created as the wrong one.”
- choose_categoriescreates or changes datadescribed as changing data
“Put categories away, or bring them back.”
Publisher declares: read-only no · destructive no · idempotent yes · open-world no
4 inputs, 1 required
pathstringrequired“Absolute path to a .emd file on this machine.”archive_idsarray“Categories to put away.”restore_idsarray“Archived categories to bring back.”keep_idsarray“Empty document only: every id to keep.”
“Add categories the document does not have — **a list of them in one call**.”
Publisher declares: read-only no · destructive no · idempotent no · open-world no
2 inputs, 1 required
pathstringrequired“Absolute path to a .emd file on this machine.”categoriesarray“One entry per category.”
- edit_categoriescreates or changes datadescribed as changing data
“Change categories that exist — **a list of edits in one call**.”
Publisher declares: read-only no · destructive yes · idempotent no · open-world no
3 inputs, 1 required
pathstringrequired“Absolute path to a .emd file on this machine.”editsarray“One entry per category.”commitboolean“Default false.”
- set_excluded_from_totalscreates or changes datadescribed as changing data
“Leave transactions out of every total — **a list of ids in one call** — or count them again with `excluded: false`.”
Publisher declares: read-only no · destructive no · idempotent yes · open-world no
4 inputs, 2 required
pathstringrequired“Absolute path to a .emd file on this machine.”transaction_idsarrayrequired“Up to 2000 transaction ids, from `transactions`.”excludedboolean“Default true: leave them out.”commitboolean“Default false.”
- set_transaction_notescreates or changes datadescribed as changing data
“Write the note on a transaction — **a list in one call**.”
Publisher declares: read-only no · destructive no · idempotent yes · open-world no
3 inputs, 2 required
pathstringrequired“Absolute path to a .emd file on this machine.”notesarrayrequired“One entry per transaction.”commitboolean“Default false.”
- set_transaction_holdingscreates or changes datadescribed as changing data
“Name the holding a transaction bought or sold, and how much of it — **a list in one call**.”
Publisher declares: read-only no · destructive no · idempotent yes · open-world no
3 inputs, 2 required
pathstringrequired“Absolute path to a .emd file on this machine.”rowsarrayrequired“One entry per transaction.”commitboolean“Default false.”
- transfersreads or searches
“Lists the transfers between two of the person’s own accounts that imports have found: a row leaving one account and the same amount arriving in another within a few days.”
Publisher declares: read-only yes · destructive no · open-world no
2 inputs, 1 required
pathstringrequired“Absolute path to a .emd file on this machine.”answerstring“Which to list.”
- answer_transferscreates or changes datadescribed as changing data
“Answers the pairs `transfers` lists — **a list in one call**.”
Publisher declares: read-only no · destructive no · idempotent yes · open-world no
3 inputs, 2 required
pathstringrequired“Absolute path to a .emd file on this machine.”pairsarrayrequired“One entry per pair.”commitboolean“Default false.”
- count_card_chargescreates or changes datadescribed as changing data
“The card payments in a bank statement for a card this document has no statement of — that month of card spending is otherwise missing.”
Publisher declares: read-only no · destructive no · idempotent yes · open-world no
3 inputs, 1 required
pathstringrequired“Absolute path to a .emd file on this machine.”cardsarray“Last four digits per card, or `unknown`.”commitboolean“Default false.”
- set_no_pay_monthscreates or changes datadescribed as changing data
“Says months had no pay — between jobs, unpaid leave — so no paycheck is missing for them: Home stops asking "No paycheck for …" and `paychecks` stops listing them as gaps.”
Publisher declares: read-only no · destructive no · idempotent yes · open-world no
4 inputs, 2 required
pathstringrequired“Absolute path to a .emd file on this machine.”monthsarrayrequired“Salary months, as YYYY-MM.”no_payboolean“Default true.”commitboolean“Default false.”
- set_card_payerscreates or changes datadescribed as changing data
“Say that a bank merchant pays a credit card — **a list in one call**.”
Publisher declares: read-only no · destructive no · idempotent yes · open-world no
3 inputs, 2 required
pathstringrequired“Absolute path to a .emd file on this machine.”paymentsarrayrequired“One entry per bank merchant.”commitboolean“Default false.”
- skip_merchantscreates or changes datadescribed as changing data
“Set merchants aside in the By merchant queue — **a list in one call** — or put them back with `skip: false`.”
Publisher declares: read-only no · destructive no · idempotent yes · open-world no
4 inputs, 2 required
pathstringrequired“Absolute path to a .emd file on this machine.”merchantsarrayrequired“Normalized merchant names, exactly as `uncategorized_merchants` printed them.”skipboolean“Default true: set them aside.”commitboolean“Default false.”
- assign_categorycreates or changes datadescribed as changing data
“Categorize the transactions with no category — **many merchants in one call**.”
Publisher declares: read-only no · destructive no · idempotent yes · open-world no
3 inputs, 2 required
pathstringrequired“Absolute path to a .emd file on this machine.”assignmentsarrayrequired“One entry per category-and-scope.”commitboolean“Default false.”
- note_merchant_suggestionscreates or changes datadescribed as changing data
“Remember what this conversation suggested for merchants that were **not** categorized — a category the user declined, or a name nobody could identify — so the next conversation does not ask about the…”
Publisher declares: read-only no · destructive no · idempotent no · open-world no
2 inputs, 2 required
pathstringrequired“Absolute path to a .emd file on this machine.”suggestionsarrayrequired“One entry per merchant.”
- create_ruleon 4 other servers
“Create a standing rule that categorizes matching transactions into a category, now and on every future import.”
Publisher declares: read-only no · destructive no · idempotent no · open-world no
11 inputs, 2 required
pathstringrequired“Absolute path to a .emd file on this machine.”category_idstringrequired“The category the rule assigns.”kindstring“One of EXACT_MERCHANT, CONTAINS, REGEX, PROVIDER_CATEGORY, AMOUNT_RANGE, ACCOUNT.”patternstring“What the rule matches on.”namestring“Optional.”account_idstring“Restrict the rule to one account.”amount_minnumber“Restrict by amount, as a magnitude in major units.”amount_maxnumber“Restrict by amount, as a magnitude in major units.”apply_to_existingboolean“Default true: also categorize the transactions it already matches.”commitboolean“Default false.”confirmationstring“The token the preview printed.”
- statement_preview
“Read a card or bank statement (.xlsx, .xls, .csv) and report what is in it: which sheet, where the header row is, what each column looks like and what the app guesses it is, the first rows verbatim, …”
Publisher declares: read-only yes · destructive no · open-world no
6 inputs, 2 required
pathstringrequired“Absolute path to a .emd file on this machine.”filestringrequired“Absolute path to the statement file.”sheetstring“Which sheet, when the file has more than one.”header_rownumber“Force the header row number, when the guess is wrong.”columnsobject“Try columns without importing: column number → role.”amount_conventionstring“One of SIGNED_SINGLE, POSITIVE_IS_CHARGE, SEPARATE_DEBIT_CREDIT.”
- import_statement
“Import a card or bank statement into an account, through the app’s own pipeline: the same parse, the same dedupe by natural key, the same rules applied on commit.”
Publisher declares: read-only no · destructive no · idempotent yes · open-world no
11 inputs, 2 required
pathstringrequired“Absolute path to a .emd file on this machine.”filestringrequired“Absolute path to the statement file.”account_idstring“The account to import into.”new_accountobject“Instead of `account_id`, on a document that has no account for this file yet: the account the statement is for, made on commit — or found, when one of that kin…”sheetstring“Which sheet, when the file has more than one.”header_rownumber“Force the header row number, when the guess is wrong.”columnsobject“Column number → role, from what the user confirmed in `statement_preview`.”amount_conventionstring“One of SIGNED_SINGLE, POSITIVE_IS_CHARGE, SEPARATE_DEBIT_CREDIT.”save_mapping_asstring“Keep these columns as a reader under this name, so the next statement of the same shape imports without asking.”ignore_printed_totalboolean“Import even though the parse disagrees with the total the file prints.”commitboolean“Default false.”
- record_holdings_statement
“Write what a broker’s (or any account with holdings’) statement printed — **the whole file in one call**: its movements onto the account, and its holdings table as dated readings.”
Publisher declares: read-only no · destructive no · idempotent yes · open-world no
12 inputs, 3 required
pathstringrequired“Absolute path to a .emd file on this machine.”filestringrequired“Absolute path to the statement file you read.”account_idstring“The account with holdings.”new_accountstring“Instead of `account_id`: the name of the account to make, e.g.”placestring“The place on Net worth that names the account, when it names none yet — by id or name; made when new.”as_ofstringrequired“The day the holdings table is for, YYYY-MM-DD.”fromstring“The first day of the period the statement printed, when it printed one.”currencystring“Defaults to the document’s currency.”rowsarray“Every movement, in the order printed.”holdingsarray“The holdings table, one entry per holding but the cash.”cashnumber“The cash line of the holdings table, in major units.”commitboolean“Default false.”
- frame_copy
“Not for a model: a view drawn in the conversation calls it with its own key to fetch its document, and any other call is refused.”
Publisher declares: read-only yes · destructive no · open-world no
3 inputs, 2 required
pathstringrequired“Absolute path to a .emd file on this machine.”keystringrequired“The drawn view’s own key.”sincestring“The stamp of the copy the view holds; no copy comes back while it still holds.”
Each quoted sentence is the first sentence of the publisher’s own description. The kind of tool and the “changes data” mark are our AI model’s reading of that description, not something we tested: two differently worded runs had to agree, otherwise no label is shown, and nobody has checked them by hand. A tool without the “changes data” mark is described as only reading, searching or calculating, or the two runs did not agree. No tool was called. Read the publisher’s full description before relying on it. “Publisher declares” lists the hints the server itself sends with the tool (MCP annotations: read-only, destructive, idempotent, open-world); they are the publisher's claims, not checked by us. Inputs are the parameters in the tool's own input schema: name, declared type, whether it is required, and the first sentence of its description. Read 2026-10-23.
How well are its tools described?
Features #4 and #5
How clearly this server's own tool descriptions say what a tool does, and how consistent its tool list is. The first part is an AI model's yes/no reading of each description; the second part is counted. We do not turn it into a grade.
Descriptions
AI reading of each description
- Says what the tool does
- 100% of 80 tools
- Says what it returns
- 42% of 77 tools
- States limits, defaults or errors
- 31% of 54 tools
- Says when to use it
- 100% of 51 tools
- Items covered per tool
- 2.9 of 4 on average
Counted from the listing
- Parameters with a description
- 100% of 357
- Tools with a description
- 100% of 85
- Typical description length
- 583 characters
The tool set
Counted from the listing
- Tools
- 85
- Size of the list
- about 40,846 tokens for an agent to load (characters ÷ 4)
- Naming
- 76 of 85 names use snake_case
AI reading: easy to mix up
No pair found.
The AI items cover 80 of 85 tools: for a tool where two differently worded runs disagreed, that item is left out. They were not checked by hand, and no tool was called. “Easy to mix up” means two tools whose names or descriptions overlap without saying how they differ; the AI found none, comparing tools within groups of 40. We do not rate whether the tool set is complete or whether side effects are spelled out, because our AI reading of those was not reliable enough.
How do I add it to my client?
Config from the registry entry
From the npm package emerald-mcp
Our sandbox started this package on 2026-10-23 (a read-only session: no tool was called).
Add to CursorAn install link in the format Cursor documents, holding the Cursor config below. The command runs the publisher’s code on your machine.
Claude Desktop · claude_desktop_config.json (Settings → Developer → Edit Config)
{
"mcpServers": {
"emerald": {
"command": "npx",
"args": [
"-y",
"emerald-mcp@0.1.6"
]
}
}
}Cursor · .cursor/mcp.json in a project, or ~/.cursor/mcp.json
{
"mcpServers": {
"emerald": {
"command": "npx",
"args": [
"-y",
"emerald-mcp@0.1.6"
]
}
}
}VS Code · .vscode/mcp.json
{
"servers": {
"emerald": {
"type": "stdio",
"command": "npx",
"args": [
"-y",
"emerald-mcp@0.1.6"
]
}
}
}VS Code (command line) · Bash or zsh terminal (macOS, Linux)
code --add-mcp '{"name":"emerald","type":"stdio","command":"npx","args":["-y","emerald-mcp@0.1.6"]}'Claude Code
claude mcp add --transport stdio emerald -- npx -y emerald-mcp@0.1.6
Try it in the MCP Inspector · runs on your machine, opens in your browser · Node 22.19+
npx @modelcontextprotocol/inspector@2.11.0 -- npx -y emerald-mcp@0.1.6
- This runs the publisher's code on your machine (npx). Read its README first.
- The MCP Inspector lists the server's tools, resources and prompts; a tool you call there runs for real.
Built from the server's registry entry with each client's documented format (checked 2026-10-14; the Cursor link and the VS Code command 2026-10-19; the MCP Inspector command 2026-10-21). Values in < > are yours to fill in; this page never contains a key. Where the server needs a setting the entry does not declare, it can still fail to start.
Can it be installed, and is it up to date?
Version pin · advisories
Listed version
- Registry lists
- 0.1.6
- Latest stable
- 0.1.6
- Status
- current
- Withdrawn
- no
Source: registry.npmjs.org · 2026-10-23. About the version the registry lists; a manual install may resolve to a different one.
Dependency advisories
Counted in the full dependency tree as resolved on 2026-10-23 (npm audit). Bars share one scale. The package itself has no known vulnerability (OSV.dev).
Integrity, provenance, license
- Integrity
- sha512-1A3kJyOAh6OWKE993…
- Signature
- signed
- License
- AGPL-3.0-only
Source: the package registry · 2026-10-23.
Usage
- Downloads
- 800 in the last month
Source: api.npmjs.org · 2026-10-23.
Does the registry listing match what we found?
Feature #6The registry verifies a package once, when it is published, and does not re-check it. A difference below is about the listing, not a judgement of the publisher.
| Registry says | We found | Result | Source · date |
|---|---|---|---|
| Published package can be started | Started and answered | matches | our test · 2026-10-23 |
| Version 0.1.6 on npm | Exists and can be installed | matches | npm · 2026-10-23 |
| Repository github.com/kfireliyahu/emerald-emd | Opens publicly | matches | api.github.com · 2026-10-23 |
Who made it?
Feature #7 · lineage
Facts about the publisher. We do not turn them into a trust score.
- Namespace
- io.github.kfireliyahu
- GitHub owner
- a personal account (kfireliyahu)
- Build record
- signed
- Repository
- github.com/kfireliyahu/emerald-emd
- Stars
- 2
- Repository age
- 0–30 days
- Last push
- 0–30 days ago
- Archived
- no
- Security policy
- SECURITY.md
Source: the registry entry and api.github.com · 2026-10-23; security policy read from GitHub · 2026-10-23.
Publish this server? Run these checks against it yourself before release, from your own machine: a server the command starts, or your own server at its URL after a one-time proof that you control it: npx protocolprobe-selftest.
Choosing
Record checks
Public records · not a safety rating8 of 9 record checks met
- #3,357 of 15,112 packages by monthly downloads, tied with 5 others
- Not ranked by stars: 2 stars (ranked from 10)
- MetRegistry entry is active and says how to run itActive, with a package or a remote address.
- MetSource repository link opensThe linked GitHub repository is public.
- MetRepository is not archivedNot archived.
- MetCode pushed to the repository in the 90 days before our checkLast push 0-30 days before our check.
- MetRepository publishes a security policy (SECURITY.md)SECURITY.md found.
- MetPackage names its licence with a standard (SPDX) identifierAGPL-3.0-only
- MetThe version the registry lists can be installed and is not withdrawnThe listed version exists and is current.
- Not metnpm package carries build provenance (attestation)Signed by npm, but no build attestation.
- MetNo known critical or high advisory in the package or its dependenciesNone known in the package or its dependency tree.
Read from public records only: the registry entry, npm/PyPI, GitHub and advisory databases, checked 2026-10-23. No tool was called. Only “met” and “not met” are counted, so the total differs between servers; a check that does not apply or that we could not run is listed, never counted against it. It is not a safety rating. How each check works · Leaderboards
Common questions about io.github.kfireliyahu/emerald
Answered from the data aboveIs io.github.kfireliyahu/emerald safe to install?
We do not rate servers as safe or unsafe. 8 of its 9 applicable record checks are met (facts from public records, each listed on this page). What the records show: Its source repository opens publicly. Its repository had a push in the last 90 days. The listed version is the latest stable release. The package itself has no known vulnerability (OSV.dev). Its full dependency tree has no known advisory. 55 of its tools describe changing data (our AI model's reading of the descriptions). These are facts with their sources on this page, not a safety guarantee, and we did not run its tools.
Has io.github.kfireliyahu/emerald been security tested?
Partly. 3 of the 12 checks that apply to it were exercised. We started the package in an isolated sandbox and read what it declares, but this test round was read-only, so its tools were not called. No security verdict is published before verification.
What can io.github.kfireliyahu/emerald do?
It lists 85 tools. In our AI model's reading of their descriptions (two runs had to agree, nobody checked it by hand), they include tools that read or search, create or change data, delete and run code or commands. We did not call any tool, so this describes the text, not the behaviour.
Can io.github.kfireliyahu/emerald change or delete data?
55 of its tools say in their description that they create, edit, delete, send or run something (our AI model's reading). We did not call any tool, so we cannot say what actually happens.
Does io.github.kfireliyahu/emerald publish a security policy?
Yes: its repository has a public security policy (github.com/kfireliyahu/emerald-emd/blob/HEAD/SECURITY.md). That is the publisher's statement, not permission for us to test the server, and we call none of its tools.
Is the listed version current?
Yes. The registry lists 0.1.6, the latest stable release on npm.
Where is the source code of io.github.kfireliyahu/emerald?
In github.com/kfireliyahu/emerald-emd, which opens publicly.
Found this page useful?
Anonymous · no sign-inA quick, anonymous reaction — no account, no email. One per kind from your browser. The tally updates when the page is next refreshed, and it is only a rough count, never a safety rating or a measured number of people.
Similar servers
Same topic · AI-read
- io.github.faucetdb/faucetFaucetalso has tools that creates or changes data, deletes, runs code or commands, reads or searchescompare with this one
- io.github.nubo-db/dynoxideDynoxidealso has tools that creates or changes data, deletes, runs code or commands, reads or searchescompare with this one
- com.keboola/mcpalso has tools that creates or changes data, deletes, runs code or commands, reads or searchescompare with this one
- io.github.AtomGraph/web-algebraWeb Algebraalso has tools that creates or changes data, deletes, runs code or commands, reads or searchescompare with this one
- io.github.GreptimeTeam/greptimedb-mcp-serveralso has tools that creates or changes data, deletes, runs code or commands, reads or searchescompare with this one
- io.github.scbrown/quipuQuipualso has tools that creates or changes data, deletes, runs code or commands, reads or searchescompare with this one
Active servers whose topic is also “data-and-databases” and that have at least one tool of the same kind; most kinds in common first, then most GitHub stars. The topic and the tool kinds are an AI model's reading of the publishers' descriptions, not checked by hand. Similar is not a recommendation.
Compare with another server
Side by side: registry entry, our read-only session, the tools and the 18 classification fields. Same values as each page; no score.
Security testing
What did we test, and what did we leave out?
18 checks · features #1, #2
Not probed (read-only run)
We started the package in an isolated sandbox and read what it declares, but this test round was read-only, so its tools were not called. No security score is given; a check we did not run is never counted as passed.
- Inventory: exercised
- Hidden instructions: exercised
- Real execution: not run · our policy
- Secret leak: not run · nothing to check it against
- Internal addresses: not run · our policy
- Unconfirmed changes: not run · our policy
- Bad input: not run · our policy
- Model requests: not run · nothing to check it against
- Sensitive questions: not run · nothing to check it against
- Folder boundary: not run · our policy
- Log leaks: not run · nothing to check it against
- Hidden content: exercised
- Fake assistant turns: not applicable
- Token passthrough: not applicable
- Token audience: not applicable
- Sign-in redirect: not applicable
- Consent handling: not applicable
- Sign-in metadata: not applicable
3 exercised9 not run (reason given)6 not applicable
Each check ends in exactly one state: exercised, not run (with the reason), or not applicable (with the reason). 3 of the 12 checks that apply to it were exercised. We do not publish security-check outcomes for named servers.
- 1Inventory
tool-listReads the declared tools, resources and prompts.exercised - 2Hidden instructions
description-poisoningLooks for hidden instructions in tool descriptions.exercised - 12Hidden content
audience-hidingChecks resources that hide content from the user.exercised
- 3Real execution
real-executionCalls a tool and checks what really happens.This check calls the package's tools. This test round was read-only, so no tool was called; tools can act on outside services with the publisher's or a user's account.not run · our policy - 4Secret leak
canary-leakPlants a fake secret and checks whether it leaks.This check needs at least one successful tool call to have something to check, and no tool was called.not run · nothing to check it against - 5Internal addresses
ssrfChecks whether a tool can be steered to internal addresses.This check calls the package's tools. This test round was read-only, so no tool was called; tools can act on outside services with the publisher's or a user's account.not run · our policy - 6Unconfirmed changes
write-without-confirmationChecks whether tools that change data act without asking.This check calls the package's tools. This test round was read-only, so no tool was called; tools can act on outside services with the publisher's or a user's account.not run · our policy - 7Bad input
error-handlingSends bad input and watches how the server answers.This check calls the package's tools. This test round was read-only, so no tool was called; tools can act on outside services with the publisher's or a user's account.not run · our policy - 8Model requests
samplingChecks whether the server asks the client's model to act for it.This check needs at least one successful tool call to have something to check, and no tool was called.not run · nothing to check it against - 9Sensitive questions
elicitation-sensitive-dataChecks whether the server asks users for sensitive data.This check needs at least one successful tool call to have something to check, and no tool was called.not run · nothing to check it against - 10Folder boundary
root-boundaryChecks whether the server reaches outside the folders it was given.This check calls the package's tools. This test round was read-only, so no tool was called; tools can act on outside services with the publisher's or a user's account.not run · our policy - 11Log leaks
logging-side-channelChecks whether log messages carry data they should not.This check needs at least one successful tool call to have something to check, and no tool was called.not run · nothing to check it against
- 13Fake assistant turns
fake-assistant-turnChecks prompts that pose as the assistant's own words.The server exposes no prompts.not applicable - 14Token passthrough
token-passthroughChecks whether the server forwards a user's token to other services.The server runs locally over standard input/output, so there is no sign-in flow to check.not applicable - 15Token audience
token-audience-validationChecks whether tokens meant for another service are accepted.The server runs locally over standard input/output, so there is no sign-in flow to check.not applicable - 16Sign-in redirect
open-redirectChecks the sign-in redirect for abuse.The server runs locally over standard input/output, so there is no sign-in flow to check.not applicable - 17Consent handling
confused-deputyChecks consent handling when one service acts for another.The server runs locally over standard input/output, so there is no sign-in flow to check.not applicable - 18Sign-in metadata
oauth-url-schemeChecks the published sign-in metadata for unsafe URLs.The server runs locally over standard input/output, so there is no sign-in flow to check.not applicable
Source: our own test in an isolated sandbox, 2026-10-23, mcp-runtime-engine@0.1.0. Which checks count and why follows our published scoring model.
What happened during the test?
Feature #8
The steps in order, as the test record holds them.
- 0 msStarted the published package in an isolated sandbox (read-only mode)
- 1,817 msConnected after 0 redirects.
- Read the inventory: 85 tools, 1 resource, 0 prompts.
- 12,652 msFinished: 3 checks exercised.
Reference
How is it classified?
18 fields
One value per field, each with its source. Fields written by AI models are marked. A field with no value says why.
“Not stated” means the source did not state it; “does not apply” means it does not apply to this kind of server; “our limit” means our own lookup failed. A linked value opens the directory filtered to the same value.
Cite or correct this page
Sources and corrections
Suggested citation
ProtocolProbe. “io.github.kfireliyahu/emerald: MCP server record.” Data checked 2026-10-23. https://protocolprobe.com/mcp/servers/io.github.kfireliyahu/emerald
Figures are valid for the date shown. Our facts on this page are CC BY 4.0: reuse them with a link and the check date. Quoted text (the publisher’s descriptions, website quotes, tool names) is not ours to license.
As JSON: this record in the API · API documentation.
Badge for your README
[](https://protocolprobe.com/mcp/servers/io.github.kfireliyahu/emerald)
It shows this server's record-check count: facts from public records, no tool called. It is not a security rating or a pass. It links here and updates after each data reload.
Something wrong, or is this yours?
If a fact here is wrong, tell us and we will re-check it. If you operate this server, you can run our checks on it yourself with the free self-test command; we call no server’s tools ourselves for anything shown here.
Write to hello@protocolprobe.com · corrections log · methodology