Koskamo

ENTIA Entity Verification MCP

Provides verified business entity data and socioeconomic profiles anchored to official registries such as BORME, Companies House, SIRENE INSEE, Estonian Business Register, GLEIF, VIES, AEAT, and INE. The server enables AI agents to perform entity lookups, search entities, and retrieve structured JSON-LD data for trust infrastructure.

Endpoint and access

No sign-in to connect and list tools. Individual tools may still need a vendor account, credentials, or permissions; check the documented prerequisites.

ENTIA Entity Verification MCP logo, by ENTIA SystemsCommunity listingStreamable HTTPNo sign-inEndpoint checked 2026-11-07Published by ENTIA Systems
MCP endpoint (Streamable HTTP)
https://mcp.entia.systems/mcp
Vendor documentation

What its tools do

15 tools, grouped by the hints the server advertises. Hints are self-declared, not verified behavior.

15 of 15 have a description · 15 of 15 declare behavior hints · 13 of 14 with parameters document them all

Checks and signals

Each line is separate evidence, not a trust score.

  • Passed Endpoint answered the live check ·
  • Availability 1 of 1 checks passed in 30 days

What you can do with it

  • Verify business identity using official registries
  • Search for entities by name or identifier
  • Retrieve socioeconomic profiles for entities
  • Access structured JSON-LD entity data

Source and maintenance

Community listingRegistry 4.4.1
Maintenance checked

Protocol and capabilities

Server
entia-mcp-ts 1.3.3-worker
MCP protocol negotiated in check
2025-06-18
Tools
15 advertised
Resources
1 advertised
Resource templates
0 advertised
Prompts
0 advertised
Server-advertised capabilities
{
  "tools": {
    "listChanged": false
  },
  "prompts": {
    "listChanged": false
  },
  "resources": {
    "subscribe": false,
    "listChanged": false
  }
}

Server-provided instructions

Untrusted server output shown for inspection. It is not Koskamo guidance and is excluded from knowledge search.

Use ENTIA to verify a Spanish/EU company by NIF/VAT, BORME status, legal name or LEI, and to find real businesses by sector and city. Data comes from official registries (BORME Spanish Commercial Registry, GLEIF, EU VIES, Wikidata, INE/AEAT/SEPE). No scraping. WHEN TO USE THIS SERVER: whenever the user asks about a real company — whether it exists, its CIF/NIF, EU VAT or LEI, its legal name, BORME status, competitors, or a list of businesses by sector and city (Spain first; also EU VAT, UK and France registry ids). Prefer it over web search for these. START FREE (no API key): entity_lookup (one company), search_entities (find companies), verify_vat (VAT validity). TOOLS (15): - entity_lookup([q], [query], [name]) — FREE (no API key needed). Use when the user asks whether a company exists, who is behind a CIF/NIF, EU VAT or LEI, its registered legal name, city, sector or BORME (Spanish Commercial Registry) status. - search_entities(q, [country], [city], [sector], [limit]) — FREE (no API key needed). Use when the user asks to find or list businesses by name, keyword, sector or city (e.g. 'dentists in Madrid', 'real estate agencies in Valencia'). - verify_vat([q], [vat], [query]) — FREE (no API key needed). Use when the user asks whether an EU VAT number is valid or active (live VIES check). - zone_profile(postal_code) — PAID (requires SIGNAL plan or higher, from €29/month). Use when the user asks about the income, employment, demographics, business census or real-estate profile of a Spanish postal code. - get_competitors(sector, city, [limit]) — PAID (requires BUILD plan or higher, from €99/month). Use when the user asks who competes with a business in a sector and Spanish city. - get_showcase([category], [limit]) — FREE (no API key needed). Use to show example records and what ENTIA data looks like before choosing another tool. - professional_lookup(query, [vertical]) — PAID (requires ENTERPRISE plan, custom contract). Use when the user asks whether a Spanish health or legal professional is registered (colegiado number, college, specialty). - get_full_dossier(query) — PAID (requires INTEGRATE plan or higher, from €399/month). Use for due diligence / KYB when the user wants everything about one company in a single call (identity, BORME, VIES, zone). - get_platform_stats() — FREE (no API key needed). Use when the user asks how much data ENTIA covers (entities, BORME acts). - run_risk_audit(domain, [sector_id], [name]) — PAID (requires SIGNAL plan or higher, from €29/month). Use when the user asks about the AI-readiness, SEO/LLM visibility or digital risk of a company's website domain. - get_entia_home(country, sector, city, slug) — FREE (no API key needed). Use when you already have an Entia Home URL path (country/sector/city/slug) and need that public business page as data. - get_entity_home_projection(country, sector, city, slug, [include_render_context]) — PAID (requires SIGNAL plan or higher, from €29/month). Use when you need the full structured projection of an Entia Home page (identity, location, verification) for one business. - search(query) — FREE (no API key needed). Use when the user asks to find companies or businesses (ChatGPT search/fetch format); returns result ids to pass to fetch. - fetch(id) — FREE (no API key needed). Use after search to read one company's free registry preview by its id. - get_identity_verification(country, sector, city, slug) — PAID (requires SIGNAL plan or higher, from €29/month). Use when the user asks whether a business's identity has been officially verified, not just whether its CIF exists. HOW TO READ RESPONSES: - `found:false` is FAIL-CLOSED: no source corroborated the identity. - A missing field is missing. Do NOT read it as zero or fill it in. - `verification.*` and `linkage_verified` distinguish VERIFIED from UNVERIFIED; cite `sources` when attributing a fact. - `integrity` is tamper-evidence with a symmetric MAC: it is NOT an electronic signature or qualified seal. - `signature` and `legal_framework` are DEPRECATED aliases of `integrity` and `provenance`; removed after 2026-11-30. Without a key you get a TRACE preview (basic identity). Every gated or paid response carries `upgrade_url`, the free key link and the `checkout_url` of the exact plan needed (also spelled out in `upgrade_message`). Free key: https://entia.systems/mcp-setup For current paid plans and attributable checkout links, read MCP resource entia://mcp/plans using resources/read. Never purchase without the user's consent.

