api-test-1-mcp
v0.1.0-alpha.1
Published
The official MCP Server for the API Test 1 API
Readme
API Test 1 TypeScript MCP Server
It is generated with Stainless.
Installation
Direct invocation
You can run the MCP Server directly via npx:
export API_TEST_1_API_KEY="My API Key"
export API_TEST_1_USERNAME="My Username"
export API_TEST_1_PASSWORD="My Password"
npx -y api-test-1-mcp@latestVia MCP Client
There is a partial list of existing clients at modelcontextprotocol.io. If you already have a client, consult their documentation to install the MCP server.
For clients with a configuration JSON, it might look something like this:
{
"mcpServers": {
"api_test_1_api": {
"command": "npx",
"args": ["-y", "api-test-1-mcp", "--client=claude", "--tools=dynamic"],
"env": {
"API_TEST_1_API_KEY": "My API Key",
"API_TEST_1_USERNAME": "My Username",
"API_TEST_1_PASSWORD": "My Password"
}
}
}
}Exposing endpoints to your MCP Client
There are two ways to expose endpoints as tools in the MCP server:
- Exposing one tool per endpoint, and filtering as necessary
- Exposing a set of tools to dynamically discover and invoke endpoints from the API
Filtering endpoints and tools
You can run the package on the command line to discover and filter the set of tools that are exposed by the MCP Server. This can be helpful for large APIs where including all endpoints at once is too much for your AI's context window.
You can filter by multiple aspects:
--toolincludes a specific tool by name--resourceincludes all tools under a specific resource, and can have wildcards, e.g.my.resource*--operationincludes just read (get/list) or just write operations
Dynamic tools
If you specify --tools=dynamic to the MCP server, instead of exposing one tool per endpoint in the API, it will
expose the following tools:
list_api_endpoints- Discovers available endpoints, with optional filtering by search queryget_api_endpoint_schema- Gets detailed schema information for a specific endpointinvoke_api_endpoint- Executes any endpoint with the appropriate parameters
This allows you to have the full set of API endpoints available to your MCP Client, while not requiring that all of their schemas be loaded into context at once. Instead, the LLM will automatically use these tools together to search for, look up, and invoke endpoints dynamically. However, due to the indirect nature of the schemas, it can struggle to provide the correct properties a bit more than when tools are imported explicitly. Therefore, you can opt-in to explicit tools, the dynamic tools, or both.
See more information with --help.
All of these command-line options can be repeated, combined together, and have corresponding exclusion versions (e.g. --no-tool).
Use --list to see the list of available tools, or see below.
Specifying the MCP Client
Different clients have varying abilities to handle arbitrary tools and schemas.
You can specify the client you are using with the --client argument, and the MCP server will automatically
serve tools and schemas that are more compatible with that client.
--client=<type>: Set all capabilities based on a known MCP client- Valid values:
openai-agents,claude,claude-code,cursor - Example:
--client=cursor
- Valid values:
Additionally, if you have a client not on the above list, or the client has gotten better over time, you can manually enable or disable certain capabilities:
--capability=<name>: Specify individual client capabilities- Available capabilities:
top-level-unions: Enable support for top-level unions in tool schemasvalid-json: Enable JSON string parsing for argumentsrefs: Enable support for $ref pointers in schemasunions: Enable support for union types (anyOf) in schemasformats: Enable support for format validations in schemas (e.g. date-time, email)tool-name-length=N: Set maximum tool name length to N characters
- Example:
--capability=top-level-unions --capability=tool-name-length=40 - Example:
--capability=top-level-unions,tool-name-length=40
- Available capabilities:
Examples
- Filter for read operations on cards:
--resource=cards --operation=read- Exclude specific tools while including others:
--resource=cards --no-tool=create_cards- Configure for Cursor client with custom max tool name length:
--client=cursor --capability=tool-name-length=40- Complex filtering with multiple criteria:
--resource=cards,accounts --operation=read --tag=kyc --no-tool=create_cardsImporting the tools and server individually
// Import the server, generated endpoints, or the init function
import { server, endpoints, init } from "api-test-1-mcp/server";
// import a specific tool
import createTokenOAuthV1 from "api-test-1-mcp/tools/oauth/v1/create-token-oauth-v1";
// initialize the server and all endpoints
init({ server, endpoints });
// manually start server
const transport = new StdioServerTransport();
await server.connect(transport);
// or initialize your own server with specific tools
const myServer = new McpServer(...);
// define your own endpoint
const myCustomEndpoint = {
tool: {
name: 'my_custom_tool',
description: 'My custom tool',
inputSchema: zodToJsonSchema(z.object({ a_property: z.string() })),
},
handler: async (client: client, args: any) => {
return { myResponse: 'Hello world!' };
})
};
// initialize the server with your custom endpoints
init({ server: myServer, endpoints: [createTokenOAuthV1, myCustomEndpoint] });Available Tools
The following tools are available in this MCP server.
Resource oauth.v1:
create_token_oauth_v1(write):
Resource api.v2:
access_tokens_api_v2(write): Returns a scoped access token based on the generated link token.login_api_v2(write): Generates a one-time password and sends it to the email address passed. In lower environments, the one-time password is returned in the response.retrieve_app_versions_api_v2(read): Gets 'AppVersion' details. Includes version for iOS and Android. AccessToken is expected to be passed in headers.retrieve_categories_api_v2(read): Get all Category resources.
Resource api.v2.customers:
create_v2_api_customers(write): Register a new customer on TodayTix. Only available on TodayTix retailer. The server will verify that the authenticated principal has permission to create a new customer with the provided identity.retrieve_v2_api_customers(read): GetsCustomerdetails.Supports embedded
homeLocationobject. Useembed=homeLocationto get full Location object instead of homeLocationId.update_v2_api_customers(write): Sets the customer's consent for a partner's accountbookmark_orderings_v2_api_customers(write): Order customer bookmarks for a specific locationdeletion_requests_v2_api_customers(write): Create a request for deleting all customer's personal data in our and our third-party systems.retrieve_available_profile_images_v2_api_customers(read): Returns all profile images available for the customer to select from. This is customer-specific since certain images may be gated to certain customers based on their rewards tier.retrieve_rewards_summary_v2_api_customers(read): Returns customer's reward information.
Resource api.v2.customers.alerts:
create_customers_v2_api_alerts(write): Set an alert for this customer, show, and ticket type. If the alert was previously set and is no longer valid, we re-set it.list_customers_v2_api_alerts(read): Get all current pending alerts.Use
showparameter to get alert only for this show.delete_customers_v2_api_alerts(write): Remove alert for 'show' and 'ticketType'.
Resource api.v2.customers.bookmarks:
create_customers_v2_api_bookmarks(write): Bookmarks aShowor aShowGroupCan only create a bookmark for an active Show/ShowGroupupdate_customers_v2_api_bookmarks(write): Update an existing bookmark. Now this is only used forhasSeenfield for ShowBookmark.list_customers_v2_api_bookmarks(read): Returns a list of bookmarks that belong to the specific customer, with the following criteria- All
Shows (whether active or inactive) in the specified location. - Only active
ShowGroups in the specified location. - In the order of displaying.
- All
delete_customers_v2_api_bookmarks(write): Deletes the bookmark. (Un-bookmark the show or show group)
Resource api.v2.customers.lottery_entries:
update_customers_v2_api_lottery_entries(write): Update a LotteryEntry resource by ID. Customers can modify email or pickupName, share on social media, or decline their winning entry.alohomora_customers_v2_api_lottery_entries(write): Endpoint for group lottery entries, Harry Potter or otherwise. Enters the customer into the lotteries corresponding to the sent showtimes if the show supports group lottery, or is Harry Potter.lottery_entries_customers_v2_api_lottery_entries(write): Create lottery entry object. Enter lottery flow.resend_confirmation_email_customers_v2_api_lottery_entries(write): Send a new email related to this lottery entry.retrieve_lottery_entries_customers_v2_api_lottery_entries(read): Get lottery entries for valid lotteries- For WINNER, WAITING and PENDING status, return every entry.
- For LOSER status, only return entries for last 7 days of performance
- For all other statuses, do not return to clients. Note: Clients don't know about waiting status, so return PENDING status instead of waiting
update_batch_customers_v2_api_lottery_entries(write): Batch update a set of LotteryEntry resources. Right now, this is only supported for updating social shares on HP Lottery entries, and all LotteryEntry IDs must be for showtimes in the same LotteryGroup.
Resource api.v2.customers.offers:
retrieve_customers_v2_api_offers(read): Get an offer if it is currently available. If offer is unavailable client needs to display error message from server. (available offer is offer with status ASSIGNED or SOLD_OUT).update_customers_v2_api_offers(write): Modified offer fields e.ghasBeenViewedorstatus. Client could modifyhasBeenViewedonly to true andstatusonly toDECLINEDlist_customers_v2_api_offers(read): Get a list of offers that I currently have available (only with status ASSIGNED and SOLD_OUT).
Resource api.v2.customers.payment_methods:
delete_customers_v2_api_payment_methods(write): Remove payment methodpayment_methods_customers_v2_api_payment_methods(write): Create new payment methodretrieve_payment_methods_customers_v2_api_payment_methods(read): Get all payment methods.
Resource api.v2.customers.shows_reviews:
retrieve_shows_reviews_customers_v2_api_shows_reviews(read): Get all show ratings for current customer.update_shows_reviews_customers_v2_api_shows_reviews(write): Post a rating ImplicitcustomerId = me.
Resource api.v2.customers.rush_grants:
retrieve_rush_grants_customers_v2_api_rush_grants(read): Get a list of shows I currently have authorization to access. Ifshowparameter exist - then only one show.rush_grants_customers_v2_api_rush_grants(write): Request a grant to access rush for ashow.
Resource api.v2.contentful.webhook:
handle_publish_article_contentful_v2_api_webhook(write): Publish an article.
Resource api.v2.holds:
create_v2_api_holds(write): Hold a group of tickets.holdTypedefine what type of tickets to hold.holdType = REGULARand (seatSelectionType == BEST_AVAILABLE || seatSelectionType = null), required params are:showtimeproviderproviderParamsnumTickets
holdType = REGULARand seatSelectionType == PYOS, required params are:seatSelectionTypeshowtimeseats
holdType = RUSH, required params are:showtimenumTicketscustomer
holdType = LOTTERY, required params are:lotteryEntrycustomer
holdType = OFFER, required params are:offercustomer
holdType = null, the only param allowed is:holdBodyId
retrieve_v2_api_holds(read): Get a Hold by ID. Non-TodayTix retailers get aHoldSummary, TodayTix returnsHold.update_v2_api_holds(write): Updates the specified Hold. This can be for a few actions:- Add new seats to a previously cleared hold. Not supported on TodayTix retailer.
- Apply a voucher to a non-empty hold.
- Apply a ticket protection plan to the hold.
The server will verify that the access token is able to manipulate the requested holdId.
list_v2_api_holds(read): Get an array of all holds the present access token is authorized to have. For now, this is always a list of length one.delete_v2_api_holds(write): Releases the specified hold. The server will verify that the access token is able to manipulate (and delete) the requested holdId.delete_ticket_protection_v2_api_holds(write): Removes applied ticket protection plan to the specified hold. The server will verify that the access token is able to manipulate the requested holdId.delete_voucher_v2_api_holds(write): Removes applied voucher to the specified hold. The server will verify that the access token is able to manipulate the requested holdId.retrieve_apple_pay_session_v2_api_holds(read): Gets Apple Pay Session data to be used to purchase hold with Apple Pay.update_clear_v2_api_holds(write): Clear the existing "basket" of its seats. This means we release the seats on the provider side, but the hold remains live with the same "booking reference number" (hold ID). New seats can subsequently be added to the empty hold viaPATCH /api/v2/holds/{holdId}. This is not currently supported for TodayTix retailer.
Resource api.v2.locations:
retrieve_v2_api_locations(read): GetLocationwithid.list_v2_api_locations(read): Gets allLocations.retrieve_geolocation_v2_api_locations(read): Capture geolocation data from CloudFront headers, and return them as a JSON payload.retrieve_geosegment_v2_api_locations(read): Given a set of params, determine the geosegment a customer belongs to, relative to the main browsing location. Return values can be LOCAL, REGIONAL or TOURIST.retrieve_privacy_law_v2_api_locations(read): Given a set of params, determine the privacy law by which the anticipated customer would be covered, assuming they complete the sign-up process.
Resource api.v2.notifications:
create_v2_api_notifications(write): Receives a Create or Voucher Release Notification for the Provider Orderdelete_all_v2_api_notifications(write): Receives a Cancellation Notification for the Provider Ordervalidate_pricing_v2_api_notifications(write): Validates notifications and updates their statuses, requeueing them if validation fails
Resource api.v2.orders:
create_v2_api_orders(write): Create a new order for the requested customer, or guest, using the requested holdId. The server will verify that the access token is authorized to access this hold, and also that the authenticated principal has the ability to create an order for the requested customer.retrieve_v2_api_orders(read): Get an order ID by HoldTransaction ID.If the request originates from the TodayTix retailer, the ID represents the transaction ID.
For requests from non-TT retailers, the ID is the hold ID prefixed with "TTG" (e.g., "TTG12341234"). Non-TT retailers do not use authorization tokens, so the hold's
secretKeymust be included in the request payload.update_v2_api_orders(write): Modify an order. The server will verify that the authenticated principal is allowed to edit this orderId, by verifying the customer of the order is currently authenticated. If the id is a hold id, then the authentication is based on the secret in the request body and the secret in the hold transaction being equal.list_v2_api_orders(read): Get all orders that the authenticated principal has access to. Best usage will specify the customer public id or "me" in the query filter parameter, even though it is not strictly necessary (as a customer can only access their own orders).assigned_customers_v2_api_orders(write): Assigning a customer to an order. The server will verify that the authenticated principal is allowed to create a customer for this orderId, by verifying the customer of the order is currently authenticated.initiate_transfer_v2_api_orders(write): Starts the transfer of the received order to the currently authenticated customer.refund_voucher_v2_api_orders(write): Refund a PWYH voucher to credit card.reissue_ticket_v2_api_orders(write): Send a new email related to this order with the new barcodes. The server will verify that the authenticated principal is allowed to access this order's id.relist_v2_api_orders(write): Puts an order up for resale, and will issue a voucher to the customer if it resellsresend_confirmation_email_v2_api_orders(write): Send a new email related to this order. The server will verify that the authenticated principal is allowed to access this id.retrieve_apple_passes_v2_api_orders(read): Get a List of Apple passes to add to Wallet. The server will verify access to this order.retrieve_customer_care_information_v2_api_orders(read): Get the order with a given confirmation number, authenticating with the attached secret.retrieve_google_passes_v2_api_orders(read): Get a URL containing one or more Google Pay Passes for this order.retrieve_relist_info_v2_api_orders(read): Get the relist information for this order.ticket_protection_redemption_v2_api_orders(write): Redeem ticket protection for an existing order given order's idupdate_reclaim_v2_api_orders(write): Reclaim tickets from customer relist transaction given original transaction Idvoid_v2_api_orders(write): Void an order by its hold ID.
Resource api.v2.orders.transfers:
create_orders_v2_api_transfers(write): Initiates a transfer of an order to another customer.This endpoint allows an authenticated customer to transfer their order to another customer. The response includes a transfer URL that can be shared with the recipient.
retrieve_orders_v2_api_transfers(read): This endpoint retrieves limited transfer information for the recipient, allowing them to preview and potentially accept the transfer. This doesn't required authentication, but the transferId, orderId and action token must be valid.update_orders_v2_api_transfers(write): This endpoint allows an authenticated customer to update a transfer status.
Resource api.v2.retailers:
retrieve_v2_api_retailers(read): GetRetailerwithretailerId. Also possible to usemeinstead ofretailerId, but in this case Basic Auth is required. In case Basic Auth exists, thenRetailerDetailswill be returned.retrieve_psp_options_v2_api_retailers(read): Get list ofpspOptionsforretailerIdand 'currencyCode.
Resource api.v2.shows:
retrieve_v2_api_shows(read): Get show by showId. You could use parameter embed=showGroupto include showGroup object inside of this show.list_v2_api_shows(read): Retrieve a list of shows based on given criteriaretrieve_deals_v2_api_shows(read): Get all shows that have exclusive inventory availableretrieve_rush_settings_v2_api_shows(read): Get rushSettings for show
Resource api.v2.shows.lottery_settings:
generate_new_question_shows_v2_api_lottery_settings(write): Generate a new skill-based problem for this lotteryretrieve_lottery_settings_shows_v2_api_lottery_settings(read): Get lotterySettings for show
Resource api.v2.shows.showtimes:
list_shows_v2_api_showtimes(read): Get list of all UPCOMING showtimes for show.retrieve_inventory_items_shows_v2_api_showtimes(read): Get list of InventoryItem for this showtime.InventoryItem is combination of section, price and discount.
Client need to group all Inventory Items by section_price_discount and order by orderNum, ASC, and then by price, DESC.
retrieve_sections_shows_v2_api_showtimes(read): Get list of AssignedSection or GASection for this showtime.retrieve_with_rush_availability_shows_v2_api_showtimes(read): Get list of all UPCOMING showtimes for show that have rush tickets available.
Resource api.v2.show_groups:
retrieve_v2_api_show_groups(read): Get ShowGroup by idretrieve_show_groups_v2_api_show_groups(read): Get list of all show groups associated with a specific location
Resource views.v2:
list_hero_views_views_v2(read): Get list of hero views for specific location, or for a list of Shows or ShowGroupsWhen
locationis passed:- Ignore
showIdandshowGroupId - Return a list of hero views for the specific location.
When
locationis NOT passed:- Return a list of hero views for the
Shows orShowGroups specified by the ids in the list.
Supports pagination.
- Ignore
retrieve_hero_filter_views_v2(read): Get Hero Filter to fulfill filter view
Resource feeds.v2:
list_shows_feeds_v2(read): A feed for show data, used for Iterable for supplemental data for email templating. Includes only active shows in the requested locations. Excludes URL shows.retrieve_feed_feeds_v2(read): Returns a product feed containing information about shows in the format required by a particular advertising platform (determined based on the providedtype).
