Koskamo

GBG Loqate Reach MCP

An MCP server for GBG Loqate Reach that verifies addresses, emails, and phone numbers in real time, returning confidence scores, policy-aware recommendations, and audit trails for AI agents.

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.

GBG Loqate Reach MCP logo, by GBGCommunity listingStreamable HTTPNo sign-inEndpoint checked 2026-11-06Published by GBG
You need:Get API keyProvide your Loqate key
MCP endpoint (Streamable HTTP)
https://reach.prod.fabric.gbgplatforms.com/mcp
Vendor documentation

What its tools do

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

11 of 11 have a description · 11 of 11 declare behavior hints · 10 of 10 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 physical addresses with confidence scores
  • Validate email addresses for deliverability and risk
  • Check phone numbers for type and validity
  • Batch verify up to 100 records per call

Source and maintenance

Community listingRegistry 0.6.2
Maintenance checked

Protocol and capabilities

Server
GBG Loqate - Reach 0.17.0
MCP protocol negotiated in check
2025-11-25
Tools
11 advertised
Resources
Not advertised
Resource templates
Not advertised
Prompts
1 advertised
Server-advertised capabilities
{
  "tools": {
    "listChanged": true
  },
  "logging": {},
  "prompts": {
    "listChanged": true
  }
}

Tools

11 advertised

list_policies — List Policies
Advertised by the server during the last successful anonymous check.
Advertised read-only

List available decisioning policies (strict, shipping, standard, permissive) with their thresholds.

list_policies input schema
{
  "type": "object",
  "additionalProperties": false
}
list_policies annotations
{
  "title": "List Policies",
  "readOnlyHint": true,
  "openWorldHint": false
}
retrieve_address — Retrieve Address Details
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Resolve a suggestion id from address.suggestions into its full cleansed address components (organisation, sub-building, number, street, city, province, postcode, country). Use this when you need the address itself — to fill a form or show a confirmation — rather than a decision; to verify a chosen suggestion instead, pass 'suggestion_id' to verify_address. CONSUMES A LOQATE CREDIT per call, so resolve only the one suggestion the user chose. The result is reference data, NOT a verification. Requires a Loqate API key.

retrieve_address input schema
{
  "type": "object",
  "required": [
    "suggestion_id"
  ],
  "properties": {
    "key": {
      "type": "string",
      "description": "Loqate API key — required unless the server has one configured or the request carries an Authorization: Bearer header"
    },
    "suggestion_id": {
      "type": "string",
      "description": "Id of a suggestion previously returned in address.suggestions. CONSUMES A LOQATE CREDIT. Ids are not stable over time; a stale one returns SUGGESTION_NOT_FOUND and you must search again rather than retry"
    }
  },
  "additionalProperties": false
}
retrieve_address annotations
{
  "title": "Retrieve Address Details",
  "readOnlyHint": true,
  "openWorldHint": true
}
show_policy — Show Policy
Advertised by the server during the last successful anonymous check.
Advertised read-only

Show full details for a specific decisioning policy.

show_policy input schema
{
  "type": "object",
  "required": [
    "name"
  ],
  "properties": {
    "name": {
      "type": "string",
      "description": "Policy name: strict shipping standard or permissive"
    }
  },
  "additionalProperties": false
}
show_policy annotations
{
  "title": "Show Policy",
  "readOnlyHint": true,
  "openWorldHint": false
}
verify_address — Verify Address
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Verify an address against Loqate's global reference data. Returns a confidence score (0-1), verification status, and a policy-driven accept/review/reject recommendation. Set 'suggest' to also get alternative addresses suggested by Loqate whenever the address does not clear the policy; offer them to the user and verify the chosen one in a second call before treating it as good. Suggestions require a separately licensed Loqate feature enabled on the account — without it, verification still succeeds and the problem is reported in suggestions.error. Requires a Loqate API key — pass it via the 'key' field (get one at account.loqate.com).

