Skip to main content
Glama
Forever Works MCP servers

Forever Works MCP servers

mcps

MCP servers that let an AI assistant do a company's everyday work. Most are for services people use anywhere, such as Google Workspace, Notion, Bitwarden, Porkbun, Expo, the app stores and European banks; a second line is for companies in Romania, to file with ANAF, follow the trade register, invoice through Oblio and read the National Bank's rates.

Each server connects an MCP client, such as Claude Code, Claude Desktop, VS Code or Cursor, to one service. They are built on one toolkit, so every tool says what it can change: read (it changes nothing), write (it changes something in your account) or money (it moves money, makes or unmakes a legal or fiscal document, or commits you in a comparable way, such as a bank consent). Your client asks you before each money call.

foreverworks.github.io/mcps presents the servers by who they are for, each with its documentation.

Under each server's name: how settled it is, then how many tools it has and the most they can do. Stable: in daily use, and its tools keep their shape. Beta: in use, and new or still growing, or reading web pages its service may change. Experimental: rests on an interface its owner may change without notice, or covers part of the service.

For companies in Romania

The paperwork a company in Romania, and the people who run it, do online: e-invoices and declarations with ANAF, filings at the trade register, invoicing, and the National Bank's exchange rates. Each README ends with the other servers we found for that service, and what this one adds.

Server

What it does

ANAF e-FacturaStable20 tools, including money

Read, check and file a Romanian company's e-invoices and e-Transport declarations with ANAF.

ANAF SPVBeta16 tools, including money

Download what ANAF posts to your SPV inbox, request documents, and validate or file declarations.

BNR exchange ratesStable5 tools, read-only

Look up the National Bank of Romania's rate for any day, and convert amounts to and from RON.

OblioStable17 tools, including money

Issue and track a Romanian company's invoices on Oblio, with totals computed as ANAF checks them.

ONRC trade registerBeta9 tools, read and write

Follow your filings at Romania's trade register, with their documents, fee notes and invoices.

Related MCP server: nbk-mcp

For everyone

Servers for services people use anywhere. We built each one because the servers we found did less, or there were none; each README's last section names them and says what this one adds.

Server

What it does

App Store and Google PlayBeta7 tools, read and write

Read and answer App Store and Google Play reviews, and see TestFlight feedback and crash logs.

BitwardenStable17 tools, read and write

Give your assistant its own Bitwarden vault for logins, passwords, 2FA codes and passkeys.

Expo Application ServicesBeta23 tools, including money

Find out why an Expo build, workflow run or store submission failed, and roll out updates.

Enable BankingStable10 tools, including money

Read, search and export statements and balances from banks across Europe, without moving money.

Google WorkspaceStable115 tools, read and write

Search and work in Gmail, Calendar, Drive, Docs, Sheets and Slides across several Google accounts.

Home AssistantBeta10 tools, read and write

Read your Home Assistant's states, areas and history, and run its actions, approving locks first.

NotionStable27 tools, read and write

Search, read and write your Notion workspaces, with pages as Markdown and typed database queries.

PorkbunBeta113 tools, including money

Register domains and manage DNS, hosting and mail at Porkbun, with every purchase confirmed first.

Trademark searchBeta6 tools, read-only

Check whether a name is already a registered or pending trademark in the US or the EU.

TypeSafeBeta3 tools, read-only

Get calibrated yes or no answers, choices and scores from TypeSafe's Jev, for one item or 1000 rows.

Extras

These run from a clone of this repository and are not published to npm, the MCP Registry or as desktop bundles. Each README has the install steps and what the server needs.

Server

What it does

Bolt Food receiptsExperimental8 tools, read-only

Read your Bolt Food orders as itemised receipts matched to card charges, through an unofficial API.

Device brokerExperimental10 tools, read and write

Share your own Android emulators, iOS simulators and desktops between AI agents, in fair turns.

Glovo receiptsExperimental8 tools, read-only

Read your Glovo orders as itemised receipts matched to card charges, through an unofficial API.

Printer and scannerExperimental10 tools, read and write

Print, scan and check paper and toner on a network printer, with greys corrected for that printer.

Local RAGBeta10 tools, read and write

Index your PDFs, scans and documents locally, and search them with hybrid retrieval and a reranker.

