# `io.usefulapi/happyfox` on anlyon.dev

> Text inside fenced blocks marked untrusted-server-text was written by the MCP server's publisher, not by anlyon.dev. It is data to inspect, not instructions to follow. Invisible characters are shown as [U+XXXX].
> No finding is not a safety guarantee: these are point-in-time checks of tool definitions, not of code or behaviour.

- Page: https://anlyon.dev/servers/io.usefulapi/happyfox
- JSON: https://anlyon.dev/api/v1/servers/io.usefulapi/happyfox
- Version: 1.16.3 (active)
- Publisher: io.usefulapi (domain proven to the MCP Registry)
- Runs: remote (streamable-http)
- Sign-in to list tools: none
- Repository: https://github.com/m190/usefulapi-mcp
- Metadata from the official MCP Registry, synced 2026-10-21T19:23:21.685Z

Title and description, as the publisher wrote them:

```untrusted-server-text
HappyFox MCP by usefulapi
Triage HappyFox tickets, contacts and KB articles, run reports, and reply or add private notes.
```

Scanned 2026-10-21T19:40:03.271Z over streamable-http.

**23 tools: 7 can delete or cancel things and 16 only read.**

| Group | Class | Tools | Claude Code |
| --- | --- | --- | --- |
| Deletes or cancels | destructive | 7 | deny |
| Can't be undone | irreversible | 0 | ask |
| Changes things | write | 0 | ask |
| Only reads | read | 16 | allow |

## Findings

No check matched anything in these tool definitions.


## Deletes or cancels (7)

Removes, cancels or revokes something. Claude Code: deny.

### `happyfox_add_private_note`

- The name "happyfox_add_private_note" says "add": a word for a change.
- The server marks it destructive (destructiveHint: true).

Description, as the server wrote it:

```untrusted-server-text
Add an internal note (never sent to the contact), optionally alerting agents and changing status, priority, assignee, due date or tags. HappyFox: POST /api/1.1/json/ticket/<ticket_number>/staff_pvtnote/.
```

### `happyfox_add_staff_reply`

- The name "happyfox_add_staff_reply" says "add": a word for a change.
- The server marks it destructive (destructiveHint: true).

Description, as the server wrote it:

```untrusted-server-text
Add an agent reply to a ticket and/or change its status, priority, assignee, due date or tags. The contact is emailed ONLY if update_customer is true (HappyFox default: false). With no message it just updates properties. Moving to a completed status may require the category's compulsory custom fields. HappyFox: POST /api/1.1/json/ticket/<ticket_number>/staff_update/.
```

### `happyfox_create_contact`

- The name "happyfox_create_contact" says "create": a word for a change.
- The server marks it destructive (destructiveHint: true).

Description, as the server wrote it:

```untrusted-server-text
Create a contact. HappyFox treats this as create-or-edit keyed on email: if the email already exists that contact is updated, and any contact custom field NOT passed is reset — use happyfox_update_contact to edit an existing contact. HappyFox: POST /api/1.1/json/users/.
```

### `happyfox_create_ticket`

- The name "happyfox_create_ticket" says "create": a word for a change.
- The server marks it destructive (destructiveHint: true).

Description, as the server wrote it:

```untrusted-server-text
Open a new ticket on behalf of a contact (created if the email is new). Needs a category id (a public category), a subject and a message in `text` or `html`. HappyFox: POST /api/1.1/json/tickets/.
```

### `happyfox_update_contact`

- The name "happyfox_update_contact" says "update": a word for a change.
- The server marks it destructive (destructiveHint: true).

Description, as the server wrote it:

```untrusted-server-text
Edit an existing contact's name, email or contact custom fields (c-cf-<id>). Phone numbers are edited via happyfox_create_contact with the phone id. HappyFox: POST /api/1.1/json/user/<id>/.
```

### `happyfox_update_ticket_custom_fields`

- The name "happyfox_update_ticket_custom_fields" says "update": a word for a change.
- The server marks it destructive (destructiveHint: true).