verify_address input schema
{
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "description": "Your own identifier for this record, echoed back by Loqate"
    },
    "key": {
      "type": "string",
      "description": "Loqate API key — required unless the server has one configured or the request carries an Authorization: Bearer header (get one at account.loqate.com)"
    },
    "policy": {
      "type": "string",
      "description": "Policy name: strict shipping standard (default) or permissive"
    },
    "address": {
      "type": "string",
      "description": "Full address string (free-form — use this OR structured fields below)"
    },
    "contact": {
      "type": "string",
      "description": "Contact name for the delivery"
    },
    "country": {
      "type": "string",
      "description": "ISO 2-letter country code (e.g. US GB DE)"
    },
    "options": {
      "type": "object",
      "description": "Loqate API options as nested JSON, e.g. {\"ServerOptions\": {\"FieldStatus\": \"true\"}}. Dot notation is equivalent: {\"ServerOptions.FieldStatus\": \"true\"}. Pass GeoCode here as a boolean — it is sent at the request root where Loqate expects it. In-Options booleans (Certify Version Enhance Deceased Goneaways) take JSON booleans; ServerOptions values (e.g. OutputCasing DefaultCountry) are strings. Set ServerOptions.FieldStatus to \"true\" to get the changes list",
      "additionalProperties": true
    },
    "premise": {
      "type": "string",
      "description": "Premise or house number"
    },
    "suggest": {
      "type": "boolean",
      "description": "When true, look up alternative addresses suggested by Loqate and return them in the result as suggestions. Requires the Loqate address-suggestion feature to be enabled on the account (licensed separately from verification) — without it, verification still succeeds and the reason appears in suggestions.error. The lookup runs when the address is not accepted (review or reject) OR when it is accepted below the confidence floor (see suggest_below) — a policy accepts from its own minimum, so an accepted address is not necessarily a confident one. Address-only; off by default"
    },
    "surname": {
      "type": "string",
      "description": "Recipient's last name"
    },
    "address2": {
      "type": "string",
      "description": "Second address line"
    },
    "address3": {
      "type": "string",
      "description": "Third address line"
    },
    "address4": {
      "type": "string",
      "description": "Fourth address line"
    },
    "address5": {
      "type": "string",
      "description": "Fifth address line"
    },
    "address6": {
      "type": "string",
      "description": "Sixth address line"
    },
    "address7": {
      "type": "string",
      "description": "Seventh address line"
    },
    "address8": {
      "type": "string",
      "description": "Eighth address line"
    },
    "building": {
      "type": "string",
      "description": "Building name"
    },
    "forename": {
      "type": "string",
      "description": "Recipient's first name"
    },
    "function": {
      "type": "string",
      "description": "Contact's job title or function"
    },
    "latitude": {
      "type": "string",
      "description": "Latitude, for a reverse geocode"
    },
    "locality": {
      "type": "string",
      "description": "City or town"
    },
    "post_box": {
      "type": "string",
      "description": "PO box"
    },
    "postcode": {
      "type": "string",
      "description": "Postal or ZIP code"
    },
    "full_name": {
      "type": "string",
      "description": "Recipient's full name"
    },
    "longitude": {
      "type": "string",
      "description": "Longitude, for a reverse geocode"
    },
    "admin_area": {
      "type": "string",
      "description": "State or province"
    },
    "department": {
      "type": "string",
      "description": "Department within the organisation"
    },
    "verify_key": {
      "type": "string",
      "description": "Custom address verification API key (overrides LOQATE_VERIFY_KEY env var)"
    },
    "verify_url": {
      "type": "string",
      "description": "Custom address verification endpoint URL (overrides LOQATE_VERIFY_URL env var)"
    },
    "middle_name": {
      "type": "string",
      "description": "Recipient's middle name"
    },
    "organization": {
      "type": "string",
      "description": "Company or organisation name"
    },
    "sub_building": {
      "type": "string",
      "description": "Sub-building (e.g. flat, apartment or suite)"
    },
    "thoroughfare": {
      "type": "string",
      "description": "Street name"
    },
    "suggest_below": {
      "type": [
        "null",
        "number"
      ],
      "description": "Confidence floor for suggestions (0-1). An accepted address scoring below it still gets suggestions — policies accept from their own minimum, so an accepted address is not necessarily a confident one. Omit to use the policy value (standard 0.85); 0 disables the floor so only review/reject trigger a lookup"
    },
    "suggest_limit": {
      "type": "integer",
      "description": "Maximum number of suggestions to return (1-10, default 5). Requires suggest"
    },
    "suggestion_id": {
      "type": "string",
      "description": "Id of a suggestion previously returned in address.suggestions. The tool retrieves that address's cleansed components from Loqate and verifies those, which is how you confirm a suggestion the user chose. Use INSTEAD OF address, not alongside it. CONSUMES A LOQATE CREDIT — pass one id, for the one suggestion that was chosen, never several. Ids are not stable over time; a stale one returns SUGGESTION_NOT_FOUND and you must search again rather than retry"
    },
    "detect_country": {
      "type": "boolean",
      "description": "When true and no country is supplied, guess the country from the address and flag the guess in the result (country_guessed). Address-only; off by default"
    },
    "delivery_address": {
      "type": "string",
      "description": "Full delivery address"
    },
    "delivery_address1": {
      "type": "string",
      "description": "Delivery address line 1"
    },
    "delivery_address2": {
      "type": "string",
      "description": "Delivery address line 2"
    },
    "delivery_address3": {
      "type": "string",
      "description": "Delivery address line 3"
    },
    "delivery_address4": {
      "type": "string",
      "description": "Delivery address line 4"
    },
    "delivery_address5": {
      "type": "string",
      "description": "Delivery address line 5"
    },
    "delivery_address6": {
      "type": "string",
      "description": "Delivery address line 6"
    },
    "delivery_address7": {
      "type": "string",
      "description": "Delivery address line 7"
    },
    "delivery_address8": {
      "type": "string",
      "description": "Delivery address line 8"
    },
    "dependent_locality": {
      "type": "string",
      "description": "Dependent locality (e.g. neighbourhood)"
    },
    "sub_building_floor": {
      "type": "string",
      "description": "Floor"
    },
    "dependent_thoroughfare": {
      "type": "string",
      "description": "Dependent street name"
    },
    "sub_administrative_area": {
      "type": "string",
      "description": "Sub administrative area (e.g. county)"
    },
    "double_dependent_locality": {
      "type": "string",
      "description": "Double dependent locality"
    },
    "super_administrative_area": {
      "type": "string",
      "description": "Super administrative area"
    }
  },
  "additionalProperties": false
}
verify_address annotations
{
  "title": "Verify Address",
  "readOnlyHint": true,
  "openWorldHint": true
}
verify_address_batch — Verify Addresses (Batch)
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Verify up to 100 addresses in one call. Up to 100 records per call; the results array is in submission order and each entry carries its input index, so results can be zipped back onto rows without relying on order. One bad record fails only itself — it carries an error while the rest are verified. Suggestions are not available in batch. Records are grouped by country before being sent, as Loqate recommends, so the cost is one upstream call per distinct country in the batch rather than one per call. Set detect_country to guess the country of records that do not supply one — detection runs per record, before grouping, so a mixed batch still sends each group with the right default. Requires a Loqate API key — pass it via the 'key' field.

