Skip to main content

MCP server for Siigo invoicing software

Project description

Siigo MCP Server

Unofficial MCP server for Siigo invoicing software (Colombian electronic invoicing) created by @dsfaccini.

Disclaimers: This is an independent project and is not affiliated with Siigo. The project is at early stages so extensive testing is recommended before production use. The MCP server doesn't include any custom logic beyond calling the documented Siigo API endpoints.

Security Warning: This MCP server gives AI direct access to Siigo API endpoints. By default, only read-only tools are enabled. See Safety Modes before enabling write operations.

Quick Start

{
  "mcpServers": {
    "siigo": {
      "command": "uvx",
      "args": ["siigo-mcp"],
      "env": {
        "SIIGO_USERNAME": "your-email@example.com",
        "SIIGO_ACCESS_KEY": "your-access-key",
        "SIIGO_PARTNER_ID": "your-partner-id"
      }
    }
  }
}

Or run directly:

uvx siigo-mcp

Installation

Option 1: uvx (recommended, no install)

uvx siigo-mcp

Option 2: pip/uv install

uv tool install siigo-mcp
# or
pip install siigo-mcp

Option 3: From source

git clone https://github.com/your-org/siigo-mcp.git
cd siigo-mcp
uv sync
uv run siigo-mcp

Prerequisites

  • uv package manager

macOS/Linux:

curl -LsSf https://astral.sh/uv/install.sh | sh

Windows:

powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"

Configuration

Environment Variables

Variable Required Description
SIIGO_USERNAME Yes Siigo account email
SIIGO_ACCESS_KEY Yes Siigo API access key
SIIGO_PARTNER_ID Yes Siigo partner ID
SIIGO_MODE No Tool mode: read_only (default), standard, full
SIIGO_LAZY_TOOLS No Set to true for token-optimized lazy loading
DRY_RUN No Set to true to mock write operations
LOGFIRE_TOKEN No Pydantic Logfire token for observability

Safety Modes (SIIGO_MODE)

Mode Tools Available Use Case
read_only 19 tools: list_*, get_* only Safe exploration, testing
standard 30 tools: Read + create/update/delete Normal usage (no DIAN)
full 33 tools: All including DIAN operations Production with caution

Dangerous tools (only in full mode):

  • stamp_invoice - Sends invoice to DIAN (legally binding)
  • annul_invoice - Cancels official documents
  • send_invoice_email - Sends emails to customers

Lazy Tools Mode (SIIGO_LAZY_TOOLS)

For smaller context models or cost optimization, enable lazy loading:

Mode Tokens Description
Default ~5,600 All 33 tools loaded upfront
Lazy (true) ~300 Only 3 discovery tools

In lazy mode, LLM uses these meta-tools:

  • list_siigo_tools(category?) - Discover available tools
  • get_tool_schema(tool_name) - Get full parameter schema
  • call_siigo_tool(tool_name, params) - Execute any tool dynamically
{
  "env": {
    "SIIGO_LAZY_TOOLS": "true"
  }
}

MCP Client Setup

Claude Desktop

Config location:

  • macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
  • Windows: %APPDATA%\Claude\claude_desktop_config.json
{
  "mcpServers": {
    "siigo": {
      "command": "uvx",
      "args": ["siigo-mcp"],
      "env": {
        "SIIGO_USERNAME": "your-email@example.com",
        "SIIGO_ACCESS_KEY": "your-access-key",
        "SIIGO_PARTNER_ID": "your-partner-id"
      }
    }
  }
}

Claude Code

Add to ~/.claude.json or .mcp.json in your project:

{
  "mcpServers": {
    "siigo": {
      "type": "stdio",
      "command": "uvx",
      "args": ["siigo-mcp"],
      "env": {
        "SIIGO_USERNAME": "${SIIGO_USERNAME}",
        "SIIGO_ACCESS_KEY": "${SIIGO_ACCESS_KEY}",
        "SIIGO_PARTNER_ID": "${SIIGO_PARTNER_ID}"
      }
    }
  }
}

Cursor

Add to ~/.cursor/mcp.json or .cursor/mcp.json in your project:

{
  "mcpServers": {
    "siigo": {
      "type": "stdio",
      "command": "uvx",
      "args": ["siigo-mcp"],
      "env": {
        "SIIGO_USERNAME": "${env:SIIGO_USERNAME}",
        "SIIGO_ACCESS_KEY": "${env:SIIGO_ACCESS_KEY}",
        "SIIGO_PARTNER_ID": "${env:SIIGO_PARTNER_ID}"
      }
    }
  }
}

