Skip to main content
Glama
JosueSay

FEL MCP Server (Local)

by JosueSay

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 MCP server: eleata e-invoice MCP server

✨ 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 *.xml in dir_xml, produces one PDF per XML in out_dir, and writes manifest.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.txt

Create your environment file (use absolute WSL paths):

cp .env.example .env

Key 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.py

Validate 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.py

Render 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.py

Batch:

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)

  1. Install Claude Desktop: https://claude.ai/download

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

  3. Restart Claude Desktop (PowerShell):

Stop-Process -Name "Claude" -Force; Start-Process "<ABSOLUTE_WINDOWS_PATH_TO_Claude.exe>"

📚 References

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

ActivityInactive
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

  • A
    license
    Not graded
    quality
    C
    maintenance
    InvoiceXML 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 n
    5
    MIT
  • A
    license
    A
    quality
    B
    maintenance
    Validates 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.
    3
    53
    MIT
  • A
    license
    A
    quality
    C
    maintenance
    Validates electronic invoices (XRechnung, ZUGFeRD, Factur-X, Peppol BIS, etc.) against authority-pinned rules and explains failures.
    2
    172
    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/JosueSay/MCPLocalFEL'

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