verify_address_batch input schema
{
  "type": "object",
  "required": [
    "addresses"
  ],
  "properties": {
    "key": {
      "type": "string",
      "description": "Loqate API key — required unless the server has one configured or the request carries an Authorization: Bearer header"
    },
    "policy": {
      "type": "string",
      "description": "Policy name: strict shipping standard (default) or permissive"
    },
    "options": {
      "type": "object",
      "description": "Loqate API options as nested JSON, applied to every record in the batch",
      "additionalProperties": true
    },
    "addresses": {
      "type": [
        "null",
        "array"
      ],
      "items": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "description": "Your own identifier for this record, echoed back by Loqate"
          },
          "address": {
            "type": "string",
            "description": "Full address string (free-form)"
          },
          "contact": {
            "type": "string",
            "description": "Contact name for the delivery"
          },
          "country": {
            "type": "string",
            "description": "ISO 2-letter country code (e.g. US GB DE)"
          },
          "premise": {
            "type": "string",
            "description": "Premise or house number"
          },
          "surname": {
            "type": "string",
            "description": "Recipient's last name"
          },
          "address2": {
            "type": "string",
            "description": "Second address line"
          },
          "address3": {
            "type": "string",
            "description": "Third address line"
          },
          "address4": {
            "type": "string",
            "description": "Fourth address line"
          },
          "address5": {
            "type": "string",
            "description": "Fifth address line"
          },
          "address6": {
            "type": "string",
            "description": "Sixth address line"
          },
          "address7": {
            "type": "string",
            "description": "Seventh address line"
          },
          "address8": {
            "type": "string",
            "description": "Eighth address line"
          },
          "building": {
            "type": "string",
            "description": "Building name"
          },
          "forename": {
            "type": "string",
            "description": "Recipient's first name"
          },
          "function": {
            "type": "string",
            "description": "Contact's job title or function"
          },
          "latitude": {
            "type": "string",
            "description": "Latitude, for a reverse geocode"
          },
          "locality": {
            "type": "string",
            "description": "City or town"
          },
          "post_box": {
            "type": "string",
            "description": "PO box"
          },
          "postcode": {
            "type": "string",
            "description": "Postal or ZIP code"
          },
          "full_name": {
            "type": "string",
            "description": "Recipient's full name"
          },
          "longitude": {
            "type": "string",
            "description": "Longitude, for a reverse geocode"
          },
          "admin_area": {
            "type": "string",
            "description": "State or province"
          },
          "department": {
            "type": "string",
            "description": "Department within the organisation"
          },
          "middle_name": {
            "type": "string",
            "description": "Recipient's middle name"
          },
          "organization": {
            "type": "string",
            "description": "Company or organisation name"
          },
          "sub_building": {
            "type": "string",
            "description": "Sub-building (e.g. flat, apartment or suite)"
          },
          "thoroughfare": {
            "type": "string",
            "description": "Street name"
          },
          "delivery_address": {
            "type": "string",
            "description": "Full delivery address"
          },
          "delivery_address1": {
            "type": "string",
            "description": "Delivery address line 1"
          },
          "delivery_address2": {
            "type": "string",
            "description": "Delivery address line 2"
          },
          "delivery_address3": {
            "type": "string",
            "description": "Delivery address line 3"
          },
          "delivery_address4": {
            "type": "string",
            "description": "Delivery address line 4"
          },
          "delivery_address5": {
            "type": "string",
            "description": "Delivery address line 5"
          },
          "delivery_address6": {
            "type": "string",
            "description": "Delivery address line 6"
          },
          "delivery_address7": {
            "type": "string",
            "description": "Delivery address line 7"
          },
          "delivery_address8": {
            "type": "string",
            "description": "Delivery address line 8"
          },
          "dependent_locality": {
            "type": "string",
            "description": "Dependent locality (e.g. neighbourhood)"
          },
          "sub_building_floor": {
            "type": "string",
            "description": "Floor"
          },
          "dependent_thoroughfare": {
            "type": "string",
            "description": "Dependent street name"
          },
          "sub_administrative_area": {
            "type": "string",
            "description": "Sub administrative area (e.g. county)"
          },
          "double_dependent_locality": {
            "type": "string",
            "description": "Double dependent locality"
          },
          "super_administrative_area": {
            "type": "string",
            "description": "Super administrative area"
          }
        },
        "additionalProperties": false
      },
      "description": "Addresses to verify, up to 100. Results are returned in the same order, each carrying its input index"
    },
    "verify_key": {
      "type": "string",
      "description": "Custom address verification API key"
    },
    "verify_url": {
      "type": "string",
      "description": "Custom address verification endpoint URL"
    },
    "detect_country": {
      "type": "boolean",
      "description": "When true, guess the country of any record that does not supply one, from its address text, and flag the guess in that record's result. Records are then grouped by their detected country, so a mixed-country batch each gets the right default. Off by default"
    }
  },
  "additionalProperties": false
}
verify_address_batch annotations
{
  "title": "Verify Addresses (Batch)",
  "readOnlyHint": true,
  "openWorldHint": true
}
verify_contact — Verify Contact
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Verify address, email, and/or phone together. Returns individual results plus an overall recommendation (most conservative of all provided fields). Set 'suggest' to also get alternative addresses suggested by Loqate whenever the address does not clear the policy; offer them to the user and verify the chosen one in a second call before treating it as good. Suggestions require a separately licensed Loqate feature enabled on the account — without it, verification still succeeds and the problem is reported in suggestions.error. Requires a Loqate API key — pass it via the 'key' field.

