Skip to content

Misc

Reference for the 9 CryptoComply MCP tools in the Misc family.

Tools in this group

analytics_summary

Read-only: yes.

Return aggregate counts for an organization: open alerts, profiles by review status, blockchain addresses by risk, and profile inquiries by resolution. Use for the "what's the state of my book today?" opener.

Optional breakdown_by adds drill-down dimensions; supported values: group (adds profiles grouped by Group), risk (adds profiles grouped by risk rating). Omit for the default shape.

Returns {open_alert_count, profiles_by_review_status, blockchain_addresses_by_risk, profile_inquiries_by_resolution} plus any requested breakdowns.

Parameters

  • organization_id (Annotated[int, Field(description='Organization to summarise.')], required) — (no description)
  • breakdown_by (Annotated[list[str] | None, Field(description="Optional list of additional drill-down dimensions. Supported: 'group', 'risk'.")], optional) — (no description)

country_list

Read-only: yes.

List countries from the ISO 3166-1 catalog. Use to resolve alpha-2 codes (e.g. 'IR'), alpha-3 codes ('IRN'), or names ('Iran') for profile creation, citizenship updates, jurisdiction audits, etc. Optional query substring-matches against name and both ISO codes (case-insensitive).

Returns a flat list of {id, alpha2, alpha3, english_name}. No pagination (the full catalog is ~250 entries).

Parameters

  • query (Annotated[str | None, Field(description='Case-insensitive substring matched against english_name, alpha2, and alpha3. Omit to return all countries.')], optional) — (no description)
  • limit (Annotated[int, Field(ge=1, le=300, description='Max rows to return.')], optional) — (no description)

custom_field_create

Read-only: no.

Define a new custom field on the organization's profiles. Custom fields are org-level extra fields attached to a profile section; their values live on each profile's custom_fields blob. Set externally_requestable=true to make the field offerable in RFIs and intake forms (it then appears in intake_form_catalog for groups where its section is visible).

Three text fields, three audiences. field_label is the internal noun-phrase staff see — on the profile page, list columns, audit log, exports, and the field picker where an officer chooses what to request. question_text is the separate prompt the RFI/intake-form recipient reads (it falls back to field_label when omitted); question_description is optional helper text shown under that prompt. E.g. field_label 'Telegram handle', question_text 'What is your Telegram handle?'. question_text is required.

field_type picks the widget on intake forms: 'text' (default) is a single-line input capped at 256 characters — right for names, cities, IDs; 'long_text' is a multi-line box with no length cap — for descriptions, notes, or legal text; 'boolean' is a nullable Yes/No toggle (unanswered stays null) — and, being a closed-choice field, can be used as a visible_if condition source that shows/hides other questions (e.g. ask nationality only when 'Are you a US citizen?' is No).

Valid section keys are the section keys returned by intake_form_catalog (omit for the default section). The key must be a lowercase identifier and not collide with an existing field.

Two-step write tool. First call without confirm_token returns a dry-run preview + a 60-second token; second call with the same arguments + confirm_token applies the change.

On success: {status: "ok", field} (the definition as stored).

