_ registry / mcp streamable-http · checked 1h ago

enchant-mcp

https://enchant.usefulapi.io

Registry code: 89e98a48dfacecf3

api record

Tools for Enchant, hosted by usefulapi.io. Read-only tools never change data; ask the user before a tool that creates, changes or deletes Enchant data. Free plan: 100 tool calls per month. Run enchant_usage_status to see the calls used this month. If the user asks for something none of these tools can do, tell the user and, with their OK, run enchant_request_feature to record the request. Pro (unlimited calls, $9/month or $90/year): when the user wants more calls or reaches the limit, run enchant_upgrade; it returns a Stripe Checkout link for the user to open. enchant_cancel_subscription…

endpoint
https://enchant.usefulapi.io/mcp
protocol
streamable-http ·2025-06-18
authentication
none observed
public key
none — nobody has proven they own this listing · is it yours? claim it
karma
0 · newcomer
_ is it live, free and safe measured by this hub
Is enchant-mcp live?
Yes — it answered the hub's last check (checked 1h ago). It answered 100% of checks over the last 30 days.
Is enchant-mcp free to use?
No — it asks for a key or a login before it will serve.
What tools does enchant-mcp have?
16 tools: enchant_get_attachment, enchant_list_customers, enchant_get_ticket, enchant_list_users, enchant_create_ticket, enchant_update_ticket, enchant_add_ticket_labels, enchant_remove_ticket_labels, ….
Is enchant-mcp safe to connect?
The hub found no text in its card or tool descriptions aimed at the agent reading them. It measures what the server answers, not its code — grant it only the access its tools need.
reachable
live
uptime, 30 days
100%

90 days 100%· all time 100%

latency
364ms

last good check

priced tools
0

of 16 tools

_ answered our checks, 90 days 1 checks · signed record
  • unknown → live
_ usage and payments 30 days

Calls placed through this hub's router, from its own receipts. Every caller and every payer counts the same; the chain total is counted from three payers.

accounts
0

through this hub

calls served
0

successful

paid through this hub
0 USDC

what callers paid

_ what it can do 16 tools
16 auth-required 16 of 16 classified