verify_contact input schema
{
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "description": "Your own identifier for this record, echoed back by Loqate"
    },
    "key": {
      "type": "string",
      "description": "Loqate API key — required unless the server has one configured or the request carries an Authorization: Bearer header"
    },
    "email": {
      "type": "string",
      "description": "Email address to verify"
    },
    "phone": {
      "type": "string",
      "description": "Phone number to verify"
    },
    "policy": {
      "type": "string",
      "description": "Policy name: strict shipping standard (default) or permissive"
    },
    "address": {
      "type": "string",
      "description": "Full address string"
    },
    "contact": {
      "type": "string",
      "description": "Contact name for the delivery"
    },
    "country": {
      "type": "string",
      "description": "ISO 2-letter country code"
    },
    "options": {
      "type": "object",
      "description": "Loqate API options as nested JSON, e.g. {\"ServerOptions\": {\"FieldStatus\": \"true\"}}. Dot notation is equivalent: {\"ServerOptions.FieldStatus\": \"true\"}. Pass GeoCode here as a boolean — it is sent at the request root where Loqate expects it. In-Options booleans (Certify Version Enhance Deceased Goneaways) take JSON booleans; ServerOptions values (e.g. OutputCasing DefaultCountry) are strings. Set ServerOptions.FieldStatus to \"true\" to get the changes list",
      "additionalProperties": true
    },
    "premise": {
      "type": "string",
      "description": "Premise or house number"
    },
    "suggest": {
      "type": "boolean",
      "description": "When true, look up alternative addresses suggested by Loqate and return them under address.suggestions. Requires the Loqate address-suggestion feature to be enabled on the account (licensed separately from verification). The lookup runs when the address is not accepted (review or reject) OR when it is accepted below the confidence floor (see suggest_below). Address-only — does not affect phone or email; off by default"
    },
    "surname": {
      "type": "string",
      "description": "Recipient's last name"
    },
    "address2": {
      "type": "string",
      "description": "Second address line"
    },
    "address3": {
      "type": "string",
      "description": "Third address line"
    },
    "address4": {
      "type": "string",
      "description": "Fourth address line"
    },
    "address5": {
      "type": "string",
      "description": "Fifth address line"
    },
    "address6": {
      "type": "string",
      "description": "Sixth address line"
    },
    "address7": {
      "type": "string",
      "description": "Seventh address line"
    },
    "address8": {
      "type": "string",
      "description": "Eighth address line"
    },
    "building": {
      "type": "string",
      "description": "Building name"
    },
    "forename": {
      "type": "string",
      "description": "Recipient's first name"
    },
    "function": {
      "type": "string",
      "description": "Contact's job title or function"
    },
    "latitude": {
      "type": "string",
      "description": "Latitude, for a reverse geocode"
    },
    "locality": {
      "type": "string",
      "description": "City or town"
    },
    "post_box": {
      "type": "string",
      "description": "PO box"
    },
    "postcode": {
      "type": "string",
      "description": "Postal or ZIP code"
    },
    "full_name": {
      "type": "string",
      "description": "Recipient's full name"
    },
    "longitude": {
      "type": "string",
      "description": "Longitude, for a reverse geocode"
    },
    "admin_area": {
      "type": "string",
      "description": "State or province"
    },
    "department": {
      "type": "string",
      "description": "Department within the organisation"
    },
    "verify_key": {
      "type": "string",
      "description": "Custom address verification API key (overrides LOQATE_VERIFY_KEY env var)"
    },
    "verify_url": {
      "type": "string",
      "description": "Custom address verification endpoint URL (overrides LOQATE_VERIFY_URL env var)"
    },
    "middle_name": {
      "type": "string",
      "description": "Recipient's middle name"
    },
    "organization": {
      "type": "string",
      "description": "Company or organisation name"
    },
    "sub_building": {
      "type": "string",
      "description": "Sub-building (e.g. flat, apartment or suite)"
    },
    "thoroughfare": {
      "type": "string",
      "description": "Street name"
    },
    "suggest_below": {
      "type": [
        "null",
        "number"
      ],
      "description": "Confidence floor for suggestions (0-1). An accepted address scoring below it still gets suggestions. Omit to use the policy value (standard 0.85); 0 disables the floor. Address-only"
    },
    "suggest_limit": {
      "type": "integer",
      "description": "Maximum number of suggestions to return (1-10, default 5). Requires suggest"
    },
    "suggestion_id": {
      "type": "string",
      "description": "Id of a suggestion previously returned in address.suggestions. The tool retrieves that address's cleansed components from Loqate and verifies those, which is how you confirm a suggestion the user chose. Use INSTEAD OF address, not alongside it. CONSUMES A LOQATE CREDIT — pass one id, for the one suggestion that was chosen, never several. Ids are not stable over time; a stale one returns SUGGESTION_NOT_FOUND and you must search again rather than retry"
    },
    "detect_country": {
      "type": "boolean",
      "description": "When true and no country is supplied, guess the country from the address and flag the guess in the result (country_guessed). Address-only — does not affect phone or email; off by default"
    },
    "delivery_address": {
      "type": "string",
      "description": "Full delivery address"
    },
    "delivery_address1": {
      "type": "string",
      "description": "Delivery address line 1"
    },
    "delivery_address2": {
      "type": "string",
      "description": "Delivery address line 2"
    },
    "delivery_address3": {
      "type": "string",
      "description": "Delivery address line 3"
    },
    "delivery_address4": {
      "type": "string",
      "description": "Delivery address line 4"
    },
    "delivery_address5": {
      "type": "string",
      "description": "Delivery address line 5"
    },
    "delivery_address6": {
      "type": "string",
      "description": "Delivery address line 6"
    },
    "delivery_address7": {
      "type": "string",
      "description": "Delivery address line 7"
    },
    "delivery_address8": {
      "type": "string",
      "description": "Delivery address line 8"
    },
    "dependent_locality": {
      "type": "string",
      "description": "Dependent locality (e.g. neighbourhood)"
    },
    "sub_building_floor": {
      "type": "string",
      "description": "Floor"
    },
    "dependent_thoroughfare": {
      "type": "string",
      "description": "Dependent street name"
    },
    "sub_administrative_area": {
      "type": "string",
      "description": "Sub administrative area (e.g. county)"
    },
    "double_dependent_locality": {
      "type": "string",
      "description": "Double dependent locality"
    },
    "super_administrative_area": {
      "type": "string",
      "description": "Super administrative area"
    }
  },
  "additionalProperties": false
}
verify_contact annotations
{
  "title": "Verify Contact",
  "readOnlyHint": true,
  "openWorldHint": true
}
verify_contact_batch — Verify Contacts (Batch)
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Verify up to 100 contacts in one call, each with any combination of address, email and phone, returning an overall recommendation per contact. Results are in submission order and each carries its input index. One bad record fails only itself, and a field that cannot be verified does not remove the contact — the overall recommendation is drawn from whichever fields were checked. The three types run concurrently, so a full batch is paced by email at roughly 7 seconds per 100. Requires a Loqate API key — pass it via the 'key' field.