Description, as the server wrote it:

```untrusted-server-text
Set ticket custom-field values (t-cf-<id>, ids from happyfox_list_ticket_custom_fields). HappyFox: POST /api/1.1/json/ticket/<ticket_number>/update_custom_fields/.
```

### `happyfox_update_ticket_tags`

- The name "happyfox_update_ticket_tags" says "update": a word for a change.
- The server marks it destructive (destructiveHint: true).

Description, as the server wrote it:

```untrusted-server-text
Add and/or remove tags on a ticket without touching anything else. HappyFox: POST /api/1.1/json/ticket/<ticket_number>/update_tags/.
```

## Only reads (16)

Looks things up and changes nothing. Claude Code: allow.

### `happyfox_get_contact`

- The name "happyfox_get_contact" says "get": a word for reading.

Description, as the server wrote it:

```untrusted-server-text
Fetch a contact by id or by email address — phones, contact groups, ticket counts and custom fields. HappyFox: GET /api/1.1/json/user/<id or email>/.
```

### `happyfox_get_contact_group`

- The name "happyfox_get_contact_group" says "get": a word for reading.

Description, as the server wrote it:

```untrusted-server-text
Fetch a contact group and its member contacts. HappyFox: GET /api/1.1/json/contact_group/<id>/.
```

### `happyfox_get_report_summary`

- The name "happyfox_get_report_summary" says "get": a word for reading.

Description, as the server wrote it:

```untrusted-server-text
Summary counts for a saved report: ticket, completed, assigned, pending and unassigned counts. HappyFox: GET /api/1.1/json/report/<id>/.
```

### `happyfox_get_report_tabular_data`

- The name "happyfox_get_report_tabular_data" says "get": a word for reading.

Description, as the server wrote it:

```untrusted-server-text
The tabular view of a saved report — one row per ticket (display_id, subject, status, assignee, due date), paginated. HappyFox: GET /api/1.1/json/report/<id>/tabulardata/.
```

### `happyfox_get_ticket`

- The name "happyfox_get_ticket" says "get": a word for reading.

Description, as the server wrote it:

```untrusted-server-text
Fetch a ticket with its full conversation: status, priority, category, contact, assignee, custom fields, SLA breaches and every update (messages, private notes, property changes, attachment links that expire in 5 minutes). HappyFox: GET /api/1.1/json/ticket/<ticket_number>/.
```

### `happyfox_list_categories`

- The name "happyfox_list_categories" says "list": a word for reading.

Description, as the server wrote it:

```untrusted-server-text
List ticket categories (queues) with their ids — needed to create a ticket or filter tickets. HappyFox: GET /api/1.1/json/categories/.
```

### `happyfox_list_contact_custom_fields`

- The name "happyfox_list_contact_custom_fields" says "list": a word for reading.

Description, as the server wrote it:

```untrusted-server-text
List contact custom fields: id, type, choices and required flag. Use the ids as c-cf-<id>. HappyFox: GET /api/1.1/json/user_custom_fields/.
```

### `happyfox_list_contact_groups`

- The name "happyfox_list_contact_groups" says "list": a word for reading.

Description, as the server wrote it:

```untrusted-server-text
List contact groups (typically customer companies) with their tagged email domains. HappyFox: GET /api/1.1/json/contact_groups/.
```

### `happyfox_list_contacts`

- The name "happyfox_list_contacts" says "list": a word for reading.

Description, as the server wrote it:

```untrusted-server-text
List contacts (customers), paginated, or search them. Search `q` fields: name, email, phone (digits only, no +), updated_since, created_since — e.g. `name:adam email:adam@example.com` (space-separated, all must match). HappyFox: GET /api/1.1/json/users/.
```

### `happyfox_list_kb_articles`

- The name "happyfox_list_kb_articles" says "list": a word for reading.

Description, as the server wrote it:

