{
  "markdown": "# mcp-invoicenow-sg 🇸🇬\n\n[English](README.md)\n\n<!-- mcp-name: io.github.cmendezs/mcp-invoicenow-sg -->\n\n[![PyPI version](https://badge.fury.io/py/mcp-invoicenow-sg.svg)](https://badge.fury.io/py/mcp-invoicenow-sg)\n[![Python](https://img.shields.io/pypi/pyversions/mcp-invoicenow-sg.svg)](https://pypi.org/project/mcp-invoicenow-sg/)\n[![License](https://img.shields.io/badge/License-Apache%202.0-blue.svg)](https://opensource.org/licenses/Apache-2.0) [![mcp-invoicenow-sg MCP server](https://glama.ai/mcp/servers/cmendezs/mcp-invoicenow-sg/badges/score.svg)](https://glama.ai/mcp/servers/cmendezs/mcp-invoicenow-sg)\n\n---\n\n## Introduction\n\n`mcp-invoicenow-sg` is an [MCP (Model Context Protocol)](https://modelcontextprotocol.io) server\nfor Singapore electronic invoicing over **InvoiceNow**, the national e-invoicing platform\noperated by IMDA. It builds and validates PINT-SG v1.4.1 and SG Peppol BIS Billing 3.0 sent\ninvoices (originally-issued invoices, not the received/purchase side). It is part of the\n`mcp-einvoicing-*` family of country-specific servers, all built on\n[`mcp-einvoicing-core`](https://github.com/cmendezs/mcp-einvoicing-core), which provides the\nshared validation engine, EN 16931 abstractions, and Peppol network utilities.\n\n## Supported standards\n\n- **PINT-SG v1.4.1** (`urn:peppol:pint:billing-1@sg-1`) — the recommended profile for new\n  senders.\n- **SG Peppol BIS Billing 3.0** — legacy profile, predates the PINT programme.\n- Both are EN 16931-conformant; the invoice model extends\n  `mcp_einvoicing_core.en16931.EN16931Invoice`.\n- Validation runs IRAS's own C5 acceptance layer (`non_peppol_doc_validation`) — a first-party\n  government artifact, e.g. it flags a missing buyer/seller UEN. As of v0.2.0, PINT-SG's own\n  jurisdiction Schematron rules (e.g. the `invoice_uuid` requirement) are **not** checked — see\n  \"Not yet supported\" below.\n\n**Not yet supported** (see [`specs/README.md`](specs/README.md) and this monorepo's\n`context-library/countries/sg.md` for full detail):\n- **CEN EN16931 base and PINT-SG jurisdiction Schematron validation.** v0.1.0 bundled a\n  self-compiled derivative of OpenPeppol's PINT-SG jurisdiction Schematron with no confirmed\n  redistribution rights; it was removed in v0.2.0 (2026-08-28). The shared, properly-licensed\n  core CEN EN16931 base validator is wired but not yet activated for SG — `SGInvoice`'s IRAS\n  GST category codes have no sourced crosswalk to the UNCL5305 code list that validator requires.\n  See `EN16931_BASE_UNAVAILABLE_WARNING` in every `validate_invoice_sg` result and this\n  monorepo's `context-library/roadmap-2026.md` (`[CORE-EN16931-BASE-SG-CROSSWALK-1]`) for what\n  would unblock it.\n- The Peppol Ordering message family (`Order`, `OrderResponse`, etc.) and IMDA's SG-specific\n  Order Balance.\n- **UBL 2.1 XSD structural validation.** Proven correct against a real UBL 2.1 schema in this\n  package's own test suite (a test-only fixture, not shipped in the wheel), but not wired into\n  the `validate_invoice_sg` tool: the OASIS UBL 2.1 schema files needed carry no\n  locally-confirmed redistribution grant.\n- **IRAS's own Invoice Data Submission API** (the 5th-corner \"C5\" copy specifically, as\n  distinct from generic Peppol AS4 transport, which the Peppol tools below do support) — no\n  publicly available document states an IMDA-accredited Access Point's actual API base URL or\n  authentication flow.\n- SG Peppol BIS Billing 3.0 Schematron validation — no rule set is bundled for this profile.\n- The received/purchase-side invoice model (`LocalTaxInvoice`, TX2_Annex Annex B Type 1B).\n\n## Installation\n\n### Requirements\n\n- Python ≥ 3.11\n- [`mcp-einvoicing-core`](https://github.com/cmendezs/mcp-einvoicing-core) (installed\n  automatically as a dependency)\n- Optional: the `xslt2` extra (`pip install mcp-invoicenow-sg[xslt2]`) — required for\n  `validate_invoice_sg` to run. The bundled IRAS C5 stylesheet requires XSLT 2.0.\n\n### Using `uvx` (recommended)\n\n```bash\nuvx mcp-invoicenow-sg\n```\n\n### Using `uv`\n\n```bash\nuv add mcp-invoicenow-sg\n```\n\n### From source\n\n```bash\ngit clone https://github.com/cmendezs/mcp-invoicenow-sg.git\ncd mcp-invoicenow-sg\nuv sync --all-extras\n```\n\n## Configuration\n\n### Environment variables\n\n| Variable | Required | Default | Description |\n|---|---|---|---|\n| `LOG_LEVEL` | No | `INFO` | Logging level: `DEBUG`, `INFO`, `WARNING`, or `ERROR` |\n| `EINVOICING_PEPPOL_CODELIST_DIR` | No | — | Local directory containing your own copy of the OpenPeppol eDEC Code Lists, required by the `list_*`/`check_*` Peppol codelist tools (not bundled with this package; see `mcp-einvoicing-core` README). Participant lookup, AS4 send, and directory search work without it. |\n\nThis server needs no credentials to run.\n\n## Claude Desktop integration\n\nTo use this server with Claude, add this configuration to your `claude_desktop_config.json` file:\n\n```json\n{\n  \"mcpServers\": {\n    \"invoicenow-sg\": {\n      \"command\": \"uvx\",\n      \"args\": [\"mcp-invoicenow-sg\"]\n    }\n  }\n}\n```\n\n## Cursor integration\n\nCursor supports MCP servers via stdio. Add the configuration in:\n- **Global** (all projects): `~/.cursor/mcp.json`\n- **Project** (this repository only): `.cursor/mcp.json`\n\n```json\n{\n  \"mcpServers\": {\n    \"invoicenow-sg\": {\n      \"command\": \"uvx\",\n      \"args\": [\"mcp-invoicenow-sg\"]\n    }\n  }\n}\n```\n\nReload the Cursor window (`Ctrl+Shift+P` then *Reload Window*) to apply the changes.\n\n## Kiro integration\n\nKiro supports MCP servers via its dedicated configuration file. Two levels are available:\n- **Global** (all projects): `~/.kiro/settings/mcp.json`\n- **Workspace** (this repository only): `.kiro/settings/mcp.json`\n\n```json\n{\n  \"mcpServers\": {\n    \"invoicenow-sg\": {\n      \"command\": \"uvx\",\n      \"args\": [\"mcp-invoicenow-sg\"],\n      \"disabled\": false,\n      \"autoApprove\": []\n    }\n  }\n}\n```\n\nThe file is automatically reloaded on save. You can also open the config via the command palette (`Cmd+Shift+P` / `Ctrl+Shift+P`) then *MCP*.\n\n## Available tools\n\n| Tool | Description |\n|---|---|\n| `generate_invoice_sg` | Build an `SGInvoice` from structured data and serialize it to UBL 2.1 XML. |\n| `validate_invoice_sg` | Validate a UBL 2.1 invoice against IRAS's C5 acceptance layer (CEN EN16931 base, PINT-SG jurisdiction Schematron, SG BIS 3.0, and UBL 2.1 XSD structural validation are not checked — see \"Not yet supported\" above). |\n| `get_gst_category_codes_sg` | Return the IRAS GST category codes (Annex E) accepted on Singapore invoices. |\n| `get_profile_urn_sg` | Return the CustomizationID (BT-24) and ProfileID (BT-23) for a given profile (`PINT_SG` or `BIS3`). |\n\n**Recommended workflow:** `get_profile_urn_sg` to pick the profile pair, then\n`generate_invoice_sg` with that pair in the invoice data, then `validate_invoice_sg` on the\nresult.\n\n### Peppol tools\n\nGeneric Peppol network tools (participant lookup, AS4 send, directory search, eDEC codelists)\nare also registered, from `mcp_einvoicing_core.peppol.tools`, with bare Singapore UENs\nnormalized to scheme `0195` participant IDs:\n\n| Tool | Description |\n|---|---|\n| `peppol_lookup_participant` | Check whether a business is registered on the Peppol network; returns registration status and supported document types |\n| `peppol_get_service_endpoint` | Fetch the AS4 endpoint for a participant's document type |\n| `resolve_peppol_dns` | DNS-only (SML) diagnostic, independent of SMP reachability |\n| `peppol_send` | Transmit a UBL/CII invoice via AS4 |\n| `peppol_directory_search` | Search the public Peppol Directory by participant, name, country, or document type |\n| `list_participant_id_schemes`, `list_document_type_ids`, `list_process_ids`, `list_spis_use_case_ids` | OpenPeppol eDEC codelist lookups (require `EINVOICING_PEPPOL_CODELIST_DIR`) |\n| `check_document_type_id_in_codelist`, `check_process_id_in_codelist`, `check_participant_id_scheme_in_codelist`, `get_peppol_codelist_version` | OpenPeppol eDEC codelist checks and version reporting |\n\n`peppol_send` is generic Peppol AS4 transport to the recipient's Access Point — it is not the\nsame as submission to IRAS's own C5 corner, which stays unsupported (see \"Not yet supported\"\nabove).\n\nThe tool reference in [`docs/TOOLS.md`](docs/TOOLS.md) is generated from the running server:\n\n```bash\nuv run python scripts/gen_tool_reference.py\n```\n\n## Contributing\n\nSee [CONTRIBUTING.md](CONTRIBUTING.md) for development setup, the test and lint commands, and\nthe pull request checklist. Security issues follow the private disclosure process in\n[SECURITY.md](SECURITY.md).\n\n## Other e-invoicing MCP servers\n\n| Country | Server |\n|---------|--------|\n| 🌍 Global | [mcp-einvoicing-core](https://github.com/cmendezs/mcp-einvoicing-core) |\n| 🇧🇪 Belgium | [mcp-einvoicing-be](https://github.com/cmendezs/mcp-einvoicing-be) |\n| 🇧🇷 Brazil | [mcp-nfe-br](https://github.com/cmendezs/mcp-nfe-br) |\n| 🇫🇷 France | [mcp-facture-electronique-fr](https://github.com/cmendezs/mcp-facture-electronique-fr) |\n| 🇩🇪 Germany | [mcp-einvoicing-de](https://github.com/cmendezs/mcp-einvoicing-de) |\n| 🇮🇳 India | [mcp-einvoicing-in](https://github.com/cmendezs/mcp-einvoicing-in) |\n| 🇮🇹 Italy | [mcp-fattura-elettronica-it](https://github.com/cmendezs/mcp-fattura-elettronica-it) |\n| 🇲🇽 Mexico | [mcp-cfdi-mx](https://github.com/cmendezs/mcp-cfdi-mx) |\n| 🇵🇱 Poland | [mcp-ksef-pl](https://github.com/cmendezs/mcp-ksef-pl) |\n| 🇸🇬 Singapore | [mcp-invoicenow-sg](https://github.com/cmendezs/mcp-invoicenow-sg) |\n| 🇪🇸 Spain | [mcp-facturacion-electronica-es](https://github.com/cmendezs/mcp-facturacion-electronica-es) |\n| 🇦🇪 United Arab Emirates | [mcp-einvoicing-ae](https://github.com/cmendezs/mcp-einvoicing-ae) |\n\n## License\n\nThis project is licensed under the **Apache 2.0** license — see [LICENSE](LICENSE) for details. For the full version history, see [CHANGELOG.md](CHANGELOG.md).\n",
  "bytes": 9821,
  "sha": "e1b7ab40bd2964c53a76d7d74b39be4406f88167c7797d59cd3b7380cf4dfa82",
  "repo_slug": "cmendezs/mcp-invoicenow-sg",
  "fonte": "repo",
  "truncated": false,
  "api": "https://agentalog.com/api/listings/mcp_io_github_cmendezs_mcp_invoicenow_sg_64a308a5/readme"
}