verify_contact_batch input schema
{
  "type": "object",
  "required": [
    "contacts"
  ],
  "properties": {
    "key": {
      "type": "string",
      "description": "Loqate API key — required unless the server has one configured or the request carries an Authorization: Bearer header"
    },
    "policy": {
      "type": "string",
      "description": "Policy name: strict shipping standard (default) or permissive"
    },
    "options": {
      "type": "object",
      "description": "Loqate API options as nested JSON, applied to every address in the batch",
      "additionalProperties": true
    },
    "contacts": {
      "type": [
        "null",
        "array"
      ],
      "items": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "description": "Your own identifier for this record, echoed back by Loqate"
          },
          "email": {
            "type": "string",
            "description": "Email address"
          },
          "phone": {
            "type": "string",
            "description": "Phone number (E.164 preferred)"
          },
          "address": {
            "type": "string",
            "description": "Full address string (free-form)"
          },
          "contact": {
            "type": "string",
            "description": "Contact name for the delivery"
          },
          "country": {
            "type": "string",
            "description": "ISO 2-letter country code, used for the address and to parse national-format phone numbers"
          },
          "premise": {
            "type": "string",
            "description": "Premise or house number"
          },
          "surname": {
            "type": "string",
            "description": "Recipient's last name"
          },
          "address2": {
            "type": "string",
            "description": "Second address line"
          },
          "address3": {
            "type": "string",
            "description": "Third address line"
          },
          "address4": {
            "type": "string",
            "description": "Fourth address line"
          },
          "address5": {
            "type": "string",
            "description": "Fifth address line"
          },
          "address6": {
            "type": "string",
            "description": "Sixth address line"
          },
          "address7": {
            "type": "string",
            "description": "Seventh address line"
          },
          "address8": {
            "type": "string",
            "description": "Eighth address line"
          },
          "building": {
            "type": "string",
            "description": "Building name"
          },
          "forename": {
            "type": "string",
            "description": "Recipient's first name"
          },
          "function": {
            "type": "string",
            "description": "Contact's job title or function"
          },
          "latitude": {
            "type": "string",
            "description": "Latitude, for a reverse geocode"
          },
          "locality": {
            "type": "string",
            "description": "City or town"
          },
          "post_box": {
            "type": "string",
            "description": "PO box"
          },
          "postcode": {
            "type": "string",
            "description": "Postal or ZIP code"
          },
          "full_name": {
            "type": "string",
            "description": "Recipient's full name"
          },
          "longitude": {
            "type": "string",
            "description": "Longitude, for a reverse geocode"
          },
          "admin_area": {
            "type": "string",
            "description": "State or province"
          },
          "department": {
            "type": "string",
            "description": "Department within the organisation"
          },
          "middle_name": {
            "type": "string",
            "description": "Recipient's middle name"
          },
          "organization": {
            "type": "string",
            "description": "Company or organisation name"
          },
          "sub_building": {
            "type": "string",
            "description": "Sub-building (e.g. flat, apartment or suite)"
          },
          "thoroughfare": {
            "type": "string",
            "description": "Street name"
          },
          "delivery_address": {
            "type": "string",
            "description": "Full delivery address"
          },
          "delivery_address1": {
            "type": "string",
            "description": "Delivery address line 1"
          },
          "delivery_address2": {
            "type": "string",
            "description": "Delivery address line 2"
          },
          "delivery_address3": {
            "type": "string",
            "description": "Delivery address line 3"
          },
          "delivery_address4": {
            "type": "string",
            "description": "Delivery address line 4"
          },
          "delivery_address5": {
            "type": "string",
            "description": "Delivery address line 5"
          },
          "delivery_address6": {
            "type": "string",
            "description": "Delivery address line 6"
          },
          "delivery_address7": {
            "type": "string",
            "description": "Delivery address line 7"
          },
          "delivery_address8": {
            "type": "string",
            "description": "Delivery address line 8"
          },
          "dependent_locality": {
            "type": "string",
            "description": "Dependent locality (e.g. neighbourhood)"
          },
          "sub_building_floor": {
            "type": "string",
            "description": "Floor"
          },
          "dependent_thoroughfare": {
            "type": "string",
            "description": "Dependent street name"
          },
          "sub_administrative_area": {
            "type": "string",
            "description": "Sub administrative area (e.g. county)"
          },
          "double_dependent_locality": {
            "type": "string",
            "description": "Double dependent locality"
          },
          "super_administrative_area": {
            "type": "string",
            "description": "Super administrative area"
          }
        },
        "additionalProperties": false
      },
      "description": "Contacts to verify, up to 100. Results are returned in the same order, each carrying its input index"
    },
    "verify_key": {
      "type": "string",
      "description": "Custom address verification API key"
    },
    "verify_url": {
      "type": "string",
      "description": "Custom address verification endpoint URL"
    },
    "detect_country": {
      "type": "boolean",
      "description": "When true, guess the country of any contact whose address does not supply one and flag the guess in that contact's address result. Off by default"
    }
  },
  "additionalProperties": false
}
verify_contact_batch annotations
{
  "title": "Verify Contacts (Batch)",
  "readOnlyHint": true,
  "openWorldHint": true
}
verify_email — Verify Email
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Verify an email address via Loqate. Returns confidence, risk level, and accept/review/reject recommendation. Requires a Loqate API key — pass it via the 'key' field.