Smart homeExperimental7 tools, read and write

Press the buttons of a TV, heater or fan remote by name through a BroadLink IR blaster.

Shared packages

Package

What it is

mcp-kit

Stdio and HTTP transports with per-client tokens, a guard that classifies, audits and can confirm every tool call, an HTTP and OAuth stack, exact decimals, and byte-exact file inputs

receiptsNot published: only extras use it

Itemised receipts, the join from a bank card charge to the order it paid, item search and CSV exports

Quick start

You need Node 22.19 or newer and an MCP client. The trademark search needs no account and no key for US marks, which makes it a good first server:

git clone https://github.com/foreverworks/mcps.git && cd mcps
npm ci && npm run build
claude mcp add trademarks -- node "$PWD/servers/trademarks/dist/index.js"

Then ask your assistant: "Is Turnip already a registered trademark in the US for software?"

Every server's README has its install buttons, the commands for Claude Code and for clients configured with JSON, and the credentials it needs, step by step. A server starts and lists its tools before you configure anything; a tool that needs a credential you have not given answers with an error naming the variable to set. To run one copy that several clients share over HTTP, see docs/deploying.md.

What every server does the same way

  • Each tool says what it can change. Its class reaches your client in the standard annotations (readOnlyHint, destructiveHint), so a client can ask before a write. A server will not start with a tool left unclassified.

  • Money waits for you. A money tool asks your client to confirm every call; Claude Code does, whatever its permission mode. A deployment can instead have the server ask you itself, in one line naming the amount, the counterparty and the document (how).

  • A deployment can set a ceiling. MCP_MAX_ACCESS=read turns a server into a read-only one, and a lower ceiling can be set per client.

  • Your data is not retyped. Files go in by path, never as text a model copies; amounts are exact decimal strings, never floating point; an unknown argument is refused by name; results report the SHA-256 of what was stored or sent.

  • Every call leaves one audit line, without its arguments, its result or any token.

  • It runs where you run it: over stdio, started by your client, or as one copy on loopback over Streamable HTTP, with a bearer token per client.

  • Tests never touch a real account. Every outside dependency is a port with a fake, and the test environment has no credentials and no network.

Status

The servers are used every day by the people who wrote them. The fifteen servers for Romania and for everyone are published on npm and listed in the official MCP Registry, so npx runs each of them without a clone. The extras are never published: build them from source as above.

Documentation

  • Configuration: the variables every server shares, and the conventions for the rest.

  • Deploying: client configuration, the HTTP transport, and running a server as a systemd service.

  • Security: the threat model, the guard every call passes, money and confirmation, files in and out.

  • Authentication: how clients, servers and the services behind them authenticate, and which options a deployment has.

  • Architecture: how a server and the toolkit are built.

  • Roadmap: what other MCP servers do that these do not yet, what is done, and what is still open.

  • Releasing: how packages reach npm and the MCP Registry, and the plugins made from them for Claude Code and Cursor.

  • Privacy: what the servers do with your data.

Contributing

Fixes, new tools and new servers are welcome. CONTRIBUTING.md has the setup, the house style and the README template, and npm run check is the bar for a change. To report a vulnerability, please follow SECURITY.md rather than opening a public issue.

License

MIT

Available Tools

5 tools
annual_averageBNR annual averageA
Read-onlyIdempotent

BNR's annual average rate for a year, as ANAF converts foreign income in the D212 ("cursul de schimb mediu anual comunicat de BNR"): the mean of the twelve monthly averages, each the mean of the month's daily rates, to four places, with the monthly values and their day counts. Not the mean of the daily rates, which differs. A year not over yet answers the months so far with complete: false.

NameRequiredDescriptionDefault
yearYesThe calendar year, e.g. 2023.
currencyYesISO 4217 code: EUR, USD, GBP, CHF, ... (XAU gold, XDR SDR); case ignored.

Output Schema

