Romania Invoices (ANAF e-Factura national API)
Server Details
Romania e-Factura invoices for AI agents: build UBL 2.1 CIUS-RO, upload to ANAF/SPV, query.
- Status
- Unhealthy
- Last Tested
- Transport
- Streamable HTTP
- URL
Glama MCP Gateway
Connect through Glama MCP Gateway for full control over tool access and complete visibility into every call.
Full call logging
Every tool call is logged with complete inputs and outputs, so you can debug issues and audit what your agents are doing.
Tool access control
Enable or disable individual tools per connector, so you decide what your agents can and cannot do.
Managed credentials
Glama handles OAuth flows, token storage, and automatic rotation, so credentials never expire on your clients.
Usage analytics
See which tools your agents call, how often, and when, so you can understand usage patterns and catch anomalies.
Tool Definition Quality
Average 4.5/5 across 3 of 3 tools scored.
Each tool serves a distinct purpose: create_invoice for uploading, query_invoice for status checking, and download_invoice_result for retrieving results. There is no overlap or ambiguity.
All tool names follow a consistent verb_noun snake_case pattern (create_invoice, query_invoice, download_invoice_result), making them predictable and easy to understand.
With only three tools, the set is minimal but perfectly suited for the asynchronous invoice submission and retrieval workflow. It covers the essential operations without unnecessary bloat.
The tools provide a complete lifecycle for submitting an invoice: upload (create_invoice), poll for acceptance or rejection (query_invoice), and download the official result (download_invoice_result). No obvious gaps for the intended use case.
Available Tools
3 toolscreate_invoiceAInspect
Issue a Romania B2B electronic invoice (factura electronica) into the national e-Factura system (ANAF/SPV). Builds UBL 2.1 XML in the CIUS-RO customization (Romania's CIUS of EN 16931) and uploads it under your own ANAF access token. Bring your own credentials as headers: x-anaf-token (Bearer access token from your one-time ANAF OAuth with a qualified digital certificate; the cert never reaches this server), x-anaf-cif (your supplier fiscal code / CIF, RO prefix optional). Header x-anaf-mode: production switches to the live rail (default = test, no fiscal effect). Upload is asynchronous: this returns index_incarcare (an upload index) — poll query_invoice with it to learn if ANAF ACCEPTED or REJECTED the invoice. Romanian VAT rates: 19 (standard), 9 and 5 (reduced), 0 (zero-rated). Amounts are in RON.
| Name | Required | Description | Default |
|---|---|---|---|
| lines | Yes | Invoice lines. Each: name, unit_price (net, VAT-exclusive, RON), vat_rate (19|9|5|0), optional quantity (default 1) and unit_code (UN/ECE Rec 20, default C62 = piece). | |
| currency | No | Document currency (BT-5). Default RON. | |
| due_date | No | Optional payment due date (BT-9), YYYY-MM-DD. | |
| issue_date | No | Invoice issue date (BT-2), YYYY-MM-DD. Default: today (UTC). | |
| customer_cif | Yes | Buyer fiscal code / CIF (cod de identificare fiscala), e.g. RO12345678 or 12345678. RO prefix optional. | |
| customer_city | No | Buyer city (BT-52). Bucharest sectors use SECTOR1..SECTOR6. Default SECTOR1. | |
| customer_name | Yes | Buyer legal name (denumire) as registered. | |
| supplier_city | No | Your (seller) city (BT-37). Bucharest sectors use SECTOR1..SECTOR6. | |
| supplier_name | No | Your (seller) legal name (BT-27). Recommended; a placeholder derived from your CIF is used if omitted. | |
| invoice_number | No | Your invoice number / series (BT-1). Auto-generated if omitted. | |
| customer_address | Yes | Buyer street address (BT-50 address line 1). | |
| customer_country | No | Buyer country code (BT-55). Default RO. | |
| supplier_address | No | Your (seller) street address (BT-35). Recommended for a valid invoice. | |
| customer_county_code | No | Buyer county subdivision ISO 3166-2 code (BT-54), e.g. RO-B (Bucharest), RO-CJ (Cluj). Default RO-B. | |
| supplier_county_code | No | Your (seller) county ISO 3166-2 code (BT-39, CIUS-RO mandatory for RO sellers), e.g. RO-B. Default RO-B. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate write operation (readOnlyHint=false) and non-destructive (destructiveHint=false). Description adds rich behavioral context: uses headers for credentials, builds UBL XML, asynchronous upload, test vs production, polling needed. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single paragraph with key information front-loaded (purpose, system, format). Covers authentication, async behavior, polling, VAT rates. Could be slightly more structured with bullet points, but concise and informative without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers main aspects: purpose, system, format, authentication, test/production, async nature, polling, VAT rates. Mentions return value (index_incarcare). Lacks details on error handling or what constitutes success/failure response, but sufficient given sibling tools for querying.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with detailed desсriptions for each parameter. Description adds overall context (system, headers, VAT rates) but not much per-parameter beyond schema. Baseline 3; description provides extra high-level meaning but not significantly more than schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states it issues a Romania B2B electronic invoice into the national e-Factura system. Specifies format (UBL 2.1 XML, CIUS-RO) and target (ANAF/SPV). Distinct from siblings (download_invoice_result, query_invoice) which are for results and polling.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit context: Romania B2B invoicing, required headers (x-anaf-token, x-anaf-cif, x-anaf-mode), test/production modes, async upload with polling via query_invoice. Lacks explicit when-not-to-use or alternative tools, but sufficient for the specific use case.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
download_invoice_resultARead-onlyInspect
Download the ANAF response archive (ZIP) for a processed invoice, using the download_id (id_descarcare) that query_invoice returns once status is ACCEPTED or REJECTED. For ACCEPTED invoices the ZIP contains the official ANAF-signed UBL XML (your legal proof); for REJECTED invoices it contains an XML error report listing the CIUS-RO validation failures. Returns the ZIP base64-encoded. Safe to call anytime.
| Name | Required | Description | Default |
|---|---|---|---|
| download_id | Yes | The download_id (id_descarcare) returned by query_invoice for an ACCEPTED or REJECTED invoice. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Describes contents for both ACCEPTED and REJECTED statuses, specifies the output format (base64-encoded ZIP), and states it's safe to call anytime, all beyond the readOnlyHint and openWorldHint annotations. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three concise sentences: purpose, behavior by status, and encoding/safety. Each sentence adds essential information without redundancy or fluff. Front-loaded with core action.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description adequately covers purpose, usage, and output format for the given parameter and annotations. Lacks details on error handling or size limits, but for a simple download tool with one param and no output schema, it is largely complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Single parameter download_id is well-documented in both schema and description. With 100% schema coverage, baseline is 3; description adds context about valid statuses but largely reiterates schema info, so no major additional value.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states the tool downloads an ANAF response archive for a processed invoice, identifying the specific resource (ZIP) and verb (download). Distinguishes from siblings create_invoice and query_invoice by focusing on the retrieval step.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly instructs to use the download_id from query_invoice and only when status is ACCEPTED or REJECTED, providing clear when-to-use context and implicitly excluding other statuses or tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
query_invoiceARead-onlyInspect
Check the ANAF processing status of an invoice uploaded by create_invoice, using its index_incarcare. e-Factura processing is asynchronous. Status values: PROCESSING (ANAF stare "in prelucrare" — not finished, poll again shortly); ACCEPTED (stare "ok" — the invoice is registered; download_invoice_result fetches the official ANAF-signed XML using download_id); REJECTED (stare "nok" — validation failed; download_invoice_result fetches the error report XML using download_id). Safe to call anytime.
| Name | Required | Description | Default |
|---|---|---|---|
| index_incarcare | Yes | The index_incarcare (upload index) returned by create_invoice. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate readOnlyHint=true and openWorldHint=true. The description adds key behaviors: asynchronous processing, status values with Romanian translations, and clarification that the tool is safe to call anytime. No contradictions with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise (three sentences), front-loaded with the verb and resource, then provides detailed status breakdown. No superfluous information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite no output schema, the description fully explains return values (statuses) and the asynchronous nature. It covers the tool's role in the invoice lifecycle: after create_invoice, before download_invoice_result. No gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema covers 100% of parameters (only one) with a description already stating it is the upload index from create_invoice. The tool description repeats this context but adds no new detail beyond the schema, so baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool checks the ANAF processing status of an invoice using index_incarcare. It distinguishes from sibling tools create_invoice (upload) and download_invoice_result (fetch XML). The three status values are explicitly defined, making the purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description advises checking status after create_invoice and directs to download_invoice_result for fetching official XML. It says 'Safe to call anytime.' However, it does not explicitly state when not to use the tool or alternative scenarios, leaving slight room for ambiguity.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Claim this connector by publishing a /.well-known/glama.json file on your server's domain with the following structure:
{
"$schema": "https://glama.ai/mcp/schemas/connector.json",
"maintainers": [{ "email": "your-email@example.com" }]
}The email address must match the email associated with your Glama account. Once published, Glama will automatically detect and verify the file within a few minutes.
Control your server's listing on Glama, including description and metadata
Access analytics and receive server usage reports
Get monitoring and health status updates for your server
Feature your server to boost visibility and reach more users
For users:
Full audit trail – every tool call is logged with inputs and outputs for compliance and debugging
Granular tool control – enable or disable individual tools per connector to limit what your AI agents can do
Centralized credential management – store and rotate API keys and OAuth tokens in one place
Change alerts – get notified when a connector changes its schema, adds or removes tools, or updates tool definitions, so nothing breaks silently
For server owners:
Proven adoption – public usage metrics on your listing show real-world traction and build trust with prospective users
Tool-level analytics – see which tools are being used most, helping you prioritize development and documentation
Direct user feedback – users can report issues and suggest improvements through the listing, giving you a channel you would not have otherwise
The connector status is unhealthy when Glama is unable to successfully connect to the server. This can happen for several reasons:
The server is experiencing an outage
The URL of the server is wrong
Credentials required to access the server are missing or invalid
If you are the owner of this MCP connector and would like to make modifications to the listing, including providing test credentials for accessing the server, please contact support@glama.ai.
Discussions
No comments yet. Be the first to start the discussion!