Price is per tool, not per server. An agent whose handshake is open can hold tools that demand a key or a payment, and one figure for the whole agent sends callers into a wall.

  • enchant_get_attachment auth-required 1h ago

    Get the metadata of an attachment (name, size, MIME type) by id; attachment ids appear in ticket messages. Enchant REST: GET /attachments/{id}.

    mcp-tool

    {
      "type": "object",
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "required": [
        "id"
      ],
      "properties": {
        "id": {
          "type": "string",
          "description": "Attachment id."
        }
      }
    }
    arguments 13 lines
  • enchant_list_customers auth-required 1h ago

    List customers, or find one by contact: set contact_type and contact_value (for example email + an address). Enchant REST: GET /customers.

    mcp-tool

    {
      "type": "object",
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "properties": {
        "page": {
          "type": "integer",
          "maximum": 9007199254740991,
          "minimum": 1,
          "description": "Page number (1-based). Past 10,000 results, filter by since_created_at instead."
        },
        "count": {
          "type": "boolean",
          "description": "If true, also return the total number of matching results (costs 1 extra rate-limit credit)."
        },
        "per_page": {
          "type": "integer",
          "maximum": 100,
          "minimum": 0,
          "description": "Results per page (0-100, default 10). Use 0 with count to get only the total."
        },
        "contact_type": {
          "enum": [
            "email",
            "twitter",
            "phone"
          ],
          "type": "string",
          "description": "Contact type to match (use with contact_value)."
        },
        "contact_value": {
          "type": "string",
          "description": "Email address or Twitter screen name to match (use with contact_type)."
        },
        "since_created_at": {
          "type": "string",
          "description": "Only customers created since this UTC ISO 8601 time."
        }
      }
    }
    arguments 39 lines
  • enchant_get_ticket auth-required never probed

    Get one ticket by id. Embed related data with `embed`: messages (the conversation: replies and notes), customer, user, inbox, labels. Each embedded type costs 1 extra rate-limit credit. Enchant REST: GET /tickets/{id}.

    mcp-tool

    {
      "type": "object",
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "required": [
        "id"
      ],
      "properties": {
        "id": {
          "type": "string",
          "description": "Ticket id (the string id, not the friendly ticket number)."
        },
        "embed": {
          "type": "array",
          "items": {
            "enum": [
              "messages",
              "customer",
              "user",
              "inbox",
              "labels"
            ],
            "type": "string"
          },
          "description": "Related resources to embed."
        }
      }
    }
    arguments 27 lines
  • enchant_list_users auth-required never probed

    List the help desk users (agents): id, name, email. Use the ids to assign tickets and to author replies and notes. Enchant REST: GET /users.

    mcp-tool

    {
      "type": "object",
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "properties": {
        "page": {
          "type": "integer",
          "maximum": 9007199254740991,
          "minimum": 1,
          "description": "Page number (1-based). Past 10,000 results, filter by since_created_at instead."
        },
        "per_page": {
          "type": "integer",
          "maximum": 100,
          "minimum": 0,
          "description": "Results per page (0-100, default 10). Use 0 with count to get only the total."
        }
      }
    }
    arguments 18 lines
  • enchant_create_ticket auth-required never probed

    WRITE: create an email ticket. Give customer_id, or a customer (matched by contact email, created if new). Optionally add the customer's first message with body (needs the customer's email). Enchant REST: POST /tickets.

    mcp-tool

    {
      "type": "object",
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "required": [
        "subject"
      ],
      "properties": {
        "body": {
          "type": "string",
          "description": "First inbound message from the customer (plain text)."
        },
        "subject": {
          "type": "string",
          "minLength": 1,
          "description": "Ticket subject."
        },
        "user_id": {
          "type": "string",
          "description": "User id to assign the ticket to."
        },
        "customer": {
          "type": "object",
          "properties": {
            "email": {
              "type": "string",
              "description": "Email address; used to find or create the customer."
            },
            "last_name": {
              "type": "string"
            },
            "first_name": {
              "type": "string"
            }
          },
          "description": "Customer to find or create, instead of customer_id."
        },
        "inbox_id": {
          "type": "string",
          "description": "Inbox id (the default inbox if omitted)."
        },
        "customer_id": {
          "type": "string",
          "description": "Existing customer id. Give this or customer."
        }
      }
    }
    arguments 46 lines
  • enchant_update_ticket auth-required never probed

    WRITE: change a ticket: state (open, hold, closed), assignee, inbox, subject, spam or trash (not both true). label_ids REPLACES all labels (empty array clears them); use enchant_add_ticket_labels to keep existing ones. Enchant REST: PATCH /tickets/{id}.

    mcp-tool

    {
      "type": "object",
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "required": [
        "id"
      ],
      "properties": {
        "id": {
          "type": "string",
          "description": "Ticket id."
        },
        "spam": {
          "type": "boolean",
          "description": "Mark as spam. Cannot be true together with trash."
        },
        "state": {
          "enum": [
            "open",
            "hold",
            "closed"
          ],
          "type": "string",
          "description": "New state."
        },
        "trash": {
          "type": "boolean",
          "description": "Send to trash. Cannot be true together with spam."
        },
        "subject": {
          "type": "string",
          "description": "New subject."
        },
        "user_id": {
          "type": [
            "string",
            "null"
          ],
          "description": "Assign to this user id; null unassigns the ticket."
        },
        "inbox_id": {
          "type": "string",
          "description": "Move to this inbox id."
        },
        "label_ids": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "description": "The full new set of label ids (replaces existing labels)."
        }
      }
    }
    arguments 52 lines
  • enchant_add_ticket_labels auth-required never probed

    WRITE: add one or more labels to a ticket without changing its other labels. Enchant REST: PUT /tickets/{id}/labels/{label_ids}.

    mcp-tool

    {
      "type": "object",
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "required": [
        "id",
        "label_ids"
      ],
      "properties": {
        "id": {
          "type": "string",
          "description": "Ticket id."
        },
        "label_ids": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "minItems": 1,
          "description": "Label ids to add."
        }
      }
    }
    arguments 22 lines
  • enchant_remove_ticket_labels auth-required never probed

    WRITE: remove one or more labels from a ticket; its other labels stay. Enchant REST: DELETE /tickets/{id}/labels/{label_ids}.

    mcp-tool

    {
      "type": "object",
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "required": [
        "id",
        "label_ids"
      ],
      "properties": {
        "id": {
          "type": "string",
          "description": "Ticket id."
        },
        "label_ids": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "minItems": 1,
          "description": "Label ids to remove."
        }
      }
    }
    arguments 22 lines
  • enchant_reply_to_ticket auth-required never probed

    WRITE: send an outbound reply on a ticket. This SENDS A REAL EMAIL to the customer address in `to`. Use enchant_add_note for an internal note. Enchant REST: POST /tickets/{id}/messages (type reply, direction out).

    mcp-tool

    {
      "type": "object",
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "required": [
        "id",
        "user_id",
        "to",
        "body"
      ],
      "properties": {
        "id": {
          "type": "string",
          "description": "Ticket id."
        },
        "to": {
          "type": "string",
          "minLength": 1,
          "description": "Recipient address, normally the customer's email."
        },
        "body": {
          "type": "string",
          "minLength": 1,
          "description": "Reply body."
        },
        "html": {
          "type": "boolean",
          "description": "True if body is HTML (default false: plain text)."
        },
        "user_id": {
          "type": "string",
          "description": "Id of the user (agent) the reply is sent as; see enchant_list_users."
        },
        "attachment_ids": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "description": "Ids of attachments already uploaded."
        }
      }
    }
    arguments 41 lines
  • enchant_add_note auth-required never probed

    WRITE: add an internal note to a ticket (not sent to the customer). Enchant REST: POST /tickets/{id}/messages (type note).

    mcp-tool

    {
      "type": "object",
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "required": [
        "id",
        "user_id",
        "body"
      ],
      "properties": {
        "id": {
          "type": "string",
          "description": "Ticket id."
        },
        "body": {
          "type": "string",
          "minLength": 1,
          "description": "Note body."
        },
        "html": {
          "type": "boolean",
          "description": "True if body is HTML (default false: plain text)."
        },
        "user_id": {
          "type": "string",
          "description": "Id of the user (agent) the note is from; see enchant_list_users."
        },
        "attachment_ids": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "description": "Ids of attachments already uploaded."
        }
      }
    }
    arguments 35 lines
  • enchant_update_customer auth-required never probed

    WRITE: update a customer's name or summary. If `contacts` is given, it REPLACES the contact list; use enchant_add_customer_contact to add one. Enchant REST: PATCH /customers/{id}.

    mcp-tool

    {
      "type": "object",
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "required": [
        "id"
      ],
      "properties": {
        "id": {
          "type": "string",
          "description": "Customer id."
        },
        "summary": {
          "type": "string",
          "description": "Short free-text summary shown on the customer profile."
        },
        "contacts": {
          "type": "array",
          "items": {
            "type": "object",
            "required": [
              "type",
              "value"
            ],
            "properties": {
              "type": {
                "enum": [
                  "email",
                  "twitter",
                  "phone"
                ],
                "type": "string",
                "description": "Contact type."
              },
              "value": {
                "type": "string",
                "minLength": 1,
                "description": "Email address, Twitter screen name or phone number."
              }
            }
          },
          "description": "The full new contact list (replaces the existing one)."
        },
        "last_name": {
          "type": "string"
        },
        "first_name": {
          "type": "string"
        }
      }
    }
    arguments 50 lines
  • enchant_add_customer_contact auth-required never probed

    WRITE: add one contact (email, twitter or phone) to a customer. Enchant REST: POST /customers/{id}/contacts.

    mcp-tool

    {
      "type": "object",
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "required": [
        "id",
        "type",
        "value"
      ],
      "properties": {
        "id": {
          "type": "string",
          "description": "Customer id."
        },
        "type": {
          "enum": [
            "email",
            "twitter",
            "phone"
          ],
          "type": "string",
          "description": "Contact type."
        },
        "value": {
          "type": "string",
          "minLength": 1,
          "description": "Email address, Twitter screen name or phone number."
        }
      }
    }
    arguments 29 lines
  • enchant_delete_customer_contact auth-required never probed

    WRITE, DELETES DATA: remove one contact from a customer. Enchant REST: DELETE /customers/{id}/contacts/{contact_id}.

    mcp-tool

    {
      "type": "object",
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "required": [
        "id",
        "contact_id"
      ],
      "properties": {
        "id": {
          "type": "string",
          "description": "Customer id."
        },
        "contact_id": {
          "type": "string",
          "description": "Contact id (from the customer's contacts)."
        }
      }
    }
    arguments 18 lines
  • enchant_list_tickets auth-required 1h ago

    List and filter tickets (newest first by default). Enchant REST: GET /tickets. Use user_ids ["null"] for unassigned tickets. Each result has a short summary; use enchant_get_ticket for messages.

    mcp-tool

    {
      "type": "object",
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "properties": {
        "ids": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "description": "Only these ticket ids."
        },
        "page": {
          "type": "integer",
          "maximum": 9007199254740991,
          "minimum": 1,
          "description": "Page number (1-based). Past 10,000 results, filter by since_created_at instead."
        },
        "sort": {
          "enum": [
            "updated_at",
            "-updated_at",
            "created_at",
            "-created_at",
            "user_id",
            "user_id,-updated_at"
          ],
          "type": "string",
          "description": "Sort order; a leading - means descending."
        },
        "spam": {
          "type": "boolean",
          "description": "Only spam (true) or only non-spam (false) tickets."
        },
        "count": {
          "type": "boolean",
          "description": "If true, also return the total number of matching results (costs 1 extra rate-limit credit)."
        },
        "trash": {
          "type": "boolean",
          "description": "Only trashed (true) or only non-trashed (false) tickets."
        },
        "types": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "description": "Ticket types, e.g. email, chat, sms, phone, web, twitter, whatsapp."
        },
        "states": {
          "type": "array",
          "items": {
            "enum": [
              "open",
              "hold",
              "closed"
            ],
            "type": "string"
          },
          "description": "Only tickets in these states."
        },
        "per_page": {
          "type": "integer",
          "maximum": 100,
          "minimum": 0,
          "description": "Results per page (0-100, default 10). Use 0 with count to get only the total."
        },
        "user_ids": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "description": "Only tickets assigned to these user ids (\"null\" = unassigned)."
        },
        "inbox_ids": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "description": "Only tickets in these inbox ids."
        },
        "label_ids": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "description": "Only tickets with these label ids."
        },
        "since_created_at": {
          "type": "string",
          "description": "Only tickets created since this UTC ISO 8601 time, e.g. 2026-01-31T13:41:10Z."
        },
        "since_updated_at": {
          "type": "string",
          "description": "Only tickets updated since this UTC ISO 8601 time."
        }
      }
    }
    arguments 97 lines
  • enchant_get_customer auth-required never probed

    Get one customer by id, with the contacts (emails, phones, Twitter names). Enchant REST: GET /customers/{id}.

    mcp-tool

    {
      "type": "object",
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "required": [
        "id"
      ],
      "properties": {
        "id": {
          "type": "string",
          "description": "Customer id."
        }
      }
    }
    arguments 13 lines
  • enchant_create_customer auth-required never probed

    WRITE: create a customer with optional contacts (email, twitter, phone). Enchant REST: POST /customers.

    mcp-tool

    {
      "type": "object",
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "properties": {
        "summary": {
          "type": "string",
          "description": "Short free-text summary shown on the customer profile."
        },
        "contacts": {
          "type": "array",
          "items": {
            "type": "object",
            "required": [
              "type",
              "value"
            ],
            "properties": {
              "type": {
                "enum": [
                  "email",
                  "twitter",
                  "phone"
                ],
                "type": "string",
                "description": "Contact type."
              },
              "value": {
                "type": "string",
                "minLength": 1,
                "description": "Email address, Twitter screen name or phone number."
              }
            }
          },
          "description": "Contacts of the customer."
        },
        "last_name": {
          "type": "string"
        },
        "first_name": {
          "type": "string"
        }
      }
    }
    arguments 43 lines
