# io.usefulapi/raisely (remote · raisely.usefulapi.io)

Read campaigns, donations, profiles and supporters; record offline donations and upsert users.

- Trust score: 18/100 (low)
- Change this week: −51
- Registry status: active
- Liveness: live
- Owner verified: no
- Last scored: 2026-08-03

## Components

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

## Channel facts

- Endpoint: `https://raisely.usefulapi.io/mcp`
- Transports: `streamable-http`
- Auth: `none`
- Version: `1.0.0`

## 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-08-03.

- **Endpoint Security**: 46/100
  - The endpoint's TLS certificate is valid, in date, and uses a strong key.
  - Authorisation not fully verified: no authorisation is required to connect, but we couldn't read the tool list to see what that exposes.
  - HTTPS not yet verified: we couldn't determine whether a plaintext access path exists.
  - HSTS check failed: the Strict-Transport-Security header is absent.
  - DNSSEC check failed: this domain isn't protected by DNSSEC.
- **Transport & Reachability**: 0/100
  - Transport check failed: declared streamable-http, but the endpoint returned HTTP 429.
- **Schema Quality & AI Usability**: 0/100
  - Schema not yet verified: we couldn't read the endpoint's schema.
- **Stability & Change Management**: 0/100
  - Stability not yet verified: not enough scan history yet (needs a 30-day window).
- **Tool Coverage**: 0/100
  - Tool coverage not yet verified: we couldn't read the endpoint's tools.
- **Capabilities**: 0/100
  - Capabilities not yet verified: we couldn't read the endpoint's capabilities.

**Unverified: 4 categories.** Categories scored 0 because we could not verify them: authentication we do not have, an unreachable endpoint, or not enough scan history. We only credit what we can confirm.

## Install

### Claude

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

### Codex

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

### opencode

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

### OpenClaw

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

### Hermes

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

### Other

