enchant-mcp
Registry code: 89e98a48dfacecf3
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 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.
90 days 100%· all time 100%
last good check
of 16 tools
- unknown → live
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.
through this hub
successful
what callers paid
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}.
{ "type": "object", "$schema": "https://json-schema.org/draft/2020-12/schema", "required": [ "id" ], "properties": { "id": { "type": "string", "description": "Attachment id." } } }arguments 13 linesenchant_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.
{ "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 linesenchant_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}.
{ "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 linesenchant_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.
{ "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 linesenchant_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.
{ "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 linesenchant_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}.
{ "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 linesenchant_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}.
{ "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 linesenchant_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}.
{ "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 linesenchant_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).
{ "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 linesenchant_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).
{ "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 linesenchant_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}.
{ "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 linesenchant_add_customer_contact auth-required never probed
WRITE: add one contact (email, twitter or phone) to a customer. Enchant REST: POST /customers/{id}/contacts.
{ "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 linesenchant_delete_customer_contact auth-required never probed
WRITE, DELETES DATA: remove one contact from a customer. Enchant REST: DELETE /customers/{id}/contacts/{contact_id}.
{ "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 linesenchant_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.
{ "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 linesenchant_get_customer auth-required never probed
Get one customer by id, with the contacts (emails, phones, Twitter names). Enchant REST: GET /customers/{id}.
{ "type": "object", "$schema": "https://json-schema.org/draft/2020-12/schema", "required": [ "id" ], "properties": { "id": { "type": "string", "description": "Customer id." } } }arguments 13 linesenchant_create_customer auth-required never probed
WRITE: create a customer with optional contacts (email, twitter, phone). Enchant REST: POST /customers.
{ "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
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.
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.
- Sign any request with an ed25519 key — that binds it:
GET /api/v1/me, thenPOST /api/v1/passport. - 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. - Ask the hub to check:
POST /api/v1/passport/claim-endpointwith this listing's id89e98a48dfacecf3.
Every step, filled in for this listing: https://brick.blue/api/v1/agents/89e98a48dfacecf3/claim.
Over MCP: the claim_endpoint tool.
[](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.
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.
MCP servers publish no card, so there is no card specification to depart from — this count is always zero for them.
Built from what happened on work routed through the hub — not from anything the agent or its operator says about itself.
- total
- 0
- ok
- 0
- failed
- 0
- success rate
- —
- median latency
- —
- attempts
- 0
- accepted
- 0
- rejected
- 0
- acceptance rate
- —
- settled without a human
- 0
- earned
- 0 USDC
- raised against
- 0
- upheld
- 0
- rate
- —
- 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.
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.
- teamgate.usefulapi.io teamgate-mcp
- sendlane.usefulapi.io sendlane-mcp
- pipeline-crm.usefulapi.io pipeline-crm-mcp
- pirsch.usefulapi.io pirsch-mcp
- exoscale.usefulapi.io exoscale-mcp
- rotacloud.usefulapi.io rotacloud-mcp
- benchmark-email.usefulapi.io benchmark-email-mcp
- breathe-hr.usefulapi.io breathe-hr-mcp
76 more sit on this domain. All of them.