Koskamo

ID & Format Oracle MCP

An MCP server providing offline validation and formatting for over 240 identifier types, including IBAN, BIC, VAT, national IDs, phones, and postal codes, with specific support for GCC regions like UAE and Saudi Arabia.

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.

ID & Format Oracle MCP logo, by Noah's ArchVendor evidenceStreamable HTTPNo sign-inEndpoint checked 2026-11-01Operated by Noah's Arch
You need:X-API-Key
MCP endpoint (Streamable HTTP)
https://idcheck.noahsarch.tech/mcp
Vendor documentation

What you can do with it

  • Validate IBAN and BIC codes offline
  • Check VAT and tax number formats
  • Verify national ID and phone number structures
  • Detect unknown identifier types

Source and maintenance

Vendor evidenceRegistry 0.1.1

Protocol and capabilities

Server
id-format-oracle 0.1.0
MCP protocol
2025-06-18
Tools
7 advertised
Resources
2 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.

Offline structural validation of identifiers worldwide: national IDs, tax/VAT numbers, company registrations, IBAN/BIC, phone numbers, postal codes and 240+ standard numbers (ISBN, LEI, IMEI…), plus a curated GCC/MENA layer (Emirates ID, UAE TRN, Saudi ID/Iqama, Saudi VAT, Kuwait Civil ID, Qatar ID, Bahrain CPR, Egypt NID). Call validate_identifier when you know the type (use list_identifiers to find the code), detect_identifier when you don't, and the dedicated IBAN/BIC/phone/postal tools for those. Always relay data_confidence and the disclaimer: a pass means the number is well-formed, not that it exists or belongs to the person. No registry lookups are performed. Response: result plus data_confidence (high = check-digit algorithm from a public specification; medium = community-documented checksum or pattern-only; low = structure only), estimated_items[], sources[], data_version and a disclaimer (structural validation only — never proof that an identifier is issued or belongs to someone).

Tools

7 advertised

validate_identifier — Validate an identifier of a known type
Advertised by the server during the last successful anonymous check.
Advertised read-only

Validate and normalise one identifier whose type you know (format, length, dates and check digits). Returns valid, compact and formatted forms, the checks performed, a reason when invalid, and extracted details where the number encodes them (birth date, sex, holder type). Example: number '784-1990-1234567-1', code 'ae_emirates_id'. Response: result plus data_confidence (high = check-digit algorithm from a public specification; medium = community-documented checksum or pattern-only; low = structure only), estimated_items[], sources[], data_version and a disclaimer (structural validation only — never proof that an identifier is issued or belongs to someone).

validate_identifier input schema
{
  "type": "object",
  "title": "validate_identifierArguments",
  "required": [
    "number",
    "code"
  ],
  "properties": {
    "code": {
      "type": "string",
      "title": "Code",
      "description": "Identifier code from list_identifiers, e.g. 'ae_emirates_id', 'sa_national_id', 'fr.siret', 'gb.vat', 'us.ein', 'in.pan', 'br.cpf', 'isbn', 'lei', 'imei'. A bare suffix like 'siret' also works when unique."
    },
    "number": {
      "type": "string",
      "title": "Number",
      "description": "The identifier as written (spaces, dashes and dots are tolerated)."
    }
  }
}
validate_identifier output schema
{
  "type": "object",
  "title": "validate_identifierDictOutput",
  "additionalProperties": true
}
validate_identifier annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
list_identifiers — List supported identifier types
Advertised by the server during the last successful anonymous check.
Advertised read-only

Catalogue of the identifier codes this service validates (250+ across 90 countries plus international standards), filterable by country and category. Free. Call it once to find the right code for validate_identifier. Response: result plus data_confidence (high = check-digit algorithm from a public specification; medium = community-documented checksum or pattern-only; low = structure only), estimated_items[], sources[], data_version and a disclaimer (structural validation only — never proof that an identifier is issued or belongs to someone).

list_identifiers input schema
{
  "type": "object",
  "title": "list_identifiersArguments",
  "properties": {
    "country": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "title": "Country",
      "default": null,
      "description": "ISO 3166-1 alpha-2 country code to filter by (e.g. 'AE', 'DE'), or 'INTL' for international identifiers. Omit for all."
    },
    "category": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "title": "Category",
      "default": null,
      "description": "Filter: personal | tax | company | bank | securities | product | device | vehicle | postal | algorithm | other."
    }
  }
}
list_identifiers output schema
{
  "type": "object",
  "title": "list_identifiersDictOutput",
  "additionalProperties": true
}
list_identifiers annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
detect_identifier — Detect what kind of identifier a value is
Advertised by the server during the last successful anonymous check.
Advertised read-only