```json
{
  "mcpServers": {
    "io-usefulapi-raisely": {
      "type": "http",
      "url": "https://raisely.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-08-03 (score 18, −54)

- [security regression] Endpoint reachability: reachable → not serving MCP
- [security regression] Authorization: pass → unverified
- [security regression] Stability: 0.23 → unverified
- [security regression] Transport: pass → fail
- [functional regression] Tool coverage: 100 → unverified
- [functional regression] Capabilities: fail → unverified

### 2026-08-02 (score 72, +54)

- [security improvement] Authorization: unverified → pass
- [security improvement] Transport: fail → pass
- [functional regression] MCP protocol: unverified → fail
- [functional improvement] Endpoint reachability: not serving MCP → reachable
- [functional improvement] Tool coverage: unverified → 100
- [functional improvement] Stability: unverified → 0.23

### 2026-08-01 (score 18, −53)

- [security regression] Endpoint reachability: reachable → not serving MCP
- [security regression] Authorization: pass → unverified
- [security regression] Stability: 0.17 → unverified
- [security regression] Transport: pass → fail
- [functional regression] Capabilities: fail → unverified
- [functional regression] Tool coverage: 100 → unverified
- [functional] First check of Schema quality: unverified

### 2026-07-31 (score 71, +3)

- [functional] We updated how we score, so this day's move reflects our rubric, not a change to the server

### 2026-07-30 (score 68, −2)

- [functional] We updated how we score, so this day's move reflects our rubric, not a change to the server

### 2026-07-28 (score 70, +1)

No change was recorded against any check on this day. Stability & Change Management went from 3 to 7. That category is still filling its 30-day observation window: 1 days of observed history at the previous scan, 2 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-07-27 (score 69, +9)

- [functional] We updated how we score, so this day's move reflects our rubric, not a change to the server

### 2026-07-26 (score 60)

First indexed and scored.

## MCP tools (23)

### `get_authenticated_user` (~50 tokens)

Get authenticated user

Verify credentials and show the currently authenticated user plus their privileges. Raisely API: GET /authenticate. Use this first to confirm RAISELY_API_KEY works. Returns { data:{...} }.

### `list_campaigns` (~116 tokens)

List campaigns

List fundraising campaigns. Raisely API: GET /campaigns. Returns the list envelope { data:[...], pagination }.

Input parameters:

- `limit` (integer): Max records to return (Raisely `limit`, default 20).
- `offset` (integer): Records to skip for pagination (Raisely `offset`, default 0).
- `params` (object): Additional documented query-string filters to send verbatim (e.g. campaign, status, sort, order, private) — merged with the typed limit/offset above.

### `get_campaign` (~53 tokens)

Get a campaign

Fetch a single campaign by id or path/slug. Raisely API: GET /campaigns/{campaign}. Returns { data:{...} }.

Input parameters:

- `campaign` (string, required): The campaign uuid or URL path/slug.

### `list_profiles` (~133 tokens)

List fundraising profiles

List fundraising profiles (individual/team fundraising pages). Raisely API: GET /profiles. Filter via `params` (e.g. campaign, type, sort, order). Returns { data:[...], pagination }.

Input parameters:

- `limit` (integer): Max records to return (Raisely `limit`, default 20).
- `offset` (integer): Records to skip for pagination (Raisely `offset`, default 0).
- `params` (object): Additional documented query-string filters to send verbatim (e.g. campaign, status, sort, order, private) — merged with the typed limit/offset above.

### `get_profile` (~62 tokens)

Get a fundraising profile

Fetch a single fundraising profile by path (a URL slug OR the uuid — a string either way). Raisely API: GET /profiles/{path}. Returns { data:{...} }.

Input parameters:

- `path` (string, required): The profile path (URL slug) or uuid.

### `list_donations` (~130 tokens)

List donations

List donations. Raisely API: GET /donations. Filter via `params` (e.g. campaign, status, sort, order). Returns { data:[...], pagination }.

Input parameters:

- `limit` (integer): Max records to return (Raisely `limit`, default 20).
- `offset` (integer): Records to skip for pagination (Raisely `offset`, default 0).
- `params` (object): Additional documented query-string filters to send verbatim (e.g. campaign, status, sort, order, private) — merged with the typed limit/offset above.

### `get_donation` (~45 tokens)

Get a donation

Fetch a single donation by uuid. Raisely API: GET /donations/{uuid}. Returns { data:{...} }.

Input parameters:

- `uuid` (string, required): The donation uuid.

### `list_users` (~123 tokens)

List users

List users (donors/supporters/fundraisers). Raisely API: GET /users. Filter via `params`. Returns { data:[...], pagination }.

Input parameters:

- `limit` (integer): Max records to return (Raisely `limit`, default 20).
- `offset` (integer): Records to skip for pagination (Raisely `offset`, default 0).
- `params` (object): Additional documented query-string filters to send verbatim (e.g. campaign, status, sort, order, private) — merged with the typed limit/offset above.

### `get_user` (~49 tokens)

Get a user

Fetch a single user (donor/supporter) by uuid. Raisely API: GET /users/{uuid}. Returns { data:{...} }.

Input parameters:

- `uuid` (string, required): The user uuid.

### `list_subscriptions` (~120 tokens)

List subscriptions

List subscriptions (recurring donations). Raisely API: GET /subscriptions. Filter via `params`. Returns { data:[...], pagination }.

Input parameters:

- `limit` (integer): Max records to return (Raisely `limit`, default 20).
- `offset` (integer): Records to skip for pagination (Raisely `offset`, default 0).
- `params` (object): Additional documented query-string filters to send verbatim (e.g. campaign, status, sort, order, private) — merged with the typed limit/offset above.

### `get_subscription` (~48 tokens)

Get a subscription

Fetch a single subscription (recurring donation) by uuid. Raisely API: GET /subscriptions/{uuid}. Returns { data:{...} }.

Input parameters:

- `uuid` (string, required): The subscription uuid.

### `list_posts` (~119 tokens)

List posts

List posts (campaign/profile updates). Raisely API: GET /posts. Filter via `params`. Returns { data:[...], pagination }.

Input parameters:

- `limit` (integer): Max records to return (Raisely `limit`, default 20).
- `offset` (integer): Records to skip for pagination (Raisely `offset`, default 0).
- `params` (object): Additional documented query-string filters to send verbatim (e.g. campaign, status, sort, order, private) — merged with the typed limit/offset above.

### `list_orders` (~119 tokens)

List orders

List orders (ticket/product purchases). Raisely API: GET /orders. Filter via `params`. Returns { data:[...], pagination }.

Input parameters:

- `limit` (integer): Max records to return (Raisely `limit`, default 20).
- `offset` (integer): Records to skip for pagination (Raisely `offset`, default 0).
- `params` (object): Additional documented query-string filters to send verbatim (e.g. campaign, status, sort, order, private) — merged with the typed limit/offset above.

### `list_segments` (~112 tokens)

List segments

List saved audience segments. Raisely API: GET /segments. Returns { data:[...], pagination }.

Input parameters:

- `limit` (integer): Max records to return (Raisely `limit`, default 20).
- `offset` (integer): Records to skip for pagination (Raisely `offset`, default 0).
- `params` (object): Additional documented query-string filters to send verbatim (e.g. campaign, status, sort, order, private) — merged with the typed limit/offset above.

### `list_tags` (~114 tokens)

List tags

List tags used to label records. Raisely API: GET /tags. Returns { data:[...], pagination }.

Input parameters:

- `limit` (integer): Max records to return (Raisely `limit`, default 20).
- `offset` (integer): Records to skip for pagination (Raisely `offset`, default 0).
- `params` (object): Additional documented query-string filters to send verbatim (e.g. campaign, status, sort, order, private) — merged with the typed limit/offset above.

### `list_campaign_donations` (~140 tokens)

List a campaign's donations

Convenience: list donations for a specific campaign. Raisely API: GET /campaigns/{campaign}/donations. Returns { data:[...], pagination }.

Input parameters:

- `campaign` (string, required): The campaign uuid or URL path/slug.
- `limit` (integer): Max records to return (Raisely `limit`, default 20).
- `offset` (integer): Records to skip for pagination (Raisely `offset`, default 0).
- `params` (object): Additional documented query-string filters to send verbatim (e.g. campaign, status, sort, order, private) — merged with the typed limit/offset above.

### `list_campaign_profiles` (~138 tokens)

List a campaign's profiles

Convenience: list fundraising profiles for a specific campaign. Raisely API: GET /campaigns/{campaign}/profiles. Returns { data:[...], pagination }.

Input parameters:

- `campaign` (string, required): The campaign uuid or URL path/slug.
- `limit` (integer): Max records to return (Raisely `limit`, default 20).
- `offset` (integer): Records to skip for pagination (Raisely `offset`, default 0).
- `params` (object): Additional documented query-string filters to send verbatim (e.g. campaign, status, sort, order, private) — merged with the typed limit/offset above.

### `list_user_donations` (~133 tokens)

List a user's donations

Convenience: a donor's giving history. Raisely API: GET /users/{uuid}/donations. Returns { data:[...], pagination }.

Input parameters:

- `limit` (integer): Max records to return (Raisely `limit`, default 20).
- `offset` (integer): Records to skip for pagination (Raisely `offset`, default 0).
- `params` (object): Additional documented query-string filters to send verbatim (e.g. campaign, status, sort, order, private) — merged with the typed limit/offset above.
- `uuid` (string, required): The user uuid.

### `raisely_request` (~107 tokens)

Raw read request

Power-user escape hatch: GET any Raisely API path not wrapped by a dedicated tool. READ-ONLY — only GET is allowed. Pass the FULL API path after the base, starting with a slash, INCLUDING any query string, e.g. "/subscriptions/{uuid}/donations" or "/donations?limit=50". Returns the parsed JSON.

Input parameters:

- `path` (string, required): Full API path after the base, starting with "/", e.g. "/donations?limit=50".

### `create_donation` (~341 tokens)

Record a donation

MUTATES Raisely data: records a donation (use for OFFLINE/manual donations — e.g. cash or cheque). Raisely API: POST /donations with the body wrapped as { data: {...} }. Required by the API: amount (integer, in cents/smallest currency unit), currency (3-letter code), email (donor), type (ONLINE or OFFLINE), method (payment gateway, e.g. OFFLINE). Link it to a campaign/profile via campaignUuid/profileUuid. Everything else (firstName, lastName, message, date, items, public, private, ...) goes through `fields`. Returns the created donation.

Input parameters:

- `amount` (integer, required): Total donation amount in the smallest currency unit (e.g. cents). Required.
- `campaignUuid` (string): Uuid of the campaign the donation belongs to.
- `currency` (string, required): 3-letter currency code, e.g. AUD, USD, GBP. Required.
- `email` (string, required): Email address of the donor. Required.
- `fields` (object): Additional documented Raisely fields to send in the JSON write body's `data` object — merged OVER the typed fields above.
- `firstName` (string): Donor first name.
- `lastName` (string): Donor last name.
- `method` (string): The payment gateway/method, e.g. "OFFLINE", "CREDIT". Required by the API.
- `profileUuid` (string): Uuid of the fundraising profile the donation is credited to.
- `type` (string): ONLINE or OFFLINE (default OFFLINE — this tool is for manual/offline donations).

### `upsert_user` (~167 tokens)

Upsert a user

MUTATES Raisely data: creates OR updates a supporter/donor, matched by email (safer than a plain create — no duplicates). Raisely API: POST /users/upsert with the body wrapped as { data: {...} }. Typed: email (the match key), firstName, lastName; everything else (phoneNumber, address, public, private, ...) via `fields`. Returns the upserted user.

Input parameters:

- `email` (string, required): The user's email address — the match key for upsert. Required.
- `fields` (object): Additional documented Raisely fields to send in the JSON write body's `data` object — merged OVER the typed fields above.
- `firstName` (string): User first name.
- `lastName` (string): User last name.

### `update_profile` (~201 tokens)

Update a fundraising profile

MUTATES Raisely data: updates a fundraising profile's goal/name/story. Raisely API: PATCH /profiles/{path} with the body wrapped as { data: {...} } (only included fields change). Use `fields` for goal, name, description/story, public, private, and any other documented field. Set overwriteCustomFields:true to overwrite (rather than preserve) unspecified custom fields. The path is never sent in the body.

Input parameters:

- `fields` (object): Additional documented Raisely fields to send in the JSON write body's `data` object — merged OVER the typed fields above.
- `goal` (number): New fundraising goal (in the smallest currency unit).
- `name` (string): New profile name.
- `overwriteCustomFields` (boolean): When true, overwrite (instead of preserve) custom fields not included in this update.
- `path` (string, required): The profile path (URL slug) or uuid to update (path only; required).

### `create_post` (~186 tokens)

Create a post

MUTATES Raisely data: publishes a post (a campaign/profile update). Raisely API: POST /posts with the body wrapped as { data: {...} }. Required by the API: path (the post's URL slug), body (the content), photoUrl. Link it to a profile via profileUuid (pass through `fields`). Extra fields (title, date, ...) via `fields`. Returns the created post.

Input parameters:

- `body` (string, required): The post content/body. Required by the API.
- `fields` (object): Additional documented Raisely fields to send in the JSON write body's `data` object — merged OVER the typed fields above.
- `path` (string, required): The post's URL slug/path. Required by the API.
- `photoUrl` (string): URL of the post's photo. Required by the API.
- `title` (string): The post title.

## Diagnostics

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

## Score history

- 2026-08-03: 18
- 2026-08-02: 72
- 2026-08-01: 18
- 2026-07-31: 71
- 2026-07-30: 68
- 2026-07-29: 70
- 2026-07-28: 70
- 2026-07-27: 69
- 2026-07-26: 60

## Links

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