| 开发者 |
smvueno
jensmadsen harudigi |
|---|---|
| 更新时间 | 2026年10月20日 13:00 |
| PHP版本: | 7.4 及以上 |
| WordPress版本: | 7.1 |
| 版权: | GPLv2 or later |
| 版权网址: | 版权信息 |
help, status, discover, query, mutate, book, pay) so AI agents can manage Amelia without 100+ tools.
While active, this plugin unregisters Amelia Pro’s native abilities from the WordPress Abilities API so Easy MCP AI only sees the meta tools (natives duplicate coverage and hardcode approved on create). Amelia’s separate MCP HTTP endpoint is left alone; deactivate this plugin to restore natives.
Requires Amelia Booking 9.7+ (verified on 9.9.1). Easy MCP AI is required (verified on 2.2.0).
Disclaimer: Independent plugin by HaruDigi — not affiliated with or endorsed by TMS Software.
What this plugin does
harudigi-booking-abilities-for-amelia folder to /wp-content/plugins/, or install the release ZIP.amelia/* tools are enabled./wp-json/easy-mcp-ai/v1/mcp.Amelia Booking 9.7 or newer.
No. Independent HaruDigi plugin — not affiliated with or endorsed by TMS Software.
For Easy MCP AI: yes while active — Amelia’s 12 native abilities are unregistered from the Abilities API so agents only see the 7 meta tools. Amelia Pro’s own MCP HTTP route (/wp-json/mcp/...) is not configured by this plugin. Deactivate to restore natives.
Easy MCP AI is the MCP host. This plugin adds Amelia abilities to that host.
Leave notify / notifyParticipants unset or false (the default). Only set true after the human approves. That flag only allows mail on create/status events — it does not send by itself.
amelia/book with action=notify (or resend), appointment id, and confirm:true. Optional booking_id. The matching customer status template must be enabled in Amelia → Notifications.
amelia/pay with action=link returns a checkout URL for the appointment’s remaining balance. Card checkout in a browser is out of scope for MCP.
amelia/help now states the manual send rule plainly: amelia/book action=notify sends the customer template for the booking current status only, never changes the status, and must not be refused just because templates for other statuses are disabled.amelia/book create dry_run preview: service, provider, customer, time, extras by name, estimated total, status, email to client yes or no, and notes by label. Update previews get the same short summary.{"Notes": "..."}). Unknown or ambiguous labels are refused with the list of real fields.amelia/query get appointment adds data.notesAndFields: privateNote (staff only), customerNote (client profile), sharedNote (the booking field labelled Notes), plus all booking fields by name.amelia/query list responses echo meta.appliedFilters so agents can see which filters were really used.amelia/pay link responses add computedFrom, rule, and a warning that a payment link is not a payment until a row is paid.date_preset accepts today, tomorrow, upcoming, this_week, this_month, and day_N (for example day_10 for "the 10th"). The response echoes the real dates used.money (total, paid, owed) so "what does this client owe" is one lookup.amount: "half" on amelia/pay link now means: half of the total when nothing has been paid yet, and everything still owed once a payment has been made. The response states which rule was used.amelia/status is slim (versions, counts, default status). Full settings are still available via amelia/query action=settings.amelia/pay amount accepts a number as well as a string.invalid_booking_start. Search dates are validated the same way (invalid_date) instead of silently returning zero bookings.invalid_amount on add, update, and link.invalid_characters instead of being silently stored as question marks.fields on book update now persist like top level extras, and the preview shows the extras change for both shapes. Before, one shape previewed as a change but saved nothing, and the other saved but previewed as no change.persisted and changed read back from the saved appointment, so success means the change is really there.customerId before it was supported, bogus_xyz, nested params) are refused with unknown_parameter and the supported keys, instead of being silently ignored. customerId on appointment lists now filters by that customer.amelia/pay with a booking id instead of a payment id returns wrong_id_type with the payment ids for that booking.extra_not_for_service and the valid extras listed.duplicate_extra and the existing id.externalId to empty string so Amelia 9.9+ has the key (no PHP warning) without linking a WordPress user. Unlike customers, providers reject -1 (truthy role check)amelia/book action=create|update requires two-step flow: dry_run:true → preview (no DB write) → confirm:true + same previewId + expectedCustomer → real writepreviewId is a server-issued hash bound to (aptId + fields + customer). 10-minute TTL. Mismatch/expired/missing → refuseexpectedCustomer (string) required on update: matches customer firstName/lastName/email (case-insensitive, substring). Mismatch → refuse. Blocks ID-swap writes (Charlie-Lynch class)internalNotes + bookingStart in same update → refused (single-concern guard)amelia/query action=list entity=appointment defaults to today…+14d window when no dates given, and to view=slim compact rows (aptId/bookId/start/end/status/serviceName/customer/notesPreview/paySummary) — cuts list tokens 10–50×{ window, page, limit, count, hasMore } meta so models page inside the windowbook-safety.php houses the preview store + assertion helpersscripts/full-audit.php regression suite: 181/181 pass locally; CI flag for failsdiscover / help updated to describe dry_run → preview → confirm flow and ID glossarybook action=create|update no longer silently writes on a single call; first call without dry_run returns dry_run_requiredamelia/pay action=link accepts amount (JPY) or amount:"half" for partial Stripe Checkout linkschargedAmount, remainingAfter, bookingTotal, paidSoFaramelia/help workflow_pay for full/half links, cash remainder, and Stripe remainderbuy.stripe.com) returned for client send (not Amelia site wrappers)fields + top-level args merge on writes (e.g. customerBookingId with nested amount)chargedAmount into Amelia’s callback so half-pay records and emails show the deposit, not the full totalamelia/book action=notify (alias resend) sends customer status emails for an appointment without changing status/time — requires confirm:truenotify:true is a lifecycle gate only; templates must be enabled in Ameliaaction=update no longer permanently clears notifyParticipants (was killing reminders); omitted notify mutes that edit then restores the prior flagbooking_id when set)waiting accepted as a booking status; confirm message for notify is non-deletion wordingHARUDIGI_GH_TOKEN is optional and only used if the repo is private/releases/download/…), not the private asset APIHARUDIGI_GH_TOKEN so private-repo releases are visibleamelia/mutate); previously every customer update failed with 409maxQuantity; package/service create send required color/statusbookable accepts {serviceId, quantity}; Amelia DB errors return the column hint instead of a generic failureCHANGELOG.md) synced to wordpress.org readme.txt and GitHub release notes.cursor/skills/harudigi-amelia-mcp)SVN_USERNAME / SVN_PASSWORD).distignorehelp, status, discover, query, mutate, book, payamelia/paystatus omitted → Amelia defaultAppointmentStatus (not hardcoded approved)notify defaults false — ask before emailing customers