FEL MCP Server (Local)
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@FEL MCP Server (Local)validate the FEL invoice at /mnt/d/invoices/factura_001.xml"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
FEL MCP Server (Local)
Local Model Context Protocol (MCP) server for Guatemalan FEL invoices.
Exposes tools to validate FEL XML and render branded PDFs. Designed for WSL (Ubuntu) or Linux and can be consumed by MCP hosts (e.g., Claude Desktop).
This repository focuses on the FEL MCP server. It’s often used alongside a chatbot client; see “Related repositories”.
🔗 Related repositories
Chatbot (CLI / UI) — client that can drive this MCP server.
Reference: OpenAI Chat API Example — reference only (patterns for API connectivity and instruction context).
Related MCP server: Dokmatiq DocGen
✨ Tools (MCP)
fel_validate
required:xml_path(absolute WSL path)
Checks required fields and totals (subtotal, VAT 12%, total).fel_render
required:xml_path,out_path(absolute WSL paths)
Renders a branded PDF from the FEL XML.fel_batch
required:dir_xml,out_dir(absolute WSL paths)
Processes all*.xmlindir_xml, produces one PDF per XML inout_dir, and writesmanifest.json.
Use absolute WSL paths like
/mnt/d/...in all arguments and environment variables.
⚙️ Requirements
Python 3.12
WSL Ubuntu 22.04 (or Linux)
Virtual environment (recommended)
🔧 Installation
git clone <REPO_URL>
cd <REPO_DIR>
python3.12 -m venv venv
source venv/bin/activate
pip install -r requirements.txtCreate your environment file (use absolute WSL paths):
cp .env.example .envKey variables used by the server (placeholders shown):
# I/O
FEL_XML_PATH=/ABSOLUTE/PATH/TO/REPO/data/xml/factura.xml
FEL_OUTPUT_PDF=/ABSOLUTE/PATH/TO/REPO/data/out/factura.pdf
FEL_BATCH_OUT_DIR=/ABSOLUTE/PATH/TO/REPO/data/out
# optional logo
FEL_LOGO_PATH=/ABSOLUTE/PATH/TO/REPO/data/logos/logo.jpg
# Fonts
FEL_ACTIVE_FONT=1
FEL_FONT_DIR_MONTSERRAT=/ABSOLUTE/PATH/TO/REPO/assets/fonts/Montserrat/static
FEL_FONT_DIR_ROBOTOMONO=/ABSOLUTE/PATH/TO/REPO/assets/fonts/Roboto_Mono/static
# Theme/Layout
FEL_THEME=light
FEL_QR_SIZE=150
FEL_TOP_BAR_HEIGHT=20▶️ Run the server (STDIO)
source venv/bin/activate
python servers/fel_mcp_server/server_stdio.py🧪 Quick CLI tests (JSON-RPC over stdin)
List tools:
printf '%s\n' \
'{"jsonrpc":"2.0","id":1,"method":"initialize","params":{}}' \
'{"jsonrpc":"2.0","id":2,"method":"tools/list"}' \
| python servers/fel_mcp_server/server_stdio.pyValidate one XML:
printf '%s\n' \
'{"jsonrpc":"2.0","id":1,"method":"initialize","params":{}}' \
'{"jsonrpc":"2.0","id":2,"method":"tools/call","params":{"name":"fel_validate","arguments":{"xml_path":"/ABSOLUTE/PATH/TO/REPO/data/xml/factura.xml"}}}' \
| python servers/fel_mcp_server/server_stdio.pyRender one PDF (no logo):
printf '%s\n' \
'{"jsonrpc":"2.0","id":1,"method":"initialize","params":{}}' \
'{"jsonrpc":"2.0","id":2,"method":"tools/call","params":{"name":"fel_render","arguments":{"xml_path":"/ABSOLUTE/PATH/TO/REPO/data/xml/factura.xml","out_path":"/ABSOLUTE/PATH/TO/REPO/data/out/testing.pdf"}}}' \
| python servers/fel_mcp_server/server_stdio.pyBatch:
printf '%s\n' \
'{"jsonrpc":"2.0","id":1,"method":"initialize","params":{}}' \
'{"jsonrpc":"2.0","id":2,"method":"tools/call","params":{"name":"fel_batch","arguments":{"dir_xml":"/ABSOLUTE/PATH/TO/REPO/data/xml","out_dir":"/ABSOLUTE/PATH/TO/REPO/data/out/batch"}}}' \
| python servers/fel_mcp_server/server_stdio.py🖥️ Use with Claude Desktop (MCP)
Install Claude Desktop: https://claude.ai/download
Open Settings -> Developer -> Edit Config, then edit
claude_desktop_config.json:{ "mcpServers": { "FEL": { "command": "wsl.exe", "args": [ "-e", "/ABSOLUTE/PATH/TO/REPO/venv/bin/python", "/ABSOLUTE/PATH/TO/REPO/servers/fel_mcp_server/server_stdio.py" ] } } }Use absolute WSL paths in
args.If the host logs show errors like
"'xml_path'", it means the call was sent without arguments; re-run with a prompt that includes the exact JSON arguments block.
Restart Claude Desktop (PowerShell):
Stop-Process -Name "Claude" -Force; Start-Process "<ABSOLUTE_WINDOWS_PATH_TO_Claude.exe>"📚 References
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 Servers
- AlicenseAqualityDmaintenanceMCP server for DACH e-invoicing. Create XRechnung (UBL) and ZUGFeRD 2.3 (Factur-X CII) invoices, validate against EN 16931 rules, extract data from XML, and convert between UBL, CII and JSON formats.Last updated6512MIT

Dokmatiq DocGenofficial
AlicenseAqualityBmaintenancePDF/DOCX/Excel generation from HTML/Markdown with stationery overlay, ZUGFeRD/XRechnung e-invoicing, digital signing, form filling, and AI receipt OCR with DATEV/SKR03 export.Last updated40MIT
InvoiceXMLofficial
Alicense-qualityBmaintenanceInvoiceXML brings e-invoice compliance to your AI agent. Create, validate, convert, render, and extract structured invoices across UBL (Peppol BIS Billing 3.0, used worldwide), CII, Factur-X, ZUGFeRD, and XRechnung, all checked against the EN 16931 standard and official Schematron rules. Ask your assistant to generate a compliant invoice, validate one for errors, or convert between formats, with nLast updated5MIT- AlicenseAqualityCmaintenanceValidates EU electronic invoices (Peppol, XRechnung, FatturaPA, etc.) and explains validation error codes, enabling AI coding agents to check invoice validity and get fixes before rejection.Last updated358MIT
Related MCP Connectors
Create, validate, convert & extract compliant e-invoices (UBL, Factur-X, ZUGFeRD, XRechnung)
EN 16931-compliant e-invoices: XRechnung, ZUGFeRD, Factur-X, Peppol BIS, Facturae or US PDF. Free.
Peru CPE invoices for AI agents - issue, query, void facturas/boletas via SUNAT (2 backends).
Appeared in Searches
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/JosueSay/MCPLocalFEL'
If you have feedback or need assistance with the MCP directory API, please join our Discord server