NameRequiredDescription
okYes
noteNo
yearYes
methodYes
monthsYes
sourceYes
averageYesBNR's exact text, RON per `multiplier` units
warningNo
completeYes
currencyYes
multiplierYes

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover the safety profile (readOnly, idempotent, openWorld), and the description goes further: it discloses the aggregation method (mean of twelve monthly means, each from daily rates), rounding to four places, that monthly values and day counts are returned, and the partial-year `complete: false` semantics. Minor overlap with the output schema on returned fields, and no note on caching or data vintage, keeps it from a 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the definition, then methodology, then the disambiguation, then the edge case — a logical order with no filler. Two sentences are dense but each clause carries information; the 'to four places' and day-count detail are borderline but justify themselves against the ANAF spec.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With annotations covering safety and an output schema covering return shape, the description supplies exactly what those fields cannot: the computation semantics, precision, and the incomplete-year behavior. Complete enough to call correctly; only rate limits/caching freshness are unaddressed, which is minor for a read-only reference lookup.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and both parameters (ISO 4217 currency, calendar year) are fully specified there, so the baseline of 3 applies. The description adds context about what the year parameter means for an in-progress year, but nothing beyond the schema about formats, bounds, or currency handling.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Names a specific resource and computation: 'BNR's annual average rate for a year', anchored to the exact ANAF/D212 wording it serves. It also explicitly excludes a plausible misreading ('Not the mean of the daily rates, which differs'), so an agent can separate it from the sibling `rate`/`rates` tools without opening their schemas.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives a concrete use context (converting foreign income in the D212 return) and a negative rule (this is not the daily-rate mean), plus the edge-case behavior for an unfinished year. It stops short of naming the sibling tools to route to instead — e.g. 'use `rate` for a single day' — so the alternative is implied rather than stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

convertConvert to or from RONA
Read-onlyIdempotent

An amount converted to or from RON at BNR's reference rate, computed exactly and rounded once: to RON is amount x rate / multiplier, from RON amount x multiplier / rate. rate_rule picks the fixing: in_force (the day's, or the last banking day's before it, as rate answers) or last_before (the last one strictly before the day, the rule for an invoice in a foreign currency). Answers the result with the rate, its multiplier and the date BNR published it, so the conversion can be stated. One side must be RON; for two other currencies, convert twice.

