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 — 코스타리카 전자 송장 발행을 위한 공유 리소스 및 문서.
라이선스
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.
This server cannot be installed
Maintenance
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
Costa Rica Hacienda v4.4: AI agents submit and query electronic invoices, stateless BYO.
- 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.
Mexico CFDI 4.0 invoices for AI agents - issue, query, cancel facturas via Facturapi.
Related MCP Servers
- FlicenseNot gradedqualityFmaintenanceAn 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.121MIT
- AlicenseNot gradedqualityDmaintenanceMCP server enabling AI assistants to manage invoices, contacts, products, and other accounting data through the Bukku API.6MIT
- AlicenseNot gradedqualityAmaintenanceMCP 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
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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