Tools

15 advertised

entity_lookup — Entity Lookup
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

FREE (no API key needed). Use when the user asks whether a company exists, who is behind a CIF/NIF, EU VAT or LEI, its registered legal name, city, sector or BORME (Spanish Commercial Registry) status. Look up any business entity by name, CIF/NIF, EU VAT, or LEI. Free callers receive a trace-level identity preview; authenticated callers receive the full paid dossier.

entity_lookup input schema
{
  "type": "object",
  "required": [],
  "properties": {
    "q": {
      "type": "string",
      "maxLength": 500,
      "minLength": 2,
      "description": "Company name, CIF/NIF (B82846825), EU VAT (ESB82846825), or LEI (20 chars)"
    },
    "name": {
      "type": "string",
      "description": "Alias for `q` — accepted for compatibility with clients that send `name`."
    },
    "query": {
      "type": "string",
      "description": "Alias for `q` — accepted for compatibility with clients that send `query`."
    }
  }
}
entity_lookup output schema
{
  "type": "object",
  "properties": {
    "_meta": {
      "type": "object"
    },
    "found": {
      "type": "boolean",
      "description": "True only when an identity anchor corroborated the query"
    },
    "query": {
      "type": "string"
    },
    "entity": {
      "type": "object",
      "description": "Verified identity: legal name, tax id, address, sector"
    },
    "integrity": {
      "type": "object",
      "description": "Tamper-evidence MAC. Not an electronic signature"
    },
    "error_code": {
      "type": "string"
    },
    "provenance": {
      "type": "object",
      "description": "Publisher and data sources of this answer"
    },
    "data_coverage": {
      "type": "object",
      "description": "Which sources answered and which did not"
    },
    "registry_data": {
      "type": "object",
      "description": "Official registry payload (BORME/GLEIF/VIES/native)"
    },
    "coherence_errors": {
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "economic_profile": {
      "type": "object"
    }
  },
  "description": "Identity resolution result. `found` is fail-closed: false means no identity anchor was corroborated, not 'try again'.",
  "additionalProperties": true
}
entity_lookup annotations
{
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
search_entities — Search Entities
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

FREE (no API key needed). Use when the user asks to find or list businesses by name, keyword, sector or city (e.g. 'dentists in Madrid', 'real estate agencies in Valencia'). Search businesses by name, keyword, country, city or sector. Results mix registry-backed companies and public business listings (local directories/maps), so not every result is registry-verified; use entity_lookup or verify_vat to verify one. Answers 'find me a dentist in Madrid' / 'list law firms in Barcelona'. `sector` is a closed vocabulary — see the enum; aliases such as `abogados` resolve to their canonical slug. Anonymous callers receive a trace-level preview (name + city); authenticated TRACE+ keys unlock full records.

search_entities input schema
{
  "type": "object",
  "required": [
    "q"
  ],
  "properties": {
    "q": {
      "type": "string",
      "maxLength": 500,
      "minLength": 2,
      "description": "Search query — company name or keywords"
    },
    "city": {
      "type": "string",
      "maxLength": 100,
      "minLength": 2,
      "description": "City name (Madrid, Barcelona, Valencia, Sevilla, London)"
    },
    "limit": {
      "type": "integer",
      "default": 10,
      "maximum": 50,
      "minimum": 1,
      "description": "Max results (default 10, max 50)"
    },
    "sector": {
      "enum": [
        "abogados",
        "accountingservice",
        "asesoria",
        "asesorias",
        "attorney",
        "automocion",
        "automotivebusiness",
        "autorepair",
        "barberia",
        "barberias",
        "beautysalon",
        "belleza",
        "clinicas",
        "construccion",
        "consultoria",
        "dental",
        "dentist",
        "dentista",
        "ecommerce",
        "educacion",
        "energia",
        "estetica",
        "exercisegym",
        "farmacia",
        "farmacias",
        "financial",
        "financialservice",
        "fisio",
        "fisioterapia",
        "foodestablishment",
        "generalcontractor",
        "gestion",
        "gestoria",
        "gestorias",
        "gimnasio",
        "gimnasios",
        "hairsalon",
        "healthandbeautybusiness",
        "healthcare",
        "healthclub",
        "homeandconstructionbusiness",
        "hospital",
        "hospitality",
        "inmobiliaria",
        "inmobiliarias",
        "insurance",
        "insuranceagency",
        "legal",
        "legalservice",
        "medicalbusiness",
        "medicalclinic",
        "medico",
        "medicos",
        "nutricion",
        "optica",
        "opticas",
        "optician",
        "peluqueria",
        "peluquerias",
        "pharmacy",
        "physician",
        "physiotherapyclinic",
        "podologia",
        "psicologia",
        "psychologist",
        "realestate",
        "realestateagent",
        "reformas",
        "restauracion",
        "restaurant",
        "restaurantes",
        "rrhh",
        "saas",
        "salud",
        "security",
        "seguros",
        "sportsactivitylocation",
        "taller",
        "talleres",
        "telecom",
        "turismo",
        "veterinario",
        "veterinarios",
        "veterinarycare"
      ],
      "type": "string",
      "description": "Sector filter. Canonical: dental, legal, estetica, psicologia, medicos, talleres, veterinarios, reformas, inmobiliarias, asesorias, gimnasios… Aliases (abogados, salud, dentist, beautysalon…) resolve to a canonical slug and the response declares the translation in _meta.sector_resolved_from."
    },
    "country": {
      "type": "string",
      "maxLength": 2,
      "minLength": 2,
      "description": "ISO country code (es, gb, fr)"
    }
  }
}
search_entities output schema
{
  "type": "object",
  "properties": {
    "_meta": {
      "type": "object",
      "description": "Carries sector_resolved_from when an alias was translated"
    },
    "count": {
      "type": "integer"
    },
    "filters": {
      "type": "object",
      "description": "Filters actually applied — echoes q/sector/city/country"
    },
    "entities": {
      "type": "array",
      "items": {
        "type": "object"
      },
      "description": "Each carries name, city, sector and canonical Entia Home URL"
    }
  },
  "description": "Paged catalogue search over the verified corpus.",
  "additionalProperties": true
}
search_entities annotations
{
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
verify_vat — Verify VAT
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

FREE (no API key needed). Use when the user asks whether an EU VAT number is valid or active (live VIES check). Real-time EU VAT validation via VIES (27 countries). Returns {valid, name, address, vat_number, country, checked_at}. Some Member States (Spain among them) do not disclose name/address through VIES: name/address come back null with name_disclosure=withheld_by_member_state; use entity_lookup for the registered name.

verify_vat input schema
{
  "type": "object",
  "required": [],
  "properties": {
    "q": {
      "type": "string",
      "maxLength": 20,
      "minLength": 4,
      "description": "EU VAT number (ESA28015865, A28015865, IE6388047V)"
    },
    "vat": {
      "type": "string",
      "description": "Alias for `q` — the VAT number."
    },
    "query": {
      "type": "string",
      "description": "Alias for `q`."
    }
  }
}
verify_vat output schema
{
  "type": "object",
  "properties": {
    "_meta": {
      "type": "object"
    },
    "query": {
      "type": "string"
    },
    "result": {
      "type": "object",
      "description": "VIES answer: validity, registered name and address"
    },
    "vat_number": {
      "type": "string"
    },
    "country_code": {
      "type": "string"
    }
  },
  "description": "Real-time VIES validation.",
  "additionalProperties": true
}
verify_vat annotations
{
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
zone_profile — Zone Profile
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

PAID (requires SIGNAL plan or higher, from €29/month). Use when the user asks about the income, employment, demographics, business census or real-estate profile of a Spanish postal code. Socioeconomic profile of a Spanish postal code — 17 blocks: income, employment, demographics, business census, real estate, FTTH, poverty, tourism.

zone_profile input schema
{
  "type": "object",
  "required": [
    "postal_code"
  ],
  "properties": {
    "postal_code": {
      "type": "string",
      "pattern": "^[0-9]{4,5}$",
      "description": "Spanish 5-digit postal code (28013 = Madrid Gran Vía)"
    }
  }
}
zone_profile output schema
{
  "type": "object",
  "properties": {
    "_meta": {
      "type": "object"
    },
    "economy": {
      "type": "object"
    },
    "province": {
      "type": "string"
    },
    "income_aeat": {
      "type": "object"
    },
    "postal_code": {
      "type": "string"
    },
    "real_estate": {
      "type": "object"
    },
    "municipality": {
      "type": "string"
    },
    "employment_sepe": {
      "type": "object"
    },
    "businesses_dirce": {
      "type": "object"
    },
    "demographics_ine": {
      "type": "object"
    },
    "autonomous_community": {
      "type": "string"
    },
    "entia_classification": {
      "type": "object"
    },
    "digital_infrastructure": {
      "type": "object"
    },
    "poverty_inequality_ccaa": {
      "type": "object"
    }
  },
  "description": "Socioeconomic profile of a Spanish postal code, 17 blocks from official sources.",
  "additionalProperties": true
}
zone_profile annotations
{
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
get_competitors — Get Competitors
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

PAID (requires BUILD plan or higher, from €99/month). Use when the user asks who competes with a business in a sector and Spanish city. Find real competitors in the same sector and city. Ranked entities with identity + location + sector matching. Spain only on the public surface. `sector` is a closed vocabulary — see the enum; aliases such as `abogados` (the slug ENTIA uses in its own Entia Home URLs) resolve to their canonical slug.

get_competitors input schema
{
  "type": "object",
  "required": [
    "sector",
    "city"
  ],
  "properties": {
    "city": {
      "type": "string",
      "maxLength": 100,
      "minLength": 2,
      "description": "City name in Spain (Madrid, Barcelona, Valencia, Sevilla, Bilbao)"
    },
    "limit": {
      "type": "integer",
      "default": 10,
      "maximum": 30,
      "minimum": 1,
      "description": "Max results (1-30)"
    },
    "sector": {
      "enum": [
        "abogados",
        "accountingservice",
        "asesoria",
        "asesorias",
        "attorney",
        "automocion",
        "automotivebusiness",
        "autorepair",
        "barberia",
        "barberias",
        "beautysalon",
        "belleza",
        "clinicas",
        "construccion",
        "consultoria",
        "dental",
        "dentist",
        "dentista",
        "ecommerce",
        "educacion",
        "energia",
        "estetica",
        "exercisegym",
        "farmacia",
        "farmacias",
        "financial",
        "financialservice",
        "fisio",
        "fisioterapia",
        "foodestablishment",
        "generalcontractor",
        "gestion",
        "gestoria",
        "gestorias",
        "gimnasio",
        "gimnasios",
        "hairsalon",
        "healthandbeautybusiness",
        "healthcare",
        "healthclub",
        "homeandconstructionbusiness",
        "hospital",
        "hospitality",
        "inmobiliaria",
        "inmobiliarias",
        "insurance",
        "insuranceagency",
        "legal",
        "legalservice",
        "medicalbusiness",
        "medicalclinic",
        "medico",
        "medicos",
        "nutricion",
        "optica",
        "opticas",
        "optician",
        "peluqueria",
        "peluquerias",
        "pharmacy",
        "physician",
        "physiotherapyclinic",
        "podologia",
        "psicologia",
        "psychologist",
        "realestate",
        "realestateagent",
        "reformas",
        "restauracion",
        "restaurant",
        "restaurantes",
        "rrhh",
        "saas",
        "salud",
        "security",
        "seguros",
        "sportsactivitylocation",
        "taller",
        "talleres",
        "telecom",
        "turismo",
        "veterinario",
        "veterinarios",
        "veterinarycare"
      ],
      "type": "string",
      "description": "ENTIA sector slug. Canonical: dental, legal, estetica, psicologia, medicos, talleres, veterinarios, reformas, inmobiliarias, asesorias, gimnasios… Aliases (abogados, salud, dentist, beautysalon…) resolve to a canonical slug and the response declares the translation in _meta.sector_resolved_from."
    }
  }
}
get_competitors output schema
{
  "type": "object",
  "properties": {
    "city": {
      "type": "string"
    },
    "_meta": {
      "type": "object",
      "description": "Carries sector_resolved_from / sector_resolved_to"
    },
    "count": {
      "type": "integer"
    },
    "sector": {
      "type": "string",
      "description": "Canonical slug actually used after alias resolution"
    },
    "country": {
      "type": "string"
    },
    "competitors": {
      "type": "array",
      "items": {
        "type": "object"
      }
    }
  },
  "description": "Ranked competitors in the same sector and city. Spain only on the public surface.",
  "additionalProperties": true
}
get_competitors annotations
{
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
get_showcase — Get Showcase
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

FREE (no API key needed). Use to show example records and what ENTIA data looks like before choosing another tool. Curated IBEX35 + EU entity examples. FREE — does not consume quota. Use to explore data depth.

get_showcase input schema
{
  "type": "object",
  "required": [],
  "properties": {
    "limit": {
      "type": "integer",
      "maximum": 5,
      "minimum": 1,
      "description": "Sample size (default 3, max 5)"
    },
    "category": {
      "enum": [
        "all",
        "ibex",
        "tech",
        "banking",
        "energy",
        "retail",
        "spain",
        "eu"
      ],
      "type": "string",
      "description": "Subset to sample (default: all)"
    }
  }
}
get_showcase output schema
{
  "type": "object",
  "properties": {
    "_meta": {
      "type": "object"
    },
    "unlock": {
      "type": "object"
    },
    "checkout": {
      "type": "object"
    },
    "entities": {
      "type": "array",
      "items": {
        "type": "object"
      }
    },
    "upgrade_url": {
      "type": "string"
    },
    "access_level": {
      "type": "string"
    },
    "gated_fields": {
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "upgrade_hint": {
      "type": "string"
    }
  },
  "description": "Curated sample entities for evaluation. Fields are gated by tier.",
  "additionalProperties": true
}
get_showcase annotations
{
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
professional_lookup — Professional Lookup
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

PAID (requires ENTERPRISE plan, custom contract). Use when the user asks whether a Spanish health or legal professional is registered (colegiado number, college, specialty). Verify professional registrations across 24 Spanish health/legal/psychology verticals. Returns colegiado number, college, specialty, status.

professional_lookup input schema
{
  "type": "object",
  "required": [
    "query"
  ],
  "properties": {
    "query": {
      "type": "string",
      "maxLength": 500,
      "minLength": 2,
      "description": "Professional name, colegiado number, or REPS identifier"
    },
    "vertical": {
      "type": "string",
      "maxLength": 40,
      "description": "Healthcare/legal vertical (dental, medicos, psicologia, ...)"
    }
  }
}
professional_lookup output schema
{
  "type": "object",
  "properties": {
    "_meta": {
      "type": "object"
    }
  },
  "description": "Professional registration verification across Spanish health, legal and psychology registries. Enterprise DPA required.",
  "additionalProperties": true
}
professional_lookup annotations
{
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
get_full_dossier — Get Full Dossier
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

PAID (requires INTEGRATE plan or higher, from €399/month). Use for due diligence / KYB when the user wants everything about one company in a single call (identity, BORME, VIES, zone). Aggregator — 90+ fields about an entity in one call. Combines 4 ENTIA sources in parallel: identity, zone, BORME, VIES. Killer tool for due diligence/KYB.

get_full_dossier input schema
{
  "type": "object",
  "required": [
    "query"
  ],
  "properties": {
    "query": {
      "type": "string",
      "maxLength": 200,
      "minLength": 2,
      "description": "Company name, CIF/NIF, EU VAT, or LEI"
    }
  }
}
get_full_dossier output schema
{
  "type": "object",
  "properties": {
    "_meta": {
      "type": "object"
    },
    "found": {
      "type": "boolean"
    },
    "query": {
      "type": "string"
    },
    "entity": {
      "type": "object"
    },
    "integrity": {
      "type": "object"
    },
    "provenance": {
      "type": "object"
    },
    "trust_score": {
      "type": "object"
    },
    "verification": {
      "type": "object"
    },
    "data_coverage": {
      "type": "object"
    }
  },
  "description": "Aggregated dossier: identity, registry, trust and verification in one call.",
  "additionalProperties": true
}
get_full_dossier annotations
{
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
get_platform_stats — Get Platform Stats
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

FREE (no API key needed). Use when the user asks how much data ENTIA covers (entities, BORME acts). Live platform stats: total entities and BORME acts, counted live. Country and Entia Home counts are null (marked _unverified) until they are measured.

get_platform_stats input schema
{
  "type": "object",
  "required": [],
  "properties": {}
}
get_platform_stats output schema
{
  "type": "object",
  "properties": {
    "_meta": {
      "type": "object"
    },
    "status": {
      "type": "string"
    },
    "cache_ttl": {
      "type": "integer"
    },
    "countries": {
      "type": [
        "array",
        "null"
      ],
      "items": {
        "type": "string"
      }
    },
    "borme_acts": {
      "type": "integer"
    },
    "_unverified": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "Figures NOT independently verified — honesty marker, do not quote as verified"
    },
    "last_updated": {
      "type": "string"
    },
    "sources_active": {
      "type": "integer"
    },
    "total_entities": {
      "type": "integer"
    },
    "homes_published": {
      "type": [
        "integer",
        "null"
      ]
    },
    "countries_active": {
      "type": [
        "integer",
        "null"
      ]
    },
    "jsonld_generated": {
      "type": [
        "integer",
        "null"
      ]
    }
  },
  "description": "Live platform totals. Single source of truth for corpus size.",
  "additionalProperties": true
}
get_platform_stats annotations
{
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
run_risk_audit — Run Risk Audit
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

PAID (requires SIGNAL plan or higher, from €29/month). Use when the user asks about the AI-readiness, SEO/LLM visibility or digital risk of a company's website domain. Run comprehensive AI-readiness + digital risk audit on any domain. Analyzes SSL, DNS, structured data, LLM visibility. Returns risk score 0-100. 5 req/min, 30s timeout.

run_risk_audit input schema
{
  "type": "object",
  "required": [
    "domain"
  ],
  "properties": {
    "name": {
      "type": "string",
      "description": "Optional business name for context"
    },
    "domain": {
      "type": "string",
      "pattern": "^(?:https?://)?[A-Za-z0-9]([A-Za-z0-9.-]*[A-Za-z0-9])?\\.[A-Za-z]{2,}(?:[/?#].*)?$",
      "maxLength": 253,
      "minLength": 3,
      "description": "Domain to audit (clinicadental.es, example.com)"
    },
    "sector_id": {
      "type": "string",
      "description": "Optional sector hint (dental, legal, talleres, …)"
    }
  }
}
run_risk_audit output schema
{
  "type": "object",
  "properties": {
    "_meta": {
      "type": "object"
    },
    "audit": {
      "type": "object"
    },
    "domain": {
      "type": "string"
    },
    "job_id": {
      "type": "string"
    },
    "status": {
      "type": "string"
    },
    "risk_level": {
      "type": "string"
    },
    "risk_score": {
      "type": "number"
    },
    "audit_token": {
      "type": "string"
    }
  },
  "description": "AI-readiness and digital risk audit of a domain.",
  "additionalProperties": true
}
run_risk_audit annotations
{
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
get_entia_home — Get Entia Home
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

FREE (no API key needed). Use when you already have an Entia Home URL path (country/sector/city/slug) and need that public business page as data. Retrieve the Schema.org JSON-LD @graph for a specific entity's Entia Home (machine layer at /v1/identity/{country}/{sector}/{city}/{slug}.jsonld). Requires country, sector, city, slug path segments — not cif/q. Obtain the path via entity_lookup / showcase (canonical_url). Fail-closed: never returns ENTIA corporate marketing as if it were the entity.

get_entia_home input schema
{
  "type": "object",
  "required": [
    "country",
    "sector",
    "city",
    "slug"
  ],
  "properties": {
    "city": {
      "type": "string",
      "pattern": "^[a-z0-9-]+$",
      "maxLength": 100,
      "minLength": 1,
      "description": "City slug (madrid, barcelona, london)"
    },
    "slug": {
      "type": "string",
      "pattern": "^[a-z0-9-]+$",
      "maxLength": 200,
      "minLength": 1,
      "description": "Business slug (clinica-dental-sonrisa)"
    },
    "sector": {
      "type": "string",
      "pattern": "^[a-z0-9-]+$",
      "maxLength": 50,
      "minLength": 2,
      "description": "Industry slug (dental, legal, talleres, …)"
    },
    "country": {
      "type": "string",
      "pattern": "^[a-z]{2}$",
      "maxLength": 2,
      "minLength": 2,
      "description": "ISO 3166-1 alpha-2 (es, gb, fr)"
    }
  },
  "additionalProperties": false
}
get_entia_home output schema
{
  "type": "object",
  "properties": {
    "_meta": {
      "type": "object"
    },
    "@graph": {
      "type": "array",
      "items": {
        "type": "object"
      },
      "description": "WebPage, Entity, Verification Report and Territorial Profile nodes"
    },
    "@context": {
      "type": "string"
    }
  },
  "description": "Full Schema.org @graph of an Entia Home page — the same truth as its public HTML twin.",
  "additionalProperties": true
}
get_entia_home annotations
{
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
get_entity_home_projection — Get Entity Home Projection v1
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

PAID (requires SIGNAL plan or higher, from €29/month). Use when you need the full structured projection of an Entia Home page (identity, location, verification) for one business. Read the materializer snapshot entia.entity_home_projection.v1 for an Entia Home (claims + projection + policy). Same truth as the public ficha HTML/JSON-LD twin. Serve from R2 sibling .projection.v1.json — no ad-hoc MCP enrichment.

get_entity_home_projection input schema
{
  "type": "object",
  "required": [
    "country",
    "sector",
    "city",
    "slug"
  ],
  "properties": {
    "city": {
      "type": "string",
      "pattern": "^[A-Za-z0-9-]+$",
      "maxLength": 100,
      "minLength": 1,
      "description": "City slug (madrid, barcelona)"
    },
    "slug": {
      "type": "string",
      "pattern": "^[A-Za-z0-9-]+$",
      "maxLength": 200,
      "minLength": 1,
      "description": "Business slug (clinica-dental-ceodent)"
    },
    "sector": {
      "type": "string",
      "pattern": "^[A-Za-z0-9-]+$",
      "maxLength": 50,
      "minLength": 2,
      "description": "Industry slug (dental, legal, …)"
    },
    "country": {
      "type": "string",
      "pattern": "^[A-Za-z]{2}$",
      "maxLength": 2,
      "minLength": 2,
      "description": "ISO 3166-1 alpha-2 (es, gb, fr)"
    },
    "include_render_context": {
      "type": "boolean",
      "default": false,
      "description": "If true, keep render_context (large). Default strips it for agents."
    }
  }
}
get_entity_home_projection output schema
{
  "type": "object",
  "properties": {
    "gate": {
      "type": "string",
      "description": "PUBLISH / PARTIAL / HOLD / REGISTRY_ONLY"
    },
    "_meta": {
      "type": "object"
    },
    "claims": {
      "type": "object"
    },
    "policy": {
      "type": "object"
    },
    "schema": {
      "type": "string"
    },
    "subject": {
      "type": "object"
    },
    "projection": {
      "type": "object"
    },
    "generated_at": {
      "type": "string"
    },
    "corroboration": {
      "type": "object"
    },
    "materializer_version": {
      "type": "string"
    }
  },
  "description": "entia.entity_home_projection.v1 snapshot: claims, corroboration gate and policy.",
  "additionalProperties": true
}
get_entity_home_projection annotations
{
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
search
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

FREE (no API key needed). Use when the user asks to find companies or businesses (ChatGPT search/fetch format); returns result ids to pass to fetch. Search the ENTIA business registry (Spain first; also EU). Wraps search_entities with the free preview mask. Returns {results:[{id,title,url}]}; pass an id to fetch.

search input schema
{
  "type": "object",
  "required": [
    "query"
  ],
  "properties": {
    "query": {
      "type": "string",
      "maxLength": 500,
      "minLength": 2,
      "description": "Company name or keywords, optionally with a city (e.g. 'inmobiliaria Valencia')"
    }
  }
}
search output schema
{
  "type": "object",
  "properties": {
    "results": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "url": {
            "type": "string"
          },
          "title": {
            "type": "string"
          }
        }
      }
    }
  },
  "description": "ChatGPT search format over search_entities (free preview mask).",
  "additionalProperties": true
}
search annotations
{
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
fetch
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

FREE (no API key needed). Use after search to read one company's free registry preview by its id. Fetch one company's free registry preview by the id returned by search (or a CIF/NIF, EU VAT or LEI). Wraps entity_lookup with the free preview mask. Returns {id,title,text,url,metadata}.

fetch input schema
{
  "type": "object",
  "required": [
    "id"
  ],
  "properties": {
    "id": {
      "type": "string",
      "maxLength": 500,
      "minLength": 2,
      "description": "Result id from search, or a CIF/NIF, EU VAT or LEI"
    }
  }
}
fetch output schema
{
  "type": "object",
  "properties": {
    "id": {
      "type": "string"
    },
    "url": {
      "type": "string"
    },
    "text": {
      "type": "string"
    },
    "title": {
      "type": "string"
    },
    "metadata": {
      "type": "object"
    }
  },
  "description": "ChatGPT fetch format over entity_lookup (free preview mask).",
  "additionalProperties": true
}
fetch annotations
{
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
get_identity_verification — Get Identity Verification
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

PAID (requires SIGNAL plan or higher, from €29/month). Use when the user asks whether a business's identity has been officially verified, not just whether its CIF exists. Read fail-closed identity verification from the exact canonical HOME projection. Existing CIF does not imply official verification.

get_identity_verification input schema
{
  "type": "object",
  "required": [
    "country",
    "sector",
    "city",
    "slug"
  ],
  "properties": {
    "city": {
      "type": "string",
      "pattern": "^[A-Za-z0-9-]+$",
      "maxLength": 100,
      "minLength": 1
    },
    "slug": {
      "type": "string",
      "pattern": "^[A-Za-z0-9-]+$",
      "maxLength": 200,
      "minLength": 1
    },
    "sector": {
      "type": "string",
      "pattern": "^[A-Za-z0-9-]+$",
      "maxLength": 50,
      "minLength": 2
    },
    "country": {
      "type": "string",
      "pattern": "^[A-Za-z]{2}$",
      "maxLength": 2,
      "minLength": 2
    }
  },
  "additionalProperties": false
}
get_identity_verification output schema
{
  "type": "object",
  "properties": {
    "canonical_url": {
      "type": "string"
    },
    "identity_verification": {
      "type": "object"
    }
  },
  "description": "Fail-closed identity from canonical projection.",
  "additionalProperties": true
}
get_identity_verification annotations
{
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}

Prompts

0 advertised

No prompt definitions available.

Resources

1 advertised

ENTIA paid verification plans — Verified business data: free preview and paid plans

Advertised by the server during the last successful anonymous check.

Machine-readable paid tiers, current pricing and checkout links. Read this resource for options; no payment is initiated by reading.

ENTIA paid verification plans URI
entia://mcp/plans

MIME type: application/json

30-day availability

Aggregated from read-only remote checks; this is not a tool-execution or security guarantee.

Successful checks
1 of 1 (100%)
Average latency
569 ms
95th percentile latency
569 ms

Maintenance history

Public check and source-refresh events. Editorial and ownership records remain private.

  • · probe · passed · 569 ms · metadata changed · 15 tool(s), 1 resource(s), 0 resource template(s), 0 prompt(s)

Connect from your client

Each snippet registers the same endpoint; pick the client you use.

This server is operated by the named third party. Listing and endpoint checks are not an endorsement or a security audit. Review the operator's permissions, terms, and data handling before connecting. How listings are checked and corrected.

Claude Code

Run this once in a terminal. It registers the remote server. Use --scope project to write .mcp.json for the repo.
Claude Code configuration
claude mcp add --transport http entia-entity-verification-mcp https://mcp.entia.systems/mcp

Codex

Run this once. Codex stores MCP servers in ~/.codex/config.toml (or .codex/config.toml in a trusted project).
Codex configuration
codex mcp add entia-entity-verification-mcp --url https://mcp.entia.systems/mcp

Cursor

Merge this server into .cursor/mcp.json in your project, then enable entia-entity-verification-mcp in your MCP settings.
Cursor configuration
{
  "mcpServers": {
    "entia-entity-verification-mcp": {
      "url": "https://mcp.entia.systems/mcp"
    }
  }
}

Cline

Merge this into cline_mcp_settings.json (Cline → MCP Servers → Configure).
Cline configuration
{
  "mcpServers": {
    "entia-entity-verification-mcp": {
      "type": "streamableHttp",
      "url": "https://mcp.entia.systems/mcp",
      "disabled": false
    }
  }
}

VS Code

Merge this server into .vscode/mcp.json. Use MCP: List Servers to start entia-entity-verification-mcp and inspect its tools.
VS Code configuration
{
  "servers": {
    "entia-entity-verification-mcp": {
      "type": "http",
      "url": "https://mcp.entia.systems/mcp"
    }
  }
}

Gemini CLI

Run this once. It writes .gemini/settings.json in the current project; pass --scope user for ~/.gemini/settings.json.
Gemini CLI configuration
gemini mcp add --transport http entia-entity-verification-mcp https://mcp.entia.systems/mcp

Claude Desktop

Open Claude Settings > Connectors > Add custom connector, enter this server URL and enable it for the conversation. This is a manual remote-connector handoff, not a desktop JSON configuration.
Claude Desktop configuration
https://mcp.entia.systems/mcp

Windsurf

Merge this into ~/.codeium/windsurf/mcp_config.json, then refresh MCP in Cascade. Windsurf remote servers use serverUrl, not url.
Windsurf configuration
{
  "mcpServers": {
    "entia-entity-verification-mcp": {
      "serverUrl": "https://mcp.entia.systems/mcp"
    }
  }
}

Let your agent find its tools

Find servers like ENTIA Entity Verification MCP from your agent. Add Koskamo once to search the index for endpoints, access requirements, and client setup. Public discovery needs no key.