hacienda-cr MCP Server
hacienda-cr — 코스타리카 전자 세금계산서
코스타리카 전자 세금계산서 발행을 위한 가장 완벽한 오픈소스 툴킷.
재무부(Hacienda) API v4.4에 전자 영수증을 발행하기 위한 SDK + CLI + MCP 서버.
왜 hacienda-cr인가?
코스타리카에서 전자 세금계산서를 발행하는 것은 골칫거리가 되어서는 안 됩니다. OAuth2 인증, 특정 네임스페이스가 있는 XML 생성, XAdES-EPES 디지털 서명, 50자리 숫자 키, 상태 폴링까지... 우발적 복잡성이 너무 많습니다.
hacienda-cr은 이 모든 것을 하나의 툴킷으로 해결합니다:
SDK — 엄격한 타입의 TypeScript 라이브러리: 인증, XML, 디지털 서명, IVA 계산, 전송 및 조회.
CLI — 터미널에서 발행, 서명, 검증, 조회를 위한
hacienda명령줄 도구.MCP Server — AI 어시스턴트(Claude 등)가 대신 세금계산서를 발행할 수 있게 해주는 Model Context Protocol 서버.
7가지 영수증 유형 + 수신자 메시지(Receptor Message)와 호환됩니다. 샌드박스 및 프로덕션 환경을 지원합니다.
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 Server (AI 어시스턴트용)
npm install -g @dojocoding/hacienda-mcp
hacienda-mcpClaude에게 이렇게 말할 수 있습니다: "Mi Empresa S.A.(법인번호 3101234567)가 Cliente S.R.L.(법인번호 3109876543)에게 시간당 ₡50,000, IVA 13%로 2시간 컨설팅 세금계산서를 생성해줘."
지원되는 영수증 유형
코드 | 영수증 유형 | SDK 빌더 |
| 전자 세금계산서 (Factura Electrónica) |
|
| 전자 차변 메모 (Nota de Débito Electrónica) |
|
| 전자 대변 메모 (Nota de Crédito Electrónica) |
|
| 전자 티켓 (Tiquete Electrónico) |
|
| 전자 구매 세금계산서 (Factura Electrónica de Compra) |
|
| 전자 수출 세금계산서 (Factura Electrónica de Exportación) |
|
| 전자 지불 영수증 (Recibo Electrónico de Pago) |
|
— | 수신자 메시지 (수락/거부) |
|
목차
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 Server — 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 | 빌드 (zero-config) |
Vitest | 테스팅 (780+ tests) |
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