Skip to main content
Glama
DojoCodingLabs

hacienda-cr MCP Server

hacienda-cr — 哥斯达黎加电子发票

最完整的哥斯达黎加电子发票开源工具包。
SDK + CLI + MCP服务器,用于向财政部(Ministerio de Hacienda)的v4.4 API签发电子凭证。

npm version CI License: MIT Node.js TypeScript


为什么选择 hacienda-cr?

在哥斯达黎加签发电子发票不应该是一件头疼的事。在OAuth2认证、生成带有特定命名空间的XML、XAdES-EPES数字签名、50位数字密钥以及状态轮询之间……有太多偶然的复杂性。

hacienda-cr 用一个工具包解决了所有这些问题:

  • SDK — 具有严格类型的TypeScript库:认证、XML、数字签名、增值税计算、发送和查询。

  • CLI — 命令行工具 hacienda,用于在终端中签发、签名、验证和查询。

  • MCP服务器 — 模型上下文协议(Model Context Protocol)服务器,让AI助手(如Claude等)为您签发发票。

支持全部7种凭证类型 + 接收方消息。兼容沙箱和生产环境。


Related MCP server: mcp-sii

2分钟快速开始

选项1:SDK(面向开发者)

npm install @dojocoding/hacienda-sdk
import { 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-mcp

您可以对Claude说:"为Mi Empresa S.A.(税号3101234567)向Cliente S.R.L.(税号3109876543)创建一张发票,内容为2小时咨询服务,每小时₡50,000,含13%的增值税。"


支持的凭证类型

代码

凭证类型

SDK构建器

01

电子发票

buildFacturaXml()

02

电子借记通知

buildNotaDebitoXml()

03

电子贷记通知

buildNotaCreditoXml()

04

电子小票

buildTiqueteXml()

05

采购电子发票

buildFacturaCompraXml()

06

出口电子发票

buildFacturaExportacionXml()

07

电子付款收据

buildReciboPagoXml()

接收方消息(接受/拒绝)

buildMensajeReceptorXml()


目录


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(资源所有者密码凭据)。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

sandbox

api.comprobanteselectronicos.go.cr/recepcion-sandbox/v1/

rut-stag

api-stag

production

api.comprobanteselectronicos.go.cr/recepcion/v1/

rut

api-prod

创建文档

电子发票的完整示例 — 其他类型的流程相同:

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}`);
  }
}

增值税计算

用于计算税费、每行总额和汇总的工具,符合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   = 254250

增值税豁免:

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
      },
    },
  ],
};

支持的增值税税率: 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):

代码

描述

VALIDATION_FAILED

Zod验证或业务规则失败

API_ERROR

Hacienda REST API返回错误或无法访问

AUTHENTICATION_FAILED

认证或令牌生命周期失败

SIGNING_FAILED

XAdES-EPES签名操作失败

INTERNAL_ERROR

意外的内部错误


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

参数

描述

--cedula-type

01(自然人)、02(法人)、03(DIMEX)、04(NITE)

--cedula

身份证号码

--password

IDP密码(或使用HACIENDA_PASSWORD

--environment

sandbox(默认)或production

--profile

配置文件名(默认:default

hacienda auth status

显示当前认证状态。

hacienda auth status
hacienda auth status --profile produccion
hacienda auth status --json

hacienda auth switch

切换认证配置文件。

hacienda auth switch            # Listar perfiles disponibles
hacienda auth switch produccion # Cambiar a un perfil específico

hacienda 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 JSON

hacienda status

通过密钥查询凭证的处理状态。

hacienda status 50601012400310123456700100001010000000001199999999

hacienda list

从Hacienda列出最近的凭证。

hacienda list
hacienda list --limit 50 --offset 0
hacienda list --json

hacienda get

通过密钥获取凭证的完整详情。

hacienda get 50601012400310123456700100001010000000001199999999

hacienda sign

使用.p12证书(XAdES-EPES)对XML文档进行签名。

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.xml

hacienda validate

根据模式和业务规则验证发票文件(JSON或XML)。

hacienda validate factura.json
hacienda validate documento.xml
hacienda validate factura.json --json

hacienda lookup

通过税号查询纳税人的经济活动(无需认证)。

hacienda lookup 3101234567
hacienda lookup 3101234567 --json

hacienda draft

交互式创建用于发送的JSON发票草稿。

hacienda draft                                       # Modo interactivo
hacienda draft --no-interactive                      # Plantilla en blanco
hacienda draft --template nota-credito --output nc.json

模板: factura(默认)、nota-creditonota-debitotiquete

环境变量

变量

描述

HACIENDA_PASSWORD

用于认证的IDP密码

HACIENDA_P12_PIN

.p12证书文件的PIN

HACIENDA_P12_PATH

.p12证书文件的路径


MCP服务器 — AI集成

@dojocoding/hacienda-mcp包将SDK暴露为MCP服务器(模型上下文协议),允许AI助手以对话方式签发电子发票。

使用Claude Desktop配置

将此添加到claude_desktop_config.json

{
  "mcpServers": {
    "hacienda-cr": {
      "command": "npx",
      "args": ["-y", "@dojocoding/hacienda-mcp"]
    }
  }
}

可用工具

工具

描述

create_invoice

从结构化数据创建电子发票。计算税费、生成密钥并构建XML。

check_status

通过50位数字密钥查询处理状态。

list_documents

列出最近的电子凭证,支持可选过滤器。

get_document

通过密钥获取凭证的完整详情。

lookup_taxpayer

通过税号查询纳税人信息。

draft_invoice

生成带有默认值的发票草稿。

可用资源

URI

描述

hacienda://schemas/factura

用于创建发票的 JSON 模式

hacienda://reference/document-types

凭证类型、代码和描述

hacienda://reference/tax-codes

税码、增值税税率和计量单位

hacienda://reference/id-types

身份类型和验证规则


开发

前提条件

  • Node.js 22+(使用原生 fetchcrypto.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 数字签名

贡献

  1. Fork 仓库

  2. 创建分支(git checkout -b feature/mi-feature

  3. 进行修改并附带测试

  4. 运行 pnpm test && pnpm lint && pnpm typecheck

  5. 提交 pull request

约定:

  • 文件:kebab-case.ts

  • 类型/类:PascalCase

  • 函数/变量:camelCase

  • 常量:UPPER_SNAKE_CASE


致谢

本项目建立在哥斯达黎加开源社区的开创性工作之上:

  • CRLibre/API_Hacienda — 哥斯达黎加电子发票的原始开源 API(PHP)。其文档、流程图和社区资源是理解 Hacienda API 的宝贵参考。感谢整个 CRLibre 社区让哥斯达黎加开发者能够轻松使用电子发票功能。

  • CRLibre/fe-hacienda-cr-misc — 哥斯达黎加电子发票的共享资源和文档。


许可证

MIT


Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.

No tool schema history has been recorded yet.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

  • F
    license
    Not graded
    quality
    F
    maintenance
    An 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
    -
  • A
    license
    A
    quality
    B
    maintenance
    Open-source MCP server for Chile's SII free invoicing system, enabling AI agents to query issued and received tax documents.
    12
    1
    MIT
  • A
    license
    Not graded
    quality
    A
    maintenance
    MCP 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

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/DojoCodingLabs/hacienda-cr'

If you have feedback or need assistance with the MCP directory API, please join our Discord server