mcp-el-salvador-dte

mcp-el-salvador-dte

Provides tools for El Salvador electronic invoicing (DTE), including IVA calculation, document-type catalog, and DUI/NIT validation.

Category
Visit Server

README

mcp-el-salvador-dte

A small, focused Model Context Protocol (MCP) server that exposes El Salvador electronic invoicing (DTE) and fiscal helpers as tools an LLM can call: IVA calculation, the official DTE document-type catalog, and DUI / NIT validation.

Built with the official @modelcontextprotocol/sdk for TypeScript, ESM, Node 18+, and the stdio transport.

What it is

The Documento Tributario Electrónico (DTE) is El Salvador's mandatory electronic invoicing standard, administered by the Ministerio de Hacienda. This server bundles a few pure, deterministic helpers that come up constantly when building DTE integrations, and makes them available to any MCP-capable client (Claude Desktop, Claude Code, etc.).

Tools

Tool Input Output
calculate_iva { amount: number, includesIva?: boolean } { subtotal, iva, total }
list_dte_types (none) { types: [{ code, name }] }
validate_dui { dui: string } { valid, reason? }
validate_nit { nit: string } { valid, normalized, reason? }

calculate_iva

El Salvador IVA (VAT) is 13%.

  • includesIva = false (default): amount is the net subtotal; IVA is added on top.
  • includesIva = true: amount already includes IVA; it is broken out.

Values are rounded to 2 decimals, and subtotal + iva === total always holds.

// input
{ "amount": 100 }
// output
{ "subtotal": 100, "iva": 13, "total": 113 }
// input
{ "amount": 113, "includesIva": true }
// output
{ "subtotal": 100, "iva": 13, "total": 113 }

list_dte_types

Returns the 11 official DTE document types (code — name):

Code Name
01 Factura (Consumidor Final)
03 Comprobante de Crédito Fiscal (CCF)
04 Nota de Remisión
05 Nota de Crédito
06 Nota de Débito
07 Comprobante de Retención
08 Comprobante de Liquidación
09 Documento Contable de Liquidación
11 Factura de Exportación
14 Factura de Sujeto Excluido
15 Comprobante de Donación
// output (abridged)
{ "types": [ { "code": "01", "name": "Factura (Consumidor Final)" }, ... ] }

validate_dui

Validates a Salvadoran DUI (Documento Único de Identidad): 8 digits, a hyphen, then 1 check digit (e.g. 01234567-8).

It checks the format and the modulo-10 check digit. The 8 base digits are weighted 9, 8, 7, 6, 5, 4, 3, 2 (left to right); the expected check digit is (10 - (weightedSum % 10)) % 10.

// input
{ "dui": "01234567-8" }
// output
{ "valid": true }
// input
{ "dui": "01234567-9" }
// output
{ "valid": false, "reason": "Invalid check digit: expected 8, got 9" }

Honesty note on the DUI check digit. The modulo-10 algorithm above is a widely-used community algorithm and was verified in this repo against known-valid DUIs (00016297-5, 01234567-8). It is not reproduced from an official, government-published specification. If your use case is high-stakes (e.g. legally rejecting a real person's ID), treat a valid: false from the check-digit test as "likely a typo, please re-check" rather than an authoritative rejection. The format check (^\d{8}-\d$) is unambiguous; the check-digit step is best-effort.

validate_nit

Validates the format only of an El Salvador NIT (Número de Identificación Tributaria): 14 digits, commonly formatted NNNN-NNNNNN-NNN-N. Input is accepted with or without hyphens/whitespace, and a canonically hyphenated normalized value is returned.

// input
{ "nit": "06141234560012" }
// output
{ "valid": true, "normalized": "0614-123456-001-2" }

Honesty note on NIT. This is format/length validation only — it does not verify a check digit. NIT check-digit rules are not consistently documented in public sources, so shipping a check-digit validator here would imply a correctness guarantee that cannot be honestly backed up. A valid: true means "well-formed", not "issued by Hacienda".

Install

Requires Node.js 18+.

# clone, then:
npm install
npm run build

Run the tests (unit tests for the pure functions + an stdio smoke test that boots the server and performs a full MCP handshake):

npm test

Start the server manually (it speaks JSON-RPC over stdio and waits for a client):

npm start
# or
node build/index.js

Run with npx (after publishing to npm)

npx mcp-el-salvador-dte

Add to Claude Desktop

Edit your claude_desktop_config.json:

  • macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
  • Windows: %APPDATA%\Claude\claude_desktop_config.json
{
  "mcpServers": {
    "el-salvador-dte": {
      "command": "node",
      "args": ["/absolute/path/to/mcp-el-salvador-dte/build/index.js"]
    }
  }
}

Once published to npm you can instead use:

{
  "mcpServers": {
    "el-salvador-dte": {
      "command": "npx",
      "args": ["-y", "mcp-el-salvador-dte"]
    }
  }
}

Restart Claude Desktop, and the four tools will appear.

Add to Claude Code

# local build
claude mcp add el-salvador-dte -- node /absolute/path/to/mcp-el-salvador-dte/build/index.js

# or, after publishing to npm
claude mcp add el-salvador-dte -- npx -y mcp-el-salvador-dte

Project layout

src/lib.ts     Pure, side-effect-free domain logic (unit-tested directly)
src/index.ts   MCP server: registers the 4 tools over stdio
test/          node:test unit tests + stdio smoke test

License

MIT © 2026 Gerar Arévalo

Recommended Servers

playwright-mcp

playwright-mcp

A Model Context Protocol server that enables LLMs to interact with web pages through structured accessibility snapshots without requiring vision models or screenshots.

Official
Featured
TypeScript
Magic Component Platform (MCP)

Magic Component Platform (MCP)

An AI-powered tool that generates modern UI components from natural language descriptions, integrating with popular IDEs to streamline UI development workflow.

Official
Featured
Local
TypeScript
Audiense Insights MCP Server

Audiense Insights MCP Server

Enables interaction with Audiense Insights accounts via the Model Context Protocol, facilitating the extraction and analysis of marketing insights and audience data including demographics, behavior, and influencer engagement.

Official
Featured
Local
TypeScript
VeyraX MCP

VeyraX MCP

Single MCP tool to connect all your favorite tools: Gmail, Calendar and 40 more.

Official
Featured
Local
graphlit-mcp-server

graphlit-mcp-server

The Model Context Protocol (MCP) Server enables integration between MCP clients and the Graphlit service. Ingest anything from Slack to Gmail to podcast feeds, in addition to web crawling, into a Graphlit project - and then retrieve relevant contents from the MCP client.

Official
Featured
TypeScript
Kagi MCP Server

Kagi MCP Server

An MCP server that integrates Kagi search capabilities with Claude AI, enabling Claude to perform real-time web searches when answering questions that require up-to-date information.

Official
Featured
Python
E2B

E2B

Using MCP to run code via e2b.

Official
Featured
Neon Database

Neon Database

MCP server for interacting with Neon Management API and databases

Official
Featured
Exa Search

Exa Search

A Model Context Protocol (MCP) server lets AI assistants like Claude use the Exa AI Search API for web searches. This setup allows AI models to get real-time web information in a safe and controlled way.

Official
Featured
Qdrant Server

Qdrant Server

This repository is an example of how to create a MCP server for Qdrant, a vector search engine.

Official
Featured