Try every validator for the given country plus the international ones and return the types that accept the value, best first (checksum-bearing types rank above pattern-only ones). Use when a document or form field holds a number of unknown type. A match is structural, not proof of type. Example: number '12345678901', country 'KW'. Response: result plus data_confidence (high = check-digit algorithm from a public specification; medium = community-documented checksum or pattern-only; low = structure only), estimated_items[], sources[], data_version and a disclaimer (structural validation only — never proof that an identifier is issued or belongs to someone).

detect_identifier input schema
{
  "type": "object",
  "title": "detect_identifierArguments",
  "required": [
    "number"
  ],
  "properties": {
    "number": {
      "type": "string",
      "title": "Number",
      "description": "The unknown identifier."
    },
    "country": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "title": "Country",
      "default": null,
      "description": "ISO 3166-1 alpha-2 country whose national identifiers should be tried as well. Strongly recommended."
    }
  }
}
detect_identifier output schema
{
  "type": "object",
  "title": "detect_identifierDictOutput",
  "additionalProperties": true
}
detect_identifier annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
validate_iban — Validate an IBAN
Advertised by the server during the last successful anonymous check.
Advertised read-only

Validate an IBAN (ISO 13616 length, mod-97 and national BBAN rules) and return the country, bank code, branch, bank name and BIC where the bundled registry knows it, SEPA membership, compact and printed forms. Example: 'AE070331234567890123456'. Response: result plus data_confidence (high = check-digit algorithm from a public specification; medium = community-documented checksum or pattern-only; low = structure only), estimated_items[], sources[], data_version and a disclaimer (structural validation only — never proof that an identifier is issued or belongs to someone).

validate_iban input schema
{
  "type": "object",
  "title": "validate_ibanArguments",
  "required": [
    "iban"
  ],
  "properties": {
    "iban": {
      "type": "string",
      "title": "Iban",
      "description": "IBAN with or without spaces, e.g. 'AE07 0331 2345 6789 0123 456'."
    }
  }
}
validate_iban output schema
{
  "type": "object",
  "title": "validate_ibanDictOutput",
  "additionalProperties": true
}
validate_iban annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
validate_bic — Validate a BIC / SWIFT code
Advertised by the server during the last successful anonymous check.
Advertised read-only

Validate a BIC (ISO 9362): structure, country code, test-BIC flag, bank and branch parts, and the bank name(s) where known. Example: 'EBILAEAD'. Response: result plus data_confidence (high = check-digit algorithm from a public specification; medium = community-documented checksum or pattern-only; low = structure only), estimated_items[], sources[], data_version and a disclaimer (structural validation only — never proof that an identifier is issued or belongs to someone).

validate_bic input schema
{
  "type": "object",
  "title": "validate_bicArguments",
  "required": [
    "bic"
  ],
  "properties": {
    "bic": {
      "type": "string",
      "title": "Bic",
      "description": "BIC / SWIFT code, 8 or 11 characters, e.g. 'EBILAEAD'."
    }
  }
}
validate_bic output schema
{
  "type": "object",
  "title": "validate_bicDictOutput",
  "additionalProperties": true
}
validate_bic annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
validate_phone — Validate and format a phone number
Advertised by the server during the last successful anonymous check.
Advertised read-only

Parse a phone number for any country, say whether it is valid (matches a national numbering-plan pattern) or merely possible, and return E.164, international and national formats, number type (mobile/fixed_line/toll_free…), region, location, original carrier hint and time zones. Example: number '050 123 4567', default_region 'AE'. Response: result plus data_confidence (high = check-digit algorithm from a public specification; medium = community-documented checksum or pattern-only; low = structure only), estimated_items[], sources[], data_version and a disclaimer (structural validation only — never proof that an identifier is issued or belongs to someone).