VS Code

Add to .vscode/mcp.json:

{
  "servers": {
    "siigo": {
      "command": "uvx",
      "args": ["siigo-mcp"],
      "env": {
        "SIIGO_USERNAME": "${env:SIIGO_USERNAME}",
        "SIIGO_ACCESS_KEY": "${env:SIIGO_ACCESS_KEY}",
        "SIIGO_PARTNER_ID": "${env:SIIGO_PARTNER_ID}"
      }
    }
  }
}

Available Tools

Read-Only (Safe)

Reference Data:

  • get_taxes - Tax configurations
  • get_payment_types - Payment methods
  • get_document_types - Document types (FV, NC, etc.)
  • get_warehouses - Warehouse locations
  • get_users - System users
  • get_account_groups - Account classifications

Customers:

  • list_customers - List with pagination/filters
  • get_customer - Get by ID

Products:

  • list_products - List with pagination/filters
  • get_product - Get by ID

Invoices:

  • list_invoices - List with pagination/filters
  • get_invoice - Get by ID
  • get_invoice_pdf - Download PDF
  • get_stamp_errors - DIAN rejection errors

Credit Notes:

  • list_credit_notes - List with pagination/filters
  • get_credit_note - Get by ID
  • get_credit_note_pdf - Download PDF

Journals:

  • list_journals - List with pagination/filters
  • get_journal - Get by ID

Write Operations (standard mode)

  • create_customer, update_customer, delete_customer
  • create_product, update_product, delete_product
  • create_invoice, update_invoice, delete_invoice
  • create_credit_note
  • create_journal

Dangerous (full mode only)

  • stamp_invoice - Send to DIAN for electronic stamping
  • annul_invoice - Annul/cancel an invoice
  • send_invoice_email - Email invoice to customer

Development

Running Tests

# Tests that don't require credentials
uv run pytest tests/test_unit.py -v

# Tests with real credentials (read-only)
uv run pytest tests/test_reference.py -v

# All tests with dry-run mode
DRY_RUN=true uv run pytest tests/ -v

Dry-Run Mode

Set DRY_RUN=true to mock all write operations:

DRY_RUN=true uvx siigo-mcp

In dry-run mode:

  • GET requests work normally (real API)
  • POST/PUT/DELETE return mock responses without executing

Security Considerations

  1. No human-in-the-loop at MCP layer - This server executes tool calls directly. Guardrails must be implemented in your application layer.

  2. Start with read_only mode - Default mode only exposes read operations. Explicitly set SIIGO_MODE=full only when you understand the risks.

  3. Credentials in config files - MCP configs store credentials. Use environment variable references (${SIIGO_USERNAME}) where supported.

  4. Production use - Consider using standard mode for most use cases. Only enable full mode when DIAN operations are explicitly needed.

HTTP Mode (Railway Deployment)

For multi-tenant hosting, set MCP_TRANSPORT=http:

MCP_TRANSPORT=http PORT=8000 uvx siigo-mcp

In HTTP mode, credentials are passed per-request via headers:

  • X-Siigo-Username
  • X-Siigo-Access-Key
  • X-Siigo-Partner-Id

License

MIT

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

siigo_mcp-0.1.0.tar.gz (18.9 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

siigo_mcp-0.1.0-py3-none-any.whl (19.7 kB view details)

Uploaded Python 3

File details

Details for the file siigo_mcp-0.1.0.tar.gz.

File metadata

  • Download URL: siigo_mcp-0.1.0.tar.gz
  • Upload date:
  • Size: 18.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.9.18 {"installer":{"name":"uv","version":"0.9.18","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for siigo_mcp-0.1.0.tar.gz
Algorithm Hash digest
SHA256 96f499db875048127ca911b3c2f4c019dce02318c19718b8e5dbe776b4cfbcf7
MD5 ff30240a3c46a7766c0e6f65ac493ad8
BLAKE2b-256 40834226990ef1dae373497b8d2dab837cccf0c05923f89f8cfce8d499e37c90

See more details on using hashes here.

File details

Details for the file siigo_mcp-0.1.0-py3-none-any.whl.

File metadata

  • Download URL: siigo_mcp-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 19.7 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.9.18 {"installer":{"name":"uv","version":"0.9.18","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for siigo_mcp-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 ca287e74e14e1141a95b7d9700867bce3ddc4b5cbc0c045a105899b27528cb15
MD5 e535f71f995779664e92d2bd15142f8b
BLAKE2b-256 dc62bb3b1a3ebb4750dc7949712aa4fd49745bb88697cb7b9d733da322b5b0f9

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page