Full trademark search and clearance analysis.
Haloo is a deterministic, computational AI purpose-built for trademark retrieval. It processes the complete official trademark register for your selected jurisdiction and applies examiner-trained likelihood-of-confusion algorithms to retrieve every prior mark that could reasonably conflict with your mark — exact matches, phonetic similarities, spelling variants, partial and coordinated marks, translations, and more. The retrieval is intentionally broad, designed to surface every reasonable edge case and nuance. Claude then applies a final layer of legal reasoning and produces a full ranked retrieval report and clearance summary memo.
This connector searches official register data only. Common law, marketplace, domain, and social media use are not included.
OAuth 2.1 (PKCE, Dynamic Client Registration) via Haloo. Claude discovers the
authorization server from /.well-known/oauth-protected-resource/mcp; sign in
with your Haloo account on first connect. Each search consumes one prepaid usage unit.
Start a clearance for one proposed mark in one jurisdiction. Reserves one usage unit and
returns {status:"submitted", search_id, typical_wait_minutes, estimated_wait_minutes,
poll_every_seconds, unit_status:"reserved"} — or a structured
invalid_request / payment_required / error result
(see Result statuses). Invalid input, including an unsupported
jurisdiction, is rejected before anything is charged.
| Parameter | Type | Notes |
|---|---|---|
| mark required | string | Proposed trademark text, e.g. "Honey Money". |
| country required | string | ONE jurisdiction code from the supported list (US, CA, GB, EM = EUIPO, WO = WIPO, AU, …; aliases such as UK, EU, WIPO are translated). Unrecognized codes are rejected with unsupported_jurisdiction and no charge. One call clears one jurisdiction. |
| niceClasses required | int[] | Nice classification classes 1–45, e.g. [9, 42]. |
| goodsServices optional | string | Free-text goods/services for relatedness, within the niceClasses scope. |
| compound optional | string | Compound form of the mark (e.g. "power lifter" for POWERLIFTER). |
| synonyms optional | string | Comma-separated synonyms/antonyms to widen the search. |
Poll the clearance (free; never charges a unit). While running returns
{status:"in_progress", step, message, typical_wait_minutes, estimated_wait_minutes,
poll_every_seconds, elapsed_seconds}; when done returns
{status:"complete", subject, triage_band, total_found, memo_url, docx_url, ranking_url,
ranking_json_url, download_links_expire_in, memo_included, unit_status, unit_note}.
The memo body is not inlined by default — it is the file at memo_url;
pass include_memo=true to also receive memo_markdown (~10–15k tokens).
A clearance that ended in failure returns status:"failed"; an unknown id returns
status:"not_found".
| Parameter | Type | Notes |
|---|---|---|
| search_id required | string | The id returned by search_trademark. |
| include_memo optional | boolean | Default false. When true, a complete result also carries the full memo text inline as memo_markdown. Ignored unless status is complete. |
| Tool | status | Meaning | Next step (retry_action) |
|---|---|---|---|
| search_trademark | submitted | Clearance started; one unit reserved (charged only if it completes with results). | poll get_clearance_report |
invalid_request | Input must change (mark, jurisdiction, classes…). Nothing reserved. | fix_input | |
payment_required | No usage units; billing_url to buy them. Nothing reserved. | buy_units | |
error | Transient problem with this call (billing service, job start) or authentication. | same_call / none | |
| get_clearance_report | in_progress | Still running. | poll again at poll_every_seconds |
complete | Report ready; unit_status charged or refunded (refund_pending / unknown only if the billing service was unreachable at the end). | — | |
failed | Terminal. The clearance ended in failure; this search_id never completes. Unit refunded (or refund pending; unknown for pre-contract records). Carries subject. | new_search (reserves a unit) | |
not_found | No record for this search_id (never existed here, or expired from storage). | none | |
error | Transient problem with this poll only; the clearance is unaffected. | poll_again |
| Field | Values | Meaning |
|---|---|---|
reason_code | see below | Machine-readable cause. |
retryable | true / false / null | Is a fresh attempt (per retry_action) within a minute or two likely to succeed; null when the connector cannot say. |
retry_action | same_call · poll_again · new_search · fix_input · buy_units · none | The next step. |
unit_status | not_charged · reserved · charged · refunded · refund_pending · unknown | Billing state of the usage unit. reserved appears only on submitted; refund_pending: the release call failed and the hold expires automatically (~30 min); unknown: the connector has no information. |
unit_note | text | One factual sentence about the unit, suitable to relay verbatim. |
message / error | text | Human-readable, factual description. error duplicates message on every non-success status except payment_required (expected flow, not an error). |
| reason_code | Status | Cause |
|---|---|---|
| invalid_mark · invalid_compound · invalid_synonym · invalid_nice_classes | invalid_request | Input failed validation. |
| multiple_jurisdictions · invalid_jurisdiction · unsupported_jurisdiction | invalid_request | Several codes, a malformed code, or a register the search does not serve. |
| payment_required | payment_required | No prepaid usage units. |
| auth_required | error | The connection's token is invalid or introspection was unavailable. |
| billing_unavailable · submit_failed | error | Transient failure reserving the unit / starting the job. |
| register_unavailable | failed | The register service returned an error or was unreachable (may be temporary). |
| register_rejected_request | failed | The register service rejected the request (HTTP 4xx other than 401/403/408/429). |
| register_auth_failed | failed | The connector could not authenticate to the register service (HTTP 401/403) — a Haloo-side issue; contact support. |
| provider_overloaded · provider_error | failed | The AI analysis provider was overloaded / errored through automatic retries. |
| storage_unavailable · analysis_output_invalid | failed | Report storage blip / AI output failed validation (usually transient). |
| processing_error | failed | Unexpected error; retryability unknown (retryable: null). |
| not_found · status_unavailable · status_stale | not_found / error | Unknown id / temporary status-read problem / no progress reported for an unusually long time. |
194 registers, verified searchable against the live register service on 2026-09-15. Codes are ISO 3166-1 / WIPO ST.3 (e.g. EM = EUIPO, WO = WIPO, AP = ARIPO, OA = OAPI, BX = Benelux).
Accepted aliases (translated before the search): ARIPO → AP, EU → EM, KS → XK, OAPI → OA, SP → ES, UF → US, UK → GB, USA → US, WIPO → WO.
No national register: Belgium, the Netherlands and Luxembourg are covered by BX (Benelux); the 17 OAPI member states (e.g. Burkina Faso, Cameroon, Senegal, Côte d'Ivoire) by OA. Requests for those country codes are rejected with a suggested_country pointing to the regional register.
Extra registers enabled by configuration (accepted, not part of the verified sweep): none.
get_clearance_report at the returned poll_every_seconds (about every 5 minutes) until it is complete or failed.include_memo) — the memo text inline.unit_status); a failed clearance releases its reserved unit and says whether the refund was confirmed.