Skip to main content
Glama
beel-es

BeeL MCP server

Official
by beel-es

beel_validate_nif

Validate Spanish NIF/CIF against AEAT census via VeriFactu, returning status for valid, invalid syntax, not found, or service unavailable, plus deregistration details.

Instructions

Checks a NIF or CIF against the AEAT register through VeriFactu and returns what the register says about it. status distinguishes a NIF found in the register from one that is syntactically correct but absent, and from a check that could not be completed because VeriFactu was unavailable — in which case the NIF is validated automatically once the service is back.

What valid: true means depends on the kind of holder. For an individual, AEAT matched NIF and name together. For a legal entity the name you sent is not verified at all — AEAT identifies a company by its CIF alone — so valid: true says nothing about your name. legal_name_verified tells the two cases apart, and census_status says whether an identified NIF is also deregistered or revoked.

A NIF with bad syntax is an answer, not an error: it comes back 200 with status: INVALID, so a pre-validation flow never has to tell rejections apart by status code. What is an error is sending no NIF at all — an absent or empty nif answers 422 FIELD_BLANK, with details.field naming it. This operation only reads the register: it creates nothing and stores no customer.

Endpoint: POST /v1/nif/validate

⚠️ Fiscal guardrails — read before calling:

  • Why a name that does not match the census makes an invoice unsubmittable. (resource: beel://guardrails/nif-validation)

For the exhaustive rules and worked examples, call beel_docs_search.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
bodyYes
Behavior1/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description explicitly says 'This operation only reads the register: it creates nothing and stores no customer,' which contradicts the annotation readOnlyHint=false (indicating the tool may modify state). This is a direct contradiction that undermines trust. Although the description provides rich behavioral detail (status meanings, legal entity semantics, error handling), the contradiction is a severe flaw. Per rules, score 1.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is fairly long (~300 words) but well-structured: purpose first, then nuanced behavior, then error handling, endpoint, and guardrails. Most sentences add essential context. It could be tightened (some redundancy) but is organized and front-loaded with the core purpose. The pointers to docs and guardrails justify the length.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity and the absence of an output schema, the description thoroughly covers response semantics (status, valid, legal_name_verified, census_status), error cases (INVALID, FIELD_BLANK), and behavioral nuances for individual vs legal entity. It also includes a guardrail reference and a pointer to exhaustive docs. Nothing critical is missing for an agent to call it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema coverage for the top-level body parameter is 0%, but the nested properties have detailed descriptions. The tool description adds value by explaining the meaning of valid:true for individuals vs legal entities, which guides whether to send legal_name. It also clarifies error semantics (422 vs 200). This goes beyond schema and aids correct parameter usage, though it does not introduce entirely new parameter documentation.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific action ('Checks a NIF or CIF against the AEAT register through VeriFactu') and specifies the resource and outcome. It clearly differentiates from the many sibling tools by its unique validation purpose and also provides the endpoint. The purpose is explicit and unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description clearly indicates when to use the tool (to validate a Spanish tax ID) and provides important usage nuances (bad syntax returns 200 INVALID, empty NIF returns 422). It points to beel_docs_search for exhaustive rules and mentions fiscal guardrails. It does not explicitly compare with alternatives, but the tool's unique purpose makes exclusion less necessary. A minor gap is not stating 'when NOT to use', but context is strong.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Install Server

Other Tools

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/beel-es/beel-mcp'

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