hacienda-cr MCP Server
hacienda-cr — Электронное выставление счетов Коста-Рика
Самый полный инструментарий с открытым исходным кодом для электронного выставления счетов в Коста-Рике.
SDK + CLI + MCP-сервер для выпуска электронных документов через API v4.4 Министерства финансов.
Почему hacienda-cr?
Выставление электронных счетов в Коста-Рике не должно быть головной болью. Между аутентификацией OAuth2, генерацией XML с определёнными пространствами имён, цифровой подписью XAdES-EPES, числовым ключом из 50 цифр и опросом статуса... слишком много случайной сложности.
hacienda-cr решает всё это в одном инструментарии:
SDK — библиотека TypeScript со строгой типизацией: аутентификация, XML, цифровая подпись, расчёт НДС, отправка и запрос.
CLI — инструмент командной строки
haciendaдля выпуска, подписания, проверки и запроса из терминала.MCP Server — сервер Model Context Protocol, чтобы ИИ-ассистенты (Claude и др.) могли выставлять счета за вас.
Работает со всеми 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 Server (для ИИ-ассистентов)
npm install -g @dojocoding/hacienda-mcp
hacienda-mcpВы можете сказать Клоду: "Создай счёт от Mi Empresa S.A. (ID 3101234567) для Cliente S.R.L. (ID 3109876543) за 2 часа консалтинга по ₡50 000 каждый с НДС 13%."
Поддерживаемые типы документов
Код | Тип документа | Builder из 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();Жизненный цикл токена:
Access token истекает через ~5 минут (кэшируется в памяти, обновляется за 30 секунд до истечения)
Refresh token действует ~10 часов
getAccessToken()прозрачно обрабатывает обновление
Среды Hacienda:
Среда | Базовый URL API | 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}`);
}
}Расчёт НДС
Утилиты для расчёта налогов, итогов по строкам и сводок в соответствии с нормативными требованиями 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% (коды 01-11 из v4.4)
Числовой ключ
Каждый электронный документ требует уникальный числовой ключ из 50 цифр. SDK генерирует и разбирает его автоматически.
Структура: [506][ДДММГГ][ID 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
Каждый XML, отправляемый в Hacienda, должен быть подписан XAdES-EPES с использованием сертификата .p12 налогоплательщика (RSA 2048 + SHA-256). 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",
});Запрос информации о налогоплательщиках
Ищите информацию о любом налогоплательщике через публичный API экономической деятельности Hacienda (не требует аутентификации):
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— пароль IDPHACIENDA_P12_PIN— PIN-код сертификата .p12
Структурированное логирование
Встроенный логгер с настраиваемыми уровнями и поддержкой 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 или бизнес-правил |
| REST API Hacienda вернул ошибку или был недоступен |
| Не удалась аутентификация или жизненный цикл токена |
| Не удалась операция подписания XAdES-EPES |
| Непредвиденная внутренняя ошибка |
CLI — Справочник команд
npm install -g @dojocoding/hacienda-cliВсе команды поддерживают --json для машиночитаемого вывода.
hacienda auth login
Аутентификация через IDP Hacienda и сохранение профиля.
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
Подписать XML-документ сертификатом .p12 (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
Запросить экономическую деятельность налогоплательщика по ID (без аутентификации).
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 для аутентификации |
| PIN-код файла сертификата .p12 |
| Путь к файлу сертификата .p12 |
MCP Server — Интеграция с ИИ
Пакет @dojocoding/hacienda-mcp предоставляет SDK как MCP-сервер (Model Context Protocol), позволяя ИИ-ассистентам выставлять электронные счета в разговорном режиме.
Настройка с Claude Desktop
Добавьте это в claude_desktop_config.json:
{
"mcpServers": {
"hacienda-cr": {
"command": "npx",
"args": ["-y", "@dojocoding/hacienda-mcp"]
}
}
}Доступные инструменты
Инструмент | Описание |
| Создать электронный счёт-фактуру из структурированных данных. Рассчитывает налоги, генерирует ключ и строит XML. |
| Проверить статус обработки по числовому ключу из 50 цифр. |
| Список недавних электронных документов с необязательными фильтрами. |
| Получить полные сведения о документе по ключу. |
| Запросить информацию о налогоплательщике по ID. |
| Сгенерировать черновик счёта со значениями по умолчанию. |
Доступные ресурсы
URI | Описание |
| JSON-схема для создания счетов-фактур |
| Типы документов, коды и описания |
| Коды налогов, ставки НДС и единицы измерения |
| Типы идентификации и правила валидации |
Разработка
Предварительные требования
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+ тестов) |
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Откройте pull request
Соглашения:
Файлы:
kebab-case.tsТипы/Классы:
PascalCaseФункции/Переменные:
camelCaseКонстанты:
UPPER_SNAKE_CASE
Благодарности
Этот проект построен на новаторской работе коста-риканского open-source сообщества:
CRLibre/API_Hacienda — Оригинальный open-source API для электронного выставления счетов в Коста-Рике (PHP). Его документация, блок-схемы и ресурсы сообщества были бесценными справочными материалами для понимания API Hacienda. Спасибо всему сообществу 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