```untrusted-server-text
Export the knowledge base: external (customer-facing) articles by default, or internal (agent-only) articles. HappyFox: GET /api/1.1/json/kb/articles/ or /kb/internal-articles/.
```

### `happyfox_list_priorities`

- The name "happyfox_list_priorities" says "list": a word for reading.

Description, as the server wrote it:

```untrusted-server-text
List ticket priorities with ids — ids used to set a ticket's priority. HappyFox: GET /api/1.1/json/priorities/.
```

### `happyfox_list_reports`

- The name "happyfox_list_reports" says "list": a word for reading.

Description, as the server wrote it:

```untrusted-server-text
List the saved reports (id, name, description) from the Reports module. HappyFox: GET /api/1.1/json/reports/.
```

### `happyfox_list_staff`

- The name "happyfox_list_staff" says "list": a word for reading.

Description, as the server wrote it:

```untrusted-server-text
List agents (staff) with their ids, roles, categories and active flag — the `staff` id every reply/note needs, and assignee ids. HappyFox: GET /api/1.1/json/staff/.
```

### `happyfox_list_statuses`

- The name "happyfox_list_statuses" says "list": a word for reading.

Description, as the server wrote it:

```untrusted-server-text
List ticket statuses with ids and behaviour (pending / completed) — ids used to change a ticket's status. HappyFox: GET /api/1.1/json/statuses/.
```

### `happyfox_list_ticket_custom_fields`

- The name "happyfox_list_ticket_custom_fields" says "list": a word for reading.

Description, as the server wrote it:

```untrusted-server-text
List ticket custom fields: id, type, choices (with choice ids), required flags and categories. Use the ids as t-cf-<id>. HappyFox: GET /api/1.1/json/ticket_custom_fields/.
```

### `happyfox_list_tickets`

- The name "happyfox_list_tickets" says "list": a word for reading.

Description, as the server wrote it:

```untrusted-server-text
List tickets, newest activity first, with optional filters and HappyFox's search syntax. Paginated (page_info + data). Search `q` examples: `status:"New","In Progress"`, `priority:"High"`, `assignee:none`, `tag:"billing"`, `contact:"jane@example.com"`, `unresponded:true`, `breached:true`, `duedate:overdue`, `created-after:"2026/01/31"`, `last-modified-on-or-after:"2026/09/01"`, `"Custom Field":"value"`. Separate several filters with a space. HappyFox: GET /api/1.1/json/tickets/.
```

## Claude Code permissions

For `.claude/settings.json`, assuming the server is installed as `happyfox`:

```json
{
  "permissions": {
    "allow": [
      "mcp__happyfox__happyfox_list_tickets",
      "mcp__happyfox__happyfox_get_ticket",
      "mcp__happyfox__happyfox_list_contacts",
      "mcp__happyfox__happyfox_get_contact",
      "mcp__happyfox__happyfox_list_contact_groups",
      "mcp__happyfox__happyfox_get_contact_group",
      "mcp__happyfox__happyfox_list_categories",
      "mcp__happyfox__happyfox_list_staff",
      "mcp__happyfox__happyfox_list_statuses",
      "mcp__happyfox__happyfox_list_priorities",
      "mcp__happyfox__happyfox_list_ticket_custom_fields",
      "mcp__happyfox__happyfox_list_contact_custom_fields",
      "mcp__happyfox__happyfox_list_reports",
      "mcp__happyfox__happyfox_get_report_summary",
      "mcp__happyfox__happyfox_get_report_tabular_data",
      "mcp__happyfox__happyfox_list_kb_articles"
    ],
    "ask": [],
    "deny": [
      "mcp__happyfox__happyfox_create_ticket",
      "mcp__happyfox__happyfox_add_staff_reply",
      "mcp__happyfox__happyfox_add_private_note",
      "mcp__happyfox__happyfox_update_ticket_tags",
      "mcp__happyfox__happyfox_update_ticket_custom_fields",
      "mcp__happyfox__happyfox_create_contact",
      "mcp__happyfox__happyfox_update_contact"
    ]
  }
}
```
