npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

altalandi-mcp

v0.10.1

Published

MCP server exposing Altalandi (native-Icelandic refinement) as a tool for Claude Code and any MCP client.

Readme

altalandi-mcp

An MCP server that exposes Altalandi, native-Icelandic refinement with a meaning-preservation check, as a tool any MCP client can call. stdio transport.

Set up (Claude Code or Codex)

Connect this computer once. This opens altalandi.is, you approve, and the key is stored locally. You never copy it:

npx altalandi login

Then add the server. No key goes into any config file; the server reads the one altalandi login stored:

claude mcp add altalandi -s user -- npx -y altalandi-mcp@latest   # Claude Code
codex mcp add altalandi -- npx -y altalandi-mcp@latest            # Codex

@latest makes each new session use the newest version. Added it without @latest before? npx keeps its first copy: remove the server (claude mcp remove altalandi) and add it again with the line above.

Ask for Icelandic and mention Altalandi, e.g. "Write this in proper Icelandic with Altalandi." The agent calls the refine_icelandic tool.

Without altalandi login (CI, services, other clients)

Set ALTALANDI_API_KEY in the server's environment, from your host's secret manager. It takes precedence over a stored login. Mint a key at https://altalandi.is/stjornbord/forritarar. Never commit a plaintext key in MCP JSON.

{ "mcpServers": { "altalandi": { "command": "npx", "args": ["-y", "altalandi-mcp@latest"] } } }

The tool

refine_icelandic({ text, domain?, register?, sourceLang?, minOutputChars?, maxOutputChars?, report? }) returns two parts. The first is one Markdown block: the verdict and nativeness score, the text before and after (Fyrir / Eftir), a numbered list of changes with their reasons, why a rewrite was refused if it was, and what the call cost with the balance and free characters left (Kostnaður). The second is the full refined text to apply. The tool tells the agent to show the block to you as it is after every call, so you see what changed and what it cost in the terminal or the editor, not only on the website.

  • domain: general | marketing | data-analysis | childrens-fiction
  • register: formal | neutral | warm
  • sourceLang: auto | en | is
  • minOutputChars / maxOutputChars: optional minimum and hard maximum for one complete field, including spaces and line breaks (browser UTF-16 length). Always pass stated application/form limits, e.g. maxOutputChars: 1000. These also apply to proofread_icelandic. Do not split a bounded field into separate calls. If length and meaning cannot both be preserved, the server fails without charging; it never truncates the text or invents facts to fill it.
  • noStore: true means Altalandi never keeps this text. Otherwise free use (the free daily characters) is kept, with personal data scrubbed, to improve the service; paid use only with consent (privacy).
  • report: true also writes ./altalandi-reports/altalandi-<time>-<id>.md (input, output, every change with its reason and layer, warnings, verdict). Default: on when ALTALANDI_REPORT=1. Reports contain the text, so they are opt-in.

Meaning guarantee: on Icelandic input where the rewrite can't be verified to preserve meaning, the tool returns the original unchanged and flags it, never a silent change.

UI strings: the Hnappasafn

lookup_icelandic_ui_strings({ strings, minConfidence? }) looks up English buttons, menus and labels (up to 200, 80 characters each) in the Hnappasafn: the Icelandic that Icelandic websites and open-source software (Firefox, Thunderbird, LibreOffice, Android) actually use, served only where the sources agree. No model runs, so it is instant and the same string gets the same Icelandic across a project. A string the Hnappasafn lacks is tried in the Orðakista, our Icelandic naming bank: the Icelandic names of countries, languages, currencies, units, months, weekdays and cities (Germany → Þýskaland, km with its case forms), and Icelandic place names with their case forms and á/í (Akureyri → á Akureyri, til Akureyrar). 1 kr per string found, from the free daily characters first; a string not found costs nothing, nor does a place whose preposition is marked uncertain. Translate the misses with refine_icelandic.

With sourceLang: "is" the strings are Icelandic labels to check. Each comes back established (the form Icelandic software uses: keep it), minority (use best: „Hvernig það virkar“ → „Svona virkar þetta“) or unknown (not charged).

ordakista_search({ query, limit?, drawers? }) searches the whole Orðakista, in English or Icelandic: UI text, names, places in any case form, computing terms and stiff phrasings. Exact matches come first, then prefixes and one-letter typos. Free, rate-limited.

Háttur: ask first

When the account's setting is „Spyrja fyrst“ (ask), refine_icelandic, proofread_icelandic and lookup_icelandic_ui_strings need approved: true. The agent sets it only after the user agreed in the conversation, and one yes covers the task. Without it the tool sends nothing, charges nothing and says why. The setting is read from the account (cached a minute); ALTALANDI_MODE overrides it. Change it with npx altalandi mode or at altalandi.is/stjornbord/stillingar#gervigreind.

Proofreading

proofread_icelandic({ text, suggestions?, minPrecision?, noStore? }) fixes only proven errors in Icelandic you wrote (punctuation, word boundaries, a misspelt word one slip from the right one) and keeps your wording. Everything else comes back as numbered suggestions, each with its reason and, when known, how sure it is. The agent shows you each one and applies only those you accept.

  • suggestions: offer (default: you choose) | apply (the kinds of suggestion measured right at least minPrecision of the time are applied and listed; the rest are offered) | off (only the safe fixes).
  • minPrecision: 0.5 to 0.99, default 0.9. A suggestion with a digit, or one that changes a name, is never applied unasked.

Then record_suggestion_decisions({ resultId, decisions }) tells Altalandi which suggestions you used or ignored (numbers only, no text, free). That is how the suggestions get better.

Only meaning preserved is a verified result. MEANING UNVERIFIED means the check did not run or could not complete; review that output before use. API warnings are included under a clear Warnings: section in the tool's result.

The Altalandi card

In hosts that render MCP Apps (Claude Desktop, claude.ai), results appear in an Altalandi card: the text with a copy button, whether the meaning check passed, each change with its reason, and for proofreading each suggestion with Nota and Hunsa buttons. The card records the decisions itself. Terminals (Claude Code, Codex) get the same text as before. The server offers the card as the resource ui://altalandi/result-v1.html; both tools return its data as structuredContent.

Config

| env | default | purpose | |-----|---------|---------| | ALTALANDI_API_KEY | (the key from altalandi login) | your key (Bearer) | | ALTALANDI_CONFIG_DIR | %APPDATA%\altalandi / ~/.config/altalandi | where altalandi login stored it | | ALTALANDI_BASE_URL | https://altalandi.is/api | API base (override for self-hosting) | | ALTALANDI_REPORT | — | 1 = write a report for every call | | ALTALANDI_REPORT_DIR | ./altalandi-reports (the server's working folder) | where reports go |

Each API request has a fixed 300-second deadline, including the response body, so a stalled provider cannot leave the tool hanging.

Cost

Every account gets a free daily allowance of characters on the standard writer (GET /v1/pricing has the figure); past that, calls are paid from prepaid credit in krónur, and a new account also starts with 500 kr. of trial credit. See https://altalandi.is/verd.

MIT licensed. Requires Node ≥ 18.