Persona MCP by usefulapi

Read Persona inquiries, accounts, verifications and reports.

Should I use this

Quality & Safety

A
Description quality
100%
Schema completeness
96%
Naming quality
80%
Poisoning risk
100%
Permission match
100%
Protocol compliance
100%

Based on automated analysis of tool definitions and protocol compliance.

Context Cost

~2,633Tokens (tool definitions)
~1.3 KBTypical response size
Significant attention impact (2.06% of 128k context)

This is the approximate number of tokens consumed each time the server's tools are loaded into a model's context. Higher counts reduce the attention available for other tasks.

Install

One-Click Install

Add this to your `claude_desktop_config.json` file:

{
  "mcpServers": {
    "persona": {
      "url": "https://persona.usefulapi.io/mcp"
    }
  }
}

Remote endpoints

https://persona.usefulapi.io/mcpstreamable-http

What it can do

Tool inventory

Tools (14)

🟢 Read-only🟡 Write🔴 Delete⚪ Unknown
🟢persona_list_inquiries(status, account_id, reference_id, inquiry_template_id, created_at_start, ...)

List identity-verification inquiries (an end-user's KYC verification session). Optionally filter by status, account_id, reference_id, inquiry_template_id, and a created-at date range, and paginate via the JSON:API links.next cursor (page_after) / links.prev (page_before). Returns JSON:API { data:[...], links } — objects contain PII. Persona REST: GET /inquiries.

Input Schema

{
  "type": "object",
  "properties": {
    "status": {
      "description": "Filter by inquiry status (e.g. created, pending, completed, failed, expired, approved, declined).",
      "type": "string"
    },
    "account_id": {
      "description": "Filter by the associated account id.",
      "type": "string"
    },
    "reference_id": {
      "description": "Filter by your own reference-id set on the inquiry.",
      "type": "string"
    },
    "inquiry_template_id": {
      "description": "Filter by the inquiry template id (e.g. itmpl_...).",
      "type": "string"
    },
    "created_at_start": {
      "description": "Filter: inquiries created at/after this ISO 8601 timestamp.",
      "type": "string"
    },
    "created_at_end": {
      "description": "Filter: inquiries created at/before this ISO 8601 timestamp.",
      "type": "string"
    },
    "page_size": {
      "description": "Page size — number of records per page.",
      "type": "integer",
      "minimum": -9007199254740991,
      "maximum": 9007199254740991
    },
    "page_after": {
      "description": "Pagination cursor: return the page AFTER this record id (follow the links.next cursor).",
      "type": "string"
    },
    "page_before": {
      "description": "Pagination cursor: return the page BEFORE this record id (follow the links.prev cursor).",
      "type": "string"
    }
  },
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢persona_get_inquiry(inquiry_id)

Get a single identity-verification inquiry by id, including its status, template, and relationships (verifications, account). Returns JSON:API { data } containing PII. Persona REST: GET /inquiries/{inquiry_id}.

Input Schema

{
  "type": "object",
  "properties": {
    "inquiry_id": {
      "type": "string",
      "description": "The inquiry id (e.g. inq_...)."
    }
  },
  "required": [
    "inquiry_id"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢persona_list_accounts(reference_id, page_size, page_after, page_before)

List accounts (a persistent identity record for an end user, linking their inquiries/verifications over time). Optionally filter by reference_id and paginate via the JSON:API links.next cursor (page_after) / links.prev (page_before). Returns JSON:API { data:[...], links } — objects contain PII. Persona REST: GET /accounts.

Input Schema

{
  "type": "object",
  "properties": {
    "reference_id": {
      "description": "Filter by your own reference-id set on the account.",
      "type": "string"
    },
    "page_size": {
      "description": "Page size — number of records per page.",
      "type": "integer",
      "minimum": -9007199254740991,
      "maximum": 9007199254740991
    },
    "page_after": {
      "description": "Pagination cursor: return the page AFTER this record id (follow the links.next cursor).",
      "type": "string"
    },
    "page_before": {
      "description": "Pagination cursor: return the page BEFORE this record id (follow the links.prev cursor).",
      "type": "string"
    }
  },
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢persona_get_account(account_id)

Get a single account by id — the persistent identity record for an end user. Returns JSON:API { data } containing PII. Persona REST: GET /accounts/{account_id}.

Input Schema

{
  "type": "object",
  "properties": {
    "account_id": {
      "type": "string",
      "description": "The account id (e.g. act_...)."
    }
  },
  "required": [
    "account_id"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢persona_get_verification(verification_id)

Get a single verification by id — one identity check within an inquiry (e.g. government-id, selfie, database, document). Returns JSON:API { data } with check results and PII. Persona REST: GET /verifications/{verification_id}.

Input Schema

{
  "type": "object",
  "properties": {
    "verification_id": {
      "type": "string",
      "description": "The verification id (e.g. ver_...)."
    }
  },
  "required": [
    "verification_id"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢persona_list_reports(page_size, page_after, page_before)

List reports (screening/monitoring results such as watchlist, adverse-media, or business lookups). Paginate via the JSON:API links.next cursor (page_after) / links.prev (page_before). Returns JSON:API { data:[...], links } — objects may contain PII. Persona REST: GET /reports.

Input Schema

{
  "type": "object",
  "properties": {
    "page_size": {
      "description": "Page size — number of records per page.",
      "type": "integer",
      "minimum": -9007199254740991,
      "maximum": 9007199254740991
    },
    "page_after": {
      "description": "Pagination cursor: return the page AFTER this record id (follow the links.next cursor).",
      "type": "string"
    },
    "page_before": {
      "description": "Pagination cursor: return the page BEFORE this record id (follow the links.prev cursor).",
      "type": "string"
    }
  },
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢persona_get_report(report_id)

Get a single report by id — a screening/monitoring result (e.g. watchlist, adverse-media, business lookup). Returns JSON:API { data } containing PII. Persona REST: GET /reports/{report_id}.

Input Schema

{
  "type": "object",
  "properties": {
    "report_id": {
      "type": "string",
      "description": "The report id (e.g. report_...)."
    }
  },
  "required": [
    "report_id"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢persona_list_cases(status, case_template_id, account_id, reference_id, inquiry_id, ...)

List cases (manual-review workflow items grouping inquiries/reports for an analyst to adjudicate). Optionally filter by status, case_template_id, account_id, reference_id, inquiry_id, report_id, and paginate via the JSON:API links.next cursor (page_after) / links.prev (page_before). Returns JSON:API { data:[...], links } — objects contain PII. Persona REST: GET /cases.

Input Schema

{
  "type": "object",
  "properties": {
    "status": {
      "description": "Filter by case status (e.g. open, resolved, waiting).",
      "type": "string"
    },
    "case_template_id": {
      "description": "Filter by the case template id.",
      "type": "string"
    },
    "account_id": {
      "description": "Filter by the associated account id.",
      "type": "string"
    },
    "reference_id": {
      "description": "Filter by your own reference-id set on the case.",
      "type": "string"
    },
    "inquiry_id": {
      "description": "Filter by an associated inquiry id.",
      "type": "string"
    },
    "report_id": {
      "description": "Filter by an associated report id.",
      "type": "string"
    },
    "page_size": {
      "description": "Page size — number of records per page.",
      "type": "integer",
      "minimum": -9007199254740991,
      "maximum": 9007199254740991
    },
    "page_after": {
      "description": "Pagination cursor: return the page AFTER this record id (follow the links.next cursor).",
      "type": "string"
    },
    "page_before": {
      "description": "Pagination cursor: return the page BEFORE this record id (follow the links.prev cursor).",
      "type": "string"
    }
  },
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢persona_get_case(case_id)

Get a single case by id — a manual-review workflow item. Returns JSON:API { data } containing PII. Persona REST: GET /cases/{case_id}.

Input Schema

{
  "type": "object",
  "properties": {
    "case_id": {
      "type": "string",
      "description": "The case id (e.g. case_...)."
    }
  },
  "required": [
    "case_id"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢persona_list_transactions(reference_id, transaction_type_id, page_size, page_after, page_before)

List transactions (records submitted for transaction fraud/monitoring analysis). Optionally filter by reference_id and transaction_type_id, and paginate via the JSON:API links.next cursor (page_after) / links.prev (page_before). Returns JSON:API { data:[...], links } — objects may contain PII. Persona REST: GET /transactions.

Input Schema

{
  "type": "object",
  "properties": {
    "reference_id": {
      "description": "Filter by your own reference-id set on the transaction.",
      "type": "string"
    },
    "transaction_type_id": {
      "description": "Filter by the transaction type id.",
      "type": "string"
    },
    "page_size": {
      "description": "Page size — number of records per page.",
      "type": "integer",
      "minimum": -9007199254740991,
      "maximum": 9007199254740991
    },
    "page_after": {
      "description": "Pagination cursor: return the page AFTER this record id (follow the links.next cursor).",
      "type": "string"
    },
    "page_before": {
      "description": "Pagination cursor: return the page BEFORE this record id (follow the links.prev cursor).",
      "type": "string"
    }
  },
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢persona_get_transaction(transaction_id)

Get a single transaction by id — a record submitted for transaction fraud/monitoring analysis. Returns JSON:API { data } containing PII. Persona REST: GET /transactions/{transaction_id}.

Input Schema

{
  "type": "object",
  "properties": {
    "transaction_id": {
      "type": "string",
      "description": "The transaction id (e.g. txn_...)."
    }
  },
  "required": [
    "transaction_id"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢persona_list_events(page_size, page_after, page_before)

List audit-trail events (an immutable log of actions across your Persona account — inquiry/account/case state changes, etc.). Paginate via the JSON:API links.next cursor (page_after) / links.prev (page_before). Returns JSON:API { data:[...], links } — payloads may reference PII. Persona REST: GET /events.

Input Schema

{
  "type": "object",
  "properties": {
    "page_size": {
      "description": "Page size — number of records per page.",
      "type": "integer",
      "minimum": -9007199254740991,
      "maximum": 9007199254740991
    },
    "page_after": {
      "description": "Pagination cursor: return the page AFTER this record id (follow the links.next cursor).",
      "type": "string"
    },
    "page_before": {
      "description": "Pagination cursor: return the page BEFORE this record id (follow the links.prev cursor).",
      "type": "string"
    }
  },
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢persona_get_event(event_id)

Get a single audit-trail event by id, including its name and payload. Returns JSON:API { data } — payloads may reference PII. Persona REST: GET /events/{event_id}.

Input Schema

{
  "type": "object",
  "properties": {
    "event_id": {
      "type": "string",
      "description": "The event id (e.g. evt_...)."
    }
  },
  "required": [
    "event_id"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🔴persona_add_account_tag(account_id, tag_name)

WRITE: adds a tag to an account (mutates state). Tags label/segment accounts for review and automation. Sends JSON body { meta: { "tag-name": <tag_name> } }. Persona REST: POST /accounts/{account_id}/add-tag.

Input Schema

{
  "type": "object",
  "properties": {
    "account_id": {
      "type": "string",
      "description": "The account id to tag (e.g. act_...)."
    },
    "tag_name": {
      "type": "string",
      "description": "The tag name to add to the account."
    }
  },
  "required": [
    "account_id",
    "tag_name"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}

Community

Rate this Server

Evidence

Recent observations

verifiedversion not recorded14 tools
verifiedversion not recorded14 tools