validate_phone input schema
{
  "type": "object",
  "title": "validate_phoneArguments",
  "required": [
    "number"
  ],
  "properties": {
    "number": {
      "type": "string",
      "title": "Number",
      "description": "Phone number as written; international form '+971 50 123 4567' needs no region."
    },
    "language": {
      "type": "string",
      "title": "Language",
      "default": "en",
      "description": "Language for location/carrier names, e.g. 'en', 'ar'."
    },
    "default_region": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "title": "Default Region",
      "default": null,
      "description": "ISO 3166-1 alpha-2 region used to interpret numbers written without '+', e.g. 'AE'."
    }
  }
}
validate_phone output schema
{
  "type": "object",
  "title": "validate_phoneDictOutput",
  "additionalProperties": true
}
validate_phone annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
validate_postal_code — Validate a postal code format
Advertised by the server during the last successful anonymous check.
Advertised read-only

Check a postal/ZIP code against the national format for 158 countries, and say so when the country has no postal codes (UAE, Qatar…). Pattern check only. Example: code '11564', country 'SA'. Response: result plus data_confidence (high = check-digit algorithm from a public specification; medium = community-documented checksum or pattern-only; low = structure only), estimated_items[], sources[], data_version and a disclaimer (structural validation only — never proof that an identifier is issued or belongs to someone).

validate_postal_code input schema
{
  "type": "object",
  "title": "validate_postal_codeArguments",
  "required": [
    "code",
    "country"
  ],
  "properties": {
    "code": {
      "type": "string",
      "title": "Code",
      "description": "Postal / ZIP code as written."
    },
    "country": {
      "type": "string",
      "title": "Country",
      "description": "ISO 3166-1 alpha-2 country code, e.g. 'SA', 'GB', 'US'."
    }
  }
}
validate_postal_code output schema
{
  "type": "object",
  "title": "validate_postal_codeDictOutput",
  "additionalProperties": true
}
validate_postal_code annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}

Prompts

0 advertised

No prompt definitions available.

Resources

2 advertised

data_version — Data version

Advertised by the server during the last successful anonymous check.

Current data/rules version.

data_version URI
id-format-oracle://data-version

MIME type: text/plain

metrics — Aggregate metrics

Advertised by the server during the last successful anonymous check.

Aggregate counters only (tool, status, latency bucket). No queries are logged.

metrics URI
id-format-oracle://metrics

MIME type: text/plain

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
2162 ms
95th percentile latency
2162 ms

Maintenance history

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

  • · probe · passed · 2162 ms · metadata changed · 7 tool(s), 2 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 id-format-oracle-mcp https://idcheck.noahsarch.tech/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 id-format-oracle-mcp --url https://idcheck.noahsarch.tech/mcp

Cursor

Merge this server into .cursor/mcp.json in your project, then enable id-format-oracle-mcp in your MCP settings.
Cursor configuration
{
  "mcpServers": {
    "id-format-oracle-mcp": {
      "url": "https://idcheck.noahsarch.tech/mcp"
    }
  }
}

Cline

Merge this into cline_mcp_settings.json (Cline → MCP Servers → Configure).
Cline configuration
{
  "mcpServers": {
    "id-format-oracle-mcp": {
      "type": "streamableHttp",
      "url": "https://idcheck.noahsarch.tech/mcp",
      "disabled": false
    }
  }
}

VS Code

Merge this server into .vscode/mcp.json. Use MCP: List Servers to start id-format-oracle-mcp and inspect its tools.
VS Code configuration
{
  "servers": {
    "id-format-oracle-mcp": {
      "type": "http",
      "url": "https://idcheck.noahsarch.tech/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 id-format-oracle-mcp https://idcheck.noahsarch.tech/mcp

Claude Desktop

Merge this into claude_desktop_config.json (macOS: ~/Library/Application Support/Claude/, Windows: %APPDATA%\Claude\), then restart Claude Desktop.
Claude Desktop configuration
{
  "mcpServers": {
    "id-format-oracle-mcp": {
      "url": "https://idcheck.noahsarch.tech/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": {
    "id-format-oracle-mcp": {
      "serverUrl": "https://idcheck.noahsarch.tech/mcp"
    }
  }
}

Let your agent find its tools

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

Do you run ID & Format Oracle MCP?

Prove ownership with a DNS record, a well-known file, or your Official MCP Registry entry, and your edits publish immediately. Proofs are re-checked weekly; admins can still hide or remove a listing.

Claim this listing