NameRequiredDescriptionDefault
toYesThe currency wanted: RON, or the currency to convert RON to. ISO 4217; case ignored.
dateNoThe day of the conversion, YYYY-MM-DD in Bucharest (an invoice's date, a payment's); default today.
fromYesThe amount's currency: RON, or the currency to convert to RON. ISO 4217; case ignored.
amountYesThe amount, as a decimal string: "1250.50", "-75". Never a number.
placesNoDigits after the point in the result.
roundingNoHow the result is rounded, once: half-up (halves away from zero, as invoices round) or half-even (banker's).half-up
rate_ruleNoin_force: the rate in force on the day; last_before: the last rate published before the day.in_force

Output Schema

NameRequiredDescription
okYes
toYes
dateYes
fromYes
noteNo
rateYesBNR's exact text, RON per `multiplier` units
amountYesThe amount converted, as given
placesYes
resultYesThe converted amount, computed exactly and rounded once
sourceYes
meaningYes
roundingYes
rate_ruleYes
multiplierYes
published_onYesThe date of the fixing the conversion used

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond readOnlyHint/idempotentHint it discloses that rounding happens exactly once and that the response carries the rate, its multiplier and the publication date, so the conversion is auditable. The one-side-must-be-RON constraint is a behavioral rule no annotation conveys. It does not discuss rate-availability failures or how dates without a published fixing are handled.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads the purpose and the formulas, then the rule selection, then the return shape. Dense but every clause carries information; the parenthetical about `rate` answers could be trimmed slightly.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 7-parameter conversion tool with an output schema, the definition still covers the formula, direction constraint, both enum behaviors and the returned provenance fields. Nothing an agent needs to call it correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so baseline is 3, and the description earns above that by introducing the 'multiplier' factor that appears nowhere in the schema and by spelling out the direction-dependent formulas showing how amount, rate and multiplier combine.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('An amount converted to or from RON at BNR's reference rate') plus the exact computation, which clearly separates it from the sibling tools rate, rates and annual_average that only surface fixings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives concrete when-to-use routing for the rate_rule choice: in_force for the day's rate as `rate` answers it, last_before 'the rule for an invoice in a foreign currency'. Also states the hard precondition that one side must be RON and that other pairs require two calls. It stops short of naming a sibling to use instead when only a quoted rate is wanted.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

healthHealthA
Read-onlyIdempotent

Whether BNR's rates can be read now: the date of its latest fixing and how many currencies it carries.

NameRequiredDescriptionDefault

No parameters

Output Schema

NameRequiredDescription
okYes
todayYes
sourceYes
warningNo
currenciesYes
latest_fixingNo

TDQS

A3.7/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint and openWorldHint, so safety and repeatability are covered structurally. The description adds that the payload reports the latest fixing date and currency count, which is useful, but it does not disclose failure semantics for a health check (e.g., does an unavailable rate source surface as an error or a status field?) — the single most important behavioral trait here.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence that names the readiness question first and then enumerates the two returned signals. No redundant or filler wording.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a zero-parameter status tool with an output schema and full annotation coverage, the description supplies enough to call it correctly; the output schema carries the return-shape burden. Only the degraded/unavailable-rate scenario is left unaddressed.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes zero parameters, so there is nothing for the description to disambiguate; the baseline applies. No parameter-related gaps exist.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific purpose: a readiness check on BNR rate data, returning the latest fixing date and currency count. It is clearly distinguishable in kind from the data-returning siblings (rate, rates, convert, annual_average), though it never names them explicitly and the verb is somewhat implicit ("whether ... can be read now").

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is only implied: an agent can infer this is a pre-flight availability check before calling rate/rates, but the description never says when to call it, whether it should precede the data tools, or what to do if the check fails. No exclusions or alternatives are given.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

rateBNR rate on a dayA
Read-onlyIdempotent

The National Bank of Romania's reference rate in force on a day: RON per multiplier units of the currency (1, or 100 for HUF, JPY, KRW and a few others), as the exact text BNR published, with published_on, the date of the fixing it is. A weekend, a holiday, or today before BNR publishes (about 13:00 Bucharest) takes the last banking day's fixing. Use it for any EUR/RON or other conversion stated on a date.

NameRequiredDescriptionDefault
dateNoThe day, YYYY-MM-DD in Bucharest; default today.
currencyYesISO 4217 code: EUR, USD, GBP, CHF, ... (XAU gold, XDR SDR); case ignored.

Output Schema

NameRequiredDescription
okYes
dateYes
noteNo
rateYesBNR's exact text, RON per `multiplier` units
sourceYes
meaningYes
currencyYes
multiplierYes
published_onYesThe date of the fixing this rate is

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly, idempotent, and openWorld, but the description adds genuinely new behavior: weekends, holidays, and today before ~13:00 Bucharest fall back to the last banking day's fixing, and the returned `published_on` reflects the fixing date rather than the requested date. The multiplier convention (1, or 100 for HUF/JPY/KRW) is also disclosed only here. It stops short of describing error behavior for unknown currency codes.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The purpose and units are front-loaded in the first clause, and each subsequent clause (multiplier exception, published_on, fallback rule, use case) carries distinct information. It is somewhat dense and runs long as a single block, but there is no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a two-parameter lookup with an output schema, everything an agent needs is present: what is returned, the multiplier caveat, the date default, and the non-banking-day fallback. Return-value explanation is correctly kept brief since the output schema exists.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so both parameters are already documented in the input schema, which sets the baseline at 3. The description's multiplier and Bucharest-timezone context clarifies how to interpret `currency` and `date` results rather than adding new parameter syntax, so it does not materially exceed the schema's own coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: the National Bank of Romania's reference rate in force on a given day. The scope is precise enough that an agent can distinguish a point-in-time rate lookup from the sibling `rates` or `annual_average`, though neither is named to draw the contrast explicitly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

"Use it for any EUR/RON or other conversion stated on a date" gives a concrete when-to-use trigger. It does not name the alternatives (`convert`, `rates`, `annual_average`) or state when not to use it, so the routing to siblings is left implicit — and the conversion phrasing brushes against what `convert` likely does.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ratesBNR rates: several currencies, or a windowA
Read-onlyIdempotent

BNR's reference rates as series, the exact text BNR published. With date (default today): each currency's rate in force that day, from the day's fixing or the last banking day's before it. With from (and to, default today): every fixing BNR published in the window, oldest first, at most 366 days and 2000 rates a call. Without currencies, every currency BNR published. Each series carries its multiplier (RON per 1, or per 100 for HUF, JPY, KRW and a few others).

NameRequiredDescriptionDefault
toNoA window's last day, included; default today. Only with from.
dateNoOne day, YYYY-MM-DD in Bucharest: the rates in force on it. Not with from.
fromNoA window's first day, YYYY-MM-DD: every fixing from it to `to`.
currenciesNoISO 4217 codes, e.g. ["EUR", "USD"]; default every currency BNR published.

Output Schema

NameRequiredDescription
okYes
toNo
dateNoThe day asked for: each series holds the rate in force on it
fromNo
noteNo
countYesHow many rates the series hold
absentNoCurrencies asked for that BNR published no fixing of in the window
seriesYesOne per currency, or per currency and multiplier if BNR changed it within the window
sourceYes

TDQS

A4.4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly/idempotent/openWorld, and the description adds substantive behavior beyond them: fallback to the last banking day's fixing when the day has none, oldest-first ordering, hard limits of 366 days and 2000 rates per call, and per-series multipliers. These are exactly the traits an agent needs to size requests and interpret values.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences, front-loaded with what the tool returns, then mode behavior, then coverage and limits. The parentheticals carry real information (defaults, multiplier rule) rather than restating the schema — every clause earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present, return-format detail is unnecessary, and the description covers the remaining risk areas: input mode exclusivity, defaults, request caps, and the meaning of the multiplier. Little an agent needs to call this correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3; the description earns above that by adding semantics the schema lacks — that `to` is inclusive and defaults to today, that `date` is in Bucharest time, that result rates reflect non-banking-day fallback, and that omitting `currencies` returns everything BNR published.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource: BNR reference rates returned as series in the exact published text, with two modes (single day vs. window). It is distinguishable from `annual_average` and `convert`, though it never explicitly names the `rate` sibling, leaving the single-rate-vs-series boundary to be inferred from the title.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives clear mode-selection guidance: use `date` for one day's rates in force, use `from`/`to` for a window of fixings. It stops short of explicit exclusions or routing to siblings such as `rate` or `convert`, so the agent must infer which tool to pick for a single conversion.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 5 tool updates
    • First observedannual_average
    • First observedconvert
    • First observedhealth
    • First observedrate
    • First observedrates

TDQS

A4/5.0

Scored across 5 tools

Disambiguation4/5

Each tool has a clearly articulated scope: health (availability), rate (single day), rates (series/window),annual_average (yearly figure), convert (arithmetic). The only real hazard is the rate vs rates pair, which differ solely by plurality and require reading descriptions to separate a point lookup from a series fetch.

Naming Consistency4/5

All names are lowercase snake_case with no convention mixing, which is good. However the set blends nouns (rate, rates, health, annual_average) with a verb (convert), and rate/rates are distinguished only by a plural, a minor predictability gap.

Tool Count5/5

Five tools is exactly right for a single-source exchange-rate server: point rate, series, annual aggregate, conversion, and a health probe. Nothing redundant and nothing padded.

Completeness4/5

The surface covers the full lifecycle of BNR data: current fixing, historical windows, yearly averages, arithmetic conversion, and availability checks, with explicit notes on limits and the two-step pattern for non-RON pairs. Gaps are minor, e.g. no currency roster/metadata tool and no direct cross-currency conversion, but both are workable via rates and convert.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • F
    license
    Not graded
    quality
    D
    maintenance
    Provides real-time and historical foreign exchange rates for 31+ currencies, enabling currency conversion, historical rate lookups, and time series analysis using data from the Frankfurter API.
    -
  • A
    license
    A
    quality
    D
    maintenance
    Fetches official currency exchange rates from the National Bank of Kazakhstan, supports conversion and rate dynamics tracking.
    5
    15 npm
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    Enables real-time currency exchange rate lookup, conversion, historical rates, and currency catalog using the free Frankfurter API, no API key required.
    1 npm
    ISC
  • A
    license
    Not graded
    quality
    B
    maintenance
    Provides National Bank of Romania (BNR) FX reference rates without API key.
    425 npm
    MIT