verify_email input schema
{
  "type": "object",
  "required": [
    "email"
  ],
  "properties": {
    "key": {
      "type": "string",
      "description": "Loqate API key — required unless the server has one configured or the request carries an Authorization: Bearer header"
    },
    "email": {
      "type": "string",
      "description": "Email address to verify"
    },
    "policy": {
      "type": "string",
      "description": "Policy name: strict shipping standard (default) or permissive"
    }
  },
  "additionalProperties": false
}
verify_email annotations
{
  "title": "Verify Email",
  "readOnlyHint": true,
  "openWorldHint": true
}
verify_email_batch — Verify Emails (Batch)
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Verify up to 100 email addresses in one call. Up to 100 records per call; the results array is in submission order and each entry carries its input index, so results can be zipped back onto rows without relying on order. One bad record fails only itself — it carries an error while the rest are verified. Suggestions are not available in batch. The batch endpoint returns less detail than single verification: risk, complainer and reason are absent, though the accept/review/reject recommendation and the disposable-mailbox flag are identical. Requires a Loqate API key — pass it via the 'key' field.

verify_email_batch input schema
{
  "type": "object",
  "required": [
    "emails"
  ],
  "properties": {
    "key": {
      "type": "string",
      "description": "Loqate API key — required unless the server has one configured or the request carries an Authorization: Bearer header"
    },
    "emails": {
      "type": [
        "null",
        "array"
      ],
      "items": {
        "type": "string"
      },
      "description": "Email addresses to verify, up to 100. Results are returned in the same order, each carrying its input index"
    },
    "policy": {
      "type": "string",
      "description": "Policy name: strict shipping standard (default) or permissive"
    }
  },
  "additionalProperties": false
}
verify_email_batch annotations
{
  "title": "Verify Emails (Batch)",
  "readOnlyHint": true,
  "openWorldHint": true
}
verify_phone — Verify Phone Number
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Verify a phone number via Loqate. Returns confidence, number type, carrier, and accept/review/reject recommendation. Requires a Loqate API key — pass it via the 'key' field.

