hacienda-cr MCP Server
hacienda-cr — コスタリカ電子請求書
コスタリカで電子請求書を発行するための最も完全なオープンソースツールキット。
財務省のAPI v4.4に対して電子領収書を発行するためのSDK + CLI + MCPサーバー。
なぜhacienda-crなのか?
コスタリカで電子請求書を発行することは、頭痛の種であるべきではありません。OAuth2認証、特定の名前空間を持つXML生成、XAdES-EPESデジタル署名、50桁の数字キー、ステータスのポーリング... 偶発的な複雑さが多すぎます。
hacienda-cr は、これらすべてを単一のツールキットで解決します:
SDK — 厳密な型付けを持つTypeScriptライブラリ:認証、XML、デジタル署名、IVA計算、送信、照会。
CLI — ターミナルから発行、署名、検証、照会を行うためのコマンドラインインターフェース
hacienda。MCPサーバー — AIアシスタント(Claudeなど)が請求書を発行できるようにするModel Context Protocolサーバー。
7種類の領収書タイプと受信者メッセージに対応。サンドボックスと本番環境の両方で動作します。
Related MCP server: mcp-sii
2分で始める
オプション1: SDK(開発者向け)
npm install @dojocoding/hacienda-sdkimport { HaciendaClient, DocumentType, Situation } from "@dojocoding/hacienda-sdk";
// 1. Crear el cliente
const client = new HaciendaClient({
environment: "sandbox",
credentials: {
idType: "02", // Cédula Jurídica
idNumber: "3101234567",
password: process.env.HACIENDA_PASSWORD!,
},
});
// 2. Autenticarse
await client.authenticate();
// 3. Generar la clave numérica
const clave = client.buildClave({
date: new Date(),
taxpayerId: "3101234567",
documentType: DocumentType.FACTURA_ELECTRONICA,
sequence: 1,
situation: Situation.NORMAL,
});
// 4. Construir XML, firmar y enviar (ver ejemplo completo abajo)オプション2: CLI(ターミナルから請求書を発行)
npm install -g @dojocoding/hacienda-cli
# Autenticarse
hacienda auth login --cedula-type 02 --cedula 3101234567
# Crear borrador interactivo
hacienda draft --interactive
# Validar antes de enviar
hacienda validate factura.json
# Enviar (vista previa primero)
hacienda submit factura.json --dry-run
# Consultar contribuyente
hacienda lookup 3101234567オプション3: MCPサーバー(AIアシスタント向け)
npm install -g @dojocoding/hacienda-mcp
hacienda-mcpClaudeにこう伝えることができます:"Mi Empresa S.A.(法人番号3101234567)からCliente S.R.L.(法人番号3109876543)への請求書を作成してください。コンサルティング2時間、各₡50,000、IVA 13%で。"
対応している領収書タイプ
コード | 領収書タイプ | SDKビルダー |
| 電子請求書 |
|
| 電子借方票 |
|
| 電子貸方票 |
|
| 電子チケット |
|
| 電子購入請求書 |
|
| 電子輸出請求書 |
|
| 電子支払領収書 |
|
— | 受信者メッセージ(受諾/拒否) |
|
目次
SDK — 完全なドキュメント
HaciendaClient
主要なエントリーポイント。認証、キー生成、API操作を調整します。
import { HaciendaClient } from "@dojocoding/hacienda-sdk";
const client = new HaciendaClient({
// Requerido
environment: "sandbox", // "sandbox" | "production"
credentials: {
idType: "02", // "01"=Física, "02"=Jurídica, "03"=DIMEX, "04"=NITE
idNumber: "3101234567", // Cédula de 9-12 dígitos
password: process.env.HACIENDA_PASSWORD!,
},
// Opcional
p12Path: "/ruta/al/certificado.p12", // Para firma digital
p12Pin: process.env.HACIENDA_P12_PIN, // PIN del .p12
fetchFn: customFetch, // Implementación fetch personalizada
});オプションはインスタンス化時にZodで検証されます。問題がある場合は、明確な詳細を含む ValidationError がスローされます。
OAuth2認証
HaciendaはOAuth2 ROPC(Resource Owner Password Credentials)を使用します。SDKはトークンのライフサイクル全体を自動的に処理します。
// Autenticarse (obtiene access + refresh token)
await client.authenticate();
// Verificar estado
console.log(client.isAuthenticated); // true
// Obtener token válido (refresca automáticamente si expiró)
const token = await client.getAccessToken();
// Forzar re-autenticación
client.invalidate();
await client.authenticate();トークンのライフサイクル:
アクセストークンは約5分で期限切れ(メモリにキャッシュされ、30秒前に更新)
リフレッシュトークンは約10時間有効
getAccessToken()は更新を透過的に処理します
Haciendaの環境:
環境 | APIのベースURL | IDP Realm | Client ID |
|
|
|
|
|
|
|
|
ドキュメントの作成
電子請求書の完全な例 — フローは他のタイプでも同じです:
import {
buildFacturaXml,
calculateLineItemTotals,
calculateInvoiceSummary,
buildClave,
DocumentType,
Situation,
} from "@dojocoding/hacienda-sdk";
import type { LineItemInput } from "@dojocoding/hacienda-sdk";
// 1. Definir las líneas de detalle
const lineas: LineItemInput[] = [
{
numeroLinea: 1,
codigoCabys: "8310100000000", // Código CABYS (13 dígitos)
cantidad: 2,
unidadMedida: "Unid",
detalle: "Servicios de desarrollo web",
precioUnitario: 50000,
esServicio: true,
impuesto: [
{
codigo: "01", // IVA
codigoTarifaIVA: "08", // Tarifa general 13%
tarifa: 13,
},
],
},
{
numeroLinea: 2,
codigoCabys: "4321000000000",
cantidad: 1,
unidadMedida: "Unid",
detalle: "Laptop",
precioUnitario: 500000,
esServicio: false,
impuesto: [
{
codigo: "01",
codigoTarifaIVA: "08",
tarifa: 13,
},
],
descuento: [
{
montoDescuento: 25000,
codigoDescuento: "01",
naturalezaDescuento: "Descuento por volumen",
},
],
},
];
// 2. Calcular totales por línea (agrega montoTotal, subTotal, impuestoNeto, etc.)
const lineasCalculadas = lineas.map(calculateLineItemTotals);
// 3. Calcular resumen de factura (ResumenFactura)
const resumen = calculateInvoiceSummary(lineasCalculadas);
// 4. Generar la clave numérica
const clave = buildClave({
date: new Date(),
taxpayerId: "3101234567",
documentType: DocumentType.FACTURA_ELECTRONICA,
sequence: 1,
situation: Situation.NORMAL,
});
// 5. Consecutivo
const numeroConsecutivo = "00100001010000000001";
// 6. Armar la factura y generar XML
const factura = {
clave,
proveedorSistemas: "3101234567", // Cédula del proveedor de sistemas (v4.4)
codigoActividadEmisor: "620100",
numeroConsecutivo,
fechaEmision: new Date().toISOString(),
emisor: {
nombre: "Mi Empresa S.A.",
identificacion: { tipo: "02", numero: "3101234567" },
ubicacion: {
provincia: "1",
canton: "01",
distrito: "01",
otrasSenas: "100m norte del parque central",
},
correoElectronico: "facturacion@miempresa.co.cr",
},
receptor: {
nombre: "Cliente S.R.L.",
identificacion: { tipo: "02", numero: "3109876543" },
correoElectronico: "pagos@cliente.co.cr",
},
condicionVenta: "01", // Contado
detalleServicio: lineasCalculadas,
resumenFactura: {
...resumen,
// v4.4: los medios de pago van dentro del ResumenFactura, con monto
medioPago: [{ tipoMedioPago: "01", totalMedioPago: resumen.totalComprobante }],
},
};
const xml = buildFacturaXml(factura);XMLの検証:
import { validateFacturaInput } from "@dojocoding/hacienda-sdk";
const resultado = validateFacturaInput(datosFactura);
if (!resultado.valid) {
for (const err of resultado.errors) {
console.error(`${err.path}: ${err.message}`);
}
}IVA計算
Haciendaの規制に従って税金、行ごとの合計、要約を計算するユーティリティ。すべての金額は小数点以下5桁に丸められます。
import { round5, calculateLineItemTotals, calculateInvoiceSummary } from "@dojocoding/hacienda-sdk";
import type { LineItemInput, CalculatedLineItem, InvoiceSummary } from "@dojocoding/hacienda-sdk";
const item: LineItemInput = {
numeroLinea: 1,
codigoCabys: "8310100000000",
cantidad: 3,
unidadMedida: "Sp",
detalle: "Horas de consultoría",
precioUnitario: 75000,
esServicio: true,
impuesto: [{ codigo: "01", codigoTarifaIVA: "08", tarifa: 13 }],
};
const calculado: CalculatedLineItem = calculateLineItemTotals(item);
// calculado.montoTotal = 225000 (3 × ₡75.000)
// calculado.subTotal = 225000 (sin descuentos)
// calculado.impuestoNeto = 29250 (₡225.000 × 13%)
// calculado.montoTotalLinea = 254250 (₡225.000 + ₡29.250)
const resumen: InvoiceSummary = calculateInvoiceSummary([calculado]);
// resumen.totalServGravados = 225000
// resumen.totalImpuesto = 29250
// resumen.totalComprobante = 254250IVA免税:
const itemExonerado: LineItemInput = {
// ...campos base
impuesto: [
{
codigo: "01",
codigoTarifaIVA: "08",
tarifa: 13,
exoneracion: {
tipoDocumento: "01",
numeroDocumento: "AL-001-2025",
nombreInstitucion: "99", // código de institución (Nota v4.4)
fechaEmision: "2025-01-01T00:00:00",
tarifaExonerada: 13, // puntos de tarifa exonerados
},
},
],
};対応IVA税率: 0%、0.5%、1%、2%、4%、8%、13%(v4.4のコード01-11)
数字キー
各電子領収書には、一意の50桁の数字キーが必要です。SDKが自動的に生成および解析します。
構造: [506][DDMMYY][12桁の法人番号][支店3][端末5][文書タイプ2][連番10][状況1][セキュリティコード8]
import { buildClave, parseClave, DocumentType, Situation } from "@dojocoding/hacienda-sdk";
// Generar clave
const clave = buildClave({
date: new Date("2025-07-15"),
taxpayerId: "3101234567",
documentType: DocumentType.FACTURA_ELECTRONICA,
sequence: 42,
situation: Situation.NORMAL,
branch: "001", // Opcional, default "001"
pos: "00001", // Opcional, default "00001"
});
// => "50615072500310123456700100001010000000042112345678"
// Parsear clave existente
const parsed = parseClave(clave);
// parsed.countryCode => "506"
// parsed.date => Date(2025-07-15)
// parsed.taxpayerId => "003101234567"
// parsed.documentType => "01"
// parsed.sequence => 42
// parsed.situation => "1"
// parsed.securityCode => "12345678"状況コード:
1通常(標準オンライン送信)2緊急時(Haciendaシステムの障害)3オフライン(インターネットなし)
XAdES-EPESデジタル署名
Haciendaに送信されるすべてのXMLは、納税者の .p12 証明書(RSA 2048 + SHA-256)を使用してXAdES-EPESで署名する必要があります。SDKが署名プロセス全体を処理します。
import { readFileSync } from "node:fs";
import { signXml, signAndEncode, loadP12 } from "@dojocoding/hacienda-sdk";
const p12Buffer = readFileSync("/ruta/al/certificado.p12");
const pin = process.env.HACIENDA_P12_PIN!;
// Firmar XML (retorna XML firmado como string)
const xmlFirmado = await signXml(xml, p12Buffer, pin);
// Firmar y codificar en Base64 (listo para enviar a la API)
const xmlBase64 = await signAndEncode(xml, p12Buffer, pin);
// Cargar .p12 para inspeccionar el certificado
const credenciales = await loadP12(p12Buffer, pin);
// credenciales.privateKey — CryptoKey para firma
// credenciales.certificateDer — Certificado codificado en DER送信とステータス照会
簡略化オプション — submitAndWait(推奨):
ドキュメントを送信し、Haciendaが処理するのを待ちます。ポーリングを自動的に処理します。
import { submitAndWait, HttpClient } from "@dojocoding/hacienda-sdk";
const httpClient = new HttpClient({
baseUrl: "https://api.comprobanteselectronicos.go.cr/recepcion-sandbox/v1",
getToken: () => client.getAccessToken(),
});
const resultado = await submitAndWait(
httpClient,
{
clave: "50601...",
fecha: new Date().toISOString(),
emisor: {
tipoIdentificacion: "02",
numeroIdentificacion: "3101234567",
},
comprobanteXml: xmlBase64Firmado,
},
{
pollIntervalMs: 3000, // Consultar cada 3 segundos (default)
timeoutMs: 60000, // Timeout a 60 segundos (default)
onPoll: (status, intento) => {
console.log(`Intento ${intento}: ${status.status}`);
},
},
);
if (resultado.accepted) {
console.log("¡Comprobante aceptado por Hacienda!");
} else {
console.log("Rechazado:", resultado.rejectionReason);
}詳細オプション — 完全な制御:
import { submitDocument, getStatus, isTerminalStatus } from "@dojocoding/hacienda-sdk";
// Enviar
const response = await submitDocument(httpClient, solicitud);
// Consultar estado
const status = await getStatus(httpClient, "50601...");
if (isTerminalStatus(status.status)) {
console.log("Estado final:", status.status);
}領収書の一覧表示と照会:
import { listComprobantes, getComprobante } from "@dojocoding/hacienda-sdk";
const lista = await listComprobantes(httpClient, {
offset: 0,
limit: 10,
fechaEmisionDesde: "2025-01-01",
fechaEmisionHasta: "2025-12-31",
});
const detalle = await getComprobante(httpClient, "50601...");指数バックオフによる再試行:
import { withRetry } from "@dojocoding/hacienda-sdk";
const resultado = await withRetry(() => submitDocument(httpClient, solicitud), {
maxAttempts: 3,
delayMs: 1000,
backoff: "exponential",
});納税者照会
Haciendaの公開経済活動APIを使用して、任意の納税者の情報を検索します(認証不要):
import { lookupTaxpayer } from "@dojocoding/hacienda-sdk";
const info = await lookupTaxpayer("3101234567");
console.log(info.nombre); // "MI EMPRESA S.A."
console.log(info.tipoIdentificacion); // "02"
for (const actividad of info.actividades) {
console.log(`${actividad.codigo}: ${actividad.descripcion} (${actividad.estado})`);
}設定管理
設定は ~/.hacienda-cr/config.toml に保存され、複数のプロファイル(例:サンドボックス、本番、異なる会社)をサポートします。
import {
loadConfig,
saveConfig,
listProfiles,
deleteProfile,
getNextSequence,
resetSequence,
} from "@dojocoding/hacienda-sdk";
// Guardar un perfil
await saveConfig(
{
environment: "sandbox",
cedula_type: "02",
cedula: "3101234567",
p12_path: "/ruta/al/certificado.p12",
},
"miempresa",
);
// Cargar un perfil
const config = await loadConfig("miempresa");
// Listar perfiles
const perfiles = await listProfiles();
// Eliminar un perfil
await deleteProfile("perfil-viejo");
// Gestión de consecutivos (numeración automática)
const consecutivo = await getNextSequence("02", "3101234567", "01", "001", "00001");
await resetSequence("02", "3101234567", "01", "001", "00001");セキュリティ: パスワードとPINは設定ファイルに決して保存されません。常に環境変数で指定します:
HACIENDA_PASSWORD— IDPのパスワードHACIENDA_P12_PIN— .p12証明書のPIN
構造化ロギング
設定可能なレベルとJSONサポート(本番環境に最適)を備えた統合ロガー。
import { Logger, LogLevel, noopLogger } from "@dojocoding/hacienda-sdk";
const logger = new Logger({
level: LogLevel.DEBUG, // DEBUG, INFO, WARN, ERROR, SILENT
format: "text", // "text" | "json"
context: "mi-app",
});
logger.debug("Token refrescado", { expiresIn: 300 });
logger.info("Comprobante enviado", { clave: "50601..." });
logger.warn("Rate limit acercándose");
logger.error("Envío falló", { statusCode: 500 });
// Logger silencioso (suprime toda salida)
const silencioso = noopLogger;エラーハンドリング
SDKのすべてのエラーは、統一された処理のために HaciendaError を拡張します:
import {
HaciendaError,
ValidationError,
ApiError,
AuthenticationError,
SigningError,
} from "@dojocoding/hacienda-sdk";
try {
await client.authenticate();
const xml = buildFacturaXml(factura);
const firmado = await signAndEncode(xml, p12, pin);
const resultado = await submitAndWait(httpClient, solicitud);
} catch (err) {
if (err instanceof ValidationError) {
// Fallo de validación (esquema Zod o reglas de negocio)
console.error("Validación:", err.message, err.details);
} else if (err instanceof AuthenticationError) {
// Fallo de autenticación o ciclo de vida del token
console.error("Auth:", err.message);
} else if (err instanceof SigningError) {
// Fallo de firma XAdES-EPES (certificado malo, PIN incorrecto, etc.)
console.error("Firma:", err.message);
} else if (err instanceof ApiError) {
// Error HTTP/red de la API de Hacienda
console.error("API:", err.message, err.statusCode, err.responseBody);
} else if (err instanceof HaciendaError) {
// Cualquier otro error del SDK
console.error(`[${err.code}]`, err.message);
}
}エラーコード(HaciendaErrorCode):
コード | 説明 |
| Zod検証またはビジネスルールの失敗 |
| Hacienda REST APIがエラーを返したか、到達不能でした |
| 認証またはトークンのライフサイクルに失敗しました |
| XAdES-EPES署名操作に失敗しました |
| 予期しない内部エラー |
CLI — コマンドリファレンス
npm install -g @dojocoding/hacienda-cliすべてのコマンドは、機械可読な出力のために --json をサポートしています。
hacienda auth login
HaciendaのIDPで認証し、プロファイルを保存します。
hacienda auth login \
--cedula-type 02 \
--cedula 3101234567 \
--environment sandbox \
--profile default
# Contraseña por variable de entorno (recomendado)
export HACIENDA_PASSWORD="tu-contraseña"
hacienda auth login --cedula-type 02 --cedula 3101234567引数 | 説明 |
|
|
| 識別番号 |
| IDPのパスワード(または |
|
|
| プロファイル名(デフォルト: |
hacienda auth status
現在の認証状態を表示します。
hacienda auth status
hacienda auth status --profile produccion
hacienda auth status --jsonhacienda auth switch
認証プロファイルを切り替えます。
hacienda auth switch # Listar perfiles disponibles
hacienda auth switch produccion # Cambiar a un perfil específicohacienda submit
電子領収書をHaciendaに送信します。
hacienda submit factura.json --dry-run # Vista previa del XML
hacienda submit factura.json # Enviar de verdad
hacienda submit factura.json --json # Salida JSONhacienda status
キーによる領収書の処理ステータスを照会します。
hacienda status 50601012400310123456700100001010000000001199999999hacienda list
Haciendaから最近の領収書を一覧表示します。
hacienda list
hacienda list --limit 50 --offset 0
hacienda list --jsonhacienda get
キーによる領収書の完全な詳細を取得します。
hacienda get 50601012400310123456700100001010000000001199999999hacienda sign
.p12証明書でXMLドキュメントに署名します(XAdES-EPES)。
hacienda sign factura.xml --p12 cert.p12 --pin 1234 --output firmado.xml
hacienda sign factura.xml --p12 cert.p12 --pin 1234 # stdout
# Con variables de entorno
export HACIENDA_P12_PATH=/ruta/al/cert.p12
export HACIENDA_P12_PIN=1234
hacienda sign factura.xml --output firmado.xmlhacienda validate
請求書ファイル(JSONまたはXML)をスキーマとビジネスルールに対して検証します。
hacienda validate factura.json
hacienda validate documento.xml
hacienda validate factura.json --jsonhacienda lookup
法人番号による納税者の経済活動を照会します(認証不要)。
hacienda lookup 3101234567
hacienda lookup 3101234567 --jsonhacienda draft
送信用のJSON請求書ドラフトを対話的に作成します。
hacienda draft # Modo interactivo
hacienda draft --no-interactive # Plantilla en blanco
hacienda draft --template nota-credito --output nc.jsonテンプレート: factura(デフォルト)、nota-credito、nota-debito、tiquete
環境変数
変数 | 説明 |
| 認証用のIDPパスワード |
| .p12証明書ファイルのPIN |
| .p12証明書ファイルへのパス |
MCPサーバー — AI統合
@dojocoding/hacienda-mcp パッケージは、SDKをMCPサーバー(Model Context Protocol)として公開し、AIアシスタントが会話形式で電子請求書を発行できるようにします。
Claude Desktopでの設定
claude_desktop_config.json にこれを追加します:
{
"mcpServers": {
"hacienda-cr": {
"command": "npx",
"args": ["-y", "@dojocoding/hacienda-mcp"]
}
}
}利用可能なツール
ツール | 説明 |
| 構造化データから電子請求書を作成します。税金を計算し、キーを生成し、XMLを構築します。 |
| 50桁の数字キーによる処理ステータスを照会します。 |
| オプションのフィルターを使用して最近の電子領収書を一覧表示します。 |
| キーによる領収書の完全な詳細を取得します。 |
| 法人番号による納税者情報を照会します。 |
| デフォルト値で請求書ドラフトを生成します。 |
利用可能なリソース
URI | 説明 |
| 請求書作成用のJSONスキーマ |
| 伝票タイプ、コード、説明 |
| 税コード、IVA税率、測定単位 |
| 識別タイプと検証ルール |
開発
前提条件
Node.js 22+(ネイティブの
fetchとcrypto.subtleを使用)pnpm 9+
はじめに
git clone https://github.com/DojoCodingLabs/hacienda-cr.git
cd hacienda-cr
pnpm install
pnpm build
pnpm test
pnpm lint
pnpm typecheckプロジェクト構造
hacienda-cr/
├── packages/
│ ├── sdk/ # @dojocoding/hacienda-sdk — Core: auth, XML, firma, API
│ ├── cli/ # @dojocoding/hacienda-cli — Binario `hacienda` (citty)
│ └── mcp/ # @dojocoding/hacienda-mcp — Servidor MCP
├── shared/ # @dojocoding/hacienda-shared — Tipos, constantes, enums compartidos
├── turbo.json # Configuración de Turborepo
├── vitest.workspace.ts
└── pnpm-workspace.yaml個別パッケージのビルド
pnpm --filter @dojocoding/hacienda-sdk build
pnpm --filter @dojocoding/hacienda-sdk test
pnpm --filter @dojocoding/hacienda-sdk test clave.spec.ts技術スタック
ツール | 目的 |
TypeScript (strict) | 言語 |
pnpm workspaces + Turborepo | モノレポ管理 |
tsup | ビルド(ゼロ設定) |
Vitest | テスト(780以上のテスト) |
ESLint + Prettier | リントとフォーマット |
Zod | ランタイム検証+型推論 |
fast-xml-parser | XMLの生成とパース |
citty | CLIフレームワーク |
@modelcontextprotocol/sdk | MCPフレームワーク |
xadesjs / xmldsigjs | XAdES-EPESデジタル署名 |
貢献
リポジトリをフォークする
ブランチを作成する(
git checkout -b feature/mi-feature)テスト付きで変更を加える
pnpm test && pnpm lint && pnpm typecheckを実行するプルリクエストを開く
規約:
ファイル:
kebab-case.ts型/クラス:
PascalCase関数/変数:
camelCase定数:
UPPER_SNAKE_CASE
謝辞
このプロジェクトは、コスタリカのオープンソースコミュニティの先駆的な取り組みの上に構築されています:
CRLibre/API_Hacienda — コスタリカの電子請求書発行のためのオリジナルのオープンソースAPI(PHP)。そのドキュメント、フローチャート、コミュニティリソースは、Hacienda APIを理解する上で非常に貴重な参考資料でした。CRLibreコミュニティの皆様が、コスタリカの開発者にとって電子請求書発行を身近なものにしてくださったことに感謝します。
CRLibre/fe-hacienda-cr-misc — コスタリカの電子請求書発行のための共有リソースとドキュメント。
ライセンス
This server cannot be deployed
Maintenance
Related MCP Connectors
Costa Rica Hacienda v4.4: AI agents submit and query electronic invoices, stateless BYO.
Official Timbrix MCP server: stamp, cancel, and query Mexican CFDI 4.0 invoices from AI agents.
- ZapierOAuthcom.zapier
Hosted MCP server connecting AI assistants to 9,000+ apps and 40,000+ actions via Zapier.
MCP server unifying ERPs, CRMs, APIs and knowledge base for Claude, ChatGPT and Gemini.
Related MCP Servers
- FlicenseNot gradedqualityDmaintenanceAn MCP server that integrates with the FacturaScripts ERP system, providing resources and tools to manage clients, products, invoices, accounting entries, and business analytics through natural language.10-
- AlicenseAqualityBmaintenanceOpen-source MCP server for Chile's SII free invoicing system, enabling AI agents to query issued and received tax documents.122MIT
- AlicenseNot gradedqualityDmaintenanceMCP server enabling AI assistants to manage invoices, contacts, products, and other accounting data through the Bukku API.7MIT
- AlicenseNot gradedqualityCmaintenanceMCP server for SRI electronic invoicing in Ecuador, enabling AI agents to emit invoices, credit notes, retention documents, and more via natural language through the Cobra API.MIT