diff --git a/app/en/mcp-servers/productivity/luma-api/page.mdx b/app/en/mcp-servers/productivity/luma-api/page.mdx
new file mode 100644
index 000000000..a0f633526
--- /dev/null
+++ b/app/en/mcp-servers/productivity/luma-api/page.mdx
@@ -0,0 +1,1313 @@
+# LumaApi
+
+import StarterToolInfo from "@/app/_components/starter-tool-info";
+import ToolInfo from "@/app/_components/tool-info";
+import Badges from "@/app/_components/badges";
+import TabbedCodeBlock from "@/app/_components/tabbed-code-block";
+import TableOfContents from "@/app/_components/table-of-contents";
+import ToolFooter from "@/app/_components/tool-footer";
+import { Callout } from "nextra/components";
+
+
+
+
+
+
+
+The LumaApi MCP Server offers a comprehensive suite of tools for managing events and calendars within the Luma platform. Users can efficiently perform actions such as:
+
+- Create, update, and manage events, including scheduling and ticketing.
+- Retrieve detailed information about events, guests, and users.
+- Manage guest statuses and send invitations via email and SMS.
+- Handle coupons and membership tiers for events and calendars.
+- Import contacts and apply tags to organize attendees effectively.
+
+This server is designed to streamline event management and enhance user engagement through its robust API capabilities.
+
+## Authentication
+
+The Arcade Luma API MCP Server requires one environment variable to authenticate with the [Luma API](https://docs.luma.com/reference/getting-started-with-your-api):
+
+- `LUMA_API_KEY`
+
+**How to obtain your credentials:**
+
+1. Navigate to your [Luma dashboard](https://lu.ma/)
+2. Click on your profile icon and go to **Settings**
+3. Navigate to **API** or **Developer Settings**
+4. Click **Generate API Key** or **Create New Key**
+5. Copy the API key and store it securely
+
+
+ The Luma API requires a **Luma Plus** subscription. Be careful with your API
+ key since it provides full access to your Luma account.
+
+
+For more details, see the [Luma API Getting Started guide](https://docs.luma.com/reference/getting-started-with-your-api).
+
+## Available Tools
+
+
+
+
+ If you need to perform an action that's not listed here, you can [get in touch
+ with us](mailto:contact@arcade.dev) to request a new tool, or [create your own
+ tools](/home/build-tools/create-a-mcp-server).
+
+
+## LumaApi.GetEventAdminInfo
+
+
+
+
+Retrieve admin information for an accessible event.
+
+**Parameters**
+
+- **event_api_id** (`string`, optional) Event API ID, starting with 'evt-', used to identify the event.
+- **event_id** (`string`, optional) The unique identifier for the event, usually starts with 'evt-'.
+
+**Secrets**
+
+This tool requires the following secrets: `LUMA_API_KEY`. You can obtain this from your [Luma dashboard](https://lu.ma/). See the [Authentication section](#authentication) above for detailed instructions and the [Luma API documentation](https://docs.luma.com/reference/getting-started-with-your-api) for more information.
+
+## LumaApi.ListLumaCalendarEvents
+
+
+
+
+Retrieve all events managed by your Luma Calendar.
+
+**Parameters**
+
+- **event_sort_direction** (`string`, optional) Defines the order of events. Use 'asc' or 'desc' for ascending or descending. Options 'asc nulls last' and 'desc nulls last' place nulls at the end.
+- **filter_events_before** (`string`, optional) Filter events to show only those happening before this ISO 8601 Datetime. Example: 2022-10-19T03:27:13.673Z
+- **number_of_items_to_return** (`number`, optional) The number of events to return. The server enforces a maximum limit.
+- **pagination_cursor** (`string`, optional) Use the `next_cursor` value from a previous request to continue listing events.
+- **sort_by_column** (`string`, optional) Specify the column to sort events by. For now, 'start_at' is the available option.
+- **start_date_after** (`string`, optional) Specify the starting datetime to filter events after this timestamp in ISO 8601 format (e.g., 2022-10-19T03:27:13.673Z).
+
+**Secrets**
+
+This tool requires the following secrets: `LUMA_API_KEY`. You can obtain this from your [Luma dashboard](https://lu.ma/). See the [Authentication section](#authentication) above for detailed instructions and the [Luma API documentation](https://docs.luma.com/reference/getting-started-with-your-api) for more information.
+
+## LumaApi.GetEventGuest
+
+
+
+
+Retrieve event guest details using their ID.
+
+**Parameters**
+
+- **event_api_id** (`string`, optional) Provide the unique API ID for the event to retrieve guest details.
+- **event_identifier** (`string`, optional) The ID of the event, typically starting with 'evt-'. Used to identify the specific event.
+- **guest_api_id** (`string`, optional) The unique API ID of the guest, distinct from the user ID. This is used for identifying the guest within the system.
+- **guest_email** (`string`, optional) The email address of the event guest to look up.
+- **guest_identifier** (`string`, optional) Identifier for looking up the guest, such as guest ID (gst-), ticket key, guest key (g-), or the user's email.
+- **proxy_key** (`string`, optional) Value of the `pk` parameter from the check-in QR code used to identify the guest.
+
+**Secrets**
+
+This tool requires the following secrets: `LUMA_API_KEY`. You can obtain this from your [Luma dashboard](https://lu.ma/). See the [Authentication section](#authentication) above for detailed instructions and the [Luma API documentation](https://docs.luma.com/reference/getting-started-with-your-api) for more information.
+
+## LumaApi.GetEventGuests
+
+
+
+
+Retrieve registered or invited guests for an event.
+
+**Parameters**
+
+- **event_api_id** (`string`, optional) The unique ID of the event, typically starting with 'evt-'.
+- **event_id** (`string`, optional) The unique identifier for the event, usually starts with 'evt-'.
+- **guest_approval_status** (`string`, optional) Filter guests by their approval status. Options: 'approved', 'session', 'pending_approval', 'invited', 'declined', 'waitlist'.
+- **guest_sort_column** (`string`, optional) The column to sort the guest list by. Options are 'name', 'email', 'created_at', 'registered_at', or 'checked_in_at'.
+- **items_to_return** (`number`, optional) Specify the number of guest entries to return. The server enforces a maximum limit.
+- **next_cursor_value** (`string`, optional) Value of `next_cursor` from a previous request to paginate through results.
+- **sort_order** (`string`, optional) Specify the order for sorting the list of guests. Acceptable values are 'asc', 'desc', 'asc nulls last', or 'desc nulls last'.
+
+**Secrets**
+
+This tool requires the following secrets: `LUMA_API_KEY`. You can obtain this from your [Luma dashboard](https://lu.ma/). See the [Authentication section](#authentication) above for detailed instructions and the [Luma API documentation](https://docs.luma.com/reference/getting-started-with-your-api) for more information.
+
+## LumaApi.GetUserInfo
+
+
+
+
+Retrieve the user's personal information and profile details.
+
+**Parameters**
+
+This tool does not take any parameters.
+**Secrets**
+
+This tool requires the following secrets: `LUMA_API_KEY`. You can obtain this from your [Luma dashboard](https://lu.ma/). See the [Authentication section](#authentication) above for detailed instructions and the [Luma API documentation](https://docs.luma.com/reference/getting-started-with-your-api) for more information.
+
+## LumaApi.ListPersonTags
+
+
+
+
+Retrieve a list of tags associated with persons.
+
+**Parameters**
+
+- **items_to_return** (`number`, optional) Specify the number of tags to return. The server will impose a maximum limit.
+- **pagination_cursor** (`string`, optional) Use the `next_cursor` value from a previous response to paginate results.
+- **sort_by_column** (`string`, optional) Specifies the column to sort the tags by. Options are 'name', 'color', or 'created_at'.
+- **sorting_direction** (`string`, optional) Specifies the order direction of the person tags. Choose from 'asc', 'desc', 'asc nulls last', or 'desc nulls last'.
+
+**Secrets**
+
+This tool requires the following secrets: `LUMA_API_KEY`. You can obtain this from your [Luma dashboard](https://lu.ma/). See the [Authentication section](#authentication) above for detailed instructions and the [Luma API documentation](https://docs.luma.com/reference/getting-started-with-your-api) for more information.
+
+## LumaApi.LumaEntityLookup
+
+
+
+
+Lookup an entity on Luma by its slug.
+
+**Parameters**
+
+- **entity_slug** (`string`, required) The unique string identifier for the entity to be looked up in Luma.
+
+**Secrets**
+
+This tool requires the following secrets: `LUMA_API_KEY`. You can obtain this from your [Luma dashboard](https://lu.ma/). See the [Authentication section](#authentication) above for detailed instructions and the [Luma API documentation](https://docs.luma.com/reference/getting-started-with-your-api) for more information.
+
+## LumaApi.CheckEventExistence
+
+
+
+
+Determine if an event exists on the calendar.
+
+**Parameters**
+
+- **calendar_platform_type** (`string`, optional) Specifies the source platform of the event, either 'external' or 'luma'.
+- **event_details_url** (`string`, optional) The URL of the event page to check if it exists in the calendar.
+- **event_identifier** (`string`, optional) A unique string identifier for the event to check its existence on the calendar.
+
+**Secrets**
+
+This tool requires the following secrets: `LUMA_API_KEY`. You can obtain this from your [Luma dashboard](https://lu.ma/). See the [Authentication section](#authentication) above for detailed instructions and the [Luma API documentation](https://docs.luma.com/reference/getting-started-with-your-api) for more information.
+
+## LumaApi.ListPeople
+
+
+
+
+Retrieve a list of people from the calendar.
+
+**Parameters**
+
+- **calendar_membership_status** (`string`, optional) Specify the membership status for filtering calendar members. This is only relevant for calendar memberships.
+- **calendar_membership_tier_api_id** (`string`, optional) A unique identifier for the calendar membership tier to filter people.
+- **calendar_tier_id** (`string`, optional) Unique identifier for the calendar membership tier to filter people.
+- **filter_by_tags** (`string`, optional) Comma-separated list of tag names or IDs to filter people with specified tags.
+- **items_to_return** (`number`, optional) Specify the number of items to return in the response. The server may enforce a maximum limit.
+- **pagination_next_cursor** (`string`, optional) Provide the `next_cursor` value from a previous request to continue pagination.
+- **search_query** (`string`, optional) Search for people using names or emails.
+- **sort_by_column** (`string`, optional) Sort the list of people by a specified column: created_at, event_checked_in_count, event_approved_count, name, or revenue_usd_cents.
+- **sort_order** (`string`, optional) Specifies the order for sorting results: 'asc', 'desc', 'asc nulls last', or 'desc nulls last'.
+
+**Secrets**
+
+This tool requires the following secrets: `LUMA_API_KEY`. You can obtain this from your [Luma dashboard](https://lu.ma/). See the [Authentication section](#authentication) above for detailed instructions and the [Luma API documentation](https://docs.luma.com/reference/getting-started-with-your-api) for more information.
+
+## LumaApi.ListEventCoupons
+
+
+
+
+Retrieve all coupons created for an event.
+
+**Parameters**
+
+- **event_api_id** (`string`, optional) The unique identifier for the event, typically starting with 'evt-'. Required to list coupons for the specified event.
+- **event_identifier** (`string`, optional) Event ID, typically starting with 'evt-'. It identifies the specific event for which to list coupons.
+- **item_return_limit** (`number`, optional) Specifies the number of items to return in the response, up to the server's maximum allowed.
+- **pagination_cursor** (`string`, optional) Value of `next_cursor` from a previous request to continue pagination.
+
+**Secrets**
+
+This tool requires the following secrets: `LUMA_API_KEY`. You can obtain this from your [Luma dashboard](https://lu.ma/). See the [Authentication section](#authentication) above for detailed instructions and the [Luma API documentation](https://docs.luma.com/reference/getting-started-with-your-api) for more information.
+
+## LumaApi.ListCalendarCoupons
+
+
+
+
+Retrieve all coupons for a calendar.
+
+**Parameters**
+
+- **items_to_return** (`number`, optional) The number of coupon items to retrieve. The server enforces a maximum limit.
+- **pagination_cursor** (`string`, optional) Provide the `next_cursor` value obtained from a prior request to paginate through results.
+
+**Secrets**
+
+This tool requires the following secrets: `LUMA_API_KEY`. You can obtain this from your [Luma dashboard](https://lu.ma/). See the [Authentication section](#authentication) above for detailed instructions and the [Luma API documentation](https://docs.luma.com/reference/getting-started-with-your-api) for more information.
+
+## LumaApi.ListEventTicketTypes
+
+
+
+
+Retrieve a list of all ticket types for an event.
+
+**Parameters**
+
+- **event_id** (`string`, optional) The unique identifier for an event, typically starting with 'evt-'.
+- **event_identifier** (`string`, optional) The unique identifier for the event, usually starting with evt-.
+- **include_hidden_ticket_types** (`string`, optional) Set to true to include hidden ticket types in the response list.
+
+**Secrets**
+
+This tool requires the following secrets: `LUMA_API_KEY`. You can obtain this from your [Luma dashboard](https://lu.ma/). See the [Authentication section](#authentication) above for detailed instructions and the [Luma API documentation](https://docs.luma.com/reference/getting-started-with-your-api) for more information.
+
+## LumaApi.GetTicketTypeById
+
+
+
+
+Retrieve event ticket type details by ID.
+
+**Parameters**
+
+- **event_ticket_type_api_id** (`string`, optional) The unique API ID for the event ticket type. It must be provided to retrieve ticket information.
+- **ticket_type_id** (`string`, optional) The ID of the ticket type to retrieve, typically starts with 'ett-'.
+
+**Secrets**
+
+This tool requires the following secrets: `LUMA_API_KEY`. You can obtain this from your [Luma dashboard](https://lu.ma/). See the [Authentication section](#authentication) above for detailed instructions and the [Luma API documentation](https://docs.luma.com/reference/getting-started-with-your-api) for more information.
+
+## LumaApi.ListMembershipTiers
+
+
+
+
+Retrieve available membership tiers for the calendar.
+
+**Parameters**
+
+- **items_to_return_count** (`number`, optional) Specify the number of membership tiers to return. The server may enforce a maximum limit.
+- **previous_request_next_cursor** (`string`, optional) The `next_cursor` value from a prior request for fetching subsequent data.
+
+**Secrets**
+
+This tool requires the following secrets: `LUMA_API_KEY`. You can obtain this from your [Luma dashboard](https://lu.ma/). See the [Authentication section](#authentication) above for detailed instructions and the [Luma API documentation](https://docs.luma.com/reference/getting-started-with-your-api) for more information.
+
+## LumaApi.CreateEvent
+
+
+
+
+Creates and schedules a new event.
+
+**Parameters**
+
+- **mode** (`Enum` [ToolMode](#toolmode), required) Operation mode: 'get_request_schema' returns the OpenAPI spec for the request body, 'execute' performs the actual operation
+- **request_body** (`string`, optional) Stringified JSON representing the request body. Required when mode is 'execute', ignored when mode is 'get_request_schema'
+
+**Secrets**
+
+This tool requires the following secrets: `LUMA_API_KEY`. You can obtain this from your [Luma dashboard](https://lu.ma/). See the [Authentication section](#authentication) above for detailed instructions and the [Luma API documentation](https://docs.luma.com/reference/getting-started-with-your-api) for more information.
+
+## LumaApi.UpdateEvent
+
+
+
+
+Update event details using Luma's API.
+
+**Parameters**
+
+- **mode** (`Enum` [ToolMode](#toolmode), required) Operation mode: 'get_request_schema' returns the OpenAPI spec for the request body, 'execute' performs the actual operation
+- **request_body** (`string`, optional) Stringified JSON representing the request body. Required when mode is 'execute', ignored when mode is 'get_request_schema'
+
+**Secrets**
+
+This tool requires the following secrets: `LUMA_API_KEY`. You can obtain this from your [Luma dashboard](https://lu.ma/). See the [Authentication section](#authentication) above for detailed instructions and the [Luma API documentation](https://docs.luma.com/reference/getting-started-with-your-api) for more information.
+
+## LumaApi.UpdateGuestStatus
+
+
+
+
+Updates the status of an event guest.
+
+**Parameters**
+
+- **mode** (`Enum` [ToolMode](#toolmode), required) Operation mode: 'get_request_schema' returns the OpenAPI spec for the request body, 'execute' performs the actual operation
+- **request_body** (`string`, optional) Stringified JSON representing the request body. Required when mode is 'execute', ignored when mode is 'get_request_schema'
+
+**Secrets**
+
+This tool requires the following secrets: `LUMA_API_KEY`. You can obtain this from your [Luma dashboard](https://lu.ma/). See the [Authentication section](#authentication) above for detailed instructions and the [Luma API documentation](https://docs.luma.com/reference/getting-started-with-your-api) for more information.
+
+## LumaApi.SendGuestEventInvite
+
+
+
+
+Send event invitations to guests via email and SMS.
+
+**Parameters**
+
+- **mode** (`Enum` [ToolMode](#toolmode), required) Operation mode: 'get_request_schema' returns the OpenAPI spec for the request body, 'execute' performs the actual operation
+- **request_body** (`string`, optional) Stringified JSON representing the request body. Required when mode is 'execute', ignored when mode is 'get_request_schema'
+
+**Secrets**
+
+This tool requires the following secrets: `LUMA_API_KEY`. You can obtain this from your [Luma dashboard](https://lu.ma/). See the [Authentication section](#authentication) above for detailed instructions and the [Luma API documentation](https://docs.luma.com/reference/getting-started-with-your-api) for more information.
+
+## LumaApi.AddEventGuests
+
+
+
+
+Add guests to an event with default or custom tickets.
+
+**Parameters**
+
+- **mode** (`Enum` [ToolMode](#toolmode), required) Operation mode: 'get_request_schema' returns the OpenAPI spec for the request body, 'execute' performs the actual operation
+- **request_body** (`string`, optional) Stringified JSON representing the request body. Required when mode is 'execute', ignored when mode is 'get_request_schema'
+
+**Secrets**
+
+This tool requires the following secrets: `LUMA_API_KEY`. You can obtain this from your [Luma dashboard](https://lu.ma/). See the [Authentication section](#authentication) above for detailed instructions and the [Luma API documentation](https://docs.luma.com/reference/getting-started-with-your-api) for more information.
+
+## LumaApi.AddEventHost
+
+
+
+
+Add a host to an event in Luma.
+
+**Parameters**
+
+- **mode** (`Enum` [ToolMode](#toolmode), required) Operation mode: 'get_request_schema' returns the OpenAPI spec for the request body, 'execute' performs the actual operation
+- **request_body** (`string`, optional) Stringified JSON representing the request body. Required when mode is 'execute', ignored when mode is 'get_request_schema'
+
+**Secrets**
+
+This tool requires the following secrets: `LUMA_API_KEY`. You can obtain this from your [Luma dashboard](https://lu.ma/). See the [Authentication section](#authentication) above for detailed instructions and the [Luma API documentation](https://docs.luma.com/reference/getting-started-with-your-api) for more information.
+
+## LumaApi.CreateEventCoupon
+
+
+
+
+Create a non-editable coupon for event registration.
+
+**Parameters**
+
+- **mode** (`Enum` [ToolMode](#toolmode), required) Operation mode: 'get_request_schema' returns the OpenAPI spec for the request body, 'execute' performs the actual operation
+- **request_body** (`string`, optional) Stringified JSON representing the request body. Required when mode is 'execute', ignored when mode is 'get_request_schema'
+
+**Secrets**
+
+This tool requires the following secrets: `LUMA_API_KEY`. You can obtain this from your [Luma dashboard](https://lu.ma/). See the [Authentication section](#authentication) above for detailed instructions and the [Luma API documentation](https://docs.luma.com/reference/getting-started-with-your-api) for more information.
+
+## LumaApi.ModifyCoupon
+
+
+
+
+Update a coupon's details in the system.
+
+**Parameters**
+
+- **mode** (`Enum` [ToolMode](#toolmode), required) Operation mode: 'get_request_schema' returns the OpenAPI spec for the request body, 'execute' performs the actual operation
+- **request_body** (`string`, optional) Stringified JSON representing the request body. Required when mode is 'execute', ignored when mode is 'get_request_schema'
+
+**Secrets**
+
+This tool requires the following secrets: `LUMA_API_KEY`. You can obtain this from your [Luma dashboard](https://lu.ma/). See the [Authentication section](#authentication) above for detailed instructions and the [Luma API documentation](https://docs.luma.com/reference/getting-started-with-your-api) for more information.
+
+## LumaApi.GenerateEventCoupon
+
+
+
+
+Create a coupon for calendar-managed events.
+
+**Parameters**
+
+- **mode** (`Enum` [ToolMode](#toolmode), required) Operation mode: 'get_request_schema' returns the OpenAPI spec for the request body, 'execute' performs the actual operation
+- **request_body** (`string`, optional) Stringified JSON representing the request body. Required when mode is 'execute', ignored when mode is 'get_request_schema'
+
+**Secrets**
+
+This tool requires the following secrets: `LUMA_API_KEY`. You can obtain this from your [Luma dashboard](https://lu.ma/). See the [Authentication section](#authentication) above for detailed instructions and the [Luma API documentation](https://docs.luma.com/reference/getting-started-with-your-api) for more information.
+
+## LumaApi.UpdateCoupon
+
+
+
+
+Updates a coupon in the calendar.
+
+**Parameters**
+
+- **mode** (`Enum` [ToolMode](#toolmode), required) Operation mode: 'get_request_schema' returns the OpenAPI spec for the request body, 'execute' performs the actual operation
+- **request_body** (`string`, optional) Stringified JSON representing the request body. Required when mode is 'execute', ignored when mode is 'get_request_schema'
+
+**Secrets**
+
+This tool requires the following secrets: `LUMA_API_KEY`. You can obtain this from your [Luma dashboard](https://lu.ma/). See the [Authentication section](#authentication) above for detailed instructions and the [Luma API documentation](https://docs.luma.com/reference/getting-started-with-your-api) for more information.
+
+## LumaApi.ImportPeopleToCalendar
+
+
+
+
+Import people to your calendar from contact lists.
+
+**Parameters**
+
+- **mode** (`Enum` [ToolMode](#toolmode), required) Operation mode: 'get_request_schema' returns the OpenAPI spec for the request body, 'execute' performs the actual operation
+- **request_body** (`string`, optional) Stringified JSON representing the request body. Required when mode is 'execute', ignored when mode is 'get_request_schema'
+
+**Secrets**
+
+This tool requires the following secrets: `LUMA_API_KEY`. You can obtain this from your [Luma dashboard](https://lu.ma/). See the [Authentication section](#authentication) above for detailed instructions and the [Luma API documentation](https://docs.luma.com/reference/getting-started-with-your-api) for more information.
+
+## LumaApi.CreatePersonTag
+
+
+
+
+Create a new person tag in the calendar system.
+
+**Parameters**
+
+- **mode** (`Enum` [ToolMode](#toolmode), required) Operation mode: 'get_request_schema' returns the OpenAPI spec for the request body, 'execute' performs the actual operation
+- **request_body** (`string`, optional) Stringified JSON representing the request body. Required when mode is 'execute', ignored when mode is 'get_request_schema'
+
+**Secrets**
+
+This tool requires the following secrets: `LUMA_API_KEY`. You can obtain this from your [Luma dashboard](https://lu.ma/). See the [Authentication section](#authentication) above for detailed instructions and the [Luma API documentation](https://docs.luma.com/reference/getting-started-with-your-api) for more information.
+
+## LumaApi.UpdatePersonTag
+
+
+
+
+Updates a tag for a person in the calendar system.
+
+**Parameters**
+
+- **person_tag_api_id** (`string`, required) The unique identifier for the tag to be updated. It is required to identify which tag needs modification.
+- **tag_color** (`string`, optional) Specify the color to be assigned to the person's tag. Choose from: cranberry, barney, red, green, blue, purple, yellow, orange.
+- **tag_name** (`string`, optional) The new name for the tag to be updated. It should be descriptive and relevant to the person's role or status.
+
+**Secrets**
+
+This tool requires the following secrets: `LUMA_API_KEY`. You can obtain this from your [Luma dashboard](https://lu.ma/). See the [Authentication section](#authentication) above for detailed instructions and the [Luma API documentation](https://docs.luma.com/reference/getting-started-with-your-api) for more information.
+
+## LumaApi.DeletePersonTag
+
+
+
+
+Deletes a person tag from the calendar.
+
+**Parameters**
+
+- **tag_identifier** (`string`, required) The unique identifier of the person tag to be deleted. It should match the tag's API ID.
+
+**Secrets**
+
+This tool requires the following secrets: `LUMA_API_KEY`. You can obtain this from your [Luma dashboard](https://lu.ma/). See the [Authentication section](#authentication) above for detailed instructions and the [Luma API documentation](https://docs.luma.com/reference/getting-started-with-your-api) for more information.
+
+## LumaApi.ApplyTagToCalendarMembers
+
+
+
+
+Apply a tag to existing calendar members.
+
+**Parameters**
+
+- **tag_identifier** (`string`, required) The Tag API ID (e.g., 'tag-123') or tag name to be applied to calendar members.
+- **email_addresses** (`array[string]`, optional) Array of email addresses to apply the tag to existing calendar members.
+- **user_api_ids_to_tag** (`array[string]`, optional) Array of user API IDs to apply the tag to. Each ID corresponds to a calendar member.
+
+**Secrets**
+
+This tool requires the following secrets: `LUMA_API_KEY`. You can obtain this from your [Luma dashboard](https://lu.ma/). See the [Authentication section](#authentication) above for detailed instructions and the [Luma API documentation](https://docs.luma.com/reference/getting-started-with-your-api) for more information.
+
+## LumaApi.RemoveTagFromCalendarMembers
+
+
+
+
+Remove a tag from existing calendar members.
+
+**Parameters**
+
+- **tag_identifier** (`string`, required) The ID or name of the tag to remove from calendar members, such as 'tag-123' or 'Birthday'.
+- **email_addresses_to_remove_tag** (`array[string]`, optional) Array of email addresses to remove the tag from the calendar members.
+- **user_api_ids_to_remove_tag** (`array[string]`, optional) Array of user API IDs from which to remove the specified tag.
+
+**Secrets**
+
+This tool requires the following secrets: `LUMA_API_KEY`. You can obtain this from your [Luma dashboard](https://lu.ma/). See the [Authentication section](#authentication) above for detailed instructions and the [Luma API documentation](https://docs.luma.com/reference/getting-started-with-your-api) for more information.
+
+## LumaApi.AddEventToLumaCalendar
+
+
+
+
+Add an existing event to the Luma calendar.
+
+**Parameters**
+
+- **mode** (`Enum` [ToolMode](#toolmode), required) Operation mode: 'get_request_schema' returns the OpenAPI spec for the request body, 'execute' performs the actual operation
+- **request_body** (`string`, optional) Stringified JSON representing the request body. Required when mode is 'execute', ignored when mode is 'get_request_schema'
+
+**Secrets**
+
+This tool requires the following secrets: `LUMA_API_KEY`. You can obtain this from your [Luma dashboard](https://lu.ma/). See the [Authentication section](#authentication) above for detailed instructions and the [Luma API documentation](https://docs.luma.com/reference/getting-started-with-your-api) for more information.
+
+## LumaApi.GenerateUploadUrl
+
+
+
+
+Generates a URL for image upload.
+
+**Parameters**
+
+- **mode** (`Enum` [ToolMode](#toolmode), required) Operation mode: 'get_request_schema' returns the OpenAPI spec for the request body, 'execute' performs the actual operation
+- **request_body** (`string`, optional) Stringified JSON representing the request body. Required when mode is 'execute', ignored when mode is 'get_request_schema'
+
+**Secrets**
+
+This tool requires the following secrets: `LUMA_API_KEY`. You can obtain this from your [Luma dashboard](https://lu.ma/). See the [Authentication section](#authentication) above for detailed instructions and the [Luma API documentation](https://docs.luma.com/reference/getting-started-with-your-api) for more information.
+
+## LumaApi.CreateEventTicketType
+
+
+
+
+Create a new ticket type for an event.
+
+**Parameters**
+
+- **mode** (`Enum` [ToolMode](#toolmode), required) Operation mode: 'get_request_schema' returns the OpenAPI spec for the request body, 'execute' performs the actual operation
+- **request_body** (`string`, optional) Stringified JSON representing the request body. Required when mode is 'execute', ignored when mode is 'get_request_schema'
+
+**Secrets**
+
+This tool requires the following secrets: `LUMA_API_KEY`. You can obtain this from your [Luma dashboard](https://lu.ma/). See the [Authentication section](#authentication) above for detailed instructions and the [Luma API documentation](https://docs.luma.com/reference/getting-started-with-your-api) for more information.
+
+## LumaApi.UpdateTicketTypeConfiguration
+
+
+
+
+Update an existing ticket type configuration.
+
+**Parameters**
+
+- **mode** (`Enum` [ToolMode](#toolmode), required) Operation mode: 'get_request_schema' returns the OpenAPI spec for the request body, 'execute' performs the actual operation
+- **request_body** (`string`, optional) Stringified JSON representing the request body. Required when mode is 'execute', ignored when mode is 'get_request_schema'
+
+**Secrets**
+
+This tool requires the following secrets: `LUMA_API_KEY`. You can obtain this from your [Luma dashboard](https://lu.ma/). See the [Authentication section](#authentication) above for detailed instructions and the [Luma API documentation](https://docs.luma.com/reference/getting-started-with-your-api) for more information.
+
+## LumaApi.SoftDeleteTicketType
+
+
+
+
+Soft delete a ticket type if certain conditions are met.
+
+**Parameters**
+
+- **event_ticket_type_id** (`string`, required) The ID of the event ticket type to be soft deleted. Ensure no tickets are sold, and it's not the last visible type before deletion.
+
+**Secrets**
+
+This tool requires the following secrets: `LUMA_API_KEY`. You can obtain this from your [Luma dashboard](https://lu.ma/). See the [Authentication section](#authentication) above for detailed instructions and the [Luma API documentation](https://docs.luma.com/reference/getting-started-with-your-api) for more information.
+
+## LumaApi.AddUserToMembershipTier
+
+
+
+
+Add a user to a specified free membership tier.
+
+**Parameters**
+
+- **mode** (`Enum` [ToolMode](#toolmode), required) Operation mode: 'get_request_schema' returns the OpenAPI spec for the request body, 'execute' performs the actual operation
+- **request_body** (`string`, optional) Stringified JSON representing the request body. Required when mode is 'execute', ignored when mode is 'get_request_schema'
+
+**Secrets**
+
+This tool requires the following secrets: `LUMA_API_KEY`. You can obtain this from your [Luma dashboard](https://lu.ma/). See the [Authentication section](#authentication) above for detailed instructions and the [Luma API documentation](https://docs.luma.com/reference/getting-started-with-your-api) for more information.
+
+## LumaApi.UpdateMembershipStatus
+
+
+
+
+Update a member's membership status and handle payments.
+
+**Parameters**
+
+- **membership_status** (`string`, required) Set the membership status to either 'approved' to capture payment or 'declined' to cancel the subscription.
+- **user_identifier** (`string`, required) User ID (e.g., 'usr-xxx') or email address to identify the member whose status is to be updated.
+
+**Secrets**
+
+This tool requires the following secrets: `LUMA_API_KEY`. You can obtain this from your [Luma dashboard](https://lu.ma/). See the [Authentication section](#authentication) above for detailed instructions and the [Luma API documentation](https://docs.luma.com/reference/getting-started-with-your-api) for more information.
+
+## Reference
+
+Below is a reference of enumerations used by some of the tools in the LumaApi MCP Server:
+
+### ToolMode
+
+- **GET_REQUEST_SCHEMA**: `get_request_schema`
+- **EXECUTE**: `execute`
+
+
diff --git a/package.json b/package.json
index e1fef61d4..d7fd42008 100644
--- a/package.json
+++ b/package.json
@@ -32,7 +32,7 @@
},
"homepage": "https://arcade.dev/",
"dependencies": {
- "@arcadeai/design-system": "^3.25.1",
+ "@arcadeai/design-system": "^3.26.0",
"@next/third-parties": "16.0.1",
"@ory/client": "1.22.7",
"@theguild/remark-mermaid": "0.3.0",
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index c552fb921..b5c31436f 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -9,8 +9,8 @@ importers:
.:
dependencies:
'@arcadeai/design-system':
- specifier: ^3.25.1
- version: 3.25.1(@hookform/resolvers@5.2.2(react-hook-form@7.65.0(react@19.2.3)))(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(lucide-react@0.548.0(react@19.2.3))(react-dom@19.2.3(react@19.2.3))(react-hook-form@7.65.0(react@19.2.3))(react@19.2.3)(recharts@3.6.0(@types/react@19.2.7)(react-dom@19.2.3(react@19.2.3))(react-is@16.13.1)(react@19.2.3)(redux@5.0.1))(tailwindcss@4.1.16)(vite@7.3.0(@types/node@24.9.2)(jiti@2.6.1)(lightningcss@1.30.2)(yaml@2.8.2))
+ specifier: ^3.26.0
+ version: 3.26.0(@hookform/resolvers@5.2.2(react-hook-form@7.65.0(react@19.2.3)))(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(lucide-react@0.548.0(react@19.2.3))(react-dom@19.2.3(react@19.2.3))(react-hook-form@7.65.0(react@19.2.3))(react@19.2.3)(recharts@3.6.0(@types/react@19.2.7)(react-dom@19.2.3(react@19.2.3))(react-is@16.13.1)(react@19.2.3)(redux@5.0.1))(tailwindcss@4.1.16)(vite@7.3.0(@types/node@24.9.2)(jiti@2.6.1)(lightningcss@1.30.2)(yaml@2.8.2))
'@next/third-parties':
specifier: 16.0.1
version: 16.0.1(next@16.0.10(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(react@19.2.3)
@@ -169,8 +169,8 @@ packages:
'@arcadeai/arcadejs@1.15.0':
resolution: {integrity: sha512-2nqc2QZQNKggIWNgjM7CN2HC3VB7Kd9gFO1wAyUXp/oPehGnM3u+u6PGc9rHgIkIQvr2TpEzCa/x4PrVrsyjpQ==}
- '@arcadeai/design-system@3.25.1':
- resolution: {integrity: sha512-iTwJyJNkuPOcD6lNMqAODWn4a8BFQK585sRthvRyWF9I0U5WpGr0d7DjCsiIgWwHeE2ToF8TDuqht0Z82MUYXA==}
+ '@arcadeai/design-system@3.26.0':
+ resolution: {integrity: sha512-Bs5+UnPAKFHtT5nWcl3hR52gc6OhMFDQAEfENeIEsjcMfmkK1P1ig594e90iF7S0w+pRTisX7lULvLXcxz2Dqw==}
engines: {node: '>=20.17.0'}
peerDependencies:
'@hookform/resolvers': ^5.2.1
@@ -4722,7 +4722,7 @@ snapshots:
transitivePeerDependencies:
- encoding
- '@arcadeai/design-system@3.25.1(@hookform/resolvers@5.2.2(react-hook-form@7.65.0(react@19.2.3)))(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(lucide-react@0.548.0(react@19.2.3))(react-dom@19.2.3(react@19.2.3))(react-hook-form@7.65.0(react@19.2.3))(react@19.2.3)(recharts@3.6.0(@types/react@19.2.7)(react-dom@19.2.3(react@19.2.3))(react-is@16.13.1)(react@19.2.3)(redux@5.0.1))(tailwindcss@4.1.16)(vite@7.3.0(@types/node@24.9.2)(jiti@2.6.1)(lightningcss@1.30.2)(yaml@2.8.2))':
+ '@arcadeai/design-system@3.26.0(@hookform/resolvers@5.2.2(react-hook-form@7.65.0(react@19.2.3)))(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(lucide-react@0.548.0(react@19.2.3))(react-dom@19.2.3(react@19.2.3))(react-hook-form@7.65.0(react@19.2.3))(react@19.2.3)(recharts@3.6.0(@types/react@19.2.7)(react-dom@19.2.3(react@19.2.3))(react-is@16.13.1)(react@19.2.3)(redux@5.0.1))(tailwindcss@4.1.16)(vite@7.3.0(@types/node@24.9.2)(jiti@2.6.1)(lightningcss@1.30.2)(yaml@2.8.2))':
dependencies:
'@arcadeai/arcadejs': 1.15.0
'@hookform/resolvers': 5.2.2(react-hook-form@7.65.0(react@19.2.3))
diff --git a/public/examples/integrations/mcp-servers/luma_api/add_event_guests_example_call_tool.js b/public/examples/integrations/mcp-servers/luma_api/add_event_guests_example_call_tool.js
new file mode 100644
index 000000000..f4741451e
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/luma_api/add_event_guests_example_call_tool.js
@@ -0,0 +1,32 @@
+import { Arcade } from "@arcadeai/arcadejs";
+
+const client = new Arcade(); // Automatically finds the `ARCADE_API_KEY` env variable
+
+const USER_ID = "{arcade_user_id}";
+const TOOL_NAME = "LumaApi.AddEventGuests";
+
+// Start the authorization process
+const authResponse = await client.tools.authorize({
+ tool_name: TOOL_NAME,
+ user_id: USER_ID,
+});
+
+if (authResponse.status !== "completed") {
+ console.log(`Click this link to authorize: ${authResponse.url}`);
+}
+
+// Wait for the authorization to complete
+await client.auth.waitForCompletion(authResponse);
+
+const toolInput = {
+ "mode": "execute",
+ "request_body": "{\"event_id\":\"12345\",\"guests\":[{\"name\":\"John Doe\",\"ticket_type\":\"VIP\"},{\"name\":\"Jane Smith\"}]}"
+};
+
+const response = await client.tools.execute({
+ tool_name: TOOL_NAME,
+ input: toolInput,
+ user_id: USER_ID,
+});
+
+console.log(JSON.stringify(response.output.value, null, 2));
diff --git a/public/examples/integrations/mcp-servers/luma_api/add_event_guests_example_call_tool.py b/public/examples/integrations/mcp-servers/luma_api/add_event_guests_example_call_tool.py
new file mode 100644
index 000000000..cf484facf
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/luma_api/add_event_guests_example_call_tool.py
@@ -0,0 +1,31 @@
+import json
+from arcadepy import Arcade
+
+client = Arcade() # Automatically finds the `ARCADE_API_KEY` env variable
+
+USER_ID = "{arcade_user_id}"
+TOOL_NAME = "LumaApi.AddEventGuests"
+
+auth_response = client.tools.authorize(
+ tool_name=TOOL_NAME,
+ user_id=USER_ID,
+)
+
+if auth_response.status != "completed":
+ print(f"Click this link to authorize: {auth_response.url}")
+
+# Wait for the authorization to complete
+client.auth.wait_for_completion(auth_response)
+
+tool_input = {
+ 'mode': 'execute',
+ 'request_body': '{"event_id":"12345","guests":[{"name":"John '
+ 'Doe","ticket_type":"VIP"},{"name":"Jane Smith"}]}'
+}
+
+response = client.tools.execute(
+ tool_name=TOOL_NAME,
+ input=tool_input,
+ user_id=USER_ID,
+)
+print(json.dumps(response.output.value, indent=2))
diff --git a/public/examples/integrations/mcp-servers/luma_api/add_event_host_example_call_tool.js b/public/examples/integrations/mcp-servers/luma_api/add_event_host_example_call_tool.js
new file mode 100644
index 000000000..3e07a462c
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/luma_api/add_event_host_example_call_tool.js
@@ -0,0 +1,32 @@
+import { Arcade } from "@arcadeai/arcadejs";
+
+const client = new Arcade(); // Automatically finds the `ARCADE_API_KEY` env variable
+
+const USER_ID = "{arcade_user_id}";
+const TOOL_NAME = "LumaApi.AddEventHost";
+
+// Start the authorization process
+const authResponse = await client.tools.authorize({
+ tool_name: TOOL_NAME,
+ user_id: USER_ID,
+});
+
+if (authResponse.status !== "completed") {
+ console.log(`Click this link to authorize: ${authResponse.url}`);
+}
+
+// Wait for the authorization to complete
+await client.auth.waitForCompletion(authResponse);
+
+const toolInput = {
+ "mode": "execute",
+ "request_body": "{\"event_id\":\"12345\",\"host_name\":\"John Doe\",\"host_email\":\"john.doe@example.com\"}"
+};
+
+const response = await client.tools.execute({
+ tool_name: TOOL_NAME,
+ input: toolInput,
+ user_id: USER_ID,
+});
+
+console.log(JSON.stringify(response.output.value, null, 2));
diff --git a/public/examples/integrations/mcp-servers/luma_api/add_event_host_example_call_tool.py b/public/examples/integrations/mcp-servers/luma_api/add_event_host_example_call_tool.py
new file mode 100644
index 000000000..61ab9fdc0
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/luma_api/add_event_host_example_call_tool.py
@@ -0,0 +1,31 @@
+import json
+from arcadepy import Arcade
+
+client = Arcade() # Automatically finds the `ARCADE_API_KEY` env variable
+
+USER_ID = "{arcade_user_id}"
+TOOL_NAME = "LumaApi.AddEventHost"
+
+auth_response = client.tools.authorize(
+ tool_name=TOOL_NAME,
+ user_id=USER_ID,
+)
+
+if auth_response.status != "completed":
+ print(f"Click this link to authorize: {auth_response.url}")
+
+# Wait for the authorization to complete
+client.auth.wait_for_completion(auth_response)
+
+tool_input = {
+ 'mode': 'execute',
+ 'request_body': '{"event_id":"12345","host_name":"John '
+ 'Doe","host_email":"john.doe@example.com"}'
+}
+
+response = client.tools.execute(
+ tool_name=TOOL_NAME,
+ input=tool_input,
+ user_id=USER_ID,
+)
+print(json.dumps(response.output.value, indent=2))
diff --git a/public/examples/integrations/mcp-servers/luma_api/add_event_to_luma_calendar_example_call_tool.js b/public/examples/integrations/mcp-servers/luma_api/add_event_to_luma_calendar_example_call_tool.js
new file mode 100644
index 000000000..f632538d1
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/luma_api/add_event_to_luma_calendar_example_call_tool.js
@@ -0,0 +1,32 @@
+import { Arcade } from "@arcadeai/arcadejs";
+
+const client = new Arcade(); // Automatically finds the `ARCADE_API_KEY` env variable
+
+const USER_ID = "{arcade_user_id}";
+const TOOL_NAME = "LumaApi.AddEventToLumaCalendar";
+
+// Start the authorization process
+const authResponse = await client.tools.authorize({
+ tool_name: TOOL_NAME,
+ user_id: USER_ID,
+});
+
+if (authResponse.status !== "completed") {
+ console.log(`Click this link to authorize: ${authResponse.url}`);
+}
+
+// Wait for the authorization to complete
+await client.auth.waitForCompletion(authResponse);
+
+const toolInput = {
+ "mode": "execute",
+ "request_body": "{\"event_id\":\"12345\",\"calendar_id\":\"67890\"}"
+};
+
+const response = await client.tools.execute({
+ tool_name: TOOL_NAME,
+ input: toolInput,
+ user_id: USER_ID,
+});
+
+console.log(JSON.stringify(response.output.value, null, 2));
diff --git a/public/examples/integrations/mcp-servers/luma_api/add_event_to_luma_calendar_example_call_tool.py b/public/examples/integrations/mcp-servers/luma_api/add_event_to_luma_calendar_example_call_tool.py
new file mode 100644
index 000000000..0e90f9ce6
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/luma_api/add_event_to_luma_calendar_example_call_tool.py
@@ -0,0 +1,29 @@
+import json
+from arcadepy import Arcade
+
+client = Arcade() # Automatically finds the `ARCADE_API_KEY` env variable
+
+USER_ID = "{arcade_user_id}"
+TOOL_NAME = "LumaApi.AddEventToLumaCalendar"
+
+auth_response = client.tools.authorize(
+ tool_name=TOOL_NAME,
+ user_id=USER_ID,
+)
+
+if auth_response.status != "completed":
+ print(f"Click this link to authorize: {auth_response.url}")
+
+# Wait for the authorization to complete
+client.auth.wait_for_completion(auth_response)
+
+tool_input = {
+ 'mode': 'execute', 'request_body': '{"event_id":"12345","calendar_id":"67890"}'
+}
+
+response = client.tools.execute(
+ tool_name=TOOL_NAME,
+ input=tool_input,
+ user_id=USER_ID,
+)
+print(json.dumps(response.output.value, indent=2))
diff --git a/public/examples/integrations/mcp-servers/luma_api/add_user_to_membership_tier_example_call_tool.js b/public/examples/integrations/mcp-servers/luma_api/add_user_to_membership_tier_example_call_tool.js
new file mode 100644
index 000000000..5a5be577e
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/luma_api/add_user_to_membership_tier_example_call_tool.js
@@ -0,0 +1,32 @@
+import { Arcade } from "@arcadeai/arcadejs";
+
+const client = new Arcade(); // Automatically finds the `ARCADE_API_KEY` env variable
+
+const USER_ID = "{arcade_user_id}";
+const TOOL_NAME = "LumaApi.AddUserToMembershipTier";
+
+// Start the authorization process
+const authResponse = await client.tools.authorize({
+ tool_name: TOOL_NAME,
+ user_id: USER_ID,
+});
+
+if (authResponse.status !== "completed") {
+ console.log(`Click this link to authorize: ${authResponse.url}`);
+}
+
+// Wait for the authorization to complete
+await client.auth.waitForCompletion(authResponse);
+
+const toolInput = {
+ "mode": "execute",
+ "request_body": "{\"user_id\":\"12345\",\"membership_tier\":\"free\"}"
+};
+
+const response = await client.tools.execute({
+ tool_name: TOOL_NAME,
+ input: toolInput,
+ user_id: USER_ID,
+});
+
+console.log(JSON.stringify(response.output.value, null, 2));
diff --git a/public/examples/integrations/mcp-servers/luma_api/add_user_to_membership_tier_example_call_tool.py b/public/examples/integrations/mcp-servers/luma_api/add_user_to_membership_tier_example_call_tool.py
new file mode 100644
index 000000000..63ddbb60f
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/luma_api/add_user_to_membership_tier_example_call_tool.py
@@ -0,0 +1,29 @@
+import json
+from arcadepy import Arcade
+
+client = Arcade() # Automatically finds the `ARCADE_API_KEY` env variable
+
+USER_ID = "{arcade_user_id}"
+TOOL_NAME = "LumaApi.AddUserToMembershipTier"
+
+auth_response = client.tools.authorize(
+ tool_name=TOOL_NAME,
+ user_id=USER_ID,
+)
+
+if auth_response.status != "completed":
+ print(f"Click this link to authorize: {auth_response.url}")
+
+# Wait for the authorization to complete
+client.auth.wait_for_completion(auth_response)
+
+tool_input = {
+ 'mode': 'execute', 'request_body': '{"user_id":"12345","membership_tier":"free"}'
+}
+
+response = client.tools.execute(
+ tool_name=TOOL_NAME,
+ input=tool_input,
+ user_id=USER_ID,
+)
+print(json.dumps(response.output.value, indent=2))
diff --git a/public/examples/integrations/mcp-servers/luma_api/apply_tag_to_calendar_members_example_call_tool.js b/public/examples/integrations/mcp-servers/luma_api/apply_tag_to_calendar_members_example_call_tool.js
new file mode 100644
index 000000000..00dceb020
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/luma_api/apply_tag_to_calendar_members_example_call_tool.js
@@ -0,0 +1,35 @@
+import { Arcade } from "@arcadeai/arcadejs";
+
+const client = new Arcade(); // Automatically finds the `ARCADE_API_KEY` env variable
+
+const USER_ID = "{arcade_user_id}";
+const TOOL_NAME = "LumaApi.ApplyTagToCalendarMembers";
+
+// Start the authorization process
+const authResponse = await client.tools.authorize({
+ tool_name: TOOL_NAME,
+ user_id: USER_ID,
+});
+
+if (authResponse.status !== "completed") {
+ console.log(`Click this link to authorize: ${authResponse.url}`);
+}
+
+// Wait for the authorization to complete
+await client.auth.waitForCompletion(authResponse);
+
+const toolInput = {
+ "tag_identifier": "tag-456",
+ "email_addresses": [
+ "user1@example.com",
+ "user2@example.com"
+ ]
+};
+
+const response = await client.tools.execute({
+ tool_name: TOOL_NAME,
+ input: toolInput,
+ user_id: USER_ID,
+});
+
+console.log(JSON.stringify(response.output.value, null, 2));
diff --git a/public/examples/integrations/mcp-servers/luma_api/apply_tag_to_calendar_members_example_call_tool.py b/public/examples/integrations/mcp-servers/luma_api/apply_tag_to_calendar_members_example_call_tool.py
new file mode 100644
index 000000000..bab182166
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/luma_api/apply_tag_to_calendar_members_example_call_tool.py
@@ -0,0 +1,29 @@
+import json
+from arcadepy import Arcade
+
+client = Arcade() # Automatically finds the `ARCADE_API_KEY` env variable
+
+USER_ID = "{arcade_user_id}"
+TOOL_NAME = "LumaApi.ApplyTagToCalendarMembers"
+
+auth_response = client.tools.authorize(
+ tool_name=TOOL_NAME,
+ user_id=USER_ID,
+)
+
+if auth_response.status != "completed":
+ print(f"Click this link to authorize: {auth_response.url}")
+
+# Wait for the authorization to complete
+client.auth.wait_for_completion(auth_response)
+
+tool_input = {
+ 'tag_identifier': 'tag-456', 'email_addresses': ['user1@example.com', 'user2@example.com']
+}
+
+response = client.tools.execute(
+ tool_name=TOOL_NAME,
+ input=tool_input,
+ user_id=USER_ID,
+)
+print(json.dumps(response.output.value, indent=2))
diff --git a/public/examples/integrations/mcp-servers/luma_api/check_event_existence_example_call_tool.js b/public/examples/integrations/mcp-servers/luma_api/check_event_existence_example_call_tool.js
new file mode 100644
index 000000000..94f98383f
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/luma_api/check_event_existence_example_call_tool.js
@@ -0,0 +1,33 @@
+import { Arcade } from "@arcadeai/arcadejs";
+
+const client = new Arcade(); // Automatically finds the `ARCADE_API_KEY` env variable
+
+const USER_ID = "{arcade_user_id}";
+const TOOL_NAME = "LumaApi.CheckEventExistence";
+
+// Start the authorization process
+const authResponse = await client.tools.authorize({
+ tool_name: TOOL_NAME,
+ user_id: USER_ID,
+});
+
+if (authResponse.status !== "completed") {
+ console.log(`Click this link to authorize: ${authResponse.url}`);
+}
+
+// Wait for the authorization to complete
+await client.auth.waitForCompletion(authResponse);
+
+const toolInput = {
+ "calendar_platform_type": "luma",
+ "event_details_url": "https://example.com/event/123",
+ "event_identifier": "event_123"
+};
+
+const response = await client.tools.execute({
+ tool_name: TOOL_NAME,
+ input: toolInput,
+ user_id: USER_ID,
+});
+
+console.log(JSON.stringify(response.output.value, null, 2));
diff --git a/public/examples/integrations/mcp-servers/luma_api/check_event_existence_example_call_tool.py b/public/examples/integrations/mcp-servers/luma_api/check_event_existence_example_call_tool.py
new file mode 100644
index 000000000..486f96d5c
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/luma_api/check_event_existence_example_call_tool.py
@@ -0,0 +1,31 @@
+import json
+from arcadepy import Arcade
+
+client = Arcade() # Automatically finds the `ARCADE_API_KEY` env variable
+
+USER_ID = "{arcade_user_id}"
+TOOL_NAME = "LumaApi.CheckEventExistence"
+
+auth_response = client.tools.authorize(
+ tool_name=TOOL_NAME,
+ user_id=USER_ID,
+)
+
+if auth_response.status != "completed":
+ print(f"Click this link to authorize: {auth_response.url}")
+
+# Wait for the authorization to complete
+client.auth.wait_for_completion(auth_response)
+
+tool_input = {
+ 'calendar_platform_type': 'luma',
+ 'event_details_url': 'https://example.com/event/123',
+ 'event_identifier': 'event_123'
+}
+
+response = client.tools.execute(
+ tool_name=TOOL_NAME,
+ input=tool_input,
+ user_id=USER_ID,
+)
+print(json.dumps(response.output.value, indent=2))
diff --git a/public/examples/integrations/mcp-servers/luma_api/create_event_coupon_example_call_tool.js b/public/examples/integrations/mcp-servers/luma_api/create_event_coupon_example_call_tool.js
new file mode 100644
index 000000000..a5e558e5a
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/luma_api/create_event_coupon_example_call_tool.js
@@ -0,0 +1,32 @@
+import { Arcade } from "@arcadeai/arcadejs";
+
+const client = new Arcade(); // Automatically finds the `ARCADE_API_KEY` env variable
+
+const USER_ID = "{arcade_user_id}";
+const TOOL_NAME = "LumaApi.CreateEventCoupon";
+
+// Start the authorization process
+const authResponse = await client.tools.authorize({
+ tool_name: TOOL_NAME,
+ user_id: USER_ID,
+});
+
+if (authResponse.status !== "completed") {
+ console.log(`Click this link to authorize: ${authResponse.url}`);
+}
+
+// Wait for the authorization to complete
+await client.auth.waitForCompletion(authResponse);
+
+const toolInput = {
+ "mode": "execute",
+ "request_body": "{\"event_id\":\"12345\",\"coupon_code\":\"SAVE20\",\"discount\":\"20%\",\"valid_until\":\"2023-12-31\"}"
+};
+
+const response = await client.tools.execute({
+ tool_name: TOOL_NAME,
+ input: toolInput,
+ user_id: USER_ID,
+});
+
+console.log(JSON.stringify(response.output.value, null, 2));
diff --git a/public/examples/integrations/mcp-servers/luma_api/create_event_coupon_example_call_tool.py b/public/examples/integrations/mcp-servers/luma_api/create_event_coupon_example_call_tool.py
new file mode 100644
index 000000000..a94961a2a
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/luma_api/create_event_coupon_example_call_tool.py
@@ -0,0 +1,30 @@
+import json
+from arcadepy import Arcade
+
+client = Arcade() # Automatically finds the `ARCADE_API_KEY` env variable
+
+USER_ID = "{arcade_user_id}"
+TOOL_NAME = "LumaApi.CreateEventCoupon"
+
+auth_response = client.tools.authorize(
+ tool_name=TOOL_NAME,
+ user_id=USER_ID,
+)
+
+if auth_response.status != "completed":
+ print(f"Click this link to authorize: {auth_response.url}")
+
+# Wait for the authorization to complete
+client.auth.wait_for_completion(auth_response)
+
+tool_input = {
+ 'mode': 'execute',
+ 'request_body': '{"event_id":"12345","coupon_code":"SAVE20","discount":"20%","valid_until":"2023-12-31"}'
+}
+
+response = client.tools.execute(
+ tool_name=TOOL_NAME,
+ input=tool_input,
+ user_id=USER_ID,
+)
+print(json.dumps(response.output.value, indent=2))
diff --git a/public/examples/integrations/mcp-servers/luma_api/create_event_example_call_tool.js b/public/examples/integrations/mcp-servers/luma_api/create_event_example_call_tool.js
new file mode 100644
index 000000000..e7ae09e1c
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/luma_api/create_event_example_call_tool.js
@@ -0,0 +1,32 @@
+import { Arcade } from "@arcadeai/arcadejs";
+
+const client = new Arcade(); // Automatically finds the `ARCADE_API_KEY` env variable
+
+const USER_ID = "{arcade_user_id}";
+const TOOL_NAME = "LumaApi.CreateEvent";
+
+// Start the authorization process
+const authResponse = await client.tools.authorize({
+ tool_name: TOOL_NAME,
+ user_id: USER_ID,
+});
+
+if (authResponse.status !== "completed") {
+ console.log(`Click this link to authorize: ${authResponse.url}`);
+}
+
+// Wait for the authorization to complete
+await client.auth.waitForCompletion(authResponse);
+
+const toolInput = {
+ "mode": "execute",
+ "request_body": "{\"event_name\":\"Team Meeting\",\"date\":\"2023-10-15\",\"time\":\"10:00 AM\",\"location\":\"Conference Room A\"}"
+};
+
+const response = await client.tools.execute({
+ tool_name: TOOL_NAME,
+ input: toolInput,
+ user_id: USER_ID,
+});
+
+console.log(JSON.stringify(response.output.value, null, 2));
diff --git a/public/examples/integrations/mcp-servers/luma_api/create_event_example_call_tool.py b/public/examples/integrations/mcp-servers/luma_api/create_event_example_call_tool.py
new file mode 100644
index 000000000..d32cbc2f1
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/luma_api/create_event_example_call_tool.py
@@ -0,0 +1,31 @@
+import json
+from arcadepy import Arcade
+
+client = Arcade() # Automatically finds the `ARCADE_API_KEY` env variable
+
+USER_ID = "{arcade_user_id}"
+TOOL_NAME = "LumaApi.CreateEvent"
+
+auth_response = client.tools.authorize(
+ tool_name=TOOL_NAME,
+ user_id=USER_ID,
+)
+
+if auth_response.status != "completed":
+ print(f"Click this link to authorize: {auth_response.url}")
+
+# Wait for the authorization to complete
+client.auth.wait_for_completion(auth_response)
+
+tool_input = {
+ 'mode': 'execute',
+ 'request_body': '{"event_name":"Team Meeting","date":"2023-10-15","time":"10:00 '
+ 'AM","location":"Conference Room A"}'
+}
+
+response = client.tools.execute(
+ tool_name=TOOL_NAME,
+ input=tool_input,
+ user_id=USER_ID,
+)
+print(json.dumps(response.output.value, indent=2))
diff --git a/public/examples/integrations/mcp-servers/luma_api/create_event_ticket_type_example_call_tool.js b/public/examples/integrations/mcp-servers/luma_api/create_event_ticket_type_example_call_tool.js
new file mode 100644
index 000000000..ad405ba02
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/luma_api/create_event_ticket_type_example_call_tool.js
@@ -0,0 +1,32 @@
+import { Arcade } from "@arcadeai/arcadejs";
+
+const client = new Arcade(); // Automatically finds the `ARCADE_API_KEY` env variable
+
+const USER_ID = "{arcade_user_id}";
+const TOOL_NAME = "LumaApi.CreateEventTicketType";
+
+// Start the authorization process
+const authResponse = await client.tools.authorize({
+ tool_name: TOOL_NAME,
+ user_id: USER_ID,
+});
+
+if (authResponse.status !== "completed") {
+ console.log(`Click this link to authorize: ${authResponse.url}`);
+}
+
+// Wait for the authorization to complete
+await client.auth.waitForCompletion(authResponse);
+
+const toolInput = {
+ "mode": "execute",
+ "request_body": "{\"event_id\":\"12345\",\"ticket_type\":\"VIP\",\"price\":100,\"quantity\":50}"
+};
+
+const response = await client.tools.execute({
+ tool_name: TOOL_NAME,
+ input: toolInput,
+ user_id: USER_ID,
+});
+
+console.log(JSON.stringify(response.output.value, null, 2));
diff --git a/public/examples/integrations/mcp-servers/luma_api/create_event_ticket_type_example_call_tool.py b/public/examples/integrations/mcp-servers/luma_api/create_event_ticket_type_example_call_tool.py
new file mode 100644
index 000000000..6fe6bcb74
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/luma_api/create_event_ticket_type_example_call_tool.py
@@ -0,0 +1,30 @@
+import json
+from arcadepy import Arcade
+
+client = Arcade() # Automatically finds the `ARCADE_API_KEY` env variable
+
+USER_ID = "{arcade_user_id}"
+TOOL_NAME = "LumaApi.CreateEventTicketType"
+
+auth_response = client.tools.authorize(
+ tool_name=TOOL_NAME,
+ user_id=USER_ID,
+)
+
+if auth_response.status != "completed":
+ print(f"Click this link to authorize: {auth_response.url}")
+
+# Wait for the authorization to complete
+client.auth.wait_for_completion(auth_response)
+
+tool_input = {
+ 'mode': 'execute',
+ 'request_body': '{"event_id":"12345","ticket_type":"VIP","price":100,"quantity":50}'
+}
+
+response = client.tools.execute(
+ tool_name=TOOL_NAME,
+ input=tool_input,
+ user_id=USER_ID,
+)
+print(json.dumps(response.output.value, indent=2))
diff --git a/public/examples/integrations/mcp-servers/luma_api/create_person_tag_example_call_tool.js b/public/examples/integrations/mcp-servers/luma_api/create_person_tag_example_call_tool.js
new file mode 100644
index 000000000..a23adf2ad
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/luma_api/create_person_tag_example_call_tool.js
@@ -0,0 +1,32 @@
+import { Arcade } from "@arcadeai/arcadejs";
+
+const client = new Arcade(); // Automatically finds the `ARCADE_API_KEY` env variable
+
+const USER_ID = "{arcade_user_id}";
+const TOOL_NAME = "LumaApi.CreatePersonTag";
+
+// Start the authorization process
+const authResponse = await client.tools.authorize({
+ tool_name: TOOL_NAME,
+ user_id: USER_ID,
+});
+
+if (authResponse.status !== "completed") {
+ console.log(`Click this link to authorize: ${authResponse.url}`);
+}
+
+// Wait for the authorization to complete
+await client.auth.waitForCompletion(authResponse);
+
+const toolInput = {
+ "mode": "execute",
+ "request_body": "{\"name\":\"John Doe\",\"tag\":\"Friend\"}"
+};
+
+const response = await client.tools.execute({
+ tool_name: TOOL_NAME,
+ input: toolInput,
+ user_id: USER_ID,
+});
+
+console.log(JSON.stringify(response.output.value, null, 2));
diff --git a/public/examples/integrations/mcp-servers/luma_api/create_person_tag_example_call_tool.py b/public/examples/integrations/mcp-servers/luma_api/create_person_tag_example_call_tool.py
new file mode 100644
index 000000000..b832c987e
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/luma_api/create_person_tag_example_call_tool.py
@@ -0,0 +1,29 @@
+import json
+from arcadepy import Arcade
+
+client = Arcade() # Automatically finds the `ARCADE_API_KEY` env variable
+
+USER_ID = "{arcade_user_id}"
+TOOL_NAME = "LumaApi.CreatePersonTag"
+
+auth_response = client.tools.authorize(
+ tool_name=TOOL_NAME,
+ user_id=USER_ID,
+)
+
+if auth_response.status != "completed":
+ print(f"Click this link to authorize: {auth_response.url}")
+
+# Wait for the authorization to complete
+client.auth.wait_for_completion(auth_response)
+
+tool_input = {
+ 'mode': 'execute', 'request_body': '{"name":"John Doe","tag":"Friend"}'
+}
+
+response = client.tools.execute(
+ tool_name=TOOL_NAME,
+ input=tool_input,
+ user_id=USER_ID,
+)
+print(json.dumps(response.output.value, indent=2))
diff --git a/public/examples/integrations/mcp-servers/luma_api/delete_person_tag_example_call_tool.js b/public/examples/integrations/mcp-servers/luma_api/delete_person_tag_example_call_tool.js
new file mode 100644
index 000000000..c463d79a9
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/luma_api/delete_person_tag_example_call_tool.js
@@ -0,0 +1,31 @@
+import { Arcade } from "@arcadeai/arcadejs";
+
+const client = new Arcade(); // Automatically finds the `ARCADE_API_KEY` env variable
+
+const USER_ID = "{arcade_user_id}";
+const TOOL_NAME = "LumaApi.DeletePersonTag";
+
+// Start the authorization process
+const authResponse = await client.tools.authorize({
+ tool_name: TOOL_NAME,
+ user_id: USER_ID,
+});
+
+if (authResponse.status !== "completed") {
+ console.log(`Click this link to authorize: ${authResponse.url}`);
+}
+
+// Wait for the authorization to complete
+await client.auth.waitForCompletion(authResponse);
+
+const toolInput = {
+ "tag_identifier": "12345"
+};
+
+const response = await client.tools.execute({
+ tool_name: TOOL_NAME,
+ input: toolInput,
+ user_id: USER_ID,
+});
+
+console.log(JSON.stringify(response.output.value, null, 2));
diff --git a/public/examples/integrations/mcp-servers/luma_api/delete_person_tag_example_call_tool.py b/public/examples/integrations/mcp-servers/luma_api/delete_person_tag_example_call_tool.py
new file mode 100644
index 000000000..e9aa0f56e
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/luma_api/delete_person_tag_example_call_tool.py
@@ -0,0 +1,29 @@
+import json
+from arcadepy import Arcade
+
+client = Arcade() # Automatically finds the `ARCADE_API_KEY` env variable
+
+USER_ID = "{arcade_user_id}"
+TOOL_NAME = "LumaApi.DeletePersonTag"
+
+auth_response = client.tools.authorize(
+ tool_name=TOOL_NAME,
+ user_id=USER_ID,
+)
+
+if auth_response.status != "completed":
+ print(f"Click this link to authorize: {auth_response.url}")
+
+# Wait for the authorization to complete
+client.auth.wait_for_completion(auth_response)
+
+tool_input = {
+ 'tag_identifier': '12345'
+}
+
+response = client.tools.execute(
+ tool_name=TOOL_NAME,
+ input=tool_input,
+ user_id=USER_ID,
+)
+print(json.dumps(response.output.value, indent=2))
diff --git a/public/examples/integrations/mcp-servers/luma_api/generate_event_coupon_example_call_tool.js b/public/examples/integrations/mcp-servers/luma_api/generate_event_coupon_example_call_tool.js
new file mode 100644
index 000000000..69c8ae2c5
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/luma_api/generate_event_coupon_example_call_tool.js
@@ -0,0 +1,32 @@
+import { Arcade } from "@arcadeai/arcadejs";
+
+const client = new Arcade(); // Automatically finds the `ARCADE_API_KEY` env variable
+
+const USER_ID = "{arcade_user_id}";
+const TOOL_NAME = "LumaApi.GenerateEventCoupon";
+
+// Start the authorization process
+const authResponse = await client.tools.authorize({
+ tool_name: TOOL_NAME,
+ user_id: USER_ID,
+});
+
+if (authResponse.status !== "completed") {
+ console.log(`Click this link to authorize: ${authResponse.url}`);
+}
+
+// Wait for the authorization to complete
+await client.auth.waitForCompletion(authResponse);
+
+const toolInput = {
+ "mode": "execute",
+ "request_body": "{\"event_id\":\"12345\",\"coupon_code\":\"SAVE20\",\"discount\":\"20%\"}"
+};
+
+const response = await client.tools.execute({
+ tool_name: TOOL_NAME,
+ input: toolInput,
+ user_id: USER_ID,
+});
+
+console.log(JSON.stringify(response.output.value, null, 2));
diff --git a/public/examples/integrations/mcp-servers/luma_api/generate_event_coupon_example_call_tool.py b/public/examples/integrations/mcp-servers/luma_api/generate_event_coupon_example_call_tool.py
new file mode 100644
index 000000000..44da0cfee
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/luma_api/generate_event_coupon_example_call_tool.py
@@ -0,0 +1,29 @@
+import json
+from arcadepy import Arcade
+
+client = Arcade() # Automatically finds the `ARCADE_API_KEY` env variable
+
+USER_ID = "{arcade_user_id}"
+TOOL_NAME = "LumaApi.GenerateEventCoupon"
+
+auth_response = client.tools.authorize(
+ tool_name=TOOL_NAME,
+ user_id=USER_ID,
+)
+
+if auth_response.status != "completed":
+ print(f"Click this link to authorize: {auth_response.url}")
+
+# Wait for the authorization to complete
+client.auth.wait_for_completion(auth_response)
+
+tool_input = {
+ 'mode': 'execute', 'request_body': '{"event_id":"12345","coupon_code":"SAVE20","discount":"20%"}'
+}
+
+response = client.tools.execute(
+ tool_name=TOOL_NAME,
+ input=tool_input,
+ user_id=USER_ID,
+)
+print(json.dumps(response.output.value, indent=2))
diff --git a/public/examples/integrations/mcp-servers/luma_api/generate_upload_url_example_call_tool.js b/public/examples/integrations/mcp-servers/luma_api/generate_upload_url_example_call_tool.js
new file mode 100644
index 000000000..efac9b03d
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/luma_api/generate_upload_url_example_call_tool.js
@@ -0,0 +1,32 @@
+import { Arcade } from "@arcadeai/arcadejs";
+
+const client = new Arcade(); // Automatically finds the `ARCADE_API_KEY` env variable
+
+const USER_ID = "{arcade_user_id}";
+const TOOL_NAME = "LumaApi.GenerateUploadUrl";
+
+// Start the authorization process
+const authResponse = await client.tools.authorize({
+ tool_name: TOOL_NAME,
+ user_id: USER_ID,
+});
+
+if (authResponse.status !== "completed") {
+ console.log(`Click this link to authorize: ${authResponse.url}`);
+}
+
+// Wait for the authorization to complete
+await client.auth.waitForCompletion(authResponse);
+
+const toolInput = {
+ "mode": "execute",
+ "request_body": "{\"imageType\":\"jpeg\",\"size\":\"1024x768\"}"
+};
+
+const response = await client.tools.execute({
+ tool_name: TOOL_NAME,
+ input: toolInput,
+ user_id: USER_ID,
+});
+
+console.log(JSON.stringify(response.output.value, null, 2));
diff --git a/public/examples/integrations/mcp-servers/luma_api/generate_upload_url_example_call_tool.py b/public/examples/integrations/mcp-servers/luma_api/generate_upload_url_example_call_tool.py
new file mode 100644
index 000000000..843193ca2
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/luma_api/generate_upload_url_example_call_tool.py
@@ -0,0 +1,29 @@
+import json
+from arcadepy import Arcade
+
+client = Arcade() # Automatically finds the `ARCADE_API_KEY` env variable
+
+USER_ID = "{arcade_user_id}"
+TOOL_NAME = "LumaApi.GenerateUploadUrl"
+
+auth_response = client.tools.authorize(
+ tool_name=TOOL_NAME,
+ user_id=USER_ID,
+)
+
+if auth_response.status != "completed":
+ print(f"Click this link to authorize: {auth_response.url}")
+
+# Wait for the authorization to complete
+client.auth.wait_for_completion(auth_response)
+
+tool_input = {
+ 'mode': 'execute', 'request_body': '{"imageType":"jpeg","size":"1024x768"}'
+}
+
+response = client.tools.execute(
+ tool_name=TOOL_NAME,
+ input=tool_input,
+ user_id=USER_ID,
+)
+print(json.dumps(response.output.value, indent=2))
diff --git a/public/examples/integrations/mcp-servers/luma_api/get_event_admin_info_example_call_tool.js b/public/examples/integrations/mcp-servers/luma_api/get_event_admin_info_example_call_tool.js
new file mode 100644
index 000000000..dac355b93
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/luma_api/get_event_admin_info_example_call_tool.js
@@ -0,0 +1,31 @@
+import { Arcade } from "@arcadeai/arcadejs";
+
+const client = new Arcade(); // Automatically finds the `ARCADE_API_KEY` env variable
+
+const USER_ID = "{arcade_user_id}";
+const TOOL_NAME = "LumaApi.GetEventAdminInfo";
+
+// Start the authorization process
+const authResponse = await client.tools.authorize({
+ tool_name: TOOL_NAME,
+ user_id: USER_ID,
+});
+
+if (authResponse.status !== "completed") {
+ console.log(`Click this link to authorize: ${authResponse.url}`);
+}
+
+// Wait for the authorization to complete
+await client.auth.waitForCompletion(authResponse);
+
+const toolInput = {
+ "event_api_id": "evt-12345"
+};
+
+const response = await client.tools.execute({
+ tool_name: TOOL_NAME,
+ input: toolInput,
+ user_id: USER_ID,
+});
+
+console.log(JSON.stringify(response.output.value, null, 2));
diff --git a/public/examples/integrations/mcp-servers/luma_api/get_event_admin_info_example_call_tool.py b/public/examples/integrations/mcp-servers/luma_api/get_event_admin_info_example_call_tool.py
new file mode 100644
index 000000000..065a82e3b
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/luma_api/get_event_admin_info_example_call_tool.py
@@ -0,0 +1,29 @@
+import json
+from arcadepy import Arcade
+
+client = Arcade() # Automatically finds the `ARCADE_API_KEY` env variable
+
+USER_ID = "{arcade_user_id}"
+TOOL_NAME = "LumaApi.GetEventAdminInfo"
+
+auth_response = client.tools.authorize(
+ tool_name=TOOL_NAME,
+ user_id=USER_ID,
+)
+
+if auth_response.status != "completed":
+ print(f"Click this link to authorize: {auth_response.url}")
+
+# Wait for the authorization to complete
+client.auth.wait_for_completion(auth_response)
+
+tool_input = {
+ 'event_api_id': 'evt-12345'
+}
+
+response = client.tools.execute(
+ tool_name=TOOL_NAME,
+ input=tool_input,
+ user_id=USER_ID,
+)
+print(json.dumps(response.output.value, indent=2))
diff --git a/public/examples/integrations/mcp-servers/luma_api/get_event_guest_example_call_tool.js b/public/examples/integrations/mcp-servers/luma_api/get_event_guest_example_call_tool.js
new file mode 100644
index 000000000..b49b53edb
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/luma_api/get_event_guest_example_call_tool.js
@@ -0,0 +1,32 @@
+import { Arcade } from "@arcadeai/arcadejs";
+
+const client = new Arcade(); // Automatically finds the `ARCADE_API_KEY` env variable
+
+const USER_ID = "{arcade_user_id}";
+const TOOL_NAME = "LumaApi.GetEventGuest";
+
+// Start the authorization process
+const authResponse = await client.tools.authorize({
+ tool_name: TOOL_NAME,
+ user_id: USER_ID,
+});
+
+if (authResponse.status !== "completed") {
+ console.log(`Click this link to authorize: ${authResponse.url}`);
+}
+
+// Wait for the authorization to complete
+await client.auth.waitForCompletion(authResponse);
+
+const toolInput = {
+ "event_api_id": "api-12345",
+ "guest_email": "guest@example.com"
+};
+
+const response = await client.tools.execute({
+ tool_name: TOOL_NAME,
+ input: toolInput,
+ user_id: USER_ID,
+});
+
+console.log(JSON.stringify(response.output.value, null, 2));
diff --git a/public/examples/integrations/mcp-servers/luma_api/get_event_guest_example_call_tool.py b/public/examples/integrations/mcp-servers/luma_api/get_event_guest_example_call_tool.py
new file mode 100644
index 000000000..f73abab23
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/luma_api/get_event_guest_example_call_tool.py
@@ -0,0 +1,29 @@
+import json
+from arcadepy import Arcade
+
+client = Arcade() # Automatically finds the `ARCADE_API_KEY` env variable
+
+USER_ID = "{arcade_user_id}"
+TOOL_NAME = "LumaApi.GetEventGuest"
+
+auth_response = client.tools.authorize(
+ tool_name=TOOL_NAME,
+ user_id=USER_ID,
+)
+
+if auth_response.status != "completed":
+ print(f"Click this link to authorize: {auth_response.url}")
+
+# Wait for the authorization to complete
+client.auth.wait_for_completion(auth_response)
+
+tool_input = {
+ 'event_api_id': 'api-12345', 'guest_email': 'guest@example.com'
+}
+
+response = client.tools.execute(
+ tool_name=TOOL_NAME,
+ input=tool_input,
+ user_id=USER_ID,
+)
+print(json.dumps(response.output.value, indent=2))
diff --git a/public/examples/integrations/mcp-servers/luma_api/get_event_guests_example_call_tool.js b/public/examples/integrations/mcp-servers/luma_api/get_event_guests_example_call_tool.js
new file mode 100644
index 000000000..ceeb607a7
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/luma_api/get_event_guests_example_call_tool.js
@@ -0,0 +1,35 @@
+import { Arcade } from "@arcadeai/arcadejs";
+
+const client = new Arcade(); // Automatically finds the `ARCADE_API_KEY` env variable
+
+const USER_ID = "{arcade_user_id}";
+const TOOL_NAME = "LumaApi.GetEventGuests";
+
+// Start the authorization process
+const authResponse = await client.tools.authorize({
+ tool_name: TOOL_NAME,
+ user_id: USER_ID,
+});
+
+if (authResponse.status !== "completed") {
+ console.log(`Click this link to authorize: ${authResponse.url}`);
+}
+
+// Wait for the authorization to complete
+await client.auth.waitForCompletion(authResponse);
+
+const toolInput = {
+ "event_api_id": "evt-12345",
+ "guest_approval_status": "approved",
+ "guest_sort_column": "name",
+ "items_to_return": 10,
+ "sort_order": "asc"
+};
+
+const response = await client.tools.execute({
+ tool_name: TOOL_NAME,
+ input: toolInput,
+ user_id: USER_ID,
+});
+
+console.log(JSON.stringify(response.output.value, null, 2));
diff --git a/public/examples/integrations/mcp-servers/luma_api/get_event_guests_example_call_tool.py b/public/examples/integrations/mcp-servers/luma_api/get_event_guests_example_call_tool.py
new file mode 100644
index 000000000..4c42a3d21
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/luma_api/get_event_guests_example_call_tool.py
@@ -0,0 +1,33 @@
+import json
+from arcadepy import Arcade
+
+client = Arcade() # Automatically finds the `ARCADE_API_KEY` env variable
+
+USER_ID = "{arcade_user_id}"
+TOOL_NAME = "LumaApi.GetEventGuests"
+
+auth_response = client.tools.authorize(
+ tool_name=TOOL_NAME,
+ user_id=USER_ID,
+)
+
+if auth_response.status != "completed":
+ print(f"Click this link to authorize: {auth_response.url}")
+
+# Wait for the authorization to complete
+client.auth.wait_for_completion(auth_response)
+
+tool_input = {
+ 'event_api_id': 'evt-12345',
+ 'guest_approval_status': 'approved',
+ 'guest_sort_column': 'name',
+ 'items_to_return': 10,
+ 'sort_order': 'asc'
+}
+
+response = client.tools.execute(
+ tool_name=TOOL_NAME,
+ input=tool_input,
+ user_id=USER_ID,
+)
+print(json.dumps(response.output.value, indent=2))
diff --git a/public/examples/integrations/mcp-servers/luma_api/get_ticket_type_by_id_example_call_tool.js b/public/examples/integrations/mcp-servers/luma_api/get_ticket_type_by_id_example_call_tool.js
new file mode 100644
index 000000000..9c4498ae1
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/luma_api/get_ticket_type_by_id_example_call_tool.js
@@ -0,0 +1,32 @@
+import { Arcade } from "@arcadeai/arcadejs";
+
+const client = new Arcade(); // Automatically finds the `ARCADE_API_KEY` env variable
+
+const USER_ID = "{arcade_user_id}";
+const TOOL_NAME = "LumaApi.GetTicketTypeById";
+
+// Start the authorization process
+const authResponse = await client.tools.authorize({
+ tool_name: TOOL_NAME,
+ user_id: USER_ID,
+});
+
+if (authResponse.status !== "completed") {
+ console.log(`Click this link to authorize: ${authResponse.url}`);
+}
+
+// Wait for the authorization to complete
+await client.auth.waitForCompletion(authResponse);
+
+const toolInput = {
+ "event_ticket_type_api_id": "12345",
+ "ticket_type_id": "ett-67890"
+};
+
+const response = await client.tools.execute({
+ tool_name: TOOL_NAME,
+ input: toolInput,
+ user_id: USER_ID,
+});
+
+console.log(JSON.stringify(response.output.value, null, 2));
diff --git a/public/examples/integrations/mcp-servers/luma_api/get_ticket_type_by_id_example_call_tool.py b/public/examples/integrations/mcp-servers/luma_api/get_ticket_type_by_id_example_call_tool.py
new file mode 100644
index 000000000..2dfd7e12d
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/luma_api/get_ticket_type_by_id_example_call_tool.py
@@ -0,0 +1,29 @@
+import json
+from arcadepy import Arcade
+
+client = Arcade() # Automatically finds the `ARCADE_API_KEY` env variable
+
+USER_ID = "{arcade_user_id}"
+TOOL_NAME = "LumaApi.GetTicketTypeById"
+
+auth_response = client.tools.authorize(
+ tool_name=TOOL_NAME,
+ user_id=USER_ID,
+)
+
+if auth_response.status != "completed":
+ print(f"Click this link to authorize: {auth_response.url}")
+
+# Wait for the authorization to complete
+client.auth.wait_for_completion(auth_response)
+
+tool_input = {
+ 'event_ticket_type_api_id': '12345', 'ticket_type_id': 'ett-67890'
+}
+
+response = client.tools.execute(
+ tool_name=TOOL_NAME,
+ input=tool_input,
+ user_id=USER_ID,
+)
+print(json.dumps(response.output.value, indent=2))
diff --git a/public/examples/integrations/mcp-servers/luma_api/get_user_info_example_call_tool.js b/public/examples/integrations/mcp-servers/luma_api/get_user_info_example_call_tool.js
new file mode 100644
index 000000000..672f77972
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/luma_api/get_user_info_example_call_tool.js
@@ -0,0 +1,29 @@
+import { Arcade } from "@arcadeai/arcadejs";
+
+const client = new Arcade(); // Automatically finds the `ARCADE_API_KEY` env variable
+
+const USER_ID = "{arcade_user_id}";
+const TOOL_NAME = "LumaApi.GetUserInfo";
+
+// Start the authorization process
+const authResponse = await client.tools.authorize({
+ tool_name: TOOL_NAME,
+ user_id: USER_ID,
+});
+
+if (authResponse.status !== "completed") {
+ console.log(`Click this link to authorize: ${authResponse.url}`);
+}
+
+// Wait for the authorization to complete
+await client.auth.waitForCompletion(authResponse);
+
+const toolInput = {};
+
+const response = await client.tools.execute({
+ tool_name: TOOL_NAME,
+ input: toolInput,
+ user_id: USER_ID,
+});
+
+console.log(JSON.stringify(response.output.value, null, 2));
diff --git a/public/examples/integrations/mcp-servers/luma_api/get_user_info_example_call_tool.py b/public/examples/integrations/mcp-servers/luma_api/get_user_info_example_call_tool.py
new file mode 100644
index 000000000..75ee9acc2
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/luma_api/get_user_info_example_call_tool.py
@@ -0,0 +1,29 @@
+import json
+from arcadepy import Arcade
+
+client = Arcade() # Automatically finds the `ARCADE_API_KEY` env variable
+
+USER_ID = "{arcade_user_id}"
+TOOL_NAME = "LumaApi.GetUserInfo"
+
+auth_response = client.tools.authorize(
+ tool_name=TOOL_NAME,
+ user_id=USER_ID,
+)
+
+if auth_response.status != "completed":
+ print(f"Click this link to authorize: {auth_response.url}")
+
+# Wait for the authorization to complete
+client.auth.wait_for_completion(auth_response)
+
+tool_input = {
+
+}
+
+response = client.tools.execute(
+ tool_name=TOOL_NAME,
+ input=tool_input,
+ user_id=USER_ID,
+)
+print(json.dumps(response.output.value, indent=2))
diff --git a/public/examples/integrations/mcp-servers/luma_api/import_people_to_calendar_example_call_tool.js b/public/examples/integrations/mcp-servers/luma_api/import_people_to_calendar_example_call_tool.js
new file mode 100644
index 000000000..49d9d8968
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/luma_api/import_people_to_calendar_example_call_tool.js
@@ -0,0 +1,32 @@
+import { Arcade } from "@arcadeai/arcadejs";
+
+const client = new Arcade(); // Automatically finds the `ARCADE_API_KEY` env variable
+
+const USER_ID = "{arcade_user_id}";
+const TOOL_NAME = "LumaApi.ImportPeopleToCalendar";
+
+// Start the authorization process
+const authResponse = await client.tools.authorize({
+ tool_name: TOOL_NAME,
+ user_id: USER_ID,
+});
+
+if (authResponse.status !== "completed") {
+ console.log(`Click this link to authorize: ${authResponse.url}`);
+}
+
+// Wait for the authorization to complete
+await client.auth.waitForCompletion(authResponse);
+
+const toolInput = {
+ "mode": "execute",
+ "request_body": "{\"contacts\":[{\"name\":\"John Doe\",\"email\":\"john@example.com\"},{\"name\":\"Jane Smith\",\"email\":\"jane@example.com\"}]}"
+};
+
+const response = await client.tools.execute({
+ tool_name: TOOL_NAME,
+ input: toolInput,
+ user_id: USER_ID,
+});
+
+console.log(JSON.stringify(response.output.value, null, 2));
diff --git a/public/examples/integrations/mcp-servers/luma_api/import_people_to_calendar_example_call_tool.py b/public/examples/integrations/mcp-servers/luma_api/import_people_to_calendar_example_call_tool.py
new file mode 100644
index 000000000..8c4495f86
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/luma_api/import_people_to_calendar_example_call_tool.py
@@ -0,0 +1,31 @@
+import json
+from arcadepy import Arcade
+
+client = Arcade() # Automatically finds the `ARCADE_API_KEY` env variable
+
+USER_ID = "{arcade_user_id}"
+TOOL_NAME = "LumaApi.ImportPeopleToCalendar"
+
+auth_response = client.tools.authorize(
+ tool_name=TOOL_NAME,
+ user_id=USER_ID,
+)
+
+if auth_response.status != "completed":
+ print(f"Click this link to authorize: {auth_response.url}")
+
+# Wait for the authorization to complete
+client.auth.wait_for_completion(auth_response)
+
+tool_input = {
+ 'mode': 'execute',
+ 'request_body': '{"contacts":[{"name":"John Doe","email":"john@example.com"},{"name":"Jane '
+ 'Smith","email":"jane@example.com"}]}'
+}
+
+response = client.tools.execute(
+ tool_name=TOOL_NAME,
+ input=tool_input,
+ user_id=USER_ID,
+)
+print(json.dumps(response.output.value, indent=2))
diff --git a/public/examples/integrations/mcp-servers/luma_api/list_calendar_coupons_example_call_tool.js b/public/examples/integrations/mcp-servers/luma_api/list_calendar_coupons_example_call_tool.js
new file mode 100644
index 000000000..93df1d25c
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/luma_api/list_calendar_coupons_example_call_tool.js
@@ -0,0 +1,31 @@
+import { Arcade } from "@arcadeai/arcadejs";
+
+const client = new Arcade(); // Automatically finds the `ARCADE_API_KEY` env variable
+
+const USER_ID = "{arcade_user_id}";
+const TOOL_NAME = "LumaApi.ListCalendarCoupons";
+
+// Start the authorization process
+const authResponse = await client.tools.authorize({
+ tool_name: TOOL_NAME,
+ user_id: USER_ID,
+});
+
+if (authResponse.status !== "completed") {
+ console.log(`Click this link to authorize: ${authResponse.url}`);
+}
+
+// Wait for the authorization to complete
+await client.auth.waitForCompletion(authResponse);
+
+const toolInput = {
+ "items_to_return": 10
+};
+
+const response = await client.tools.execute({
+ tool_name: TOOL_NAME,
+ input: toolInput,
+ user_id: USER_ID,
+});
+
+console.log(JSON.stringify(response.output.value, null, 2));
diff --git a/public/examples/integrations/mcp-servers/luma_api/list_calendar_coupons_example_call_tool.py b/public/examples/integrations/mcp-servers/luma_api/list_calendar_coupons_example_call_tool.py
new file mode 100644
index 000000000..76ad1ee96
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/luma_api/list_calendar_coupons_example_call_tool.py
@@ -0,0 +1,29 @@
+import json
+from arcadepy import Arcade
+
+client = Arcade() # Automatically finds the `ARCADE_API_KEY` env variable
+
+USER_ID = "{arcade_user_id}"
+TOOL_NAME = "LumaApi.ListCalendarCoupons"
+
+auth_response = client.tools.authorize(
+ tool_name=TOOL_NAME,
+ user_id=USER_ID,
+)
+
+if auth_response.status != "completed":
+ print(f"Click this link to authorize: {auth_response.url}")
+
+# Wait for the authorization to complete
+client.auth.wait_for_completion(auth_response)
+
+tool_input = {
+ 'items_to_return': 10
+}
+
+response = client.tools.execute(
+ tool_name=TOOL_NAME,
+ input=tool_input,
+ user_id=USER_ID,
+)
+print(json.dumps(response.output.value, indent=2))
diff --git a/public/examples/integrations/mcp-servers/luma_api/list_event_coupons_example_call_tool.js b/public/examples/integrations/mcp-servers/luma_api/list_event_coupons_example_call_tool.js
new file mode 100644
index 000000000..9e144dd1f
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/luma_api/list_event_coupons_example_call_tool.js
@@ -0,0 +1,32 @@
+import { Arcade } from "@arcadeai/arcadejs";
+
+const client = new Arcade(); // Automatically finds the `ARCADE_API_KEY` env variable
+
+const USER_ID = "{arcade_user_id}";
+const TOOL_NAME = "LumaApi.ListEventCoupons";
+
+// Start the authorization process
+const authResponse = await client.tools.authorize({
+ tool_name: TOOL_NAME,
+ user_id: USER_ID,
+});
+
+if (authResponse.status !== "completed") {
+ console.log(`Click this link to authorize: ${authResponse.url}`);
+}
+
+// Wait for the authorization to complete
+await client.auth.waitForCompletion(authResponse);
+
+const toolInput = {
+ "event_api_id": "evt-12345",
+ "item_return_limit": 10
+};
+
+const response = await client.tools.execute({
+ tool_name: TOOL_NAME,
+ input: toolInput,
+ user_id: USER_ID,
+});
+
+console.log(JSON.stringify(response.output.value, null, 2));
diff --git a/public/examples/integrations/mcp-servers/luma_api/list_event_coupons_example_call_tool.py b/public/examples/integrations/mcp-servers/luma_api/list_event_coupons_example_call_tool.py
new file mode 100644
index 000000000..44cfa113c
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/luma_api/list_event_coupons_example_call_tool.py
@@ -0,0 +1,29 @@
+import json
+from arcadepy import Arcade
+
+client = Arcade() # Automatically finds the `ARCADE_API_KEY` env variable
+
+USER_ID = "{arcade_user_id}"
+TOOL_NAME = "LumaApi.ListEventCoupons"
+
+auth_response = client.tools.authorize(
+ tool_name=TOOL_NAME,
+ user_id=USER_ID,
+)
+
+if auth_response.status != "completed":
+ print(f"Click this link to authorize: {auth_response.url}")
+
+# Wait for the authorization to complete
+client.auth.wait_for_completion(auth_response)
+
+tool_input = {
+ 'event_api_id': 'evt-12345', 'item_return_limit': 10
+}
+
+response = client.tools.execute(
+ tool_name=TOOL_NAME,
+ input=tool_input,
+ user_id=USER_ID,
+)
+print(json.dumps(response.output.value, indent=2))
diff --git a/public/examples/integrations/mcp-servers/luma_api/list_event_ticket_types_example_call_tool.js b/public/examples/integrations/mcp-servers/luma_api/list_event_ticket_types_example_call_tool.js
new file mode 100644
index 000000000..d4393cc53
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/luma_api/list_event_ticket_types_example_call_tool.js
@@ -0,0 +1,32 @@
+import { Arcade } from "@arcadeai/arcadejs";
+
+const client = new Arcade(); // Automatically finds the `ARCADE_API_KEY` env variable
+
+const USER_ID = "{arcade_user_id}";
+const TOOL_NAME = "LumaApi.ListEventTicketTypes";
+
+// Start the authorization process
+const authResponse = await client.tools.authorize({
+ tool_name: TOOL_NAME,
+ user_id: USER_ID,
+});
+
+if (authResponse.status !== "completed") {
+ console.log(`Click this link to authorize: ${authResponse.url}`);
+}
+
+// Wait for the authorization to complete
+await client.auth.waitForCompletion(authResponse);
+
+const toolInput = {
+ "event_id": "evt-12345",
+ "include_hidden_ticket_types": "true"
+};
+
+const response = await client.tools.execute({
+ tool_name: TOOL_NAME,
+ input: toolInput,
+ user_id: USER_ID,
+});
+
+console.log(JSON.stringify(response.output.value, null, 2));
diff --git a/public/examples/integrations/mcp-servers/luma_api/list_event_ticket_types_example_call_tool.py b/public/examples/integrations/mcp-servers/luma_api/list_event_ticket_types_example_call_tool.py
new file mode 100644
index 000000000..9d425f407
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/luma_api/list_event_ticket_types_example_call_tool.py
@@ -0,0 +1,29 @@
+import json
+from arcadepy import Arcade
+
+client = Arcade() # Automatically finds the `ARCADE_API_KEY` env variable
+
+USER_ID = "{arcade_user_id}"
+TOOL_NAME = "LumaApi.ListEventTicketTypes"
+
+auth_response = client.tools.authorize(
+ tool_name=TOOL_NAME,
+ user_id=USER_ID,
+)
+
+if auth_response.status != "completed":
+ print(f"Click this link to authorize: {auth_response.url}")
+
+# Wait for the authorization to complete
+client.auth.wait_for_completion(auth_response)
+
+tool_input = {
+ 'event_id': 'evt-12345', 'include_hidden_ticket_types': 'true'
+}
+
+response = client.tools.execute(
+ tool_name=TOOL_NAME,
+ input=tool_input,
+ user_id=USER_ID,
+)
+print(json.dumps(response.output.value, indent=2))
diff --git a/public/examples/integrations/mcp-servers/luma_api/list_luma_calendar_events_example_call_tool.js b/public/examples/integrations/mcp-servers/luma_api/list_luma_calendar_events_example_call_tool.js
new file mode 100644
index 000000000..cc1fc9dfb
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/luma_api/list_luma_calendar_events_example_call_tool.js
@@ -0,0 +1,35 @@
+import { Arcade } from "@arcadeai/arcadejs";
+
+const client = new Arcade(); // Automatically finds the `ARCADE_API_KEY` env variable
+
+const USER_ID = "{arcade_user_id}";
+const TOOL_NAME = "LumaApi.ListLumaCalendarEvents";
+
+// Start the authorization process
+const authResponse = await client.tools.authorize({
+ tool_name: TOOL_NAME,
+ user_id: USER_ID,
+});
+
+if (authResponse.status !== "completed") {
+ console.log(`Click this link to authorize: ${authResponse.url}`);
+}
+
+// Wait for the authorization to complete
+await client.auth.waitForCompletion(authResponse);
+
+const toolInput = {
+ "event_sort_direction": "asc",
+ "filter_events_before": "2023-10-01T00:00:00.000Z",
+ "number_of_items_to_return": 10,
+ "sort_by_column": "start_at",
+ "start_date_after": "2023-09-01T00:00:00.000Z"
+};
+
+const response = await client.tools.execute({
+ tool_name: TOOL_NAME,
+ input: toolInput,
+ user_id: USER_ID,
+});
+
+console.log(JSON.stringify(response.output.value, null, 2));
diff --git a/public/examples/integrations/mcp-servers/luma_api/list_luma_calendar_events_example_call_tool.py b/public/examples/integrations/mcp-servers/luma_api/list_luma_calendar_events_example_call_tool.py
new file mode 100644
index 000000000..82d59dc17
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/luma_api/list_luma_calendar_events_example_call_tool.py
@@ -0,0 +1,33 @@
+import json
+from arcadepy import Arcade
+
+client = Arcade() # Automatically finds the `ARCADE_API_KEY` env variable
+
+USER_ID = "{arcade_user_id}"
+TOOL_NAME = "LumaApi.ListLumaCalendarEvents"
+
+auth_response = client.tools.authorize(
+ tool_name=TOOL_NAME,
+ user_id=USER_ID,
+)
+
+if auth_response.status != "completed":
+ print(f"Click this link to authorize: {auth_response.url}")
+
+# Wait for the authorization to complete
+client.auth.wait_for_completion(auth_response)
+
+tool_input = {
+ 'event_sort_direction': 'asc',
+ 'filter_events_before': '2023-10-01T00:00:00.000Z',
+ 'number_of_items_to_return': 10,
+ 'sort_by_column': 'start_at',
+ 'start_date_after': '2023-09-01T00:00:00.000Z'
+}
+
+response = client.tools.execute(
+ tool_name=TOOL_NAME,
+ input=tool_input,
+ user_id=USER_ID,
+)
+print(json.dumps(response.output.value, indent=2))
diff --git a/public/examples/integrations/mcp-servers/luma_api/list_membership_tiers_example_call_tool.js b/public/examples/integrations/mcp-servers/luma_api/list_membership_tiers_example_call_tool.js
new file mode 100644
index 000000000..8fa78f9b9
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/luma_api/list_membership_tiers_example_call_tool.js
@@ -0,0 +1,31 @@
+import { Arcade } from "@arcadeai/arcadejs";
+
+const client = new Arcade(); // Automatically finds the `ARCADE_API_KEY` env variable
+
+const USER_ID = "{arcade_user_id}";
+const TOOL_NAME = "LumaApi.ListMembershipTiers";
+
+// Start the authorization process
+const authResponse = await client.tools.authorize({
+ tool_name: TOOL_NAME,
+ user_id: USER_ID,
+});
+
+if (authResponse.status !== "completed") {
+ console.log(`Click this link to authorize: ${authResponse.url}`);
+}
+
+// Wait for the authorization to complete
+await client.auth.waitForCompletion(authResponse);
+
+const toolInput = {
+ "items_to_return_count": 5
+};
+
+const response = await client.tools.execute({
+ tool_name: TOOL_NAME,
+ input: toolInput,
+ user_id: USER_ID,
+});
+
+console.log(JSON.stringify(response.output.value, null, 2));
diff --git a/public/examples/integrations/mcp-servers/luma_api/list_membership_tiers_example_call_tool.py b/public/examples/integrations/mcp-servers/luma_api/list_membership_tiers_example_call_tool.py
new file mode 100644
index 000000000..555edb71e
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/luma_api/list_membership_tiers_example_call_tool.py
@@ -0,0 +1,29 @@
+import json
+from arcadepy import Arcade
+
+client = Arcade() # Automatically finds the `ARCADE_API_KEY` env variable
+
+USER_ID = "{arcade_user_id}"
+TOOL_NAME = "LumaApi.ListMembershipTiers"
+
+auth_response = client.tools.authorize(
+ tool_name=TOOL_NAME,
+ user_id=USER_ID,
+)
+
+if auth_response.status != "completed":
+ print(f"Click this link to authorize: {auth_response.url}")
+
+# Wait for the authorization to complete
+client.auth.wait_for_completion(auth_response)
+
+tool_input = {
+ 'items_to_return_count': 5
+}
+
+response = client.tools.execute(
+ tool_name=TOOL_NAME,
+ input=tool_input,
+ user_id=USER_ID,
+)
+print(json.dumps(response.output.value, indent=2))
diff --git a/public/examples/integrations/mcp-servers/luma_api/list_people_example_call_tool.js b/public/examples/integrations/mcp-servers/luma_api/list_people_example_call_tool.js
new file mode 100644
index 000000000..c3ff76a72
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/luma_api/list_people_example_call_tool.js
@@ -0,0 +1,35 @@
+import { Arcade } from "@arcadeai/arcadejs";
+
+const client = new Arcade(); // Automatically finds the `ARCADE_API_KEY` env variable
+
+const USER_ID = "{arcade_user_id}";
+const TOOL_NAME = "LumaApi.ListPeople";
+
+// Start the authorization process
+const authResponse = await client.tools.authorize({
+ tool_name: TOOL_NAME,
+ user_id: USER_ID,
+});
+
+if (authResponse.status !== "completed") {
+ console.log(`Click this link to authorize: ${authResponse.url}`);
+}
+
+// Wait for the authorization to complete
+await client.auth.waitForCompletion(authResponse);
+
+const toolInput = {
+ "calendar_membership_status": "active",
+ "items_to_return": 10,
+ "search_query": "john.doe@example.com",
+ "sort_by_column": "name",
+ "sort_order": "asc"
+};
+
+const response = await client.tools.execute({
+ tool_name: TOOL_NAME,
+ input: toolInput,
+ user_id: USER_ID,
+});
+
+console.log(JSON.stringify(response.output.value, null, 2));
diff --git a/public/examples/integrations/mcp-servers/luma_api/list_people_example_call_tool.py b/public/examples/integrations/mcp-servers/luma_api/list_people_example_call_tool.py
new file mode 100644
index 000000000..154c146f8
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/luma_api/list_people_example_call_tool.py
@@ -0,0 +1,33 @@
+import json
+from arcadepy import Arcade
+
+client = Arcade() # Automatically finds the `ARCADE_API_KEY` env variable
+
+USER_ID = "{arcade_user_id}"
+TOOL_NAME = "LumaApi.ListPeople"
+
+auth_response = client.tools.authorize(
+ tool_name=TOOL_NAME,
+ user_id=USER_ID,
+)
+
+if auth_response.status != "completed":
+ print(f"Click this link to authorize: {auth_response.url}")
+
+# Wait for the authorization to complete
+client.auth.wait_for_completion(auth_response)
+
+tool_input = {
+ 'calendar_membership_status': 'active',
+ 'items_to_return': 10,
+ 'search_query': 'john.doe@example.com',
+ 'sort_by_column': 'name',
+ 'sort_order': 'asc'
+}
+
+response = client.tools.execute(
+ tool_name=TOOL_NAME,
+ input=tool_input,
+ user_id=USER_ID,
+)
+print(json.dumps(response.output.value, indent=2))
diff --git a/public/examples/integrations/mcp-servers/luma_api/list_person_tags_example_call_tool.js b/public/examples/integrations/mcp-servers/luma_api/list_person_tags_example_call_tool.js
new file mode 100644
index 000000000..286c024a2
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/luma_api/list_person_tags_example_call_tool.js
@@ -0,0 +1,33 @@
+import { Arcade } from "@arcadeai/arcadejs";
+
+const client = new Arcade(); // Automatically finds the `ARCADE_API_KEY` env variable
+
+const USER_ID = "{arcade_user_id}";
+const TOOL_NAME = "LumaApi.ListPersonTags";
+
+// Start the authorization process
+const authResponse = await client.tools.authorize({
+ tool_name: TOOL_NAME,
+ user_id: USER_ID,
+});
+
+if (authResponse.status !== "completed") {
+ console.log(`Click this link to authorize: ${authResponse.url}`);
+}
+
+// Wait for the authorization to complete
+await client.auth.waitForCompletion(authResponse);
+
+const toolInput = {
+ "items_to_return": 5,
+ "sort_by_column": "name",
+ "sorting_direction": "asc"
+};
+
+const response = await client.tools.execute({
+ tool_name: TOOL_NAME,
+ input: toolInput,
+ user_id: USER_ID,
+});
+
+console.log(JSON.stringify(response.output.value, null, 2));
diff --git a/public/examples/integrations/mcp-servers/luma_api/list_person_tags_example_call_tool.py b/public/examples/integrations/mcp-servers/luma_api/list_person_tags_example_call_tool.py
new file mode 100644
index 000000000..eb51b1211
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/luma_api/list_person_tags_example_call_tool.py
@@ -0,0 +1,29 @@
+import json
+from arcadepy import Arcade
+
+client = Arcade() # Automatically finds the `ARCADE_API_KEY` env variable
+
+USER_ID = "{arcade_user_id}"
+TOOL_NAME = "LumaApi.ListPersonTags"
+
+auth_response = client.tools.authorize(
+ tool_name=TOOL_NAME,
+ user_id=USER_ID,
+)
+
+if auth_response.status != "completed":
+ print(f"Click this link to authorize: {auth_response.url}")
+
+# Wait for the authorization to complete
+client.auth.wait_for_completion(auth_response)
+
+tool_input = {
+ 'items_to_return': 5, 'sort_by_column': 'name', 'sorting_direction': 'asc'
+}
+
+response = client.tools.execute(
+ tool_name=TOOL_NAME,
+ input=tool_input,
+ user_id=USER_ID,
+)
+print(json.dumps(response.output.value, indent=2))
diff --git a/public/examples/integrations/mcp-servers/luma_api/luma_entity_lookup_example_call_tool.js b/public/examples/integrations/mcp-servers/luma_api/luma_entity_lookup_example_call_tool.js
new file mode 100644
index 000000000..c8728d3d3
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/luma_api/luma_entity_lookup_example_call_tool.js
@@ -0,0 +1,31 @@
+import { Arcade } from "@arcadeai/arcadejs";
+
+const client = new Arcade(); // Automatically finds the `ARCADE_API_KEY` env variable
+
+const USER_ID = "{arcade_user_id}";
+const TOOL_NAME = "LumaApi.LumaEntityLookup";
+
+// Start the authorization process
+const authResponse = await client.tools.authorize({
+ tool_name: TOOL_NAME,
+ user_id: USER_ID,
+});
+
+if (authResponse.status !== "completed") {
+ console.log(`Click this link to authorize: ${authResponse.url}`);
+}
+
+// Wait for the authorization to complete
+await client.auth.waitForCompletion(authResponse);
+
+const toolInput = {
+ "entity_slug": "example-entity"
+};
+
+const response = await client.tools.execute({
+ tool_name: TOOL_NAME,
+ input: toolInput,
+ user_id: USER_ID,
+});
+
+console.log(JSON.stringify(response.output.value, null, 2));
diff --git a/public/examples/integrations/mcp-servers/luma_api/luma_entity_lookup_example_call_tool.py b/public/examples/integrations/mcp-servers/luma_api/luma_entity_lookup_example_call_tool.py
new file mode 100644
index 000000000..2d60e1a81
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/luma_api/luma_entity_lookup_example_call_tool.py
@@ -0,0 +1,29 @@
+import json
+from arcadepy import Arcade
+
+client = Arcade() # Automatically finds the `ARCADE_API_KEY` env variable
+
+USER_ID = "{arcade_user_id}"
+TOOL_NAME = "LumaApi.LumaEntityLookup"
+
+auth_response = client.tools.authorize(
+ tool_name=TOOL_NAME,
+ user_id=USER_ID,
+)
+
+if auth_response.status != "completed":
+ print(f"Click this link to authorize: {auth_response.url}")
+
+# Wait for the authorization to complete
+client.auth.wait_for_completion(auth_response)
+
+tool_input = {
+ 'entity_slug': 'example-entity'
+}
+
+response = client.tools.execute(
+ tool_name=TOOL_NAME,
+ input=tool_input,
+ user_id=USER_ID,
+)
+print(json.dumps(response.output.value, indent=2))
diff --git a/public/examples/integrations/mcp-servers/luma_api/modify_coupon_example_call_tool.js b/public/examples/integrations/mcp-servers/luma_api/modify_coupon_example_call_tool.js
new file mode 100644
index 000000000..303386aa0
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/luma_api/modify_coupon_example_call_tool.js
@@ -0,0 +1,32 @@
+import { Arcade } from "@arcadeai/arcadejs";
+
+const client = new Arcade(); // Automatically finds the `ARCADE_API_KEY` env variable
+
+const USER_ID = "{arcade_user_id}";
+const TOOL_NAME = "LumaApi.ModifyCoupon";
+
+// Start the authorization process
+const authResponse = await client.tools.authorize({
+ tool_name: TOOL_NAME,
+ user_id: USER_ID,
+});
+
+if (authResponse.status !== "completed") {
+ console.log(`Click this link to authorize: ${authResponse.url}`);
+}
+
+// Wait for the authorization to complete
+await client.auth.waitForCompletion(authResponse);
+
+const toolInput = {
+ "mode": "execute",
+ "request_body": "{\"coupon_id\":\"12345\",\"discount_value\":20,\"expiration_date\":\"2024-12-31\"}"
+};
+
+const response = await client.tools.execute({
+ tool_name: TOOL_NAME,
+ input: toolInput,
+ user_id: USER_ID,
+});
+
+console.log(JSON.stringify(response.output.value, null, 2));
diff --git a/public/examples/integrations/mcp-servers/luma_api/modify_coupon_example_call_tool.py b/public/examples/integrations/mcp-servers/luma_api/modify_coupon_example_call_tool.py
new file mode 100644
index 000000000..32af9c2b3
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/luma_api/modify_coupon_example_call_tool.py
@@ -0,0 +1,30 @@
+import json
+from arcadepy import Arcade
+
+client = Arcade() # Automatically finds the `ARCADE_API_KEY` env variable
+
+USER_ID = "{arcade_user_id}"
+TOOL_NAME = "LumaApi.ModifyCoupon"
+
+auth_response = client.tools.authorize(
+ tool_name=TOOL_NAME,
+ user_id=USER_ID,
+)
+
+if auth_response.status != "completed":
+ print(f"Click this link to authorize: {auth_response.url}")
+
+# Wait for the authorization to complete
+client.auth.wait_for_completion(auth_response)
+
+tool_input = {
+ 'mode': 'execute',
+ 'request_body': '{"coupon_id":"12345","discount_value":20,"expiration_date":"2024-12-31"}'
+}
+
+response = client.tools.execute(
+ tool_name=TOOL_NAME,
+ input=tool_input,
+ user_id=USER_ID,
+)
+print(json.dumps(response.output.value, indent=2))
diff --git a/public/examples/integrations/mcp-servers/luma_api/remove_tag_from_calendar_members_example_call_tool.js b/public/examples/integrations/mcp-servers/luma_api/remove_tag_from_calendar_members_example_call_tool.js
new file mode 100644
index 000000000..c54322b61
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/luma_api/remove_tag_from_calendar_members_example_call_tool.js
@@ -0,0 +1,35 @@
+import { Arcade } from "@arcadeai/arcadejs";
+
+const client = new Arcade(); // Automatically finds the `ARCADE_API_KEY` env variable
+
+const USER_ID = "{arcade_user_id}";
+const TOOL_NAME = "LumaApi.RemoveTagFromCalendarMembers";
+
+// Start the authorization process
+const authResponse = await client.tools.authorize({
+ tool_name: TOOL_NAME,
+ user_id: USER_ID,
+});
+
+if (authResponse.status !== "completed") {
+ console.log(`Click this link to authorize: ${authResponse.url}`);
+}
+
+// Wait for the authorization to complete
+await client.auth.waitForCompletion(authResponse);
+
+const toolInput = {
+ "tag_identifier": "tag-123",
+ "email_addresses_to_remove_tag": [
+ "user1@example.com",
+ "user2@example.com"
+ ]
+};
+
+const response = await client.tools.execute({
+ tool_name: TOOL_NAME,
+ input: toolInput,
+ user_id: USER_ID,
+});
+
+console.log(JSON.stringify(response.output.value, null, 2));
diff --git a/public/examples/integrations/mcp-servers/luma_api/remove_tag_from_calendar_members_example_call_tool.py b/public/examples/integrations/mcp-servers/luma_api/remove_tag_from_calendar_members_example_call_tool.py
new file mode 100644
index 000000000..8b915da75
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/luma_api/remove_tag_from_calendar_members_example_call_tool.py
@@ -0,0 +1,30 @@
+import json
+from arcadepy import Arcade
+
+client = Arcade() # Automatically finds the `ARCADE_API_KEY` env variable
+
+USER_ID = "{arcade_user_id}"
+TOOL_NAME = "LumaApi.RemoveTagFromCalendarMembers"
+
+auth_response = client.tools.authorize(
+ tool_name=TOOL_NAME,
+ user_id=USER_ID,
+)
+
+if auth_response.status != "completed":
+ print(f"Click this link to authorize: {auth_response.url}")
+
+# Wait for the authorization to complete
+client.auth.wait_for_completion(auth_response)
+
+tool_input = {
+ 'tag_identifier': 'tag-123',
+ 'email_addresses_to_remove_tag': ['user1@example.com', 'user2@example.com']
+}
+
+response = client.tools.execute(
+ tool_name=TOOL_NAME,
+ input=tool_input,
+ user_id=USER_ID,
+)
+print(json.dumps(response.output.value, indent=2))
diff --git a/public/examples/integrations/mcp-servers/luma_api/send_guest_event_invite_example_call_tool.js b/public/examples/integrations/mcp-servers/luma_api/send_guest_event_invite_example_call_tool.js
new file mode 100644
index 000000000..82a8b4c3a
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/luma_api/send_guest_event_invite_example_call_tool.js
@@ -0,0 +1,32 @@
+import { Arcade } from "@arcadeai/arcadejs";
+
+const client = new Arcade(); // Automatically finds the `ARCADE_API_KEY` env variable
+
+const USER_ID = "{arcade_user_id}";
+const TOOL_NAME = "LumaApi.SendGuestEventInvite";
+
+// Start the authorization process
+const authResponse = await client.tools.authorize({
+ tool_name: TOOL_NAME,
+ user_id: USER_ID,
+});
+
+if (authResponse.status !== "completed") {
+ console.log(`Click this link to authorize: ${authResponse.url}`);
+}
+
+// Wait for the authorization to complete
+await client.auth.waitForCompletion(authResponse);
+
+const toolInput = {
+ "mode": "execute",
+ "request_body": "{\"event_id\":\"12345\",\"guest_emails\":[\"guest1@example.com\",\"guest2@example.com\"],\"guest_sms\":[\"+1234567890\",\"+0987654321\"]}"
+};
+
+const response = await client.tools.execute({
+ tool_name: TOOL_NAME,
+ input: toolInput,
+ user_id: USER_ID,
+});
+
+console.log(JSON.stringify(response.output.value, null, 2));
diff --git a/public/examples/integrations/mcp-servers/luma_api/send_guest_event_invite_example_call_tool.py b/public/examples/integrations/mcp-servers/luma_api/send_guest_event_invite_example_call_tool.py
new file mode 100644
index 000000000..3eb695ee1
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/luma_api/send_guest_event_invite_example_call_tool.py
@@ -0,0 +1,30 @@
+import json
+from arcadepy import Arcade
+
+client = Arcade() # Automatically finds the `ARCADE_API_KEY` env variable
+
+USER_ID = "{arcade_user_id}"
+TOOL_NAME = "LumaApi.SendGuestEventInvite"
+
+auth_response = client.tools.authorize(
+ tool_name=TOOL_NAME,
+ user_id=USER_ID,
+)
+
+if auth_response.status != "completed":
+ print(f"Click this link to authorize: {auth_response.url}")
+
+# Wait for the authorization to complete
+client.auth.wait_for_completion(auth_response)
+
+tool_input = {
+ 'mode': 'execute',
+ 'request_body': '{"event_id":"12345","guest_emails":["guest1@example.com","guest2@example.com"],"guest_sms":["+1234567890","+0987654321"]}'
+}
+
+response = client.tools.execute(
+ tool_name=TOOL_NAME,
+ input=tool_input,
+ user_id=USER_ID,
+)
+print(json.dumps(response.output.value, indent=2))
diff --git a/public/examples/integrations/mcp-servers/luma_api/soft_delete_ticket_type_example_call_tool.js b/public/examples/integrations/mcp-servers/luma_api/soft_delete_ticket_type_example_call_tool.js
new file mode 100644
index 000000000..4224a2dc3
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/luma_api/soft_delete_ticket_type_example_call_tool.js
@@ -0,0 +1,31 @@
+import { Arcade } from "@arcadeai/arcadejs";
+
+const client = new Arcade(); // Automatically finds the `ARCADE_API_KEY` env variable
+
+const USER_ID = "{arcade_user_id}";
+const TOOL_NAME = "LumaApi.SoftDeleteTicketType";
+
+// Start the authorization process
+const authResponse = await client.tools.authorize({
+ tool_name: TOOL_NAME,
+ user_id: USER_ID,
+});
+
+if (authResponse.status !== "completed") {
+ console.log(`Click this link to authorize: ${authResponse.url}`);
+}
+
+// Wait for the authorization to complete
+await client.auth.waitForCompletion(authResponse);
+
+const toolInput = {
+ "event_ticket_type_id": "12345"
+};
+
+const response = await client.tools.execute({
+ tool_name: TOOL_NAME,
+ input: toolInput,
+ user_id: USER_ID,
+});
+
+console.log(JSON.stringify(response.output.value, null, 2));
diff --git a/public/examples/integrations/mcp-servers/luma_api/soft_delete_ticket_type_example_call_tool.py b/public/examples/integrations/mcp-servers/luma_api/soft_delete_ticket_type_example_call_tool.py
new file mode 100644
index 000000000..12da91018
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/luma_api/soft_delete_ticket_type_example_call_tool.py
@@ -0,0 +1,29 @@
+import json
+from arcadepy import Arcade
+
+client = Arcade() # Automatically finds the `ARCADE_API_KEY` env variable
+
+USER_ID = "{arcade_user_id}"
+TOOL_NAME = "LumaApi.SoftDeleteTicketType"
+
+auth_response = client.tools.authorize(
+ tool_name=TOOL_NAME,
+ user_id=USER_ID,
+)
+
+if auth_response.status != "completed":
+ print(f"Click this link to authorize: {auth_response.url}")
+
+# Wait for the authorization to complete
+client.auth.wait_for_completion(auth_response)
+
+tool_input = {
+ 'event_ticket_type_id': '12345'
+}
+
+response = client.tools.execute(
+ tool_name=TOOL_NAME,
+ input=tool_input,
+ user_id=USER_ID,
+)
+print(json.dumps(response.output.value, indent=2))
diff --git a/public/examples/integrations/mcp-servers/luma_api/update_coupon_example_call_tool.js b/public/examples/integrations/mcp-servers/luma_api/update_coupon_example_call_tool.js
new file mode 100644
index 000000000..e9d972c36
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/luma_api/update_coupon_example_call_tool.js
@@ -0,0 +1,32 @@
+import { Arcade } from "@arcadeai/arcadejs";
+
+const client = new Arcade(); // Automatically finds the `ARCADE_API_KEY` env variable
+
+const USER_ID = "{arcade_user_id}";
+const TOOL_NAME = "LumaApi.UpdateCoupon";
+
+// Start the authorization process
+const authResponse = await client.tools.authorize({
+ tool_name: TOOL_NAME,
+ user_id: USER_ID,
+});
+
+if (authResponse.status !== "completed") {
+ console.log(`Click this link to authorize: ${authResponse.url}`);
+}
+
+// Wait for the authorization to complete
+await client.auth.waitForCompletion(authResponse);
+
+const toolInput = {
+ "mode": "execute",
+ "request_body": "{\"couponId\":\"12345\",\"discount\":20,\"expiryDate\":\"2023-12-31\"}"
+};
+
+const response = await client.tools.execute({
+ tool_name: TOOL_NAME,
+ input: toolInput,
+ user_id: USER_ID,
+});
+
+console.log(JSON.stringify(response.output.value, null, 2));
diff --git a/public/examples/integrations/mcp-servers/luma_api/update_coupon_example_call_tool.py b/public/examples/integrations/mcp-servers/luma_api/update_coupon_example_call_tool.py
new file mode 100644
index 000000000..32d7f39f9
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/luma_api/update_coupon_example_call_tool.py
@@ -0,0 +1,29 @@
+import json
+from arcadepy import Arcade
+
+client = Arcade() # Automatically finds the `ARCADE_API_KEY` env variable
+
+USER_ID = "{arcade_user_id}"
+TOOL_NAME = "LumaApi.UpdateCoupon"
+
+auth_response = client.tools.authorize(
+ tool_name=TOOL_NAME,
+ user_id=USER_ID,
+)
+
+if auth_response.status != "completed":
+ print(f"Click this link to authorize: {auth_response.url}")
+
+# Wait for the authorization to complete
+client.auth.wait_for_completion(auth_response)
+
+tool_input = {
+ 'mode': 'execute', 'request_body': '{"couponId":"12345","discount":20,"expiryDate":"2023-12-31"}'
+}
+
+response = client.tools.execute(
+ tool_name=TOOL_NAME,
+ input=tool_input,
+ user_id=USER_ID,
+)
+print(json.dumps(response.output.value, indent=2))
diff --git a/public/examples/integrations/mcp-servers/luma_api/update_event_example_call_tool.js b/public/examples/integrations/mcp-servers/luma_api/update_event_example_call_tool.js
new file mode 100644
index 000000000..af73abd8f
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/luma_api/update_event_example_call_tool.js
@@ -0,0 +1,32 @@
+import { Arcade } from "@arcadeai/arcadejs";
+
+const client = new Arcade(); // Automatically finds the `ARCADE_API_KEY` env variable
+
+const USER_ID = "{arcade_user_id}";
+const TOOL_NAME = "LumaApi.UpdateEvent";
+
+// Start the authorization process
+const authResponse = await client.tools.authorize({
+ tool_name: TOOL_NAME,
+ user_id: USER_ID,
+});
+
+if (authResponse.status !== "completed") {
+ console.log(`Click this link to authorize: ${authResponse.url}`);
+}
+
+// Wait for the authorization to complete
+await client.auth.waitForCompletion(authResponse);
+
+const toolInput = {
+ "mode": "execute",
+ "request_body": "{\"eventId\":\"12345\",\"title\":\"Updated Event Title\",\"date\":\"2023-10-01\",\"location\":\"New Location\"}"
+};
+
+const response = await client.tools.execute({
+ tool_name: TOOL_NAME,
+ input: toolInput,
+ user_id: USER_ID,
+});
+
+console.log(JSON.stringify(response.output.value, null, 2));
diff --git a/public/examples/integrations/mcp-servers/luma_api/update_event_example_call_tool.py b/public/examples/integrations/mcp-servers/luma_api/update_event_example_call_tool.py
new file mode 100644
index 000000000..ed9642db5
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/luma_api/update_event_example_call_tool.py
@@ -0,0 +1,31 @@
+import json
+from arcadepy import Arcade
+
+client = Arcade() # Automatically finds the `ARCADE_API_KEY` env variable
+
+USER_ID = "{arcade_user_id}"
+TOOL_NAME = "LumaApi.UpdateEvent"
+
+auth_response = client.tools.authorize(
+ tool_name=TOOL_NAME,
+ user_id=USER_ID,
+)
+
+if auth_response.status != "completed":
+ print(f"Click this link to authorize: {auth_response.url}")
+
+# Wait for the authorization to complete
+client.auth.wait_for_completion(auth_response)
+
+tool_input = {
+ 'mode': 'execute',
+ 'request_body': '{"eventId":"12345","title":"Updated Event '
+ 'Title","date":"2023-10-01","location":"New Location"}'
+}
+
+response = client.tools.execute(
+ tool_name=TOOL_NAME,
+ input=tool_input,
+ user_id=USER_ID,
+)
+print(json.dumps(response.output.value, indent=2))
diff --git a/public/examples/integrations/mcp-servers/luma_api/update_guest_status_example_call_tool.js b/public/examples/integrations/mcp-servers/luma_api/update_guest_status_example_call_tool.js
new file mode 100644
index 000000000..9f1c469f0
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/luma_api/update_guest_status_example_call_tool.js
@@ -0,0 +1,32 @@
+import { Arcade } from "@arcadeai/arcadejs";
+
+const client = new Arcade(); // Automatically finds the `ARCADE_API_KEY` env variable
+
+const USER_ID = "{arcade_user_id}";
+const TOOL_NAME = "LumaApi.UpdateGuestStatus";
+
+// Start the authorization process
+const authResponse = await client.tools.authorize({
+ tool_name: TOOL_NAME,
+ user_id: USER_ID,
+});
+
+if (authResponse.status !== "completed") {
+ console.log(`Click this link to authorize: ${authResponse.url}`);
+}
+
+// Wait for the authorization to complete
+await client.auth.waitForCompletion(authResponse);
+
+const toolInput = {
+ "mode": "execute",
+ "request_body": "{\"guestId\":\"12345\",\"status\":\"confirmed\"}"
+};
+
+const response = await client.tools.execute({
+ tool_name: TOOL_NAME,
+ input: toolInput,
+ user_id: USER_ID,
+});
+
+console.log(JSON.stringify(response.output.value, null, 2));
diff --git a/public/examples/integrations/mcp-servers/luma_api/update_guest_status_example_call_tool.py b/public/examples/integrations/mcp-servers/luma_api/update_guest_status_example_call_tool.py
new file mode 100644
index 000000000..3c68dfc5e
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/luma_api/update_guest_status_example_call_tool.py
@@ -0,0 +1,29 @@
+import json
+from arcadepy import Arcade
+
+client = Arcade() # Automatically finds the `ARCADE_API_KEY` env variable
+
+USER_ID = "{arcade_user_id}"
+TOOL_NAME = "LumaApi.UpdateGuestStatus"
+
+auth_response = client.tools.authorize(
+ tool_name=TOOL_NAME,
+ user_id=USER_ID,
+)
+
+if auth_response.status != "completed":
+ print(f"Click this link to authorize: {auth_response.url}")
+
+# Wait for the authorization to complete
+client.auth.wait_for_completion(auth_response)
+
+tool_input = {
+ 'mode': 'execute', 'request_body': '{"guestId":"12345","status":"confirmed"}'
+}
+
+response = client.tools.execute(
+ tool_name=TOOL_NAME,
+ input=tool_input,
+ user_id=USER_ID,
+)
+print(json.dumps(response.output.value, indent=2))
diff --git a/public/examples/integrations/mcp-servers/luma_api/update_membership_status_example_call_tool.js b/public/examples/integrations/mcp-servers/luma_api/update_membership_status_example_call_tool.js
new file mode 100644
index 000000000..bbe8d8ac5
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/luma_api/update_membership_status_example_call_tool.js
@@ -0,0 +1,32 @@
+import { Arcade } from "@arcadeai/arcadejs";
+
+const client = new Arcade(); // Automatically finds the `ARCADE_API_KEY` env variable
+
+const USER_ID = "{arcade_user_id}";
+const TOOL_NAME = "LumaApi.UpdateMembershipStatus";
+
+// Start the authorization process
+const authResponse = await client.tools.authorize({
+ tool_name: TOOL_NAME,
+ user_id: USER_ID,
+});
+
+if (authResponse.status !== "completed") {
+ console.log(`Click this link to authorize: ${authResponse.url}`);
+}
+
+// Wait for the authorization to complete
+await client.auth.waitForCompletion(authResponse);
+
+const toolInput = {
+ "membership_status": "approved",
+ "user_identifier": "usr-12345"
+};
+
+const response = await client.tools.execute({
+ tool_name: TOOL_NAME,
+ input: toolInput,
+ user_id: USER_ID,
+});
+
+console.log(JSON.stringify(response.output.value, null, 2));
diff --git a/public/examples/integrations/mcp-servers/luma_api/update_membership_status_example_call_tool.py b/public/examples/integrations/mcp-servers/luma_api/update_membership_status_example_call_tool.py
new file mode 100644
index 000000000..7070ffdf9
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/luma_api/update_membership_status_example_call_tool.py
@@ -0,0 +1,29 @@
+import json
+from arcadepy import Arcade
+
+client = Arcade() # Automatically finds the `ARCADE_API_KEY` env variable
+
+USER_ID = "{arcade_user_id}"
+TOOL_NAME = "LumaApi.UpdateMembershipStatus"
+
+auth_response = client.tools.authorize(
+ tool_name=TOOL_NAME,
+ user_id=USER_ID,
+)
+
+if auth_response.status != "completed":
+ print(f"Click this link to authorize: {auth_response.url}")
+
+# Wait for the authorization to complete
+client.auth.wait_for_completion(auth_response)
+
+tool_input = {
+ 'membership_status': 'approved', 'user_identifier': 'usr-12345'
+}
+
+response = client.tools.execute(
+ tool_name=TOOL_NAME,
+ input=tool_input,
+ user_id=USER_ID,
+)
+print(json.dumps(response.output.value, indent=2))
diff --git a/public/examples/integrations/mcp-servers/luma_api/update_person_tag_example_call_tool.js b/public/examples/integrations/mcp-servers/luma_api/update_person_tag_example_call_tool.js
new file mode 100644
index 000000000..0404cb9cb
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/luma_api/update_person_tag_example_call_tool.js
@@ -0,0 +1,33 @@
+import { Arcade } from "@arcadeai/arcadejs";
+
+const client = new Arcade(); // Automatically finds the `ARCADE_API_KEY` env variable
+
+const USER_ID = "{arcade_user_id}";
+const TOOL_NAME = "LumaApi.UpdatePersonTag";
+
+// Start the authorization process
+const authResponse = await client.tools.authorize({
+ tool_name: TOOL_NAME,
+ user_id: USER_ID,
+});
+
+if (authResponse.status !== "completed") {
+ console.log(`Click this link to authorize: ${authResponse.url}`);
+}
+
+// Wait for the authorization to complete
+await client.auth.waitForCompletion(authResponse);
+
+const toolInput = {
+ "person_tag_api_id": "12345",
+ "tag_color": "blue",
+ "tag_name": "Project Manager"
+};
+
+const response = await client.tools.execute({
+ tool_name: TOOL_NAME,
+ input: toolInput,
+ user_id: USER_ID,
+});
+
+console.log(JSON.stringify(response.output.value, null, 2));
diff --git a/public/examples/integrations/mcp-servers/luma_api/update_person_tag_example_call_tool.py b/public/examples/integrations/mcp-servers/luma_api/update_person_tag_example_call_tool.py
new file mode 100644
index 000000000..fc0cc4309
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/luma_api/update_person_tag_example_call_tool.py
@@ -0,0 +1,29 @@
+import json
+from arcadepy import Arcade
+
+client = Arcade() # Automatically finds the `ARCADE_API_KEY` env variable
+
+USER_ID = "{arcade_user_id}"
+TOOL_NAME = "LumaApi.UpdatePersonTag"
+
+auth_response = client.tools.authorize(
+ tool_name=TOOL_NAME,
+ user_id=USER_ID,
+)
+
+if auth_response.status != "completed":
+ print(f"Click this link to authorize: {auth_response.url}")
+
+# Wait for the authorization to complete
+client.auth.wait_for_completion(auth_response)
+
+tool_input = {
+ 'person_tag_api_id': '12345', 'tag_color': 'blue', 'tag_name': 'Project Manager'
+}
+
+response = client.tools.execute(
+ tool_name=TOOL_NAME,
+ input=tool_input,
+ user_id=USER_ID,
+)
+print(json.dumps(response.output.value, indent=2))
diff --git a/public/examples/integrations/mcp-servers/luma_api/update_ticket_type_configuration_example_call_tool.js b/public/examples/integrations/mcp-servers/luma_api/update_ticket_type_configuration_example_call_tool.js
new file mode 100644
index 000000000..c02117622
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/luma_api/update_ticket_type_configuration_example_call_tool.js
@@ -0,0 +1,32 @@
+import { Arcade } from "@arcadeai/arcadejs";
+
+const client = new Arcade(); // Automatically finds the `ARCADE_API_KEY` env variable
+
+const USER_ID = "{arcade_user_id}";
+const TOOL_NAME = "LumaApi.UpdateTicketTypeConfiguration";
+
+// Start the authorization process
+const authResponse = await client.tools.authorize({
+ tool_name: TOOL_NAME,
+ user_id: USER_ID,
+});
+
+if (authResponse.status !== "completed") {
+ console.log(`Click this link to authorize: ${authResponse.url}`);
+}
+
+// Wait for the authorization to complete
+await client.auth.waitForCompletion(authResponse);
+
+const toolInput = {
+ "mode": "execute",
+ "request_body": "{\"ticketTypeId\":\"12345\",\"availability\":\"limited\",\"price\":50}"
+};
+
+const response = await client.tools.execute({
+ tool_name: TOOL_NAME,
+ input: toolInput,
+ user_id: USER_ID,
+});
+
+console.log(JSON.stringify(response.output.value, null, 2));
diff --git a/public/examples/integrations/mcp-servers/luma_api/update_ticket_type_configuration_example_call_tool.py b/public/examples/integrations/mcp-servers/luma_api/update_ticket_type_configuration_example_call_tool.py
new file mode 100644
index 000000000..ef53e720f
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/luma_api/update_ticket_type_configuration_example_call_tool.py
@@ -0,0 +1,29 @@
+import json
+from arcadepy import Arcade
+
+client = Arcade() # Automatically finds the `ARCADE_API_KEY` env variable
+
+USER_ID = "{arcade_user_id}"
+TOOL_NAME = "LumaApi.UpdateTicketTypeConfiguration"
+
+auth_response = client.tools.authorize(
+ tool_name=TOOL_NAME,
+ user_id=USER_ID,
+)
+
+if auth_response.status != "completed":
+ print(f"Click this link to authorize: {auth_response.url}")
+
+# Wait for the authorization to complete
+client.auth.wait_for_completion(auth_response)
+
+tool_input = {
+ 'mode': 'execute', 'request_body': '{"ticketTypeId":"12345","availability":"limited","price":50}'
+}
+
+response = client.tools.execute(
+ tool_name=TOOL_NAME,
+ input=tool_input,
+ user_id=USER_ID,
+)
+print(json.dumps(response.output.value, indent=2))