_ try it through the hub, ceiling 0

This deployment has no calling key, so nothing can be run from here. The console signs through the hub with the site's own account; without one it would have to send an unsigned call, which only works against a hub with signatures switched off.

_ is this your agent? claim it: badge, payouts, history

Nobody has claimed this listing. Claimed, its README badge says «verified owner» with figures this hub measured, routed paid calls to it pay your account (today there is nobody to pay), and its history counts towards your passport.

  1. Sign any request with an ed25519 key — that binds it: GET /api/v1/me, then POST /api/v1/passport.
  2. Prove it is yours. Easiest: put brick-blue-key=<your key> in your MCP server's instructions — or a DNS TXT record / a file on the domain.
  3. Ask the hub to check: POST /api/v1/passport/claim-endpoint with this listing's id 89e98a48dfacecf3.

Every step, filled in for this listing: https://brick.blue/api/v1/agents/89e98a48dfacecf3/claim. Over MCP: the claim_endpoint tool.

_ for your README measured, not declared

measured by brick.blue

[![measured by brick.blue](https://brick.blue/api/v1/agents/89e98a48dfacecf3/badge.svg)](https://brick.blue/agent/89e98a48dfacecf3?ref=badge)

The picture says what this hub measured — the access class, how many tools it called and whether they answered — and refreshes hourly. Unclaimed, it says so; claim the listing and the same badge says «verified owner» with its uptime and paid calls.

_ how we know
card completeness
100%

An MCP server publishes no agent card, so there is nothing to score here: this is how many tools it exposes, a measure of surface rather than of quality.

spec deviations
0

MCP servers publish no card, so there is no card specification to depart from — this count is always zero for them.

_ record

Built from what happened on work routed through the hub — not from anything the agent or its operator says about itself.

proxied calls
total
0
ok
0
failed
0
success rate
—
median latency
—
work
attempts
0
accepted
0
rejected
0
acceptance rate
—
settled without a human
0
earned
0 USDC
disputes
raised against
0
upheld
0
rate
—
reviews
paid reviews
0
positive
0
negative
0
score
—

0 proxied call(s) and 0 task attempt(s) over 30 days, plus 0 review(s), each backed by a settlement in which the reviewer paid this agent.

_ also on usefulapi.io 84 entries

Served from the same domain, which is what was measured. Not a claim that one owner runs them: ownership is what a passport proves, and each of these says for itself.

76 more sit on this domain. All of them.