Comprehensive Model Context Protocol server for managing Home Assistant through AI assistants.
Aryeo MCP by usefulapi is installed from its publisher's own source and answers where it runs, so this marketplace is not in the path of a single call. There is no address here to send one to, and a panel that pretended otherwise would be showing you an answer we made up. Install it and call it from your own client — the Installation tab has the entry for each one.
What it does
Manage real-estate media orders, appointments, listings, customers and tasks in Aryeo.
Quickstart
# 1 — add it to Claude Code
claude mcp add --scope user --transport http aryeo-mcp-by-usefulapi https://aryeo.usefulapi.io/mcp
# 2 — ask your agent for something these tools do
# aryeo_list_orders, aryeo_get_order, aryeo_update_order_notes and 21 more
Aryeo MCP by usefulapi costs nothing on mcprush: there is no plan to choose here, no cap to set and nothing mcprush can bill you for.
Collected from a public index. Nobody has claimed this account, so nothing here was written by its author — claim it if it is yours.
Where are you running it?
Every route below installs the same thing and ends at the same approval screen. Nothing here runs on your machine and nothing runs on ours: this server answers at its publisher’s own address, and what you install is the connection straight to it.
This is a public server: it answers at its publisher’s own address and this marketplace is not in the path. Claude Code registers it in one command; --scope user makes it available in every project. The transport below is http, as the publisher's own manifest declares it.
claude mcp add --scope user --transport http aryeo-mcp-by-usefulapi https://aryeo.usefulapi.io/mcpReconnect, or start a new session, and the tools appear in the model’s tool list.
One config entry pointing straight at the publisher’s own address — this marketplace is not in the path, and nothing from this listing executes on your machine.
24 tools, with what each one reads, writes and reaches shown before you agree — the same list on every route above. Read the tool surface.
Tool surface
What the model actually sees. Descriptions are diffed on every release — see version history.
List the orders of your Aryeo company (newest first by default), with payment status, fulfillment status, totals and links. Filter by search text (address or customer), payment/fulfillment status, appointment date range, tags or assigned users. GET /orders.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| search | string | no | Orders whose address or customer matches this text, e.g. a street name. |
| payment_status | string | no | Only orders with this payment status. |
| fulfillment_status | string | no | Only orders with this fulfillment status. |
| appointment_start_after | string | no | Only orders with an appointment starting after this moment. ISO 8601 date-time with a timezone, e.g. 2026-10-01T13:00:00Z. |
| appointment_start_before | string | no | Only orders with an appointment starting before this moment. ISO 8601 date-time with a timezone, e.g. 2026-10-01T13:00:00Z. |
| creator_group_id | string | no | Only orders owned by this creator group (UUID). |
| tag_ids | array | no | Orders carrying any of these tag ids. |
| user_ids | array | no | Orders that have appointments with any of these user ids (user ids = company_user.id from aryeo_list_team_members, not the team member id). |
| sort | string | no | Comma-separated sort fields; a leading - sorts descending. Default -created_at. |
| include | string | no | Comma-separated relations to expand. Examples: items, listing, customer, appointments, appointments.users, unconfirmed_appointments, order_form, discounts, discounts.coupon. An unknown value makes Ary |
| page | integer | no | Page number, from 1 (default 1). Pass the previous reply's next_page. |
| per_page | integer | no | Results per page, 1-100 (Aryeo default 25). |
One order by id: customer, address, status, totals, payment and invoice links. Add include=items,appointments,listing,customer for the line items and visits. GET /orders/{id}.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| order_id | string | yes | Aryeo order id (UUID). |
| include | string | no | Comma-separated relations to expand. Examples: items, listing, customer, appointments, appointments.users, unconfirmed_appointments, order_form, discounts, discounts.coupon. An unknown value makes Ary |
REPLACE the internal notes of an order (visible to your team only, not to the customer). The whole note is overwritten: read the order first and send the full new text. An empty string clears the notes. PUT /orders/{id}/notes.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| order_id | string | yes | Aryeo order id (UUID). |
| internal_notes | string | yes | The complete new internal notes (max 2550 characters) (replaces the old text). |
List appointments (shoots/visits), by default the SCHEDULED ones, newest start first. Filter by upcoming/past, status, a start-time window or the assigned users. Use include=order,order.address,users to see where and who. GET /appointments.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| tense | string | no | Only upcoming or only past appointments. |
| statuses | array | no | Appointment statuses to return (Aryeo default: SCHEDULED). |
| start_after | string | no | Only appointments starting at or after this moment. ISO 8601 date-time with a timezone, e.g. 2026-10-01T13:00:00Z. |
| start_before | string | no | Only appointments starting at or before this moment. ISO 8601 date-time with a timezone, e.g. 2026-10-01T13:00:00Z. |
| user_ids | array | no | Only appointments of these user ids (user ids = company_user.id from aryeo_list_team_members, not the team member id). |
| sort | string | no | Comma-separated sort fields; a leading - sorts descending. Default -start_at. |
| include | string | no | Comma-separated relations to expand. Examples: owner, items, users, order, order.address, order.customer, order.customerGroup, order.listing, order.items, items.product_variant. An unknown value makes |
| page | integer | no | Page number, from 1 (default 1). Pass the previous reply's next_page. |
| per_page | integer | no | Results per page, 1-100 (Aryeo default 25). |
One appointment by id: status, start/end, duration, assigned users and items. GET /appointments/{id}.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| appointment_id | string | yes | Aryeo appointment id (UUID). |
| include | string | no | Comma-separated relations to expand. Examples: owner, items, users, order, order.address, order.customer, order.listing, order.items, items.product_variant. An unknown value makes Aryeo reply with the |
CANCEL an appointment. With notify=true Aryeo sends a cancellation notice to the order's customer (an email/message to a third party); with notify=false nobody is told. Cancelling can trigger fees or free the slot for other bookings. PUT /appointments/{id}/cancel.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| appointment_id | string | yes | Aryeo appointment id (UUID). |
| notify | boolean | yes | true = notify the order's customer of the cancellation; false = cancel silently. Required: decide explicitly. |
MOVE an appointment to a new start and end time. With notify=true Aryeo sends a reschedule notice to the order's customer (a message to a third party). Check availability first (aryeo_list_available_timeslots). PUT /appointments/{id}/reschedule.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| appointment_id | string | yes | Aryeo appointment id (UUID). |
| start_at | string | yes | New start. ISO 8601 date-time with a timezone, e.g. 2026-10-01T13:00:00Z. |
| end_at | string | yes | New end. ISO 8601 date-time with a timezone, e.g. 2026-10-01T13:00:00Z. |
| notify | boolean | yes | true = notify the order's customer of the new time; false = move silently. Required: decide explicitly. |
Bookable timeslots for ONE day (in the given timezone) for a proposed or existing appointment. Give either appointment_id, or duration + interval (minutes). Optionally restrict to users and tie it to an order. GET /scheduling/available-timeslots.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| date | string | yes | The day to list, yyyy-mm-dd. |
| timezone | string | yes | Timezone that defines the day (required by Aryeo), e.g. America/Chicago. |
| appointment_id | string | no | Existing appointment to find a new time for (UUID). |
| order_id | string | no | Order to calculate availability for (UUID). |
| order_item_ids | array | no | Order item ids of the proposed appointment. |
| user_ids | array | no | Only slots where all of these users are free (user ids = company_user.id from aryeo_list_team_members, not the team member id). |
| duration | integer | no | Appointment length in minutes (required without appointment_id). |
| interval | integer | no | Slot start interval in minutes (required without appointment_id). |
| page | integer | no | Page number, from 1 (default 1). Pass the previous reply's next_page. |
| per_page | integer | no | Results per page, 1-100 (Aryeo default 25). |
Days that still have availability for a proposed or existing appointment: give a start/end range or a timeframe, plus either appointment_id or duration + interval (minutes). GET /scheduling/available-dates.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| start_at | string | no | Availability after this moment. ISO 8601 date-time with a timezone, e.g. 2026-10-01T13:00:00Z. |
| end_at | string | no | Availability before this moment. ISO 8601 date-time with a timezone, e.g. 2026-10-01T13:00:00Z. |
| timeframe | string | no | A named timeframe instead of start_at/end_at (see Aryeo docs: use page to move through weeks/months). |
| timezone | string | yes | Client timezone (required by Aryeo); results are localized to it, e.g. America/Chicago. |
| appointment_id | string | no | Existing appointment to find a new date for (UUID). |
| order_id | string | no | Order to calculate availability for (UUID). |
| order_item_ids | array | no | Order item ids of the proposed appointment. |
| user_ids | array | no | Only dates where all of these users are free (user ids = company_user.id from aryeo_list_team_members, not the team member id). |
| duration | integer | no | Appointment length in minutes (required without appointment_id). |
| interval | integer | no | Slot start interval in minutes (required without appointment_id). |
| page | integer | no | Page number, from 1 (default 1). Pass the previous reply's next_page. |
| per_page | integer | no | Results per page, 1-100 (Aryeo default 25). |
List the property listings of your Aryeo company (address, status, price, bedrooms, delivery status, thumbnails). Filter by search text, address, listing agent, status, price/size ranges or delivery status. GET /listings.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| search | string | no | Listings with a field matching this text. |
| address | string | no | Listings whose address matches, e.g. 123 Main St. |
| list_agent | string | no | Listings whose listing or co-listing agent matches, e.g. John Doe. |
| status | string | no | Only listings with this status. |
| active | boolean | no | true = only listings with an active status (coming soon, for sale/lease, pending, sold, leased). |
| price_min | number | no | Minimum price. |
| price_max | number | no | Maximum price. |
| square_feet_min | number | no | Minimum square feet. |
| square_feet_max | number | no | Maximum square feet. |
| bedrooms_min | integer | no | Minimum bedrooms. |
| bedrooms_max | integer | no | Maximum bedrooms. |
| bathrooms_min | number | no | Minimum bathrooms. |
| bathrooms_max | number | no | Maximum bathrooms. |
| delivery_status | string | no | Only listings with this media delivery status. |
| sort | string | no | Comma-separated sort fields; a leading - sorts descending. Default -created_at. |
| include | string | no | Comma-separated relations to expand. Examples: list_agent, co_list_agent, images, files, videos, floor_plans, interactive_content, property_website, orders.appointments. An unknown value makes Aryeo r |
| page | integer | no | Page number, from 1 (default 1). Pass the previous reply's next_page. |
| per_page | integer | no | Results per page, 1-100 (Aryeo default 25). |
One listing by id: address, status, price, lot/building details, agents. Add include=images,videos,orders.appointments for media and visits. GET /listings/{id}.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| listing_id | string | yes | Aryeo listing id (UUID). |
| include | string | no | Comma-separated relations to expand. Examples: list_agent, co_list_agent, images, files, videos, floor_plans, interactive_content, property_website, orders.appointments. An unknown value makes Aryeo r |
Viewing statistics of a listing's property website (visits, views). GET /listings/{id}/stats.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| listing_id | string | yes | Aryeo listing id (UUID). |
List your customers (the agents, brokerages and teams who order from you) with contact details and balances. Filter by name, email, email domain, phone or search text. GET /customers.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| search | string | no | Customers matching this text. |
| name | string | no | Customers with this name. |
| string | no | Customers with this exact email address. | |
| email_domain | string | no | Customers whose email is on this domain, e.g. gmail.com. |
| phone | string | no | Customers with this phone number. |
| customer_team_ids | string | no | Comma-separated customer team ids. |
| sort | string | no | Comma-separated sort fields; a leading - sorts descending. Default -created_at. |
| include | string | no | Comma-separated relations to expand. Example: users. An unknown value makes Aryeo reply with the allowed list. |
| page | integer | no | Page number, from 1 (default 1). Pass the previous reply's next_page. |
| per_page | integer | no | Results per page, 1-100 (Aryeo default 25). |
Create a customer (an agent or brokerage that can place orders) in your Aryeo company from an owner name and email. Look the email up with aryeo_list_customers first to avoid duplicates. Aryeo may email the new customer an invitation. POST /customers.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| owner_first_name | string | yes | First name of the customer owner. |
| owner_last_name | string | yes | Last name of the customer owner. |
| string | yes | Email address of the customer owner. | |
| phone | string | no | Phone number, e.g. 555-123-4567. |
| team_name | string | no | Name of the customer's team. |
| office_name | string | no | Name of the office or brokerage. |
| website_url | string | no | Website URL. |
| license_number | string | no | Real estate license number. |
| description | string | no | Description of the customer. |
| timezone | string | no | Default timezone, e.g. America/Chicago. |
List your services/products (main products and add-ons) with type, active state and variants. Inactive products are hidden unless include_inactive is true. GET /products.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| search | string | no | Products with a field matching this text. |
| include_inactive | boolean | no | true = also return inactive products. |
| type | string | no | Only main products or only add-ons. |
| category_ids | array | no | Only products in these category ids. |
| sort | string | no | Comma-separated sort fields; a leading - sorts descending. Default title. |
| page | integer | no | Page number, from 1 (default 1). Pass the previous reply's next_page. |
| per_page | integer | no | Results per page, 1-100 (Aryeo default 25). |
List the product categories (use the ids to filter aryeo_list_products). GET /product-categories.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| search | string | no | Categories with a field matching this text. |
| sort | string | no | Comma-separated sort fields; a leading - sorts descending. Default title. |
| page | integer | no | Page number, from 1 (default 1). Pass the previous reply's next_page. |
| per_page | integer | no | Results per page, 1-100 (Aryeo default 25). |
List discount coupons (name, percent or amount off, active state, times redeemed). GET /coupons.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| search | string | no | Coupons whose name matches. |
| sort | string | no | Comma-separated sort fields; a leading - sorts descending. Default -created_at. |
| include | string | no | Comma-separated relations to expand. Examples: promotion_codes, discountables. An unknown value makes Aryeo reply with the allowed list. |
| page | integer | no | Page number, from 1 (default 1). Pass the previous reply's next_page. |
| per_page | integer | no | Results per page, 1-100 (Aryeo default 25). |
List your order forms (the public booking forms customers use), with title, URL and scheduling settings. GET /order-forms.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| page | integer | no | Page number, from 1 (default 1). Pass the previous reply's next_page. |
| per_page | integer | no | Results per page, 1-100 (Aryeo default 25). |
List your company's team members (photographers and staff) with role, status, service-provider flag and permissions. Each member has two ids: the member id (for aryeo_list_team_member_events and as the task assignee company_team_member_id) and company_user.id (the USER id, for the user_ids filters of orders, appointments, timeslots and dates). company_user is included by default. GET /company-
| Parameter | Type | Required | Notes |
|---|---|---|---|
| search | string | no | Team members matching this text. |
| include | string | no | Comma-separated relations to expand. Default: company_user. Example: company_user. An unknown value makes Aryeo reply with the allowed list. |
| page | integer | no | Page number, from 1 (default 1). Pass the previous reply's next_page. |
| per_page | integer | no | Results per page, 1-100 (Aryeo default 25). |
A team member's calendar between two moments: appointments, blocks, external events and buffers. Use aryeo_list_team_members for the id. GET /company-team-members/{id}/events.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| team_member_id | string | yes | Company team member id (UUID). |
| start | string | no | Start of the window. ISO 8601 date-time with a timezone, e.g. 2026-10-01T13:00:00Z. |
| end | string | no | End of the window. ISO 8601 date-time with a timezone, e.g. 2026-10-01T13:00:00Z. |
| type | string | no | Only events of this type. |
| include_unscheduled | boolean | no | true = include unscheduled appointments. |
List tasks (to-dos such as editing or delivery steps) with assignee, due date and completion state. GET /tasks.
No parameter schema on file.
One task by id. GET /tasks/{id}.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| task_id | string | yes | Aryeo task id (UUID). |
Create a task, optionally with a description, due date and an assignee (a company team member id). POST /tasks.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| name | string | yes | Task name. |
| description | string | no | Task description. |
| due_at | string | no | Due date. ISO 8601 date-time with a timezone, e.g. 2026-10-01T13:00:00Z. |
| company_team_member_id | string | no | Company team member to assign the task to (UUID). |
Mark a task completed (now, or at the given time). PUT /tasks/{id}/complete.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| task_id | string | yes | Aryeo task id (UUID). |
| completed_at | string | no | Completion time (default: now). ISO 8601 date-time with a timezone, e.g. 2026-10-01T13:00:00Z. |
- Every tool — any call limit is its publisher’s, not ours
- No card, and mcprush charges nothing for it
- Runs at its publisher’s own address — this marketplace is not in the path
- Nothing to cap, because mcprush bills nothing
What counts against your monthly calls
| Tool | Unit | Calls used | Out of the allowance |
|---|
Nothing here is billable: mcprush charges nothing to install Aryeo MCP by usefulapi or to call it, at any volume.
Two independent axes, because powerful and malicious are different questions. The grade is threat only. The capability level is blast radius, and it is never a penalty on the grade — it is priced as one subtract-only term in the score, where you can see it.
| Term | Level | What it prices | Points |
|---|---|---|---|
| capability-exposure | moderate | capability blast radius (moderate) — client exposure if the model is manipulated | −3 |
| coverage-honesty | manifest | inspection depth (manifest) — how much of the target the scan could see | −4 |
What the scan could actually read
A grade is only as meaningful as its coverage, so the scanner publishes its own depth before it publishes its result.
The scan read each tool’s name, description, input schema and annotations exactly as the server listed them the last time it answered us; no code was reviewed. We ask the server again about once a month, and a list that changed is graded again.
The implementation source was not read — this reflects the declared tool metadata only.
Capability — what it could do if the model were manipulated
Tags derived from each tool’s schema and the implementation, not from what the tool calls itself. moderate is the level these add up to.
| Tool | Capability tags | Why the tag was assigned |
|---|---|---|
| aryeo_list_orders | untrusted-input | untrusted-input: declares openWorldHint: true (interacts with entities outside the server) |
| aryeo_get_order | untrusted-input | untrusted-input: declares openWorldHint: true (interacts with entities outside the server) |
| aryeo_update_order_notes | external-sink | external-sink: declares readOnlyHint: false, destructiveHint: true, openWorldHint: true |
| aryeo_list_appointments | untrusted-input | untrusted-input: declares openWorldHint: true (interacts with entities outside the server) |
| aryeo_get_appointment | untrusted-input | untrusted-input: declares openWorldHint: true (interacts with entities outside the server) |
| aryeo_cancel_appointment | external-sink | external-sink: declares readOnlyHint: false, destructiveHint: true, openWorldHint: true |
| aryeo_reschedule_appointment | external-sink | external-sink: declares readOnlyHint: false, destructiveHint: true, openWorldHint: true |
| aryeo_list_available_timeslots | untrusted-input | untrusted-input: declares openWorldHint: true (interacts with entities outside the server) |
| aryeo_list_available_dates | untrusted-input | untrusted-input: declares openWorldHint: true (interacts with entities outside the server) |
| aryeo_list_listings | untrusted-input | untrusted-input: declares openWorldHint: true (interacts with entities outside the server) |
| aryeo_get_listing | untrusted-input | untrusted-input: declares openWorldHint: true (interacts with entities outside the server) |
| aryeo_get_listing_stats | untrusted-input | untrusted-input: declares openWorldHint: true (interacts with entities outside the server) |
| aryeo_list_customers | untrusted-input | untrusted-input: declares openWorldHint: true (interacts with entities outside the server) |
| aryeo_create_customer | external-sink | external-sink: declares readOnlyHint: false, openWorldHint: true |
| aryeo_list_products | untrusted-input | untrusted-input: declares openWorldHint: true (interacts with entities outside the server) |
| aryeo_list_product_categories | untrusted-input | untrusted-input: declares openWorldHint: true (interacts with entities outside the server) |
| aryeo_list_coupons | untrusted-input | untrusted-input: declares openWorldHint: true (interacts with entities outside the server) |
| aryeo_list_order_forms | untrusted-input | untrusted-input: declares openWorldHint: true (interacts with entities outside the server) |
| aryeo_list_team_members | untrusted-input | untrusted-input: declares openWorldHint: true (interacts with entities outside the server) |
| aryeo_list_team_member_events | untrusted-input | untrusted-input: declares openWorldHint: true (interacts with entities outside the server) |
| aryeo_list_tasks | untrusted-input | untrusted-input: declares openWorldHint: true (interacts with entities outside the server) |
| aryeo_get_task | untrusted-input | untrusted-input: declares openWorldHint: true (interacts with entities outside the server) |
| aryeo_create_task | external-sink | external-sink: declares readOnlyHint: false, openWorldHint: true |
| aryeo_complete_task | external-sink | external-sink: declares readOnlyHint: false, destructiveHint: true, openWorldHint: true |
Toxic-flow graph
The lethal trifecta, checked as a graph rather than as a checklist: untrusted input, a sensitive source and an external sink have to meet before there is a path worth worrying about.
Supply chain and provenance
This is the first scan of this surface here, so there is nothing yet to compare it against.
Every result on this tab comes from one deterministic pass over the published package — offline, rule by rule, and auditable line by line above. Same methodology version, same bytes, same score.
Release history
This is an address its publisher runs: which release it serves is theirs to choose, so there is nothing here to pin. The history below is for reading; the current release on file is 1.8.5.
No release note was published with this version.
One review per account, from a signed-in account that does not publish this listing. Nothing else is asked — you can say what you think before you install it. Publishers can reply once per review, and a review can be edited or deleted by whoever wrote it.
Any signed-in account that does not publish Aryeo MCP by usefulapi can review it, once — before installing it or after. A review from an account that has installed it is marked as one.
Nobody has reviewed this listing. The rating on the card is the mean of the reviews written here and nothing else, so there is no rating until somebody writes the first — which takes a signed-in account that does not publish it, and nothing else.