verify_phone input schema
{
  "type": "object",
  "required": [
    "phone"
  ],
  "properties": {
    "key": {
      "type": "string",
      "description": "Loqate API key — required unless the server has one configured or the request carries an Authorization: Bearer header"
    },
    "phone": {
      "type": "string",
      "description": "Phone number (E.164 format preferred e.g. +442071234567)"
    },
    "policy": {
      "type": "string",
      "description": "Policy name: strict shipping standard (default) or permissive"
    },
    "country": {
      "type": "string",
      "description": "ISO 2-letter country code (helps with parsing if no country prefix)"
    }
  },
  "additionalProperties": false
}
verify_phone annotations
{
  "title": "Verify Phone Number",
  "readOnlyHint": true,
  "openWorldHint": true
}
verify_phone_batch — Verify Phone Numbers (Batch)
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Verify up to 100 phone numbers in one call. Up to 100 records per call; the results array is in submission order and each entry carries its input index, so results can be zipped back onto rows without relying on order. One bad record fails only itself — it carries an error while the rest are verified. Suggestions are not available in batch. Phone validation has no bulk endpoint, so numbers are checked concurrently against a shared limit. Measured at around 2.6s for 100 numbers, which is the fastest of the three batch types — email is the slowest, at roughly 7s for 100, because it probes mail servers. Requires a Loqate API key — pass it via the 'key' field.