Parameters

  • organization_id (Annotated[int, Field(description='Organization to define the custom field on.')], required) — (no description)
  • profile_type (Annotated[Literal['individual', 'entity'], Field(description='Profile type the field applies to.')], required) — (no description)
  • key (Annotated[str, Field(pattern='^[a-z][a-z0-9_]*$', max_length=64, description="Stable lowercase identifier, e.g. 'telegram_handle'.")], required) — (no description)
  • field_label (Annotated[str, Field(min_length=1, max_length=256, description="Internal noun-phrase on staff surfaces — profile page, list columns, audit log, exports, and the RFI field picker (e.g. 'Telegram handle'). Recipients see question_text, not this.")], required) — (no description)
  • question_text (Annotated[str, Field(min_length=1, max_length=512, description="Recipient-facing prompt the field shows in RFIs and intake forms, e.g. 'What is your Telegram handle?'. Distinct from field_label, which stays the internal audit/export noun-phrase.")], required) — (no description)
  • question_description (Annotated[str | None, Field(max_length=1024, description='Optional helper text shown under the question in RFIs and intake forms.')], optional) — (no description)
  • section (Annotated[str | None, Field(description='Profile section key the field belongs to. Omit for the default section.')], optional) — (no description)
  • externally_requestable (Annotated[bool, Field(description='Whether the field can be requested externally (RFIs, intake forms). Default false.')], optional) — (no description)
  • field_type (Annotated[Literal['text', 'long_text', 'boolean', 'number', 'date', 'email', 'phone', 'enum', 'multi_enum', 'country', 'multi_country'], Field(description="Widget/type: 'text' (default; single-line, 256 chars), 'long_text' (multi-line, uncapped), 'boolean' (Yes/No), 'number', 'date' (ISO), 'email', 'phone', 'enum' (single choice), 'multi_enum' (multiple choice), 'country' or 'multi_country' (picked from the country catalog). 'enum'/'multi_enum' require choices; every other type must not set it.")], optional) — (no description)
  • choices (Annotated[list[dict[str, str]] | None, Field(description="Options for an 'enum'/'multi_enum' field, each {value, label} (value is stored, label is shown). Required for those types, rejected for any other. Omit otherwise.")], optional) — (no description)
  • conditional (Annotated[dict[str, Any] | None, Field(description="Show this field only when another field's value matches: {field, op, value} with op one of eq/neq/in/empty/notempty. field is another field's key — a model field or a sibling custom field. in takes values (a list); empty/notempty take no value.")], optional) — (no description)
  • confirm_token (Annotated[str | None, Field(description=CONFIRM_TOKEN)], optional) — (no description)

list_my_organizations

Read-only: yes.

List every organization the authenticated user belongs to. Call this first to learn which organization_id values are valid for the other tools.

Returns {count, limit, offset, has_more, results} where each result is {organization_id, name, role}.

me

Read-only: yes.

Return the authenticated user's full profile inside a specific organization: identity, role, permissions, and feature flags. Mirrors the REST /api/v1/organizations/<id>/users/me/ endpoint so MCP-driven workflows can answer 'what role do I have here?', 'which permissions am I granted?', and 'which feature flags apply to me in this org?' from a single call. Use whoami instead when you only need the user's global identity (no organization context).

Returns {user_id, username, email, first_name, last_name, full_name, date_joined, last_login, is_staff, is_superuser, membership_id, organization_id, organization_name, role: {id, name, description, permissions: [codename, ...]}, feature_flags: [name, ...]}.

Parameters

  • organization_id (Annotated[int, Field(description="Organization to read the caller's membership for.")], required) — (no description)

member_list

Read-only: yes.

List members of an organization with their roles. Use when the user asks about team members, who has access, or who owns what.

Returns {count, limit, offset, has_more, results} where each result is {user_id, email, full_name, role}.

Parameters

  • organization_id (Annotated[int, Field(description='Organization whose members to list.')], required) — (no description)
  • role_id (Annotated[int | None, Field(description='Filter by role id.')], optional) — (no description)
  • limit (Annotated[int, Field(ge=1, le=100, description=LIMIT)], optional) — (no description)
  • offset (Annotated[int, Field(ge=0, description=OFFSET)], optional) — (no description)

relationship_type_list

Read-only: yes.

List valid relationship-type codes for profile_related_add / profile_related_update. Codes include ULTIMATE_BENEFICIAL_OWNER, CONTROL_PERSON, PARENT_ENTITY/CONTROLLING_ENTITY, COMPLIANCE_OFFICER, OTHER.

Returns [{code, label, description: null}]. Always returns the full enum.

screening_frequency_options

Read-only: yes.

List screening-frequency options ('N'=Never, 'D'=Daily, 'W'=Weekly, 'M'=Monthly, 'Q'=Quarterly, 'Y'=Yearly). Use before calling profile_update or blockchain_address_update with a screening_frequency argument so you submit a valid code.

Each row carries the code, human label, and (where applicable) the cadence in days. Always returns the full enum — no filtering.

whoami

Read-only: yes.

Return the CryptoComply identity of the bearer-token holder. Use when the user asks 'who am I?' or 'which account am I authenticated as?' — the answer is always derived from the validated JWT, never inferred from the model's session context, and is the ground truth for every other tool call.

Returns {user_id, username, email, full_name, is_staff, is_superuser}.