# Cyberimpact MCP by usefulapi (remote · cyberimpact.usefulapi.io)

Read Cyberimpact members, groups and mailing results; add members, send opt-ins, create mailings.

- Trust score: 62/100 (medium)
- Registry status: active
- Liveness: live
- Owner verified: no
- Last scored: 2026-10-25

## Components

- remote · `cyberimpact.usefulapi.io`: 62/100 (this document), [markdown](https://verifymcp.io/servers/io-usefulapi-cyberimpact/cyberimpact.md), [page](https://verifymcp.io/servers/io-usefulapi-cyberimpact/cyberimpact)

## Channel facts

- Endpoint: `https://cyberimpact.usefulapi.io/mcp`
- Transports: `streamable-http`
- Auth: `required`
- Version: `1.2.3`

## Trust breakdown

How this component scores in each security and reliability category. Every signal is checked automatically against the live server, and we only credit what we can confirm. Scores are 0–100 per category. Scoring method: https://verifymcp.io/docs/scoring (what has changed: https://verifymcp.io/docs/scoring/changelog)

Scored 2026-10-25.

- **Endpoint Security**: 78/100
  - The endpoint's TLS certificate is valid, in date, and uses a strong key.
  - Authorisation is enforced on tool calls, advertised via RFC 9728 protected-resource metadata. Discovery is public, which costs nothing: no tool can be invoked without a token.
  - HTTPS enforcement could not be verified: the plaintext port redirected somewhere other than https, so enforcement is unproven.
  - HSTS check failed: the Strict-Transport-Security header is absent.
  - DNSSEC check failed: this domain isn't protected by DNSSEC.
  - The authorisation server offers only Dynamic Client Registration (RFC 7591), which MCP 2026-07-28 deprecated in favour of Client ID Metadata Documents.
- **Transport & Reachability**: 0/100
  - Transport check failed: declared streamable-http, but the endpoint redirected instead of responding directly.
- **Schema Quality & AI Usability**: 79/100
  - 100% of prompts and resources have a non-trivial description (not blank, and not just the item's name).
  - AI-judged instruction clarity (good).
  - Context-footprint check failed: tool/resource definitions use about 3497 tokens (~139/item across 25 items; 25 tools + 0 resources), over budget; trim descriptions and params.
  - Usage-examples check failed: none of the tools include examples.
- **Stability & Change Management**: 3/100
  - Stability observed for 1 of 30 days with no destabilising changes; credit accrues until the full window elapses.
- **Tool Coverage**: 100/100
  - 100% of tools have a non-trivial description (not blank, and not just the tool's name).
  - 100% of tool parameters carry a description.
- **Tool Safety**: 100/100
  - No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.
  - All 1 tool(s) whose name or description implies an irreversible operation declare an MCP destructiveHint annotation.
  - An AI judge read all 26 captured unit(s) of tool text and found none that tries to manipulate the model reading it.
- **Capabilities**: 60/100
  - Spec-recency check failed: implements MCP spec 2025-06-18; the latest is 2026-07-28.

## Install

### How do I install the Cyberimpact MCP by usefulapi server?

Cyberimpact MCP by usefulapi is a hosted endpoint at https://cyberimpact.usefulapi.io/mcp, so there is nothing to install locally. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.

### Claude

```bash
claude mcp add --transport http io-usefulapi-cyberimpact 'https://cyberimpact.usefulapi.io/mcp'
```

### Cursor

```json
{
  "mcpServers": {
    "io-usefulapi-cyberimpact": {
      "url": "https://cyberimpact.usefulapi.io/mcp"
    }
  }
}
```

### VS Code

```json
{
  "servers": {
    "io-usefulapi-cyberimpact": {
      "type": "http",
      "url": "https://cyberimpact.usefulapi.io/mcp"
    }
  }
}
```

### Codex

```toml
[mcp_servers.io-usefulapi-cyberimpact]
url = "https://cyberimpact.usefulapi.io/mcp"
```

### opencode

```json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "io-usefulapi-cyberimpact": {
      "type": "remote",
      "url": "https://cyberimpact.usefulapi.io/mcp",
      "enabled": true
    }
  }
}
```

### OpenClaw

```bash
openclaw mcp add io-usefulapi-cyberimpact --url 'https://cyberimpact.usefulapi.io/mcp' --transport streamable-http
```

### Hermes

```yaml
mcp_servers:
  io-usefulapi-cyberimpact:
    url: "https://cyberimpact.usefulapi.io/mcp"
```

### Netclaw

```json
{
  "McpServers": {
    "io-usefulapi-cyberimpact": {
      "Transport": "http",
      "Url": "https://cyberimpact.usefulapi.io/mcp"
    }
  }
}
```

### Vellum

```bash
assistant mcp add io-usefulapi-cyberimpact -t streamable-http -u 'https://cyberimpact.usefulapi.io/mcp'
```

### Other

```json
{
  "mcpServers": {
    "io-usefulapi-cyberimpact": {
      "type": "http",
      "url": "https://cyberimpact.usefulapi.io/mcp"
    }
  }
}
```

The mcpServers block is a cross-client convention. Remote transports vary, so check your client's docs.

## Changelog

Every change recorded for this component, newest first. Days that predate change tracking, or that we cannot explain, say so: "we were watching and nothing happened" and "we were not watching" are different claims.

### 2026-10-25 (score 62, 0)

- [functional improvement] Stability: unverified → 0.03
- [functional] Server version: 1.2.1 → 1.2.3
- [functional] Server version: 1.2.0 → 1.2.1

### 2026-10-24 (score 62)

First indexed and scored.

## MCP tools (25)

### `cyberimpact_get_account` (~36 tokens)

Get account

Check the connection and show which Cyberimpact account the API token belongs to (username, email, account name). GET /ping.

### `cyberimpact_list_members` (~213 tokens)

List members

List subscribed contacts (members) with name, email, language, consent type, mailing counts and custom fields. status: active (in at least one group, default), orphans (in no group) or all. Filter by the date a member joined or was last updated. Bounced and unsubscribed members have their own tools. GET /members.

Input parameters:

- `joinedOnFrom` (string): Joined on or after this date.
- `joinedOnTo` (string): Joined on or before this date (whole day).
- `limit` (integer): Results per page, 1-100 (default 25).
- `page` (integer): Page number, from 1 (default 1). Pass the previous reply's next_page.
- `sort` (string): Sort order.
- `status` (string): Which subscribed members (default active).
- `updatedOnFrom` (string): Updated on or after this date.
- `updatedOnTo` (string): Updated on or before this date (whole day).

### `cyberimpact_get_member` (~71 tokens)

Get member

One member by email address or id: all attributes, consent type, mailings received/opened/clicked and custom fields (keyed by custom field id; see cyberimpact_list_custom_fields). GET /members/{key}.

Input parameters:

- `key` (string, required): The member's email address or numeric id.

### `cyberimpact_get_member_groups` (~103 tokens)

Get member's groups

The groups a member belongs to (id, title, public/private, dynamic). GET /members/{key}/groups.

Input parameters:

- `key` (string, required): The member's email address or numeric id.
- `limit` (integer): Results per page, 1-100 (default 25).
- `page` (integer): Page number, from 1 (default 1). Pass the previous reply's next_page.
- `sort` (string): Sort order.

### `cyberimpact_get_member_mailings` (~108 tokens)

Get member's mailings

The mailings a member received (use it to see what a contact was sent and when). GET /members/{key}/mailings.

Input parameters:

- `key` (string, required): The member's email address or numeric id.
- `limit` (integer): Results per page, 1-100 (default 25).
- `page` (integer): Page number, from 1 (default 1). Pass the previous reply's next_page.
- `sort` (string): Sort order.

### `cyberimpact_get_member_consent` (~61 tokens)

Get member consent

A member's consent record: consent type, relation type, consent date, expiration and proof (for CASL compliance checks). GET /members/{key}/consent.

Input parameters:

- `key` (string, required): The member's email address or numeric id.

### `cyberimpact_list_bounced_members` (~158 tokens)

List bounced members

Members whose last mailing hard-bounced (invalid addresses to clean up), with the bounce date. GET /members/bounced.

Input parameters:

- `bouncedOnFrom` (string): Bounced on or after this date.
- `bouncedOnTo` (string): Bounced on or before this date (whole day).
- `limit` (integer): Results per page, 1-100 (default 25).
- `page` (integer): Page number, from 1 (default 1). Pass the previous reply's next_page.
- `sort` (string): Sort order.
- `updatedOnFrom` (string): Updated on or after this date.
- `updatedOnTo` (string): Updated on or before this date (whole day).

### `cyberimpact_list_unsubscribed_members` (~163 tokens)

List unsubscribed members

Members who unsubscribed, with the unsubscribe date. These contacts must not be mailed again. GET /members/unsubscribed.

Input parameters:

- `limit` (integer): Results per page, 1-100 (default 25).
- `page` (integer): Page number, from 1 (default 1). Pass the previous reply's next_page.
- `sort` (string): Sort order.
- `unsubscribedOnFrom` (string): Unsubscribed on or after this date.
- `unsubscribedOnTo` (string): Unsubscribed on or before this date (whole day).
- `updatedOnFrom` (string): Updated on or after this date.
- `updatedOnTo` (string): Updated on or before this date (whole day).

### `cyberimpact_list_custom_fields` (~44 tokens)

List custom fields

The account's custom member fields (id, name, type text/date/integer/decimal). Member customFields are keyed by these ids. GET /customfields.

### `cyberimpact_list_groups` (~100 tokens)

List groups

List the account's groups (mailing lists) with member and mailing counts, public/private and dynamic flags. Use the ids to target mailings and opt-ins. GET /groups.

Input parameters:

- `limit` (integer): Results per page, 1-100 (default 25).
- `page` (integer): Page number, from 1 (default 1). Pass the previous reply's next_page.
- `sort` (string): Sort order.

### `cyberimpact_get_group` (~42 tokens)

Get group

One group by id with its member count, mailing count and flags. GET /groups/{id}.

Input parameters:

- `group_id` (integer, required): Cyberimpact group id.

### `cyberimpact_list_group_members` (~167 tokens)

List group members

The members of one group, with the same member filters as cyberimpact_list_members. GET /groups/{id}/members.

Input parameters:

- `group_id` (integer, required): Cyberimpact group id.
- `joinedOnFrom` (string): Joined on or after this date.
- `joinedOnTo` (string): Joined on or before this date (whole day).
- `limit` (integer): Results per page, 1-100 (default 25).
- `page` (integer): Page number, from 1 (default 1). Pass the previous reply's next_page.
- `sort` (string): Sort order.
- `updatedOnFrom` (string): Updated on or after this date.
- `updatedOnTo` (string): Updated on or before this date (whole day).

### `cyberimpact_list_mailings` (~167 tokens)

List mailings

List mailings by state: sent (default, archived ones excluded), scheduled (queued to go out) or archived. Each has id, subject, language, send/schedule date, recipient count and sender. Optionally only mailings sent to one group. GET /mailings/{sent|scheduled|archived}.

Input parameters:

- `group_id` (integer): Only mailings sent to this group id.
- `kind` (string): Which mailings (default sent).
- `limit` (integer): Results per page, 1-100 (default 25).
- `page` (integer): Page number, from 1 (default 1). Pass the previous reply's next_page.
- `sort` (string): Sort order (date_sent_* only applies to archived mailings).

### `cyberimpact_get_mailing` (~78 tokens)

Get mailing

One mailing by id with its results: sent/delivered/stopped counts, views, clicks, delivery/click/view rates, per-link clicks, recipient groups, sender and body (HTML/text, cut at 20 000 characters). GET /mailings/{id}.

Input parameters:

- `mailing_id` (integer, required): Cyberimpact mailing id.

### `cyberimpact_list_mailing_recipients` (~160 tokens)

List mailing recipients

Who received a mailing and what happened: kind = all, delivered, stopped, hard_bounced, soft_bounced, unsubscribed, opened or clicked. Optionally only recipients from one group. GET /mailings/{id}/recipients[/{kind}].

Input parameters:

- `group_id` (integer): Only recipients that belong to this group id.
- `kind` (string): Which recipients (default all).
- `limit` (integer): Results per page, 1-100 (default 25).
- `mailing_id` (integer, required): Cyberimpact mailing id.
- `page` (integer): Page number, from 1 (default 1). Pass the previous reply's next_page.
- `sort` (string): Sort order.

### `cyberimpact_list_templates` (~82 tokens)

List templates

List the account's email templates (id, title, created/updated). GET /templates.

Input parameters:

- `limit` (integer): Results per page, 1-100 (default 25).
- `page` (integer): Page number, from 1 (default 1). Pass the previous reply's next_page.
- `sort` (string): Sort order.

### `cyberimpact_get_template` (~47 tokens)

Get template

One template by id with its HTML and text body (cut at 20 000 characters). GET /templates/{id}.

Input parameters:

- `template_id` (integer, required): Cyberimpact template id.

### `cyberimpact_get_batch` (~74 tokens)

Get batch

Status of a bulk batch job (NEW, PROCESSING or COMPLETED) and its result. Set show_error_details to list the per-member errors. GET /batches/{id}.

Input parameters:

- `batch_id` (integer, required): Cyberimpact batch id.
- `show_error_details` (boolean): Include the details of each error.

### `cyberimpact_add_member` (~265 tokens)

Add member

WRITE: add a contact as a subscribed member WITHOUT a confirmation email (implied consent) and put it in the given groups; the contact can then be mailed. Only use it for people who really gave their consent (CASL); to ask the person to confirm first use cyberimpact_send_optin. A member that already exists is rejected by the API. Throttled by Cyberimpact; for many contacts use the app's import. POST /members.

Input parameters:

- `birthdate` (string): Birth date, yyyy-mm-dd.
- `company` (string): Company.
- `country` (string): ISO 3166-1 alpha-2 country code, e.g. CA.
- `customFields` (object): Custom field values keyed by custom field id (see cyberimpact_list_custom_fields).
- `email` (string, required): The member's email address.
- `firstname` (string): First name.
- `gender` (string): m, f or o.
- `group_ids` (array, required): Group ids to subscribe the member to (see cyberimpact_list_groups).
- `language` (string): en_ca or fr_ca.
- `lastname` (string): Last name.
- `note` (string): Free-text note.
- `postalCode` (string): Postal code.

### `cyberimpact_update_member` (~218 tokens)

Update member

WRITE: change only the given attributes of a member (other attributes stay as they are). The old values of the changed fields are overwritten and not recoverable through the API. Set new_email to change the address. PATCH /members/{key}.

Input parameters:

- `birthdate` (string): Birth date, yyyy-mm-dd.
- `company` (string): Company.
- `country` (string): ISO 3166-1 alpha-2 country code, e.g. CA.
- `customFields` (object): Custom field values keyed by custom field id (see cyberimpact_list_custom_fields).
- `firstname` (string): First name.
- `gender` (string): m, f or o.
- `key` (string, required): The member's email address or numeric id.
- `language` (string): en_ca or fr_ca.
- `lastname` (string): Last name.
- `new_email` (string): The member's NEW email address.
- `note` (string): Free-text note.
- `postalCode` (string): Postal code.

### `cyberimpact_add_member_to_groups` (~91 tokens)

Add member to groups

WRITE: add an existing member to more groups (existing group memberships are kept). Being in a group makes the member a recipient of mailings sent to it. Returns the member's groups after the update. POST /members/{key}/groups.

Input parameters:

- `group_ids` (array, required): Group ids to add the member to.
- `key` (string, required): The member's email address or numeric id.

### `cyberimpact_send_optin` (~305 tokens)

Send opt-in email

WRITE, SENDS AN EMAIL to the given address: an opt-in confirmation request. The person is added to the groups only after they confirm (the member is created if it does not exist). Use this instead of cyberimpact_add_member when you do not have the person's consent yet. Only call it after the user has approved sending to this address, and set confirm_send to true. Throttled by Cyberimpact. POST /members/optins.

Input parameters:

- `birthdate` (string): Birth date, yyyy-mm-dd.
- `company` (string): Company.
- `confirm_send` (boolean, required): Must be true: the user explicitly approved emailing this address.
- `country` (string): ISO 3166-1 alpha-2 country code, e.g. CA.
- `customFields` (object): Custom field values keyed by custom field id (see cyberimpact_list_custom_fields).
- `email` (string, required): The address that receives the confirmation email.
- `firstname` (string): First name.
- `gender` (string): m, f or o.
- `group_ids` (array, required): Group ids the person joins once they confirm.
- `language` (string): en_ca or fr_ca.
- `lastname` (string): Last name.
- `note` (string): Free-text note.
- `optinConfirmUrl` (string): Page the person lands on after confirming (http:// or https:// URL).
- `postalCode` (string): Postal code.

### `cyberimpact_create_group` (~78 tokens)

Create group

WRITE: create a new, empty group (mailing list). A public group can be offered on subscription forms; a private one is internal. Groups cannot be deleted through this server. POST /groups.

Input parameters:

- `is_public` (boolean, required): true = public group, false = private group.
- `title` (string, required): The group name.

### `cyberimpact_create_template` (~94 tokens)

Create template

WRITE: create a new email template from HTML and/or text. It is only saved in the account; nothing is sent. POST /templates.

Input parameters:

- `bodyHtml` (string): HTML body. At least one of bodyHtml or bodyText is required.
- `bodyText` (string): Plain-text body. At least one of bodyHtml or bodyText is required.
- `title` (string, required): The template name.

### `cyberimpact_create_mailing` (~310 tokens)

Schedule mailing

WRITE, SENDS EMAIL TO CUSTOMERS: create a mailing scheduled to be sent at send_at to every member of the chosen groups. It goes out for real unless it is cancelled in the Cyberimpact app before send_at. Only call it after the user has approved the subject, body, sender and groups, and set confirm_send to true. mail_from must be a validated sender address of the account. A mailing cannot be deleted through this server. POST /mailings.

Input parameters:

- `bodyHtml` (string): HTML body. At least one of bodyHtml or bodyText is required.
- `bodyText` (string): Plain-text body. At least one of bodyHtml or bodyText is required.
- `confirm_send` (boolean, required): Must be true: the user explicitly approved sending this mailing to these groups.
- `from_name` (string): From name.
- `group_ids` (array, required): Groups whose members receive the mailing (see cyberimpact_list_groups; check member counts first).
- `language` (string, required): en_ca or fr_ca.
- `mail_from` (string): From address; must be a validated sender in the account.
- `reply_to` (string): Reply-to address.
- `send_at` (string, required): When to start sending, 'yyyy-mm-dd HH:mm:ss'. Cyberimpact reports dates in Eastern time (EST/EDT).
- `statistics` (string): detailed (default) or anonymized open/click statistics.
- `subject` (string, required): Email subject.

## Diagnostics

Captured diagnostic sections: TLS, DNSSEC, Authorisation, Transports. The full working is on the page: https://verifymcp.io/servers/io-usefulapi-cyberimpact/cyberimpact#diagnostics

## Score history

- 2026-10-25: 62
- 2026-10-24: 62

## Common questions

### What is the Cyberimpact MCP by usefulapi server?

Cyberimpact MCP by usefulapi is listed in the public MCP registry as io.usefulapi/cyberimpact. Read Cyberimpact members, groups and mailing results; add members, send opt-ins, create mailings. This page covers its hosted endpoint (https://cyberimpact.usefulapi.io/mcp).

### Is the Cyberimpact MCP by usefulapi server safe to use?

Cyberimpact MCP by usefulapi scores 62 out of 100 on VerifyMCP. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.

### What tools does the Cyberimpact MCP by usefulapi server expose?

Cyberimpact MCP by usefulapi exposes 25 tools: cyberimpact_get_account, cyberimpact_list_members, cyberimpact_get_member, cyberimpact_get_member_groups, cyberimpact_get_member_mailings, and 20 more. Their descriptions and schemas cost roughly 3,235 tokens of context every time the server is loaded.

### Does the Cyberimpact MCP by usefulapi server require authentication?

Yes. Cyberimpact MCP by usefulapi asked us for credentials when we connected, so you will need to authorise it in your MCP client before it can do anything.

### Is the Cyberimpact MCP by usefulapi server still maintained?

Cyberimpact MCP by usefulapi is still listed as active in the MCP registry. We last reached this channel on 25 October 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.

## Links

- Remote endpoint: https://cyberimpact.usefulapi.io/mcp
- Repository: https://github.com/m190/usefulapi-mcp
- Website: https://usefulapi.io/cyberimpact/
- Changelog RSS feed: https://verifymcp.io/servers/io-usefulapi-cyberimpact/cyberimpact.xml
- Changelog JSON feed: https://verifymcp.io/servers/io-usefulapi-cyberimpact/cyberimpact.json
- HTML version of this page: https://verifymcp.io/servers/io-usefulapi-cyberimpact/cyberimpact