verify_phone_batch input schema
{
  "type": "object",
  "required": [
    "phones"
  ],
  "properties": {
    "key": {
      "type": "string",
      "description": "Loqate API key — required unless the server has one configured or the request carries an Authorization: Bearer header"
    },
    "phones": {
      "type": [
        "null",
        "array"
      ],
      "items": {
        "type": "object",
        "required": [
          "phone"
        ],
        "properties": {
          "phone": {
            "type": "string",
            "description": "Phone number (E.164 format preferred e.g. +442071234567)"
          },
          "country": {
            "type": "string",
            "description": "ISO 2-letter country code (helps with parsing if no country prefix)"
          }
        },
        "additionalProperties": false
      },
      "description": "Phone numbers to verify, up to 100. Results are returned in the same order, each carrying its input index"
    },
    "policy": {
      "type": "string",
      "description": "Policy name: strict shipping standard (default) or permissive"
    }
  },
  "additionalProperties": false
}
verify_phone_batch annotations
{
  "title": "Verify Phone Numbers (Batch)",
  "readOnlyHint": true,
  "openWorldHint": true
}

Prompts

1 advertised

loqate-usage-guide

Advertised by the server during the last successful anonymous check.

How to use Loqate verification tools — policies, result interpretation, API key setup, and example queries

No arguments advertised.

Resources

Not advertised

No resource definitions available.

90-day uptime

A lightweight connection check about every six hours, sampled on hosts with many listings. It shows the server answered, not that its tools work.

Too few checks for a percentage yet (2 of 2 answered).

  1. 2026-11-06: 1 of 1 checks answered
  2. 2026-11-07: 1 of 1 checks answered

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

Maintenance history

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

  • · probe · passed · 1125 ms · metadata changed · 11 tool(s), 1 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 gbg-loqate-reach-mcp https://reach.prod.fabric.gbgplatforms.com/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 gbg-loqate-reach-mcp --url https://reach.prod.fabric.gbgplatforms.com/mcp

Cursor

Merge this server into .cursor/mcp.json in your project, then enable gbg-loqate-reach-mcp in your MCP settings.
Cursor configuration
{
  "mcpServers": {
    "gbg-loqate-reach-mcp": {
      "url": "https://reach.prod.fabric.gbgplatforms.com/mcp"
    }
  }
}

Cline

Merge this into cline_mcp_settings.json (Cline → MCP Servers → Configure).
Cline configuration
{
  "mcpServers": {
    "gbg-loqate-reach-mcp": {
      "type": "streamableHttp",
      "url": "https://reach.prod.fabric.gbgplatforms.com/mcp",
      "disabled": false
    }
  }
}

VS Code

Merge this server into .vscode/mcp.json. Use MCP: List Servers to start gbg-loqate-reach-mcp and inspect its tools.
VS Code configuration
{
  "servers": {
    "gbg-loqate-reach-mcp": {
      "type": "http",
      "url": "https://reach.prod.fabric.gbgplatforms.com/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 gbg-loqate-reach-mcp https://reach.prod.fabric.gbgplatforms.com/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://reach.prod.fabric.gbgplatforms.com/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": {
    "gbg-loqate-reach-mcp": {
      "serverUrl": "https://reach.prod.fabric.gbgplatforms.com/mcp"
    }
  }
}

Let your agent find its tools

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