diff --git a/app/en/mcp-servers/productivity/ashby-api/page.mdx b/app/en/mcp-servers/productivity/ashby-api/page.mdx
new file mode 100644
index 00000000..01366371
--- /dev/null
+++ b/app/en/mcp-servers/productivity/ashby-api/page.mdx
@@ -0,0 +1,4712 @@
+# AshbyApi
+
+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 AshbyApi MCP Server offers a comprehensive suite of tools for managing recruitment processes within the Ashby platform. Users can perform a variety of actions, including:
+
+- Create, update, and manage job applications and candidates.
+- Retrieve detailed information about candidates, applications, jobs, and departments.
+- Manage interview schedules, feedback, and assessments.
+- Handle job postings, openings, and associated locations.
+- Utilize webhooks for event notifications and manage user permissions.
+
+This server is designed to streamline the hiring process, making it easier to track candidates and manage recruitment workflows effectively.
+
+## 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).
+
+
+## AshbyApi.GetApiKeyInfo
+
+
+
+
+Retrieve information about the current API key in use.
+
+**Parameters**
+
+- **empty_request_body** (`json`, optional) Provide an empty JSON object as the request body. This is required to make the call but should contain no data.
+
+**Secrets**
+
+This tool requires the following secrets: `ASHBY_API_KEY` (learn how to [configure secrets](/home/build-tools/create-a-tool-with-secrets))
+
+## AshbyApi.ChangeApplicationSource
+
+
+
+
+Change the source of an application in Ashby.
+
+**Parameters**
+
+- **application_source_details** (`json`, optional) JSON object containing `applicationId` and `sourceId` to specify the application and its new source.
+
+**Secrets**
+
+This tool requires the following secrets: `ASHBY_API_KEY` (learn how to [configure secrets](/home/build-tools/create-a-tool-with-secrets))
+
+## AshbyApi.ChangeApplicationStage
+
+
+
+
+Change the stage of a candidate's application.
+
+**Parameters**
+
+- **application_stage_change_details** (`json`, optional) A JSON object containing applicationId, interviewStageId, and optional archiveReasonId and archiveEmail details, to change the application stage.
+
+**Secrets**
+
+This tool requires the following secrets: `ASHBY_API_KEY` (learn how to [configure secrets](/home/build-tools/create-a-tool-with-secrets))
+
+## AshbyApi.CreateJobApplication
+
+
+
+
+Create a job application for a candidate.
+
+**Parameters**
+
+- **job_application_data** (`json`, optional) JSON object containing candidateId, jobId, interviewPlanId, interviewStageId, sourceId, creditedToUserId, createdAt, and applicationHistory for the job application.
+
+**Secrets**
+
+This tool requires the following secrets: `ASHBY_API_KEY` (learn how to [configure secrets](/home/build-tools/create-a-tool-with-secrets))
+
+## AshbyApi.FetchApplicationDetails
+
+
+
+
+Fetch application details using application or form instance ID.
+
+**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: `ASHBY_API_KEY` (learn how to [configure secrets](/home/build-tools/create-a-tool-with-secrets))
+
+## AshbyApi.ListApplications
+
+
+
+
+Retrieve all applications in the organization.
+
+**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: `ASHBY_API_KEY` (learn how to [configure secrets](/home/build-tools/create-a-tool-with-secrets))
+
+## AshbyApi.TransferApplicationToJob
+
+
+
+
+Transfer an application to a different job.
+
+**Parameters**
+
+- **application_transfer_details** (`json`, optional) A JSON object containing the details for transferring an application, including `applicationId`, `jobId`, `interviewPlanId`, `interviewStageId`, and `startAutomaticActivities`.
+
+**Secrets**
+
+This tool requires the following secrets: `ASHBY_API_KEY` (learn how to [configure secrets](/home/build-tools/create-a-tool-with-secrets))
+
+## AshbyApi.UpdateApplicationStatus
+
+
+
+
+Updates the status or details of an application.
+
+**Parameters**
+
+- **application_update_payload** (`json`, optional) JSON object containing applicationId, sourceId, creditedToUserId, createdAt, and sendNotifications to update application details. sendNotifications controls subscriber notifications.
+
+**Secrets**
+
+This tool requires the following secrets: `ASHBY_API_KEY` (learn how to [configure secrets](/home/build-tools/create-a-tool-with-secrets))
+
+## AshbyApi.UpdateApplicationHistory
+
+
+
+
+Update the history of an application.
+
+**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: `ASHBY_API_KEY` (learn how to [configure secrets](/home/build-tools/create-a-tool-with-secrets))
+
+## AshbyApi.GetApplicationHistory
+
+
+
+
+Fetch a paginated list of application history items.
+
+**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: `ASHBY_API_KEY` (learn how to [configure secrets](/home/build-tools/create-a-tool-with-secrets))
+
+## AshbyApi.GetCandidateCriteriaEvaluations
+
+
+
+
+Retrieve AI evaluations for candidate job criteria.
+
+**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: `ASHBY_API_KEY` (learn how to [configure secrets](/home/build-tools/create-a-tool-with-secrets))
+
+## AshbyApi.ListApplicationFeedback
+
+
+
+
+Retrieve interview feedback and scorecards for applications.
+
+**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: `ASHBY_API_KEY` (learn how to [configure secrets](/home/build-tools/create-a-tool-with-secrets))
+
+## AshbyApi.AddHiringTeamMember
+
+
+
+
+Add a user to the hiring team for an application.
+
+**Parameters**
+
+- **hiring_team_member_details** (`json`, optional) A JSON object containing 'applicationId', 'teamMemberId', and 'roleId'. These IDs specify the application, team member, and role for adding to the hiring team.
+
+**Secrets**
+
+This tool requires the following secrets: `ASHBY_API_KEY` (learn how to [configure secrets](/home/build-tools/create-a-tool-with-secrets))
+
+## AshbyApi.RemoveHiringTeamMember
+
+
+
+
+Remove a user from the hiring team for an application.
+
+**Parameters**
+
+- **hiring_team_removal_details** (`json`, optional) JSON object containing applicationId, teamMemberId, and roleId for the user to be removed.
+
+**Secrets**
+
+This tool requires the following secrets: `ASHBY_API_KEY` (learn how to [configure secrets](/home/build-tools/create-a-tool-with-secrets))
+
+## AshbyApi.GetHiringTeamRoles
+
+
+
+
+Retrieve all available hiring team roles for applications.
+
+**Parameters**
+
+This tool does not take any parameters.
+**Secrets**
+
+This tool requires the following secrets: `ASHBY_API_KEY` (learn how to [configure secrets](/home/build-tools/create-a-tool-with-secrets))
+
+## AshbyApi.SubmitApplicationFeedback
+
+
+
+
+Submit application feedback forms with various field types.
+
+**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: `ASHBY_API_KEY` (learn how to [configure secrets](/home/build-tools/create-a-tool-with-secrets))
+
+## AshbyApi.GetApprovalList
+
+
+
+
+Retrieve all approvals in the organization.
+
+**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: `ASHBY_API_KEY` (learn how to [configure secrets](/home/build-tools/create-a-tool-with-secrets))
+
+## AshbyApi.UpdateApprovalDefinition
+
+
+
+
+Create or update an approval definition for an entity.
+
+**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: `ASHBY_API_KEY` (learn how to [configure secrets](/home/build-tools/create-a-tool-with-secrets))
+
+## AshbyApi.ListArchiveReasons
+
+
+
+
+Retrieve a list of archive reasons.
+
+**Parameters**
+
+- **include_archived_interview_plans** (`boolean`, optional) Set to true to include archived interview plans in the results.
+
+**Secrets**
+
+This tool requires the following secrets: `ASHBY_API_KEY` (learn how to [configure secrets](/home/build-tools/create-a-tool-with-secrets))
+
+## AshbyApi.AddCompletedAssessmentToCandidate
+
+
+
+
+Adds a completed assessment to a candidate's record.
+
+**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: `ASHBY_API_KEY` (learn how to [configure secrets](/home/build-tools/create-a-tool-with-secrets))
+
+## AshbyApi.StartAssessment
+
+
+
+
+Start an assessment using the Ashby 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: `ASHBY_API_KEY` (learn how to [configure secrets](/home/build-tools/create-a-tool-with-secrets))
+
+## AshbyApi.ListAssessments
+
+
+
+
+Retrieve a list of available assessments.
+
+**Parameters**
+
+This tool does not take any parameters.
+**Secrets**
+
+This tool requires the following secrets: `ASHBY_API_KEY` (learn how to [configure secrets](/home/build-tools/create-a-tool-with-secrets))
+
+## AshbyApi.UpdateAssessmentStatus
+
+
+
+
+Update the status of a candidate assessment in Ashby.
+
+**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: `ASHBY_API_KEY` (learn how to [configure secrets](/home/build-tools/create-a-tool-with-secrets))
+
+## AshbyApi.CancelAssessment
+
+
+
+
+Cancel an ongoing assessment.
+
+**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: `ASHBY_API_KEY` (learn how to [configure secrets](/home/build-tools/create-a-tool-with-secrets))
+
+## AshbyApi.AddCandidateToProject
+
+
+
+
+Add a candidate to a specified project.
+
+**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: `ASHBY_API_KEY` (learn how to [configure secrets](/home/build-tools/create-a-tool-with-secrets))
+
+## AshbyApi.AddCandidateTag
+
+
+
+
+Add a tag to a candidate in the recruitment 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: `ASHBY_API_KEY` (learn how to [configure secrets](/home/build-tools/create-a-tool-with-secrets))
+
+## AshbyApi.AnonymizeCandidateData
+
+
+
+
+Permanently anonymize a candidate's data 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: `ASHBY_API_KEY` (learn how to [configure secrets](/home/build-tools/create-a-tool-with-secrets))
+
+## AshbyApi.CreateCandidate
+
+
+
+
+Create a new candidate entry.
+
+**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: `ASHBY_API_KEY` (learn how to [configure secrets](/home/build-tools/create-a-tool-with-secrets))
+
+## AshbyApi.CreateCandidateNote
+
+
+
+
+Add a note to a candidate's profile in Ashby.
+
+**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: `ASHBY_API_KEY` (learn how to [configure secrets](/home/build-tools/create-a-tool-with-secrets))
+
+## AshbyApi.GetCandidateInformation
+
+
+
+
+Retrieve detailed information of a candidate using their ID.
+
+**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: `ASHBY_API_KEY` (learn how to [configure secrets](/home/build-tools/create-a-tool-with-secrets))
+
+## AshbyApi.ListCandidates
+
+
+
+
+Retrieve a list of all candidates in an organization.
+
+**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: `ASHBY_API_KEY` (learn how to [configure secrets](/home/build-tools/create-a-tool-with-secrets))
+
+## AshbyApi.ListCandidateClientInfo
+
+
+
+
+Retrieve client info records for a candidate.
+
+**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: `ASHBY_API_KEY` (learn how to [configure secrets](/home/build-tools/create-a-tool-with-secrets))
+
+## AshbyApi.ListCandidateNotes
+
+
+
+
+Retrieve all notes associated with a candidate.
+
+**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: `ASHBY_API_KEY` (learn how to [configure secrets](/home/build-tools/create-a-tool-with-secrets))
+
+## AshbyApi.ListCandidateProjects
+
+
+
+
+Retrieve all projects linked to a candidate.
+
+**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: `ASHBY_API_KEY` (learn how to [configure secrets](/home/build-tools/create-a-tool-with-secrets))
+
+## AshbyApi.FindCandidates
+
+
+
+
+Search for candidates by email or name.
+
+**Parameters**
+
+- **candidate_email** (`string`, optional) The email address of the candidate to search for. Use this to refine the search results and find specific candidates.
+- **candidate_name** (`string`, optional) The name of the candidate to search for in the database.
+
+**Secrets**
+
+This tool requires the following secrets: `ASHBY_API_KEY` (learn how to [configure secrets](/home/build-tools/create-a-tool-with-secrets))
+
+## AshbyApi.UpdateCandidateInfo
+
+
+
+
+Update an existing candidate's information.
+
+**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: `ASHBY_API_KEY` (learn how to [configure secrets](/home/build-tools/create-a-tool-with-secrets))
+
+## AshbyApi.CreateCandidateTag
+
+
+
+
+Create a new candidate tag in the Ashby 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: `ASHBY_API_KEY` (learn how to [configure secrets](/home/build-tools/create-a-tool-with-secrets))
+
+## AshbyApi.ListCandidateTags
+
+
+
+
+Retrieve a list of all candidate tags.
+
+**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: `ASHBY_API_KEY` (learn how to [configure secrets](/home/build-tools/create-a-tool-with-secrets))
+
+## AshbyApi.ListCloseReasons
+
+
+
+
+Get a list of close reasons for jobs or openings.
+
+**Parameters**
+
+- **include_archived_reasons** (`boolean`, optional) Set to true to include archived close reasons in the response.
+
+**Secrets**
+
+This tool requires the following secrets: `ASHBY_API_KEY` (learn how to [configure secrets](/home/build-tools/create-a-tool-with-secrets))
+
+## AshbyApi.ListEnabledCommunicationTemplates
+
+
+
+
+Retrieve all enabled communication templates.
+
+**Parameters**
+
+This tool does not take any parameters.
+**Secrets**
+
+This tool requires the following secrets: `ASHBY_API_KEY` (learn how to [configure secrets](/home/build-tools/create-a-tool-with-secrets))
+
+## AshbyApi.CreateCustomField
+
+
+
+
+Creates a new custom field in Ashby.
+
+**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: `ASHBY_API_KEY` (learn how to [configure secrets](/home/build-tools/create-a-tool-with-secrets))
+
+## AshbyApi.GetCustomFieldInfo
+
+
+
+
+Retrieve information about a custom field.
+
+**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: `ASHBY_API_KEY` (learn how to [configure secrets](/home/build-tools/create-a-tool-with-secrets))
+
+## AshbyApi.ListCustomFields
+
+
+
+
+Retrieve a list of all custom fields.
+
+**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: `ASHBY_API_KEY` (learn how to [configure secrets](/home/build-tools/create-a-tool-with-secrets))
+
+## AshbyApi.SetCustomFieldValue
+
+
+
+
+Update the value of a custom field for an object.
+
+**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: `ASHBY_API_KEY` (learn how to [configure secrets](/home/build-tools/create-a-tool-with-secrets))
+
+## AshbyApi.CreateDepartment
+
+
+
+
+Create a new department within an organization.
+
+**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: `ASHBY_API_KEY` (learn how to [configure secrets](/home/build-tools/create-a-tool-with-secrets))
+
+## AshbyApi.ArchiveDepartment
+
+
+
+
+Archive a department within an organization.
+
+**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: `ASHBY_API_KEY` (learn how to [configure secrets](/home/build-tools/create-a-tool-with-secrets))
+
+## AshbyApi.RestoreDepartment
+
+
+
+
+Restores a previously deleted department.
+
+**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: `ASHBY_API_KEY` (learn how to [configure secrets](/home/build-tools/create-a-tool-with-secrets))
+
+## AshbyApi.GetDepartmentDetails
+
+
+
+
+Fetches department details using a department ID.
+
+**Parameters**
+
+- **department_id** (`json`, optional) The ID of the department to fetch details for. This is required to retrieve accurate department information.
+
+**Secrets**
+
+This tool requires the following secrets: `ASHBY_API_KEY` (learn how to [configure secrets](/home/build-tools/create-a-tool-with-secrets))
+
+## AshbyApi.ListDepartments
+
+
+
+
+Retrieve a list of all departments.
+
+**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: `ASHBY_API_KEY` (learn how to [configure secrets](/home/build-tools/create-a-tool-with-secrets))
+
+## AshbyApi.MoveDepartment
+
+
+
+
+Relocate a department to a new parent structure.
+
+**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: `ASHBY_API_KEY` (learn how to [configure secrets](/home/build-tools/create-a-tool-with-secrets))
+
+## AshbyApi.UpdateDepartment
+
+
+
+
+Update existing department 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: `ASHBY_API_KEY` (learn how to [configure secrets](/home/build-tools/create-a-tool-with-secrets))
+
+## AshbyApi.RetrieveCandidateFileUrl
+
+
+
+
+Retrieve the URL of a candidate's associated file.
+
+**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: `ASHBY_API_KEY` (learn how to [configure secrets](/home/build-tools/create-a-tool-with-secrets))
+
+## AshbyApi.GetFeedbackFormInfo
+
+
+
+
+Fetch detailed information about a specific feedback form by ID.
+
+**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: `ASHBY_API_KEY` (learn how to [configure secrets](/home/build-tools/create-a-tool-with-secrets))
+
+## AshbyApi.ListFeedbackForms
+
+
+
+
+Retrieve a list of all feedback forms.
+
+**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: `ASHBY_API_KEY` (learn how to [configure secrets](/home/build-tools/create-a-tool-with-secrets))
+
+## AshbyApi.HiringTeamAddMember
+
+
+
+
+Adds a user to the hiring team for a job or application.
+
+**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: `ASHBY_API_KEY` (learn how to [configure secrets](/home/build-tools/create-a-tool-with-secrets))
+
+## AshbyApi.RemoveTeamMemberFromHiring
+
+
+
+
+Remove a member from the hiring team at job or application level.
+
+**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: `ASHBY_API_KEY` (learn how to [configure secrets](/home/build-tools/create-a-tool-with-secrets))
+
+## AshbyApi.ListHiringTeamRoles
+
+
+
+
+Retrieve possible hiring team roles within an organization.
+
+**Parameters**
+
+- **return_role_titles_only** (`boolean`, optional) Set to true to return only role titles. Set to false to return objects with id and title.
+
+**Secrets**
+
+This tool requires the following secrets: `ASHBY_API_KEY` (learn how to [configure secrets](/home/build-tools/create-a-tool-with-secrets))
+
+## AshbyApi.FetchInterviewDetails
+
+
+
+
+Retrieve interview details using interview ID.
+
+**Parameters**
+
+- **interview_id** (`json`, optional) The unique ID of the interview to fetch details for. This ID is required to retrieve the specific interview information.
+
+**Secrets**
+
+This tool requires the following secrets: `ASHBY_API_KEY` (learn how to [configure secrets](/home/build-tools/create-a-tool-with-secrets))
+
+## AshbyApi.ListInterviews
+
+
+
+
+Retrieve a list of all scheduled interviews.
+
+**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: `ASHBY_API_KEY` (learn how to [configure secrets](/home/build-tools/create-a-tool-with-secrets))
+
+## AshbyApi.ListInterviewEvents
+
+
+
+
+Retrieve a list of interview events for a schedule.
+
+**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: `ASHBY_API_KEY` (learn how to [configure secrets](/home/build-tools/create-a-tool-with-secrets))
+
+## AshbyApi.ListInterviewPlans
+
+
+
+
+Fetch a list of all available interview plans.
+
+**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: `ASHBY_API_KEY` (learn how to [configure secrets](/home/build-tools/create-a-tool-with-secrets))
+
+## AshbyApi.CancelInterviewSchedule
+
+
+
+
+Cancel an interview schedule using its ID.
+
+**Parameters**
+
+- **interview_schedule_cancel_details** (`json`, optional) A JSON object containing the ID of the interview schedule to cancel and whether rescheduling is allowed. Required JSON structure with keys 'id' and 'allowReschedule'.
+
+**Secrets**
+
+This tool requires the following secrets: `ASHBY_API_KEY` (learn how to [configure secrets](/home/build-tools/create-a-tool-with-secrets))
+
+## AshbyApi.CreateInterviewSchedule
+
+
+
+
+Create a scheduled interview in Ashby.
+
+**Parameters**
+
+- **interview_schedule_request** (`json`, optional) JSON object containing application ID, interview events, and extra data. Events include start time, end time, and interviewers.
+
+**Secrets**
+
+This tool requires the following secrets: `ASHBY_API_KEY` (learn how to [configure secrets](/home/build-tools/create-a-tool-with-secrets))
+
+## AshbyApi.GetInterviewSchedules
+
+
+
+
+Retrieve all interview schedules for the organization.
+
+**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: `ASHBY_API_KEY` (learn how to [configure secrets](/home/build-tools/create-a-tool-with-secrets))
+
+## AshbyApi.UpdateInterviewSchedule
+
+
+
+
+Update, add, or cancel interview schedule 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: `ASHBY_API_KEY` (learn how to [configure secrets](/home/build-tools/create-a-tool-with-secrets))
+
+## AshbyApi.ListInterviewStages
+
+
+
+
+Retrieve all interview stages for an interview plan in order.
+
+**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: `ASHBY_API_KEY` (learn how to [configure secrets](/home/build-tools/create-a-tool-with-secrets))
+
+## AshbyApi.FetchInterviewStageDetails
+
+
+
+
+Fetches details of a specific interview stage.
+
+**Parameters**
+
+- **interview_stage_id** (`json`, optional) The unique identifier of the interview stage to fetch details for. Required for retrieving the specific stage information.
+
+**Secrets**
+
+This tool requires the following secrets: `ASHBY_API_KEY` (learn how to [configure secrets](/home/build-tools/create-a-tool-with-secrets))
+
+## AshbyApi.ListInterviewStageGroups
+
+
+
+
+Retrieve all interview group stages in order.
+
+**Parameters**
+
+This tool does not take any parameters.
+**Secrets**
+
+This tool requires the following secrets: `ASHBY_API_KEY` (learn how to [configure secrets](/home/build-tools/create-a-tool-with-secrets))
+
+## AshbyApi.ListInterviewerPools
+
+
+
+
+Fetches a list of all interviewer pools.
+
+**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: `ASHBY_API_KEY` (learn how to [configure secrets](/home/build-tools/create-a-tool-with-secrets))
+
+## AshbyApi.GetInterviewerPoolInfo
+
+
+
+
+Retrieve information about an interviewer pool.
+
+**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: `ASHBY_API_KEY` (learn how to [configure secrets](/home/build-tools/create-a-tool-with-secrets))
+
+## AshbyApi.CreateInterviewerPool
+
+
+
+
+Creates a new interviewer pool for hiring processes.
+
+**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: `ASHBY_API_KEY` (learn how to [configure secrets](/home/build-tools/create-a-tool-with-secrets))
+
+## AshbyApi.UpdateInterviewerPool
+
+
+
+
+Update an interviewer pool.
+
+**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: `ASHBY_API_KEY` (learn how to [configure secrets](/home/build-tools/create-a-tool-with-secrets))
+
+## AshbyApi.ArchiveInterviewerPool
+
+
+
+
+Archive an interviewer pool when needed.
+
+**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: `ASHBY_API_KEY` (learn how to [configure secrets](/home/build-tools/create-a-tool-with-secrets))
+
+## AshbyApi.RestoreInterviewerPool
+
+
+
+
+Restores an archived interviewer pool.
+
+**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: `ASHBY_API_KEY` (learn how to [configure secrets](/home/build-tools/create-a-tool-with-secrets))
+
+## AshbyApi.AddUserToInterviewerPool
+
+
+
+
+Add a user to an interviewer pool in Ashby.
+
+**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: `ASHBY_API_KEY` (learn how to [configure secrets](/home/build-tools/create-a-tool-with-secrets))
+
+## AshbyApi.RemoveUserFromInterviewerPool
+
+
+
+
+Remove a user from an interviewer pool.
+
+**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: `ASHBY_API_KEY` (learn how to [configure secrets](/home/build-tools/create-a-tool-with-secrets))
+
+## AshbyApi.CreateNewJob
+
+
+
+
+Create a new job listing with specified details.
+
+**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: `ASHBY_API_KEY` (learn how to [configure secrets](/home/build-tools/create-a-tool-with-secrets))
+
+## AshbyApi.GetJobDetails
+
+
+
+
+Retrieve detailed information about a job using its ID.
+
+**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: `ASHBY_API_KEY` (learn how to [configure secrets](/home/build-tools/create-a-tool-with-secrets))
+
+## AshbyApi.ListAllJobs
+
+
+
+
+Retrieve all open, closed, and archived jobs from Ashby.
+
+**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: `ASHBY_API_KEY` (learn how to [configure secrets](/home/build-tools/create-a-tool-with-secrets))
+
+## AshbyApi.SetJobStatus
+
+
+
+
+Update the status of a job by its ID.
+
+**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: `ASHBY_API_KEY` (learn how to [configure secrets](/home/build-tools/create-a-tool-with-secrets))
+
+## AshbyApi.UpdateJobDetails
+
+
+
+
+Update details of an existing job.
+
+**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: `ASHBY_API_KEY` (learn how to [configure secrets](/home/build-tools/create-a-tool-with-secrets))
+
+## AshbyApi.UpdateJobCompensation
+
+
+
+
+Update a job's compensation details.
+
+**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: `ASHBY_API_KEY` (learn how to [configure secrets](/home/build-tools/create-a-tool-with-secrets))
+
+## AshbyApi.SearchJobsByTitle
+
+
+
+
+Search for jobs by title.
+
+**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: `ASHBY_API_KEY` (learn how to [configure secrets](/home/build-tools/create-a-tool-with-secrets))
+
+## AshbyApi.ListEnabledJobBoards
+
+
+
+
+Retrieve all enabled job boards.
+
+**Parameters**
+
+- **request_body_data** (`json`, optional) The JSON payload for the request. This should contain any necessary parameters for listing enabled job boards.
+
+**Secrets**
+
+This tool requires the following secrets: `ASHBY_API_KEY` (learn how to [configure secrets](/home/build-tools/create-a-tool-with-secrets))
+
+## AshbyApi.JobInterviewPlanInfo
+
+
+
+
+Retrieve a job's interview plan details.
+
+**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: `ASHBY_API_KEY` (learn how to [configure secrets](/home/build-tools/create-a-tool-with-secrets))
+
+## AshbyApi.GetJobPostingInfo
+
+
+
+
+Retrieve detailed information about a specific job posting.
+
+**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: `ASHBY_API_KEY` (learn how to [configure secrets](/home/build-tools/create-a-tool-with-secrets))
+
+## AshbyApi.ListPublishedJobPostings
+
+
+
+
+Retrieve all published and publicly listed job postings.
+
+**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: `ASHBY_API_KEY` (learn how to [configure secrets](/home/build-tools/create-a-tool-with-secrets))
+
+## AshbyApi.ListJobTemplates
+
+
+
+
+Retrieve all active and inactive job templates.
+
+**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: `ASHBY_API_KEY` (learn how to [configure secrets](/home/build-tools/create-a-tool-with-secrets))
+
+## AshbyApi.UpdateJobPosting
+
+
+
+
+Update an existing job posting on the Ashby platform.
+
+**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: `ASHBY_API_KEY` (learn how to [configure secrets](/home/build-tools/create-a-tool-with-secrets))
+
+## AshbyApi.ArchiveLocation
+
+
+
+
+Archives a location or location hierarchy.
+
+**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: `ASHBY_API_KEY` (learn how to [configure secrets](/home/build-tools/create-a-tool-with-secrets))
+
+## AshbyApi.CreateLocation
+
+
+
+
+Create a location or location hierarchy.
+
+**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: `ASHBY_API_KEY` (learn how to [configure secrets](/home/build-tools/create-a-tool-with-secrets))
+
+## AshbyApi.GetLocationDetails
+
+
+
+
+Retrieve detailed information for a specific location.
+
+**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: `ASHBY_API_KEY` (learn how to [configure secrets](/home/build-tools/create-a-tool-with-secrets))
+
+## AshbyApi.ListAllLocations
+
+
+
+
+Retrieve a list of all available locations.
+
+**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: `ASHBY_API_KEY` (learn how to [configure secrets](/home/build-tools/create-a-tool-with-secrets))
+
+## AshbyApi.MoveLocationInHierarchy
+
+
+
+
+Move a location within the organizational hierarchy.
+
+**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: `ASHBY_API_KEY` (learn how to [configure secrets](/home/build-tools/create-a-tool-with-secrets))
+
+## AshbyApi.RestoreArchivedLocation
+
+
+
+
+Restores an archived location or hierarchy.
+
+**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: `ASHBY_API_KEY` (learn how to [configure secrets](/home/build-tools/create-a-tool-with-secrets))
+
+## AshbyApi.UpdateLocationAddress
+
+
+
+
+Update the address of a location.
+
+**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: `ASHBY_API_KEY` (learn how to [configure secrets](/home/build-tools/create-a-tool-with-secrets))
+
+## AshbyApi.UpdateLocationName
+
+
+
+
+Updates the name of a location.
+
+**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: `ASHBY_API_KEY` (learn how to [configure secrets](/home/build-tools/create-a-tool-with-secrets))
+
+## AshbyApi.UpdateLocationRemoteStatus
+
+
+
+
+Update the remote status of a specific location.
+
+**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: `ASHBY_API_KEY` (learn how to [configure secrets](/home/build-tools/create-a-tool-with-secrets))
+
+## AshbyApi.UpdateWorkplaceType
+
+
+
+
+Update the workplace type for a specific location.
+
+**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: `ASHBY_API_KEY` (learn how to [configure secrets](/home/build-tools/create-a-tool-with-secrets))
+
+## AshbyApi.OfferApprovalAction
+
+
+
+
+Approve an offer or a specific step in the approval process.
+
+**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: `ASHBY_API_KEY` (learn how to [configure secrets](/home/build-tools/create-a-tool-with-secrets))
+
+## AshbyApi.CreateOffer
+
+
+
+
+Create a new offer using specified form fields.
+
+**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: `ASHBY_API_KEY` (learn how to [configure secrets](/home/build-tools/create-a-tool-with-secrets))
+
+## AshbyApi.GetOfferDetails
+
+
+
+
+Retrieve details about a specific offer using its ID.
+
+**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: `ASHBY_API_KEY` (learn how to [configure secrets](/home/build-tools/create-a-tool-with-secrets))
+
+## AshbyApi.GetLatestOffers
+
+
+
+
+Retrieve the latest version of all offers available.
+
+**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: `ASHBY_API_KEY` (learn how to [configure secrets](/home/build-tools/create-a-tool-with-secrets))
+
+## AshbyApi.CreateCandidateOfferVersion
+
+
+
+
+Initiate a new offer version for a candidate.
+
+**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: `ASHBY_API_KEY` (learn how to [configure secrets](/home/build-tools/create-a-tool-with-secrets))
+
+## AshbyApi.UpdateOffer
+
+
+
+
+Update an existing offer and retrigger approval steps.
+
+**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: `ASHBY_API_KEY` (learn how to [configure secrets](/home/build-tools/create-a-tool-with-secrets))
+
+## AshbyApi.StartOfferProcess
+
+
+
+
+Initiate an offer process for a candidate.
+
+**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: `ASHBY_API_KEY` (learn how to [configure secrets](/home/build-tools/create-a-tool-with-secrets))
+
+## AshbyApi.GetOpeningInfo
+
+
+
+
+Retrieve job opening details using a UUID.
+
+**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: `ASHBY_API_KEY` (learn how to [configure secrets](/home/build-tools/create-a-tool-with-secrets))
+
+## AshbyApi.ListJobOpenings
+
+
+
+
+Retrieve a list of current job openings.
+
+**Parameters**
+
+- **last_sync_token** (`string`, optional) Opaque token representing the last time a full set of results was fetched. Use this to sync data updates.
+- **page_cursor** (`string`, optional) String indicating which page of job openings results to fetch, used for pagination.
+
+**Secrets**
+
+This tool requires the following secrets: `ASHBY_API_KEY` (learn how to [configure secrets](/home/build-tools/create-a-tool-with-secrets))
+
+## AshbyApi.SearchJobOpenings
+
+
+
+
+Search for job openings by identifier.
+
+**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: `ASHBY_API_KEY` (learn how to [configure secrets](/home/build-tools/create-a-tool-with-secrets))
+
+## AshbyApi.CreateJobOpening
+
+
+
+
+Create a new job opening in the system.
+
+**Parameters**
+
+- **associated_job_ids** (`array[string]`, optional) Array of job IDs related to the opening.
+- **department_team_id** (`string`, optional) The unique identifier for the department or team associated with the job opening.
+- **employment_start_date** (`string`, optional) The date (in YYYY-MM-DD format) when the hired person is expected to start employment.
+- **employment_type** (`string`, optional) The employment type for this opening. Options include: FullTime, PartTime, Intern, Contract, Temporary.
+- **identifiers** (`string`, optional) Comma-separated list of jobIds, targetHireDate, targetStartDate, isBackfill, and employmentType to define job details.
+- **is_backfill** (`boolean`, optional) Indicate whether the job opening is intended to backfill a previous employee's position.
+- **job_description** (`string`, optional) A detailed description of the job opening, including responsibilities and qualifications.
+- **location_ids** (`array[string]`, optional) A list of location IDs associated with the job opening.
+- **opening_state** (`string`, optional) Specifies the state of the job opening. Options: Draft, Approved, Open, Closed. Defaults to Draft. Additional validation may be needed if not Draft.
+- **target_hire_date** (`string`, optional) Specify the date (YYYY-MM-DD) by which the hire is intended to be made for the job opening.
+
+**Secrets**
+
+This tool requires the following secrets: `ASHBY_API_KEY` (learn how to [configure secrets](/home/build-tools/create-a-tool-with-secrets))
+
+## AshbyApi.AddJobToOpening
+
+
+
+
+Adds a job to an opening.
+
+**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: `ASHBY_API_KEY` (learn how to [configure secrets](/home/build-tools/create-a-tool-with-secrets))
+
+## AshbyApi.RemoveJobFromOpening
+
+
+
+
+Remove a job from an opening.
+
+**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: `ASHBY_API_KEY` (learn how to [configure secrets](/home/build-tools/create-a-tool-with-secrets))
+
+## AshbyApi.AddLocationToJobOpening
+
+
+
+
+Adds a location to a job opening.
+
+**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: `ASHBY_API_KEY` (learn how to [configure secrets](/home/build-tools/create-a-tool-with-secrets))
+
+## AshbyApi.RemoveLocationFromOpening
+
+
+
+
+Remove a location from a job opening.
+
+**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: `ASHBY_API_KEY` (learn how to [configure secrets](/home/build-tools/create-a-tool-with-secrets))
+
+## AshbyApi.SetOpeningState
+
+
+
+
+Update the state of a job opening.
+
+**Parameters**
+
+- **close_reason_id** (`string`, optional) The ID for the reason why the opening is closed, required when setting the state to closed.
+- **new_opening_state** (`string`, optional) The new state to update the job opening to. Accepted values are 'Draft', 'Approved', 'Open', 'Closed'.
+- **opening_id** (`string`, optional) The unique identifier of the job opening to be updated.
+
+**Secrets**
+
+This tool requires the following secrets: `ASHBY_API_KEY` (learn how to [configure secrets](/home/build-tools/create-a-tool-with-secrets))
+
+## AshbyApi.SetOpeningArchivedState
+
+
+
+
+Set or unset the archived state of a job opening.
+
+**Parameters**
+
+- **opening_id** (`string`, optional) The ID of the job opening to archive or unarchive.
+- **set_archived_state** (`boolean`, optional) Boolean to set the archived state of a job opening. Use true to archive and false to unarchive.
+
+**Secrets**
+
+This tool requires the following secrets: `ASHBY_API_KEY` (learn how to [configure secrets](/home/build-tools/create-a-tool-with-secrets))
+
+## AshbyApi.UpdateJobOpening
+
+
+
+
+Update the details of a job opening.
+
+**Parameters**
+
+- **department_team_id** (`string`, optional) The unique ID of the department or team associated with the job opening.
+- **employment_type** (`string`, optional) Specifies the employment type for the job opening. Can be FullTime, PartTime, Intern, Contract, or Temporary.
+- **fields_to_update** (`string`, optional) Specify the fields you want to update, such as jobIds, targetHireDate, targetStartDate, isBackfill, employmentType.
+- **is_backfill** (`boolean`, optional) Indicate if the opening is intended to backfill an employee. Use true for backfill, false otherwise.
+- **job_description_update** (`string`, optional) The new description text for the job opening. Provide a detailed and clear update relevant to the job role.
+- **opening_identifier** (`string`, optional) The unique ID of the job opening to update.
+- **target_hire_date** (`string`, optional) The date in YYYY-MM-DD format by which you intend to hire for the opening.
+- **target_start_date** (`string`, optional) The intended start date (in YYYY-MM-DD format) for a newly hired employee.
+
+**Secrets**
+
+This tool requires the following secrets: `ASHBY_API_KEY` (learn how to [configure secrets](/home/build-tools/create-a-tool-with-secrets))
+
+## AshbyApi.GetProjectInformation
+
+
+
+
+Retrieve detailed information about a project.
+
+**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: `ASHBY_API_KEY` (learn how to [configure secrets](/home/build-tools/create-a-tool-with-secrets))
+
+## AshbyApi.ListProjects
+
+
+
+
+Retrieve a list of projects.
+
+**Parameters**
+
+- **last_sync_token** (`string`, optional) An opaque token from the last successful data sync. This is used to fetch updates.
+- **max_items_to_return** (`integer`, optional) The maximum number of projects to return. The default and maximum value is 100.
+- **page_results_cursor** (`string`, optional) An opaque cursor indicating which page of results to fetch from the project list.
+
+**Secrets**
+
+This tool requires the following secrets: `ASHBY_API_KEY` (learn how to [configure secrets](/home/build-tools/create-a-tool-with-secrets))
+
+## AshbyApi.SearchProjectsByTitle
+
+
+
+
+Search for projects by title for quick lookups.
+
+**Parameters**
+
+- **project_title** (`string`, optional) The title of the project to search for. Use this to narrow down the results to specific projects based on their name.
+
+**Secrets**
+
+This tool requires the following secrets: `ASHBY_API_KEY` (learn how to [configure secrets](/home/build-tools/create-a-tool-with-secrets))
+
+## AshbyApi.CreateCandidateReferral
+
+
+
+
+Creates a candidate referral 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: `ASHBY_API_KEY` (learn how to [configure secrets](/home/build-tools/create-a-tool-with-secrets))
+
+## AshbyApi.GetReferralFormInfo
+
+
+
+
+Fetches or creates the default referral form details.
+
+**Parameters**
+
+This tool does not take any parameters.
+**Secrets**
+
+This tool requires the following secrets: `ASHBY_API_KEY` (learn how to [configure secrets](/home/build-tools/create-a-tool-with-secrets))
+
+## AshbyApi.GenerateAndPollReport
+
+
+
+
+Generate a new report or poll status of report generation.
+
+**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: `ASHBY_API_KEY` (learn how to [configure secrets](/home/build-tools/create-a-tool-with-secrets))
+
+## AshbyApi.RetrieveSyncReport
+
+
+
+
+Retrieve report data synchronously with Ashby.
+
+**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: `ASHBY_API_KEY` (learn how to [configure secrets](/home/build-tools/create-a-tool-with-secrets))
+
+## AshbyApi.ListAllSources
+
+
+
+
+Retrieve a list of all sources for hiring processes.
+
+**Parameters**
+
+- **include_archived_items** (`boolean`, optional) When true, archived items are included in the results.
+
+**Secrets**
+
+This tool requires the following secrets: `ASHBY_API_KEY` (learn how to [configure secrets](/home/build-tools/create-a-tool-with-secrets))
+
+## AshbyApi.ListSourceTrackingLinks
+
+
+
+
+Retrieve all source custom tracking links.
+
+**Parameters**
+
+- **include_disabled_tracking_links** (`boolean`, optional) Set to true to include disabled tracking links in the list.
+
+**Secrets**
+
+This tool requires the following secrets: `ASHBY_API_KEY` (learn how to [configure secrets](/home/build-tools/create-a-tool-with-secrets))
+
+## AshbyApi.GetSurveyFormDetails
+
+
+
+
+Retrieve details of a survey form definition by id.
+
+**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: `ASHBY_API_KEY` (learn how to [configure secrets](/home/build-tools/create-a-tool-with-secrets))
+
+## AshbyApi.ListSurveyFormDefinitions
+
+
+
+
+Retrieve all survey form definitions.
+
+**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: `ASHBY_API_KEY` (learn how to [configure secrets](/home/build-tools/create-a-tool-with-secrets))
+
+## AshbyApi.CreateSurveyRequest
+
+
+
+
+Create a survey request and get a survey URL.
+
+**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: `ASHBY_API_KEY` (learn how to [configure secrets](/home/build-tools/create-a-tool-with-secrets))
+
+## AshbyApi.ListSurveyRequests
+
+
+
+
+Retrieve a list of all survey requests.
+
+**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: `ASHBY_API_KEY` (learn how to [configure secrets](/home/build-tools/create-a-tool-with-secrets))
+
+## AshbyApi.CreateSurveySubmission
+
+
+
+
+Create a new survey submission.
+
+**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: `ASHBY_API_KEY` (learn how to [configure secrets](/home/build-tools/create-a-tool-with-secrets))
+
+## AshbyApi.ListSurveySubmissions
+
+
+
+
+Retrieve all survey submissions for a specific type.
+
+**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: `ASHBY_API_KEY` (learn how to [configure secrets](/home/build-tools/create-a-tool-with-secrets))
+
+## AshbyApi.GetAshbyUserInfo
+
+
+
+
+Retrieve detailed information of a specific Ashby user.
+
+**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: `ASHBY_API_KEY` (learn how to [configure secrets](/home/build-tools/create-a-tool-with-secrets))
+
+## AshbyApi.GetAshbyUserList
+
+
+
+
+Retrieve a list of all users in Ashby and their access levels.
+
+**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: `ASHBY_API_KEY` (learn how to [configure secrets](/home/build-tools/create-a-tool-with-secrets))
+
+## AshbyApi.AshbyUserSearch
+
+
+
+
+Search for an Ashby user by email address.
+
+**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: `ASHBY_API_KEY` (learn how to [configure secrets](/home/build-tools/create-a-tool-with-secrets))
+
+## AshbyApi.GetInterviewerSettings
+
+
+
+
+Retrieve interviewer settings for a user.
+
+**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: `ASHBY_API_KEY` (learn how to [configure secrets](/home/build-tools/create-a-tool-with-secrets))
+
+## AshbyApi.UpdateInterviewerSettings
+
+
+
+
+Update interviewer settings for a user.
+
+**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: `ASHBY_API_KEY` (learn how to [configure secrets](/home/build-tools/create-a-tool-with-secrets))
+
+## AshbyApi.CreateWebhookSetting
+
+
+
+
+Creates a webhook setting in Ashby.
+
+**Parameters**
+
+- **webhook_configuration** (`json`, optional) A JSON object containing configuration details for the webhook, including webhookType, requestUrl, and secretToken.
+
+**Secrets**
+
+This tool requires the following secrets: `ASHBY_API_KEY` (learn how to [configure secrets](/home/build-tools/create-a-tool-with-secrets))
+
+## AshbyApi.RetrieveWebhookInfo
+
+
+
+
+Retrieve detailed information on a specific webhook setting by ID.
+
+**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: `ASHBY_API_KEY` (learn how to [configure secrets](/home/build-tools/create-a-tool-with-secrets))
+
+## AshbyApi.UpdateWebhookSetting
+
+
+
+
+Update a webhook setting for Ashby service.
+
+**Parameters**
+
+- **webhook_settings_payload** (`json`, optional) JSON object containing `webhookId`, optionally one of `enabled`, `requestUrl`, or `secretToken` to update specific settings.
+
+**Secrets**
+
+This tool requires the following secrets: `ASHBY_API_KEY` (learn how to [configure secrets](/home/build-tools/create-a-tool-with-secrets))
+
+## AshbyApi.DeleteWebhookSetting
+
+
+
+
+Delete a webhook setting.
+
+**Parameters**
+
+- **webhook_id** (`json`, optional) The unique identifier of the webhook to be deleted.
+
+**Secrets**
+
+This tool requires the following secrets: `ASHBY_API_KEY` (learn how to [configure secrets](/home/build-tools/create-a-tool-with-secrets))
+
+## Reference
+
+Below is a reference of enumerations used by some of the tools in the AshbyApi MCP Server:
+
+### ToolMode
+
+- **GET_REQUEST_SCHEMA**: `get_request_schema`
+- **EXECUTE**: `execute`
+
+
diff --git a/make_toolkit_docs/docs_builder.py b/make_toolkit_docs/docs_builder.py
index 18fb1aad..743920d4 100644
--- a/make_toolkit_docs/docs_builder.py
+++ b/make_toolkit_docs/docs_builder.py
@@ -616,7 +616,6 @@ def request_openai_generation(
messages=messages,
temperature=0.0,
max_completion_tokens=max_tokens,
- stop=["\n\n"],
)
response_str = cast(str, response.choices[0].message.content)
@@ -655,7 +654,6 @@ async def async_request_openai_generation(
messages=messages,
temperature=0.0,
max_completion_tokens=max_tokens,
- stop=["\n\n"],
)
response_str = cast(str, response.choices[0].message.content)
diff --git a/package.json b/package.json
index e70c5939..7c76a5a5 100644
--- a/package.json
+++ b/package.json
@@ -32,7 +32,7 @@
},
"homepage": "https://arcade.dev/",
"dependencies": {
- "@arcadeai/design-system": "^3.20.0",
+ "@arcadeai/design-system": "^3.21.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 06cfe5a3..99a0c54a 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -9,8 +9,8 @@ importers:
.:
dependencies:
'@arcadeai/design-system':
- specifier: ^3.20.0
- version: 3.20.0(@hookform/resolvers@5.2.2(react-hook-form@7.65.0(react@19.2.0)))(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(lucide-react@0.548.0(react@19.2.0))(react-dom@19.2.0(react@19.2.0))(react-hook-form@7.65.0(react@19.2.0))(react@19.2.0)(recharts@3.3.0(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react-is@16.13.1)(react@19.2.0)(redux@5.0.1))(tailwindcss@4.1.16)(vite@7.1.12(@types/node@24.9.2)(jiti@2.6.1)(lightningcss@1.30.2)(yaml@2.8.1))
+ specifier: ^3.21.0
+ version: 3.21.0(@hookform/resolvers@5.2.2(react-hook-form@7.65.0(react@19.2.0)))(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(lucide-react@0.548.0(react@19.2.0))(react-dom@19.2.0(react@19.2.0))(react-hook-form@7.65.0(react@19.2.0))(react@19.2.0)(recharts@3.3.0(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react-is@16.13.1)(react@19.2.0)(redux@5.0.1))(tailwindcss@4.1.16)(vite@7.1.12(@types/node@24.9.2)(jiti@2.6.1)(lightningcss@1.30.2)(yaml@2.8.1))
'@next/third-parties':
specifier: 16.0.1
version: 16.0.1(next@16.0.1(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(react@19.2.0)
@@ -172,8 +172,8 @@ packages:
'@arcadeai/arcadejs@1.11.1':
resolution: {integrity: sha512-6AKMTO/cT/bj3GGMF4F76R2oC/FXIfkkXr6k/5/55NmUdpyzdqb5HhPN1M1txLoKIUc0/BGP8anM9lPFxwRW5g==}
- '@arcadeai/design-system@3.20.0':
- resolution: {integrity: sha512-XKoOUN88mUB7C8N/7CjbJytPkjB2BCkx7MjKXsaO7A0vIIBW1FZGgP7q7+hS2VEp8KyxlN+/ZbaV3Z7MxShiqA==}
+ '@arcadeai/design-system@3.21.0':
+ resolution: {integrity: sha512-KE8S4xL7AY3Bc+1W5sZqP4KkVFNP6GcwRfNbtLkzreISsmL5w6bofWUXra9Jn3aZBgznLhzdxP91wkDm9ASyFw==}
engines: {node: '>=20.17.0'}
peerDependencies:
'@hookform/resolvers': ^5.2.1
@@ -4756,7 +4756,7 @@ snapshots:
transitivePeerDependencies:
- encoding
- '@arcadeai/design-system@3.20.0(@hookform/resolvers@5.2.2(react-hook-form@7.65.0(react@19.2.0)))(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(lucide-react@0.548.0(react@19.2.0))(react-dom@19.2.0(react@19.2.0))(react-hook-form@7.65.0(react@19.2.0))(react@19.2.0)(recharts@3.3.0(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react-is@16.13.1)(react@19.2.0)(redux@5.0.1))(tailwindcss@4.1.16)(vite@7.1.12(@types/node@24.9.2)(jiti@2.6.1)(lightningcss@1.30.2)(yaml@2.8.1))':
+ '@arcadeai/design-system@3.21.0(@hookform/resolvers@5.2.2(react-hook-form@7.65.0(react@19.2.0)))(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(lucide-react@0.548.0(react@19.2.0))(react-dom@19.2.0(react@19.2.0))(react-hook-form@7.65.0(react@19.2.0))(react@19.2.0)(recharts@3.3.0(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react-is@16.13.1)(react@19.2.0)(redux@5.0.1))(tailwindcss@4.1.16)(vite@7.1.12(@types/node@24.9.2)(jiti@2.6.1)(lightningcss@1.30.2)(yaml@2.8.1))':
dependencies:
'@arcadeai/arcadejs': 1.11.1
'@hookform/resolvers': 5.2.2(react-hook-form@7.65.0(react@19.2.0))
diff --git a/public/examples/integrations/mcp-servers/ashby_api/add_candidate_tag_example_call_tool.js b/public/examples/integrations/mcp-servers/ashby_api/add_candidate_tag_example_call_tool.js
new file mode 100644
index 00000000..f860aaeb
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/ashby_api/add_candidate_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 = "AshbyApi.AddCandidateTag";
+
+// 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": "{\"candidate_id\":\"12345\",\"tag\":\"interviewed\"}"
+};
+
+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/ashby_api/add_candidate_tag_example_call_tool.py b/public/examples/integrations/mcp-servers/ashby_api/add_candidate_tag_example_call_tool.py
new file mode 100644
index 00000000..48e6114d
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/ashby_api/add_candidate_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 = "AshbyApi.AddCandidateTag"
+
+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': '{"candidate_id":"12345","tag":"interviewed"}'
+}
+
+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/ashby_api/add_candidate_to_project_example_call_tool.js b/public/examples/integrations/mcp-servers/ashby_api/add_candidate_to_project_example_call_tool.js
new file mode 100644
index 00000000..946e473b
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/ashby_api/add_candidate_to_project_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 = "AshbyApi.AddCandidateToProject";
+
+// 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": "{\"candidate_id\":\"12345\",\"project_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/ashby_api/add_candidate_to_project_example_call_tool.py b/public/examples/integrations/mcp-servers/ashby_api/add_candidate_to_project_example_call_tool.py
new file mode 100644
index 00000000..994f752f
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/ashby_api/add_candidate_to_project_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 = "AshbyApi.AddCandidateToProject"
+
+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': '{"candidate_id":"12345","project_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/ashby_api/add_completed_assessment_to_candidate_example_call_tool.js b/public/examples/integrations/mcp-servers/ashby_api/add_completed_assessment_to_candidate_example_call_tool.js
new file mode 100644
index 00000000..5211108e
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/ashby_api/add_completed_assessment_to_candidate_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 = "AshbyApi.AddCompletedAssessmentToCandidate";
+
+// 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": "{\"candidateId\":\"12345\",\"assessmentId\":\"abcde\",\"score\":85}"
+};
+
+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/ashby_api/add_completed_assessment_to_candidate_example_call_tool.py b/public/examples/integrations/mcp-servers/ashby_api/add_completed_assessment_to_candidate_example_call_tool.py
new file mode 100644
index 00000000..c7b19b9e
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/ashby_api/add_completed_assessment_to_candidate_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 = "AshbyApi.AddCompletedAssessmentToCandidate"
+
+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': '{"candidateId":"12345","assessmentId":"abcde","score":85}'
+}
+
+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/ashby_api/add_hiring_team_member_example_call_tool.js b/public/examples/integrations/mcp-servers/ashby_api/add_hiring_team_member_example_call_tool.js
new file mode 100644
index 00000000..a809f231
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/ashby_api/add_hiring_team_member_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 = "AshbyApi.AddHiringTeamMember";
+
+// 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 = {
+ "hiring_team_member_details": {
+ "applicationId": "app123",
+ "teamMemberId": "user456",
+ "roleId": "role789"
+ }
+};
+
+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/ashby_api/add_hiring_team_member_example_call_tool.py b/public/examples/integrations/mcp-servers/ashby_api/add_hiring_team_member_example_call_tool.py
new file mode 100644
index 00000000..b4e070c8
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/ashby_api/add_hiring_team_member_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 = "AshbyApi.AddHiringTeamMember"
+
+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 = {
+ 'hiring_team_member_details': { 'applicationId': 'app123',
+ 'teamMemberId': 'user456',
+ 'roleId': 'role789'
+}
+
+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/ashby_api/add_job_to_opening_example_call_tool.js b/public/examples/integrations/mcp-servers/ashby_api/add_job_to_opening_example_call_tool.js
new file mode 100644
index 00000000..72b95549
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/ashby_api/add_job_to_opening_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 = "AshbyApi.AddJobToOpening";
+
+// 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": "{\"jobTitle\":\"Software Engineer\",\"location\":\"Remote\",\"description\":\"Develop and maintain software applications.\"}"
+};
+
+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/ashby_api/add_job_to_opening_example_call_tool.py b/public/examples/integrations/mcp-servers/ashby_api/add_job_to_opening_example_call_tool.py
new file mode 100644
index 00000000..0fd6cbf8
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/ashby_api/add_job_to_opening_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 = "AshbyApi.AddJobToOpening"
+
+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': '{"jobTitle":"Software Engineer","location":"Remote","description":"Develop '
+ 'and maintain software applications."}'
+}
+
+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/ashby_api/add_location_to_job_opening_example_call_tool.js b/public/examples/integrations/mcp-servers/ashby_api/add_location_to_job_opening_example_call_tool.js
new file mode 100644
index 00000000..4d8f1290
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/ashby_api/add_location_to_job_opening_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 = "AshbyApi.AddLocationToJobOpening";
+
+// 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": "{\"job_id\":\"12345\",\"location\":\"New York, NY\"}"
+};
+
+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/ashby_api/add_location_to_job_opening_example_call_tool.py b/public/examples/integrations/mcp-servers/ashby_api/add_location_to_job_opening_example_call_tool.py
new file mode 100644
index 00000000..a86429b7
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/ashby_api/add_location_to_job_opening_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 = "AshbyApi.AddLocationToJobOpening"
+
+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': '{"job_id":"12345","location":"New York, NY"}'
+}
+
+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/ashby_api/add_user_to_interviewer_pool_example_call_tool.js b/public/examples/integrations/mcp-servers/ashby_api/add_user_to_interviewer_pool_example_call_tool.js
new file mode 100644
index 00000000..23fc1d01
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/ashby_api/add_user_to_interviewer_pool_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 = "AshbyApi.AddUserToInterviewerPool";
+
+// 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\",\"pool_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/ashby_api/add_user_to_interviewer_pool_example_call_tool.py b/public/examples/integrations/mcp-servers/ashby_api/add_user_to_interviewer_pool_example_call_tool.py
new file mode 100644
index 00000000..a9687630
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/ashby_api/add_user_to_interviewer_pool_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 = "AshbyApi.AddUserToInterviewerPool"
+
+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","pool_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/ashby_api/anonymize_candidate_data_example_call_tool.js b/public/examples/integrations/mcp-servers/ashby_api/anonymize_candidate_data_example_call_tool.js
new file mode 100644
index 00000000..ff839af8
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/ashby_api/anonymize_candidate_data_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 = "AshbyApi.AnonymizeCandidateData";
+
+// 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": "{\"candidateId\":\"12345\",\"anonymizeFields\":[\"name\",\"email\"]}"
+};
+
+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/ashby_api/anonymize_candidate_data_example_call_tool.py b/public/examples/integrations/mcp-servers/ashby_api/anonymize_candidate_data_example_call_tool.py
new file mode 100644
index 00000000..a5300998
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/ashby_api/anonymize_candidate_data_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 = "AshbyApi.AnonymizeCandidateData"
+
+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': '{"candidateId":"12345","anonymizeFields":["name","email"]}'
+}
+
+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/ashby_api/archive_department_example_call_tool.js b/public/examples/integrations/mcp-servers/ashby_api/archive_department_example_call_tool.js
new file mode 100644
index 00000000..8063d20c
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/ashby_api/archive_department_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 = "AshbyApi.ArchiveDepartment";
+
+// 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": "{\"department_id\":\"12345\",\"action\":\"archive\"}"
+};
+
+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/ashby_api/archive_department_example_call_tool.py b/public/examples/integrations/mcp-servers/ashby_api/archive_department_example_call_tool.py
new file mode 100644
index 00000000..2e9875cf
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/ashby_api/archive_department_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 = "AshbyApi.ArchiveDepartment"
+
+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': '{"department_id":"12345","action":"archive"}'
+}
+
+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/ashby_api/archive_interviewer_pool_example_call_tool.js b/public/examples/integrations/mcp-servers/ashby_api/archive_interviewer_pool_example_call_tool.js
new file mode 100644
index 00000000..7fdf1194
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/ashby_api/archive_interviewer_pool_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 = "AshbyApi.ArchiveInterviewerPool";
+
+// 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": "{\"pool_id\":\"12345\",\"archived\":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/ashby_api/archive_interviewer_pool_example_call_tool.py b/public/examples/integrations/mcp-servers/ashby_api/archive_interviewer_pool_example_call_tool.py
new file mode 100644
index 00000000..934d3209
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/ashby_api/archive_interviewer_pool_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 = "AshbyApi.ArchiveInterviewerPool"
+
+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': '{"pool_id":"12345","archived":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/ashby_api/archive_location_example_call_tool.js b/public/examples/integrations/mcp-servers/ashby_api/archive_location_example_call_tool.js
new file mode 100644
index 00000000..29c0199d
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/ashby_api/archive_location_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 = "AshbyApi.ArchiveLocation";
+
+// 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": "{\"location\":\"/path/to/archive\",\"options\":{\"compress\":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/ashby_api/archive_location_example_call_tool.py b/public/examples/integrations/mcp-servers/ashby_api/archive_location_example_call_tool.py
new file mode 100644
index 00000000..8be81c75
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/ashby_api/archive_location_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 = "AshbyApi.ArchiveLocation"
+
+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': '{"location":"/path/to/archive","options":{"compress":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/ashby_api/ashby_user_search_example_call_tool.js b/public/examples/integrations/mcp-servers/ashby_api/ashby_user_search_example_call_tool.js
new file mode 100644
index 00000000..ae970ab5
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/ashby_api/ashby_user_search_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 = "AshbyApi.AshbyUserSearch";
+
+// 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": "{\"email\":\"user@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/ashby_api/ashby_user_search_example_call_tool.py b/public/examples/integrations/mcp-servers/ashby_api/ashby_user_search_example_call_tool.py
new file mode 100644
index 00000000..64d278a3
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/ashby_api/ashby_user_search_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 = "AshbyApi.AshbyUserSearch"
+
+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': '{"email":"user@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/ashby_api/cancel_assessment_example_call_tool.js b/public/examples/integrations/mcp-servers/ashby_api/cancel_assessment_example_call_tool.js
new file mode 100644
index 00000000..ee89af8e
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/ashby_api/cancel_assessment_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 = "AshbyApi.CancelAssessment";
+
+// 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": "{\"assessmentId\":\"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/ashby_api/cancel_assessment_example_call_tool.py b/public/examples/integrations/mcp-servers/ashby_api/cancel_assessment_example_call_tool.py
new file mode 100644
index 00000000..e4c8f54a
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/ashby_api/cancel_assessment_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 = "AshbyApi.CancelAssessment"
+
+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': '{"assessmentId":"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/ashby_api/cancel_interview_schedule_example_call_tool.js b/public/examples/integrations/mcp-servers/ashby_api/cancel_interview_schedule_example_call_tool.js
new file mode 100644
index 00000000..d07d7c83
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/ashby_api/cancel_interview_schedule_example_call_tool.js
@@ -0,0 +1,34 @@
+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 = "AshbyApi.CancelInterviewSchedule";
+
+// 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 = {
+ "interview_schedule_cancel_details": {
+ "id": "12345",
+ "allowReschedule": false
+ }
+};
+
+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/ashby_api/cancel_interview_schedule_example_call_tool.py b/public/examples/integrations/mcp-servers/ashby_api/cancel_interview_schedule_example_call_tool.py
new file mode 100644
index 00000000..d7456bac
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/ashby_api/cancel_interview_schedule_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 = "AshbyApi.CancelInterviewSchedule"
+
+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 = {
+ 'interview_schedule_cancel_details': {'id': '12345', 'allowReschedule': False
+}
+
+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/ashby_api/change_application_source_example_call_tool.js b/public/examples/integrations/mcp-servers/ashby_api/change_application_source_example_call_tool.js
new file mode 100644
index 00000000..cb9d0b24
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/ashby_api/change_application_source_example_call_tool.js
@@ -0,0 +1,34 @@
+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 = "AshbyApi.ChangeApplicationSource";
+
+// 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 = {
+ "application_source_details": {
+ "applicationId": "app123",
+ "sourceId": "source456"
+ }
+};
+
+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/ashby_api/change_application_source_example_call_tool.py b/public/examples/integrations/mcp-servers/ashby_api/change_application_source_example_call_tool.py
new file mode 100644
index 00000000..df82e878
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/ashby_api/change_application_source_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 = "AshbyApi.ChangeApplicationSource"
+
+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 = {
+ 'application_source_details': {'applicationId': 'app123', 'sourceId': 'source456'
+}
+
+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/ashby_api/change_application_stage_example_call_tool.js b/public/examples/integrations/mcp-servers/ashby_api/change_application_stage_example_call_tool.js
new file mode 100644
index 00000000..3102d6f3
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/ashby_api/change_application_stage_example_call_tool.js
@@ -0,0 +1,36 @@
+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 = "AshbyApi.ChangeApplicationStage";
+
+// 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 = {
+ "application_stage_change_details": {
+ "applicationId": "12345",
+ "interviewStageId": "67890",
+ "archiveReasonId": "1",
+ "archiveEmail": "example@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/ashby_api/change_application_stage_example_call_tool.py b/public/examples/integrations/mcp-servers/ashby_api/change_application_stage_example_call_tool.py
new file mode 100644
index 00000000..2a6f0b76
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/ashby_api/change_application_stage_example_call_tool.py
@@ -0,0 +1,32 @@
+import json
+from arcadepy import Arcade
+
+client = Arcade() # Automatically finds the `ARCADE_API_KEY` env variable
+
+USER_ID = "{arcade_user_id}"
+TOOL_NAME = "AshbyApi.ChangeApplicationStage"
+
+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 = {
+ 'application_stage_change_details': { 'applicationId': '12345',
+ 'interviewStageId': '67890',
+ 'archiveReasonId': '1',
+ 'archiveEmail': 'example@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/ashby_api/create_candidate_example_call_tool.js b/public/examples/integrations/mcp-servers/ashby_api/create_candidate_example_call_tool.js
new file mode 100644
index 00000000..2f19d35a
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/ashby_api/create_candidate_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 = "AshbyApi.CreateCandidate";
+
+// 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\",\"email\":\"john.doe@example.com\",\"skills\":[\"Java\",\"Python\"]}"
+};
+
+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/ashby_api/create_candidate_example_call_tool.py b/public/examples/integrations/mcp-servers/ashby_api/create_candidate_example_call_tool.py
new file mode 100644
index 00000000..d06d80fb
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/ashby_api/create_candidate_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 = "AshbyApi.CreateCandidate"
+
+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","email":"john.doe@example.com","skills":["Java","Python"]}'
+}
+
+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/ashby_api/create_candidate_note_example_call_tool.js b/public/examples/integrations/mcp-servers/ashby_api/create_candidate_note_example_call_tool.js
new file mode 100644
index 00000000..edf8ea6a
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/ashby_api/create_candidate_note_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 = "AshbyApi.CreateCandidateNote";
+
+// 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": "{\"candidateId\":\"12345\",\"note\":\"Interview feedback: Great communication skills and cultural fit.\"}"
+};
+
+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/ashby_api/create_candidate_note_example_call_tool.py b/public/examples/integrations/mcp-servers/ashby_api/create_candidate_note_example_call_tool.py
new file mode 100644
index 00000000..5f2ccc2a
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/ashby_api/create_candidate_note_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 = "AshbyApi.CreateCandidateNote"
+
+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': '{"candidateId":"12345","note":"Interview feedback: Great communication skills '
+ 'and cultural fit."}'
+}
+
+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/ashby_api/create_candidate_offer_version_example_call_tool.js b/public/examples/integrations/mcp-servers/ashby_api/create_candidate_offer_version_example_call_tool.js
new file mode 100644
index 00000000..2dae6f97
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/ashby_api/create_candidate_offer_version_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 = "AshbyApi.CreateCandidateOfferVersion";
+
+// 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": "{\"candidateId\":\"12345\",\"offerDetails\":{\"position\":\"Software Engineer\",\"salary\":100000}}"
+};
+
+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/ashby_api/create_candidate_offer_version_example_call_tool.py b/public/examples/integrations/mcp-servers/ashby_api/create_candidate_offer_version_example_call_tool.py
new file mode 100644
index 00000000..4a62029a
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/ashby_api/create_candidate_offer_version_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 = "AshbyApi.CreateCandidateOfferVersion"
+
+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': '{"candidateId":"12345","offerDetails":{"position":"Software '
+ 'Engineer","salary":100000}}'
+}
+
+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/ashby_api/create_candidate_referral_example_call_tool.js b/public/examples/integrations/mcp-servers/ashby_api/create_candidate_referral_example_call_tool.js
new file mode 100644
index 00000000..68f1a7ff
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/ashby_api/create_candidate_referral_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 = "AshbyApi.CreateCandidateReferral";
+
+// 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": "{\"candidateId\":\"12345\",\"referrerId\":\"67890\",\"position\":\"Software Engineer\"}"
+};
+
+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/ashby_api/create_candidate_referral_example_call_tool.py b/public/examples/integrations/mcp-servers/ashby_api/create_candidate_referral_example_call_tool.py
new file mode 100644
index 00000000..065d468e
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/ashby_api/create_candidate_referral_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 = "AshbyApi.CreateCandidateReferral"
+
+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': '{"candidateId":"12345","referrerId":"67890","position":"Software Engineer"}'
+}
+
+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/ashby_api/create_candidate_tag_example_call_tool.js b/public/examples/integrations/mcp-servers/ashby_api/create_candidate_tag_example_call_tool.js
new file mode 100644
index 00000000..8824ae95
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/ashby_api/create_candidate_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 = "AshbyApi.CreateCandidateTag";
+
+// 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": "{\"tagName\":\"Urgent\",\"description\":\"Candidates that need immediate attention\"}"
+};
+
+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/ashby_api/create_candidate_tag_example_call_tool.py b/public/examples/integrations/mcp-servers/ashby_api/create_candidate_tag_example_call_tool.py
new file mode 100644
index 00000000..58d293ea
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/ashby_api/create_candidate_tag_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 = "AshbyApi.CreateCandidateTag"
+
+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': '{"tagName":"Urgent","description":"Candidates that need immediate attention"}'
+}
+
+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/ashby_api/create_custom_field_example_call_tool.js b/public/examples/integrations/mcp-servers/ashby_api/create_custom_field_example_call_tool.js
new file mode 100644
index 00000000..cec30bef
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/ashby_api/create_custom_field_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 = "AshbyApi.CreateCustomField";
+
+// 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": "{\"field_name\":\"New Custom Field\",\"field_type\":\"text\"}"
+};
+
+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/ashby_api/create_custom_field_example_call_tool.py b/public/examples/integrations/mcp-servers/ashby_api/create_custom_field_example_call_tool.py
new file mode 100644
index 00000000..08b7a103
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/ashby_api/create_custom_field_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 = "AshbyApi.CreateCustomField"
+
+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': '{"field_name":"New Custom Field","field_type":"text"}'
+}
+
+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/ashby_api/create_department_example_call_tool.js b/public/examples/integrations/mcp-servers/ashby_api/create_department_example_call_tool.js
new file mode 100644
index 00000000..81b23e15
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/ashby_api/create_department_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 = "AshbyApi.CreateDepartment";
+
+// 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\":\"Engineering\",\"description\":\"Handles all engineering tasks\"}"
+};
+
+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/ashby_api/create_department_example_call_tool.py b/public/examples/integrations/mcp-servers/ashby_api/create_department_example_call_tool.py
new file mode 100644
index 00000000..f986e316
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/ashby_api/create_department_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 = "AshbyApi.CreateDepartment"
+
+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":"Engineering","description":"Handles all engineering tasks"}'
+}
+
+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/ashby_api/create_interview_schedule_example_call_tool.js b/public/examples/integrations/mcp-servers/ashby_api/create_interview_schedule_example_call_tool.js
new file mode 100644
index 00000000..9d0b5641
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/ashby_api/create_interview_schedule_example_call_tool.js
@@ -0,0 +1,43 @@
+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 = "AshbyApi.CreateInterviewSchedule";
+
+// 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 = {
+ "interview_schedule_request": {
+ "application_id": "app_12345",
+ "interview_events": [
+ {
+ "start_time": "2023-10-15T10:00:00Z",
+ "end_time": "2023-10-15T11:00:00Z",
+ "interviewers": [
+ "interviewer_1",
+ "interviewer_2"
+ ]
+ }
+ ]
+ }
+};
+
+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/ashby_api/create_interview_schedule_example_call_tool.py b/public/examples/integrations/mcp-servers/ashby_api/create_interview_schedule_example_call_tool.py
new file mode 100644
index 00000000..396407f0
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/ashby_api/create_interview_schedule_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 = "AshbyApi.CreateInterviewSchedule"
+
+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 = {
+ 'interview_schedule_request': { 'application_id': 'app_12345',
+ 'interview_events': [ { 'start_time': '2023-10-15T10:00:00Z',
+ 'end_time': '2023-10-15T11:00:00Z',
+ 'interviewers': [ 'interviewer_1',
+ 'interviewer_2']}]
+}
+
+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/ashby_api/create_interviewer_pool_example_call_tool.js b/public/examples/integrations/mcp-servers/ashby_api/create_interviewer_pool_example_call_tool.js
new file mode 100644
index 00000000..9306766e
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/ashby_api/create_interviewer_pool_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 = "AshbyApi.CreateInterviewerPool";
+
+// 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": "{\"pool_name\":\"Engineering Interviewers\",\"interviewer_ids\":[\"id1\",\"id2\",\"id3\"]}"
+};
+
+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/ashby_api/create_interviewer_pool_example_call_tool.py b/public/examples/integrations/mcp-servers/ashby_api/create_interviewer_pool_example_call_tool.py
new file mode 100644
index 00000000..b84b9764
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/ashby_api/create_interviewer_pool_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 = "AshbyApi.CreateInterviewerPool"
+
+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': '{"pool_name":"Engineering '
+ 'Interviewers","interviewer_ids":["id1","id2","id3"]}'
+}
+
+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/ashby_api/create_job_application_example_call_tool.js b/public/examples/integrations/mcp-servers/ashby_api/create_job_application_example_call_tool.js
new file mode 100644
index 00000000..e5d7f232
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/ashby_api/create_job_application_example_call_tool.js
@@ -0,0 +1,49 @@
+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 = "AshbyApi.CreateJobApplication";
+
+// 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 = {
+ "job_application_data": {
+ "candidateId": "12345",
+ "jobId": "67890",
+ "interviewPlanId": "abcde",
+ "interviewStageId": "stage1",
+ "sourceId": "source1",
+ "creditedToUserId": "user1",
+ "createdAt": "2023-10-01T12:00:00Z",
+ "applicationHistory": [
+ {
+ "status": "applied",
+ "date": "2023-10-01"
+ },
+ {
+ "status": "interviewed",
+ "date": "2023-10-05"
+ }
+ ]
+ }
+};
+
+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/ashby_api/create_job_application_example_call_tool.py b/public/examples/integrations/mcp-servers/ashby_api/create_job_application_example_call_tool.py
new file mode 100644
index 00000000..011b0379
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/ashby_api/create_job_application_example_call_tool.py
@@ -0,0 +1,39 @@
+import json
+from arcadepy import Arcade
+
+client = Arcade() # Automatically finds the `ARCADE_API_KEY` env variable
+
+USER_ID = "{arcade_user_id}"
+TOOL_NAME = "AshbyApi.CreateJobApplication"
+
+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 = {
+ 'job_application_data': { 'candidateId': '12345',
+ 'jobId': '67890',
+ 'interviewPlanId': 'abcde',
+ 'interviewStageId': 'stage1',
+ 'sourceId': 'source1',
+ 'creditedToUserId': 'user1',
+ 'createdAt': '2023-10-01T12:00:00Z',
+ 'applicationHistory': [ { 'status': 'applied',
+ 'date': '2023-10-01'},
+ { 'status': 'interviewed',
+ 'date': '2023-10-05'}]
+}
+
+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/ashby_api/create_job_opening_example_call_tool.js b/public/examples/integrations/mcp-servers/ashby_api/create_job_opening_example_call_tool.js
new file mode 100644
index 00000000..9a6ca476
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/ashby_api/create_job_opening_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 = "AshbyApi.CreateJobOpening";
+
+// 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 = {
+ "department_team_id": "dept123",
+ "employment_type": "FullTime",
+ "job_description": "We are looking for a software engineer to join our team.",
+ "opening_state": "Open",
+ "target_hire_date": "2023-12-01"
+};
+
+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/ashby_api/create_job_opening_example_call_tool.py b/public/examples/integrations/mcp-servers/ashby_api/create_job_opening_example_call_tool.py
new file mode 100644
index 00000000..fec76db3
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/ashby_api/create_job_opening_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 = "AshbyApi.CreateJobOpening"
+
+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 = {
+ 'department_team_id': 'dept123',
+ 'employment_type': 'FullTime',
+ 'job_description': 'We are looking for a software engineer to join our team.',
+ 'opening_state': 'Open',
+ 'target_hire_date': '2023-12-01'
+}
+
+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/ashby_api/create_location_example_call_tool.js b/public/examples/integrations/mcp-servers/ashby_api/create_location_example_call_tool.js
new file mode 100644
index 00000000..50402be5
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/ashby_api/create_location_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 = "AshbyApi.CreateLocation";
+
+// 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\":\"New Branch\",\"type\":\"branch\",\"location\":\"123 Main St, Anytown, USA\"}"
+};
+
+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/ashby_api/create_location_example_call_tool.py b/public/examples/integrations/mcp-servers/ashby_api/create_location_example_call_tool.py
new file mode 100644
index 00000000..4cfc5562
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/ashby_api/create_location_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 = "AshbyApi.CreateLocation"
+
+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":"New Branch","type":"branch","location":"123 Main St, Anytown, USA"}'
+}
+
+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/ashby_api/create_new_job_example_call_tool.js b/public/examples/integrations/mcp-servers/ashby_api/create_new_job_example_call_tool.js
new file mode 100644
index 00000000..e5848116
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/ashby_api/create_new_job_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 = "AshbyApi.CreateNewJob";
+
+// 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": "{\"title\":\"Software Engineer\",\"description\":\"Develop and maintain software applications.\",\"location\":\"Remote\",\"salary\":\"100000\"}"
+};
+
+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/ashby_api/create_new_job_example_call_tool.py b/public/examples/integrations/mcp-servers/ashby_api/create_new_job_example_call_tool.py
new file mode 100644
index 00000000..47b89862
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/ashby_api/create_new_job_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 = "AshbyApi.CreateNewJob"
+
+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': '{"title":"Software Engineer","description":"Develop and maintain software '
+ 'applications.","location":"Remote","salary":"100000"}'
+}
+
+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/ashby_api/create_offer_example_call_tool.js b/public/examples/integrations/mcp-servers/ashby_api/create_offer_example_call_tool.js
new file mode 100644
index 00000000..ea5c9244
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/ashby_api/create_offer_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 = "AshbyApi.CreateOffer";
+
+// 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": "{\"title\":\"Special Offer\",\"discount\":20,\"validUntil\":\"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/ashby_api/create_offer_example_call_tool.py b/public/examples/integrations/mcp-servers/ashby_api/create_offer_example_call_tool.py
new file mode 100644
index 00000000..b79ab8a7
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/ashby_api/create_offer_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 = "AshbyApi.CreateOffer"
+
+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': '{"title":"Special Offer","discount":20,"validUntil":"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/ashby_api/create_survey_request_example_call_tool.js b/public/examples/integrations/mcp-servers/ashby_api/create_survey_request_example_call_tool.js
new file mode 100644
index 00000000..d1f178cb
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/ashby_api/create_survey_request_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 = "AshbyApi.CreateSurveyRequest";
+
+// 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": "{\"title\":\"Candidate Feedback Survey\",\"questions\":[{\"question\":\"How would you rate your experience?\",\"type\":\"scale\",\"options\":[1,2,3,4,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/ashby_api/create_survey_request_example_call_tool.py b/public/examples/integrations/mcp-servers/ashby_api/create_survey_request_example_call_tool.py
new file mode 100644
index 00000000..0ab11a88
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/ashby_api/create_survey_request_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 = "AshbyApi.CreateSurveyRequest"
+
+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': '{"title":"Candidate Feedback Survey","questions":[{"question":"How would you '
+ 'rate your experience?","type":"scale","options":[1,2,3,4,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/ashby_api/create_survey_submission_example_call_tool.js b/public/examples/integrations/mcp-servers/ashby_api/create_survey_submission_example_call_tool.js
new file mode 100644
index 00000000..32f8cb49
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/ashby_api/create_survey_submission_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 = "AshbyApi.CreateSurveySubmission";
+
+// 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": "{\"surveyId\":\"12345\",\"responses\":{\"question1\":\"yes\",\"question2\":\"no\"}}"
+};
+
+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/ashby_api/create_survey_submission_example_call_tool.py b/public/examples/integrations/mcp-servers/ashby_api/create_survey_submission_example_call_tool.py
new file mode 100644
index 00000000..b81062cb
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/ashby_api/create_survey_submission_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 = "AshbyApi.CreateSurveySubmission"
+
+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': '{"surveyId":"12345","responses":{"question1":"yes","question2":"no"}}'
+}
+
+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/ashby_api/create_webhook_setting_example_call_tool.js b/public/examples/integrations/mcp-servers/ashby_api/create_webhook_setting_example_call_tool.js
new file mode 100644
index 00000000..aa68d8ea
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/ashby_api/create_webhook_setting_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 = "AshbyApi.CreateWebhookSetting";
+
+// 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 = {
+ "webhook_configuration": {
+ "webhookType": "event",
+ "requestUrl": "https://example.com/webhook",
+ "secretToken": "abc123"
+ }
+};
+
+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/ashby_api/create_webhook_setting_example_call_tool.py b/public/examples/integrations/mcp-servers/ashby_api/create_webhook_setting_example_call_tool.py
new file mode 100644
index 00000000..4fc650b7
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/ashby_api/create_webhook_setting_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 = "AshbyApi.CreateWebhookSetting"
+
+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 = {
+ 'webhook_configuration': { 'webhookType': 'event',
+ 'requestUrl': 'https://example.com/webhook',
+ 'secretToken': 'abc123'
+}
+
+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/ashby_api/delete_webhook_setting_example_call_tool.js b/public/examples/integrations/mcp-servers/ashby_api/delete_webhook_setting_example_call_tool.js
new file mode 100644
index 00000000..f6853296
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/ashby_api/delete_webhook_setting_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 = "AshbyApi.DeleteWebhookSetting";
+
+// 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 = {
+ "webhook_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/ashby_api/delete_webhook_setting_example_call_tool.py b/public/examples/integrations/mcp-servers/ashby_api/delete_webhook_setting_example_call_tool.py
new file mode 100644
index 00000000..08913c83
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/ashby_api/delete_webhook_setting_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 = "AshbyApi.DeleteWebhookSetting"
+
+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 = {
+ 'webhook_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/ashby_api/fetch_application_details_example_call_tool.js b/public/examples/integrations/mcp-servers/ashby_api/fetch_application_details_example_call_tool.js
new file mode 100644
index 00000000..33fedb15
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/ashby_api/fetch_application_details_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 = "AshbyApi.FetchApplicationDetails";
+
+// 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": "{\"applicationId\":\"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/ashby_api/fetch_application_details_example_call_tool.py b/public/examples/integrations/mcp-servers/ashby_api/fetch_application_details_example_call_tool.py
new file mode 100644
index 00000000..1833d8f0
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/ashby_api/fetch_application_details_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 = "AshbyApi.FetchApplicationDetails"
+
+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': '{"applicationId":"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/ashby_api/fetch_interview_details_example_call_tool.js b/public/examples/integrations/mcp-servers/ashby_api/fetch_interview_details_example_call_tool.js
new file mode 100644
index 00000000..0e94dd55
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/ashby_api/fetch_interview_details_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 = "AshbyApi.FetchInterviewDetails";
+
+// 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 = {
+ "interview_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/ashby_api/fetch_interview_details_example_call_tool.py b/public/examples/integrations/mcp-servers/ashby_api/fetch_interview_details_example_call_tool.py
new file mode 100644
index 00000000..9e69ec1d
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/ashby_api/fetch_interview_details_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 = "AshbyApi.FetchInterviewDetails"
+
+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 = {
+ 'interview_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/ashby_api/fetch_interview_stage_details_example_call_tool.js b/public/examples/integrations/mcp-servers/ashby_api/fetch_interview_stage_details_example_call_tool.js
new file mode 100644
index 00000000..4e5d20ca
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/ashby_api/fetch_interview_stage_details_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 = "AshbyApi.FetchInterviewStageDetails";
+
+// 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 = {
+ "interview_stage_id": "stage_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/ashby_api/fetch_interview_stage_details_example_call_tool.py b/public/examples/integrations/mcp-servers/ashby_api/fetch_interview_stage_details_example_call_tool.py
new file mode 100644
index 00000000..5b0e6a56
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/ashby_api/fetch_interview_stage_details_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 = "AshbyApi.FetchInterviewStageDetails"
+
+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 = {
+ 'interview_stage_id': 'stage_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/ashby_api/find_candidates_example_call_tool.js b/public/examples/integrations/mcp-servers/ashby_api/find_candidates_example_call_tool.js
new file mode 100644
index 00000000..d9332edb
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/ashby_api/find_candidates_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 = "AshbyApi.FindCandidates";
+
+// 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 = {
+ "candidate_email": "john.doe@example.com",
+ "candidate_name": "John Doe"
+};
+
+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/ashby_api/find_candidates_example_call_tool.py b/public/examples/integrations/mcp-servers/ashby_api/find_candidates_example_call_tool.py
new file mode 100644
index 00000000..18706fce
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/ashby_api/find_candidates_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 = "AshbyApi.FindCandidates"
+
+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 = {
+ 'candidate_email': 'john.doe@example.com', 'candidate_name': 'John Doe'
+}
+
+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/ashby_api/generate_and_poll_report_example_call_tool.js b/public/examples/integrations/mcp-servers/ashby_api/generate_and_poll_report_example_call_tool.js
new file mode 100644
index 00000000..e44e021f
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/ashby_api/generate_and_poll_report_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 = "AshbyApi.GenerateAndPollReport";
+
+// 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": "{\"reportId\":\"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/ashby_api/generate_and_poll_report_example_call_tool.py b/public/examples/integrations/mcp-servers/ashby_api/generate_and_poll_report_example_call_tool.py
new file mode 100644
index 00000000..5707b27a
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/ashby_api/generate_and_poll_report_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 = "AshbyApi.GenerateAndPollReport"
+
+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': '{"reportId":"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/ashby_api/get_api_key_info_example_call_tool.js b/public/examples/integrations/mcp-servers/ashby_api/get_api_key_info_example_call_tool.js
new file mode 100644
index 00000000..d669a3e8
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/ashby_api/get_api_key_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 = "AshbyApi.GetApiKeyInfo";
+
+// 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 = {
+ "empty_request_body": {}
+};
+
+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/ashby_api/get_api_key_info_example_call_tool.py b/public/examples/integrations/mcp-servers/ashby_api/get_api_key_info_example_call_tool.py
new file mode 100644
index 00000000..50297c9b
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/ashby_api/get_api_key_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 = "AshbyApi.GetApiKeyInfo"
+
+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 = {
+ 'empty_request_body': {
+}
+
+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/ashby_api/get_application_history_example_call_tool.js b/public/examples/integrations/mcp-servers/ashby_api/get_application_history_example_call_tool.js
new file mode 100644
index 00000000..73ea335c
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/ashby_api/get_application_history_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 = "AshbyApi.GetApplicationHistory";
+
+// 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": "{\"applicationId\":\"12345\",\"page\":1,\"pageSize\":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/ashby_api/get_application_history_example_call_tool.py b/public/examples/integrations/mcp-servers/ashby_api/get_application_history_example_call_tool.py
new file mode 100644
index 00000000..d50f057c
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/ashby_api/get_application_history_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 = "AshbyApi.GetApplicationHistory"
+
+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': '{"applicationId":"12345","page":1,"pageSize":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/ashby_api/get_approval_list_example_call_tool.js b/public/examples/integrations/mcp-servers/ashby_api/get_approval_list_example_call_tool.js
new file mode 100644
index 00000000..207b3468
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/ashby_api/get_approval_list_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 = "AshbyApi.GetApprovalList";
+
+// 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": "{\"entityType\":\"user\",\"entityId\":\"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/ashby_api/get_approval_list_example_call_tool.py b/public/examples/integrations/mcp-servers/ashby_api/get_approval_list_example_call_tool.py
new file mode 100644
index 00000000..f885420e
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/ashby_api/get_approval_list_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 = "AshbyApi.GetApprovalList"
+
+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': '{"entityType":"user","entityId":"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/ashby_api/get_ashby_user_info_example_call_tool.js b/public/examples/integrations/mcp-servers/ashby_api/get_ashby_user_info_example_call_tool.js
new file mode 100644
index 00000000..97684062
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/ashby_api/get_ashby_user_info_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 = "AshbyApi.GetAshbyUserInfo";
+
+// 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": "{\"userId\":\"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/ashby_api/get_ashby_user_info_example_call_tool.py b/public/examples/integrations/mcp-servers/ashby_api/get_ashby_user_info_example_call_tool.py
new file mode 100644
index 00000000..2716aa0d
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/ashby_api/get_ashby_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 = "AshbyApi.GetAshbyUserInfo"
+
+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': '{"userId":"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/ashby_api/get_ashby_user_list_example_call_tool.js b/public/examples/integrations/mcp-servers/ashby_api/get_ashby_user_list_example_call_tool.js
new file mode 100644
index 00000000..0248e893
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/ashby_api/get_ashby_user_list_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 = "AshbyApi.GetAshbyUserList";
+
+// 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": "{\"filter\":\"active\"}"
+};
+
+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/ashby_api/get_ashby_user_list_example_call_tool.py b/public/examples/integrations/mcp-servers/ashby_api/get_ashby_user_list_example_call_tool.py
new file mode 100644
index 00000000..c3950ce5
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/ashby_api/get_ashby_user_list_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 = "AshbyApi.GetAshbyUserList"
+
+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': '{"filter":"active"}'
+}
+
+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/ashby_api/get_candidate_criteria_evaluations_example_call_tool.js b/public/examples/integrations/mcp-servers/ashby_api/get_candidate_criteria_evaluations_example_call_tool.js
new file mode 100644
index 00000000..5cdde1cc
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/ashby_api/get_candidate_criteria_evaluations_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 = "AshbyApi.GetCandidateCriteriaEvaluations";
+
+// 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": "{\"candidate_id\":\"12345\",\"job_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/ashby_api/get_candidate_criteria_evaluations_example_call_tool.py b/public/examples/integrations/mcp-servers/ashby_api/get_candidate_criteria_evaluations_example_call_tool.py
new file mode 100644
index 00000000..d3fe7509
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/ashby_api/get_candidate_criteria_evaluations_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 = "AshbyApi.GetCandidateCriteriaEvaluations"
+
+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': '{"candidate_id":"12345","job_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/ashby_api/get_candidate_information_example_call_tool.js b/public/examples/integrations/mcp-servers/ashby_api/get_candidate_information_example_call_tool.js
new file mode 100644
index 00000000..4b870293
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/ashby_api/get_candidate_information_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 = "AshbyApi.GetCandidateInformation";
+
+// 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": "{\"candidate_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/ashby_api/get_candidate_information_example_call_tool.py b/public/examples/integrations/mcp-servers/ashby_api/get_candidate_information_example_call_tool.py
new file mode 100644
index 00000000..9eb523a2
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/ashby_api/get_candidate_information_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 = "AshbyApi.GetCandidateInformation"
+
+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': '{"candidate_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/ashby_api/get_custom_field_info_example_call_tool.js b/public/examples/integrations/mcp-servers/ashby_api/get_custom_field_info_example_call_tool.js
new file mode 100644
index 00000000..cf8d9b94
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/ashby_api/get_custom_field_info_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 = "AshbyApi.GetCustomFieldInfo";
+
+// 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": "{\"fieldId\":\"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/ashby_api/get_custom_field_info_example_call_tool.py b/public/examples/integrations/mcp-servers/ashby_api/get_custom_field_info_example_call_tool.py
new file mode 100644
index 00000000..aa2e79eb
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/ashby_api/get_custom_field_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 = "AshbyApi.GetCustomFieldInfo"
+
+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': '{"fieldId":"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/ashby_api/get_department_details_example_call_tool.js b/public/examples/integrations/mcp-servers/ashby_api/get_department_details_example_call_tool.js
new file mode 100644
index 00000000..81323261
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/ashby_api/get_department_details_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 = "AshbyApi.GetDepartmentDetails";
+
+// 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 = {
+ "department_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/ashby_api/get_department_details_example_call_tool.py b/public/examples/integrations/mcp-servers/ashby_api/get_department_details_example_call_tool.py
new file mode 100644
index 00000000..db975d33
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/ashby_api/get_department_details_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 = "AshbyApi.GetDepartmentDetails"
+
+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 = {
+ 'department_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/ashby_api/get_feedback_form_info_example_call_tool.js b/public/examples/integrations/mcp-servers/ashby_api/get_feedback_form_info_example_call_tool.js
new file mode 100644
index 00000000..995f0f87
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/ashby_api/get_feedback_form_info_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 = "AshbyApi.GetFeedbackFormInfo";
+
+// 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": "{\"form_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/ashby_api/get_feedback_form_info_example_call_tool.py b/public/examples/integrations/mcp-servers/ashby_api/get_feedback_form_info_example_call_tool.py
new file mode 100644
index 00000000..9cb9dfe9
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/ashby_api/get_feedback_form_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 = "AshbyApi.GetFeedbackFormInfo"
+
+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': '{"form_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/ashby_api/get_hiring_team_roles_example_call_tool.js b/public/examples/integrations/mcp-servers/ashby_api/get_hiring_team_roles_example_call_tool.js
new file mode 100644
index 00000000..8ad9e7a0
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/ashby_api/get_hiring_team_roles_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 = "AshbyApi.GetHiringTeamRoles";
+
+// 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/ashby_api/get_hiring_team_roles_example_call_tool.py b/public/examples/integrations/mcp-servers/ashby_api/get_hiring_team_roles_example_call_tool.py
new file mode 100644
index 00000000..f3c4bd2b
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/ashby_api/get_hiring_team_roles_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 = "AshbyApi.GetHiringTeamRoles"
+
+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/ashby_api/get_interview_schedules_example_call_tool.js b/public/examples/integrations/mcp-servers/ashby_api/get_interview_schedules_example_call_tool.js
new file mode 100644
index 00000000..c20c2744
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/ashby_api/get_interview_schedules_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 = "AshbyApi.GetInterviewSchedules";
+
+// 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": "{\"organizationId\":\"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/ashby_api/get_interview_schedules_example_call_tool.py b/public/examples/integrations/mcp-servers/ashby_api/get_interview_schedules_example_call_tool.py
new file mode 100644
index 00000000..273eaa52
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/ashby_api/get_interview_schedules_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 = "AshbyApi.GetInterviewSchedules"
+
+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': '{"organizationId":"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/ashby_api/get_interviewer_pool_info_example_call_tool.js b/public/examples/integrations/mcp-servers/ashby_api/get_interviewer_pool_info_example_call_tool.js
new file mode 100644
index 00000000..b847ca76
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/ashby_api/get_interviewer_pool_info_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 = "AshbyApi.GetInterviewerPoolInfo";
+
+// 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": "{\"poolId\":\"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/ashby_api/get_interviewer_pool_info_example_call_tool.py b/public/examples/integrations/mcp-servers/ashby_api/get_interviewer_pool_info_example_call_tool.py
new file mode 100644
index 00000000..4f0d0860
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/ashby_api/get_interviewer_pool_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 = "AshbyApi.GetInterviewerPoolInfo"
+
+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': '{"poolId":"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/ashby_api/get_interviewer_settings_example_call_tool.js b/public/examples/integrations/mcp-servers/ashby_api/get_interviewer_settings_example_call_tool.js
new file mode 100644
index 00000000..2ea5fdde
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/ashby_api/get_interviewer_settings_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 = "AshbyApi.GetInterviewerSettings";
+
+// 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": "{\"userId\":\"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/ashby_api/get_interviewer_settings_example_call_tool.py b/public/examples/integrations/mcp-servers/ashby_api/get_interviewer_settings_example_call_tool.py
new file mode 100644
index 00000000..0969f8c6
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/ashby_api/get_interviewer_settings_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 = "AshbyApi.GetInterviewerSettings"
+
+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': '{"userId":"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/ashby_api/get_job_details_example_call_tool.js b/public/examples/integrations/mcp-servers/ashby_api/get_job_details_example_call_tool.js
new file mode 100644
index 00000000..f6e593d6
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/ashby_api/get_job_details_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 = "AshbyApi.GetJobDetails";
+
+// 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": "{\"job_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/ashby_api/get_job_details_example_call_tool.py b/public/examples/integrations/mcp-servers/ashby_api/get_job_details_example_call_tool.py
new file mode 100644
index 00000000..27b71e32
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/ashby_api/get_job_details_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 = "AshbyApi.GetJobDetails"
+
+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': '{"job_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/ashby_api/get_job_posting_info_example_call_tool.js b/public/examples/integrations/mcp-servers/ashby_api/get_job_posting_info_example_call_tool.js
new file mode 100644
index 00000000..395aedfa
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/ashby_api/get_job_posting_info_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 = "AshbyApi.GetJobPostingInfo";
+
+// 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": "{\"job_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/ashby_api/get_job_posting_info_example_call_tool.py b/public/examples/integrations/mcp-servers/ashby_api/get_job_posting_info_example_call_tool.py
new file mode 100644
index 00000000..1599586c
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/ashby_api/get_job_posting_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 = "AshbyApi.GetJobPostingInfo"
+
+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': '{"job_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/ashby_api/get_latest_offers_example_call_tool.js b/public/examples/integrations/mcp-servers/ashby_api/get_latest_offers_example_call_tool.js
new file mode 100644
index 00000000..72b671ee
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/ashby_api/get_latest_offers_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 = "AshbyApi.GetLatestOffers";
+
+// 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": "{\"filter\":\"latest\"}"
+};
+
+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/ashby_api/get_latest_offers_example_call_tool.py b/public/examples/integrations/mcp-servers/ashby_api/get_latest_offers_example_call_tool.py
new file mode 100644
index 00000000..a3cc5fdd
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/ashby_api/get_latest_offers_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 = "AshbyApi.GetLatestOffers"
+
+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': '{"filter":"latest"}'
+}
+
+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/ashby_api/get_location_details_example_call_tool.js b/public/examples/integrations/mcp-servers/ashby_api/get_location_details_example_call_tool.js
new file mode 100644
index 00000000..210c4bac
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/ashby_api/get_location_details_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 = "AshbyApi.GetLocationDetails";
+
+// 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": "{\"location_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/ashby_api/get_location_details_example_call_tool.py b/public/examples/integrations/mcp-servers/ashby_api/get_location_details_example_call_tool.py
new file mode 100644
index 00000000..e59a9708
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/ashby_api/get_location_details_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 = "AshbyApi.GetLocationDetails"
+
+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': '{"location_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/ashby_api/get_offer_details_example_call_tool.js b/public/examples/integrations/mcp-servers/ashby_api/get_offer_details_example_call_tool.js
new file mode 100644
index 00000000..2fc6748a
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/ashby_api/get_offer_details_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 = "AshbyApi.GetOfferDetails";
+
+// 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": "{\"offer_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/ashby_api/get_offer_details_example_call_tool.py b/public/examples/integrations/mcp-servers/ashby_api/get_offer_details_example_call_tool.py
new file mode 100644
index 00000000..f9f7c2b4
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/ashby_api/get_offer_details_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 = "AshbyApi.GetOfferDetails"
+
+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': '{"offer_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/ashby_api/get_opening_info_example_call_tool.js b/public/examples/integrations/mcp-servers/ashby_api/get_opening_info_example_call_tool.js
new file mode 100644
index 00000000..a375745e
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/ashby_api/get_opening_info_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 = "AshbyApi.GetOpeningInfo";
+
+// 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": "{\"uuid\":\"123e4567-e89b-12d3-a456-426614174000\"}"
+};
+
+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/ashby_api/get_opening_info_example_call_tool.py b/public/examples/integrations/mcp-servers/ashby_api/get_opening_info_example_call_tool.py
new file mode 100644
index 00000000..71eb71b4
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/ashby_api/get_opening_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 = "AshbyApi.GetOpeningInfo"
+
+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': '{"uuid":"123e4567-e89b-12d3-a456-426614174000"}'
+}
+
+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/ashby_api/get_project_information_example_call_tool.js b/public/examples/integrations/mcp-servers/ashby_api/get_project_information_example_call_tool.js
new file mode 100644
index 00000000..afd7cfe3
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/ashby_api/get_project_information_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 = "AshbyApi.GetProjectInformation";
+
+// 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": "{\"uuid\":\"123e4567-e89b-12d3-a456-426614174000\"}"
+};
+
+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/ashby_api/get_project_information_example_call_tool.py b/public/examples/integrations/mcp-servers/ashby_api/get_project_information_example_call_tool.py
new file mode 100644
index 00000000..48774557
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/ashby_api/get_project_information_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 = "AshbyApi.GetProjectInformation"
+
+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': '{"uuid":"123e4567-e89b-12d3-a456-426614174000"}'
+}
+
+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/ashby_api/get_referral_form_info_example_call_tool.js b/public/examples/integrations/mcp-servers/ashby_api/get_referral_form_info_example_call_tool.js
new file mode 100644
index 00000000..fcc217f8
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/ashby_api/get_referral_form_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 = "AshbyApi.GetReferralFormInfo";
+
+// 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/ashby_api/get_referral_form_info_example_call_tool.py b/public/examples/integrations/mcp-servers/ashby_api/get_referral_form_info_example_call_tool.py
new file mode 100644
index 00000000..b21861ff
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/ashby_api/get_referral_form_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 = "AshbyApi.GetReferralFormInfo"
+
+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/ashby_api/get_survey_form_details_example_call_tool.js b/public/examples/integrations/mcp-servers/ashby_api/get_survey_form_details_example_call_tool.js
new file mode 100644
index 00000000..26477b21
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/ashby_api/get_survey_form_details_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 = "AshbyApi.GetSurveyFormDetails";
+
+// 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": "{\"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/ashby_api/get_survey_form_details_example_call_tool.py b/public/examples/integrations/mcp-servers/ashby_api/get_survey_form_details_example_call_tool.py
new file mode 100644
index 00000000..aa3f0ba3
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/ashby_api/get_survey_form_details_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 = "AshbyApi.GetSurveyFormDetails"
+
+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': '{"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/ashby_api/hiring_team_add_member_example_call_tool.js b/public/examples/integrations/mcp-servers/ashby_api/hiring_team_add_member_example_call_tool.js
new file mode 100644
index 00000000..23e7a089
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/ashby_api/hiring_team_add_member_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 = "AshbyApi.HiringTeamAddMember";
+
+// 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": "{\"userId\":\"12345\",\"jobId\":\"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/ashby_api/hiring_team_add_member_example_call_tool.py b/public/examples/integrations/mcp-servers/ashby_api/hiring_team_add_member_example_call_tool.py
new file mode 100644
index 00000000..93285ade
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/ashby_api/hiring_team_add_member_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 = "AshbyApi.HiringTeamAddMember"
+
+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': '{"userId":"12345","jobId":"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/ashby_api/job_interview_plan_info_example_call_tool.js b/public/examples/integrations/mcp-servers/ashby_api/job_interview_plan_info_example_call_tool.js
new file mode 100644
index 00000000..84eba921
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/ashby_api/job_interview_plan_info_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 = "AshbyApi.JobInterviewPlanInfo";
+
+// 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": "{\"job_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/ashby_api/job_interview_plan_info_example_call_tool.py b/public/examples/integrations/mcp-servers/ashby_api/job_interview_plan_info_example_call_tool.py
new file mode 100644
index 00000000..52a6dfd6
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/ashby_api/job_interview_plan_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 = "AshbyApi.JobInterviewPlanInfo"
+
+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': '{"job_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/ashby_api/list_all_jobs_example_call_tool.js b/public/examples/integrations/mcp-servers/ashby_api/list_all_jobs_example_call_tool.js
new file mode 100644
index 00000000..ac872ceb
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/ashby_api/list_all_jobs_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 = "AshbyApi.ListAllJobs";
+
+// 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": "{\"status\":\"open\"}"
+};
+
+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/ashby_api/list_all_jobs_example_call_tool.py b/public/examples/integrations/mcp-servers/ashby_api/list_all_jobs_example_call_tool.py
new file mode 100644
index 00000000..1922ce17
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/ashby_api/list_all_jobs_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 = "AshbyApi.ListAllJobs"
+
+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': '{"status":"open"}'
+}
+
+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/ashby_api/list_all_locations_example_call_tool.js b/public/examples/integrations/mcp-servers/ashby_api/list_all_locations_example_call_tool.js
new file mode 100644
index 00000000..73309fe8
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/ashby_api/list_all_locations_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 = "AshbyApi.ListAllLocations";
+
+// 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": "{\"filter\":\"active\"}"
+};
+
+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/ashby_api/list_all_locations_example_call_tool.py b/public/examples/integrations/mcp-servers/ashby_api/list_all_locations_example_call_tool.py
new file mode 100644
index 00000000..466250c2
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/ashby_api/list_all_locations_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 = "AshbyApi.ListAllLocations"
+
+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': '{"filter":"active"}'
+}
+
+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/ashby_api/list_all_sources_example_call_tool.js b/public/examples/integrations/mcp-servers/ashby_api/list_all_sources_example_call_tool.js
new file mode 100644
index 00000000..7fbf09d1
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/ashby_api/list_all_sources_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 = "AshbyApi.ListAllSources";
+
+// 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 = {
+ "include_archived_items": 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/ashby_api/list_all_sources_example_call_tool.py b/public/examples/integrations/mcp-servers/ashby_api/list_all_sources_example_call_tool.py
new file mode 100644
index 00000000..8a900812
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/ashby_api/list_all_sources_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 = "AshbyApi.ListAllSources"
+
+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 = {
+ 'include_archived_items': 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/ashby_api/list_application_feedback_example_call_tool.js b/public/examples/integrations/mcp-servers/ashby_api/list_application_feedback_example_call_tool.js
new file mode 100644
index 00000000..b1be6ae5
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/ashby_api/list_application_feedback_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 = "AshbyApi.ListApplicationFeedback";
+
+// 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": "{\"application_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/ashby_api/list_application_feedback_example_call_tool.py b/public/examples/integrations/mcp-servers/ashby_api/list_application_feedback_example_call_tool.py
new file mode 100644
index 00000000..487ddac2
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/ashby_api/list_application_feedback_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 = "AshbyApi.ListApplicationFeedback"
+
+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': '{"application_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/ashby_api/list_applications_example_call_tool.js b/public/examples/integrations/mcp-servers/ashby_api/list_applications_example_call_tool.js
new file mode 100644
index 00000000..2d9e8227
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/ashby_api/list_applications_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 = "AshbyApi.ListApplications";
+
+// 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": "{\"filter\":\"active\"}"
+};
+
+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/ashby_api/list_applications_example_call_tool.py b/public/examples/integrations/mcp-servers/ashby_api/list_applications_example_call_tool.py
new file mode 100644
index 00000000..e131e88c
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/ashby_api/list_applications_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 = "AshbyApi.ListApplications"
+
+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': '{"filter":"active"}'
+}
+
+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/ashby_api/list_archive_reasons_example_call_tool.js b/public/examples/integrations/mcp-servers/ashby_api/list_archive_reasons_example_call_tool.js
new file mode 100644
index 00000000..03596899
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/ashby_api/list_archive_reasons_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 = "AshbyApi.ListArchiveReasons";
+
+// 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 = {
+ "include_archived_interview_plans": 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/ashby_api/list_archive_reasons_example_call_tool.py b/public/examples/integrations/mcp-servers/ashby_api/list_archive_reasons_example_call_tool.py
new file mode 100644
index 00000000..2af1e486
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/ashby_api/list_archive_reasons_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 = "AshbyApi.ListArchiveReasons"
+
+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 = {
+ 'include_archived_interview_plans': 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/ashby_api/list_assessments_example_call_tool.js b/public/examples/integrations/mcp-servers/ashby_api/list_assessments_example_call_tool.js
new file mode 100644
index 00000000..38fdcbd2
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/ashby_api/list_assessments_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 = "AshbyApi.ListAssessments";
+
+// 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/ashby_api/list_assessments_example_call_tool.py b/public/examples/integrations/mcp-servers/ashby_api/list_assessments_example_call_tool.py
new file mode 100644
index 00000000..ddf1a845
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/ashby_api/list_assessments_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 = "AshbyApi.ListAssessments"
+
+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/ashby_api/list_candidate_client_info_example_call_tool.js b/public/examples/integrations/mcp-servers/ashby_api/list_candidate_client_info_example_call_tool.js
new file mode 100644
index 00000000..1a5b214b
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/ashby_api/list_candidate_client_info_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 = "AshbyApi.ListCandidateClientInfo";
+
+// 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": "{\"candidate_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/ashby_api/list_candidate_client_info_example_call_tool.py b/public/examples/integrations/mcp-servers/ashby_api/list_candidate_client_info_example_call_tool.py
new file mode 100644
index 00000000..2d444794
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/ashby_api/list_candidate_client_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 = "AshbyApi.ListCandidateClientInfo"
+
+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': '{"candidate_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/ashby_api/list_candidate_notes_example_call_tool.js b/public/examples/integrations/mcp-servers/ashby_api/list_candidate_notes_example_call_tool.js
new file mode 100644
index 00000000..28a8de4b
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/ashby_api/list_candidate_notes_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 = "AshbyApi.ListCandidateNotes";
+
+// 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": "{\"candidate_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/ashby_api/list_candidate_notes_example_call_tool.py b/public/examples/integrations/mcp-servers/ashby_api/list_candidate_notes_example_call_tool.py
new file mode 100644
index 00000000..4cd0fc2d
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/ashby_api/list_candidate_notes_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 = "AshbyApi.ListCandidateNotes"
+
+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': '{"candidate_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/ashby_api/list_candidate_projects_example_call_tool.js b/public/examples/integrations/mcp-servers/ashby_api/list_candidate_projects_example_call_tool.js
new file mode 100644
index 00000000..f4d30f4a
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/ashby_api/list_candidate_projects_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 = "AshbyApi.ListCandidateProjects";
+
+// 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": "{\"candidate_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/ashby_api/list_candidate_projects_example_call_tool.py b/public/examples/integrations/mcp-servers/ashby_api/list_candidate_projects_example_call_tool.py
new file mode 100644
index 00000000..b1352e57
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/ashby_api/list_candidate_projects_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 = "AshbyApi.ListCandidateProjects"
+
+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': '{"candidate_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/ashby_api/list_candidate_tags_example_call_tool.js b/public/examples/integrations/mcp-servers/ashby_api/list_candidate_tags_example_call_tool.js
new file mode 100644
index 00000000..cc2f199b
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/ashby_api/list_candidate_tags_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 = "AshbyApi.ListCandidateTags";
+
+// 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": "{\"criteria\":\"active\"}"
+};
+
+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/ashby_api/list_candidate_tags_example_call_tool.py b/public/examples/integrations/mcp-servers/ashby_api/list_candidate_tags_example_call_tool.py
new file mode 100644
index 00000000..396622f3
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/ashby_api/list_candidate_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 = "AshbyApi.ListCandidateTags"
+
+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': '{"criteria":"active"}'
+}
+
+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/ashby_api/list_candidates_example_call_tool.js b/public/examples/integrations/mcp-servers/ashby_api/list_candidates_example_call_tool.js
new file mode 100644
index 00000000..79c653ad
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/ashby_api/list_candidates_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 = "AshbyApi.ListCandidates";
+
+// 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": "{\"organizationId\":\"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/ashby_api/list_candidates_example_call_tool.py b/public/examples/integrations/mcp-servers/ashby_api/list_candidates_example_call_tool.py
new file mode 100644
index 00000000..a9786793
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/ashby_api/list_candidates_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 = "AshbyApi.ListCandidates"
+
+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': '{"organizationId":"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/ashby_api/list_close_reasons_example_call_tool.js b/public/examples/integrations/mcp-servers/ashby_api/list_close_reasons_example_call_tool.js
new file mode 100644
index 00000000..88e8e9bc
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/ashby_api/list_close_reasons_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 = "AshbyApi.ListCloseReasons";
+
+// 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 = {
+ "include_archived_reasons": 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/ashby_api/list_close_reasons_example_call_tool.py b/public/examples/integrations/mcp-servers/ashby_api/list_close_reasons_example_call_tool.py
new file mode 100644
index 00000000..b2a2adae
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/ashby_api/list_close_reasons_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 = "AshbyApi.ListCloseReasons"
+
+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 = {
+ 'include_archived_reasons': 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/ashby_api/list_custom_fields_example_call_tool.js b/public/examples/integrations/mcp-servers/ashby_api/list_custom_fields_example_call_tool.js
new file mode 100644
index 00000000..9fa15d60
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/ashby_api/list_custom_fields_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 = "AshbyApi.ListCustomFields";
+
+// 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": "{\"filter\":\"active\"}"
+};
+
+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/ashby_api/list_custom_fields_example_call_tool.py b/public/examples/integrations/mcp-servers/ashby_api/list_custom_fields_example_call_tool.py
new file mode 100644
index 00000000..00b86618
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/ashby_api/list_custom_fields_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 = "AshbyApi.ListCustomFields"
+
+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': '{"filter":"active"}'
+}
+
+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/ashby_api/list_departments_example_call_tool.js b/public/examples/integrations/mcp-servers/ashby_api/list_departments_example_call_tool.js
new file mode 100644
index 00000000..c3c476f2
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/ashby_api/list_departments_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 = "AshbyApi.ListDepartments";
+
+// 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": "{\"includeInactive\":false}"
+};
+
+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/ashby_api/list_departments_example_call_tool.py b/public/examples/integrations/mcp-servers/ashby_api/list_departments_example_call_tool.py
new file mode 100644
index 00000000..449b3372
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/ashby_api/list_departments_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 = "AshbyApi.ListDepartments"
+
+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': '{"includeInactive":false}'
+}
+
+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/ashby_api/list_enabled_communication_templates_example_call_tool.js b/public/examples/integrations/mcp-servers/ashby_api/list_enabled_communication_templates_example_call_tool.js
new file mode 100644
index 00000000..59f597f2
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/ashby_api/list_enabled_communication_templates_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 = "AshbyApi.ListEnabledCommunicationTemplates";
+
+// 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/ashby_api/list_enabled_communication_templates_example_call_tool.py b/public/examples/integrations/mcp-servers/ashby_api/list_enabled_communication_templates_example_call_tool.py
new file mode 100644
index 00000000..efacb55f
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/ashby_api/list_enabled_communication_templates_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 = "AshbyApi.ListEnabledCommunicationTemplates"
+
+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/ashby_api/list_enabled_job_boards_example_call_tool.js b/public/examples/integrations/mcp-servers/ashby_api/list_enabled_job_boards_example_call_tool.js
new file mode 100644
index 00000000..b726c80e
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/ashby_api/list_enabled_job_boards_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 = "AshbyApi.ListEnabledJobBoards";
+
+// 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 = {
+ "request_body_data": {
+ "includeInactive": false
+ }
+};
+
+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/ashby_api/list_enabled_job_boards_example_call_tool.py b/public/examples/integrations/mcp-servers/ashby_api/list_enabled_job_boards_example_call_tool.py
new file mode 100644
index 00000000..9d2c9e6d
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/ashby_api/list_enabled_job_boards_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 = "AshbyApi.ListEnabledJobBoards"
+
+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 = {
+ 'request_body_data': {'includeInactive': False
+}
+
+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/ashby_api/list_feedback_forms_example_call_tool.js b/public/examples/integrations/mcp-servers/ashby_api/list_feedback_forms_example_call_tool.js
new file mode 100644
index 00000000..a0d03182
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/ashby_api/list_feedback_forms_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 = "AshbyApi.ListFeedbackForms";
+
+// 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": "{\"filter\":\"active\"}"
+};
+
+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/ashby_api/list_feedback_forms_example_call_tool.py b/public/examples/integrations/mcp-servers/ashby_api/list_feedback_forms_example_call_tool.py
new file mode 100644
index 00000000..0abb68b3
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/ashby_api/list_feedback_forms_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 = "AshbyApi.ListFeedbackForms"
+
+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': '{"filter":"active"}'
+}
+
+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/ashby_api/list_hiring_team_roles_example_call_tool.js b/public/examples/integrations/mcp-servers/ashby_api/list_hiring_team_roles_example_call_tool.js
new file mode 100644
index 00000000..b734e0e3
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/ashby_api/list_hiring_team_roles_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 = "AshbyApi.ListHiringTeamRoles";
+
+// 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 = {
+ "return_role_titles_only": 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/ashby_api/list_hiring_team_roles_example_call_tool.py b/public/examples/integrations/mcp-servers/ashby_api/list_hiring_team_roles_example_call_tool.py
new file mode 100644
index 00000000..54a0ed67
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/ashby_api/list_hiring_team_roles_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 = "AshbyApi.ListHiringTeamRoles"
+
+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 = {
+ 'return_role_titles_only': 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/ashby_api/list_interview_events_example_call_tool.js b/public/examples/integrations/mcp-servers/ashby_api/list_interview_events_example_call_tool.js
new file mode 100644
index 00000000..532ccaa8
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/ashby_api/list_interview_events_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 = "AshbyApi.ListInterviewEvents";
+
+// 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": "{\"scheduleId\":\"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/ashby_api/list_interview_events_example_call_tool.py b/public/examples/integrations/mcp-servers/ashby_api/list_interview_events_example_call_tool.py
new file mode 100644
index 00000000..8933c5d4
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/ashby_api/list_interview_events_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 = "AshbyApi.ListInterviewEvents"
+
+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': '{"scheduleId":"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/ashby_api/list_interview_plans_example_call_tool.js b/public/examples/integrations/mcp-servers/ashby_api/list_interview_plans_example_call_tool.js
new file mode 100644
index 00000000..c9210de1
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/ashby_api/list_interview_plans_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 = "AshbyApi.ListInterviewPlans";
+
+// 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": "{\"filter\":\"active\"}"
+};
+
+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/ashby_api/list_interview_plans_example_call_tool.py b/public/examples/integrations/mcp-servers/ashby_api/list_interview_plans_example_call_tool.py
new file mode 100644
index 00000000..91c68138
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/ashby_api/list_interview_plans_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 = "AshbyApi.ListInterviewPlans"
+
+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': '{"filter":"active"}'
+}
+
+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/ashby_api/list_interview_stage_groups_example_call_tool.js b/public/examples/integrations/mcp-servers/ashby_api/list_interview_stage_groups_example_call_tool.js
new file mode 100644
index 00000000..a07fbc92
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/ashby_api/list_interview_stage_groups_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 = "AshbyApi.ListInterviewStageGroups";
+
+// 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/ashby_api/list_interview_stage_groups_example_call_tool.py b/public/examples/integrations/mcp-servers/ashby_api/list_interview_stage_groups_example_call_tool.py
new file mode 100644
index 00000000..5329c0cb
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/ashby_api/list_interview_stage_groups_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 = "AshbyApi.ListInterviewStageGroups"
+
+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/ashby_api/list_interview_stages_example_call_tool.js b/public/examples/integrations/mcp-servers/ashby_api/list_interview_stages_example_call_tool.js
new file mode 100644
index 00000000..47cbff0b
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/ashby_api/list_interview_stages_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 = "AshbyApi.ListInterviewStages";
+
+// 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": "{\"interview_plan_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/ashby_api/list_interview_stages_example_call_tool.py b/public/examples/integrations/mcp-servers/ashby_api/list_interview_stages_example_call_tool.py
new file mode 100644
index 00000000..38af1306
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/ashby_api/list_interview_stages_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 = "AshbyApi.ListInterviewStages"
+
+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': '{"interview_plan_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/ashby_api/list_interviewer_pools_example_call_tool.js b/public/examples/integrations/mcp-servers/ashby_api/list_interviewer_pools_example_call_tool.js
new file mode 100644
index 00000000..ccd9747f
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/ashby_api/list_interviewer_pools_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 = "AshbyApi.ListInterviewerPools";
+
+// 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": "{\"example_key\":\"example_value\"}"
+};
+
+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/ashby_api/list_interviewer_pools_example_call_tool.py b/public/examples/integrations/mcp-servers/ashby_api/list_interviewer_pools_example_call_tool.py
new file mode 100644
index 00000000..e4d6b576
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/ashby_api/list_interviewer_pools_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 = "AshbyApi.ListInterviewerPools"
+
+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': '{"example_key":"example_value"}'
+}
+
+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/ashby_api/list_interviews_example_call_tool.js b/public/examples/integrations/mcp-servers/ashby_api/list_interviews_example_call_tool.js
new file mode 100644
index 00000000..fd6f1eb1
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/ashby_api/list_interviews_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 = "AshbyApi.ListInterviews";
+
+// 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": "{\"status\":\"upcoming\"}"
+};
+
+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/ashby_api/list_interviews_example_call_tool.py b/public/examples/integrations/mcp-servers/ashby_api/list_interviews_example_call_tool.py
new file mode 100644
index 00000000..dc1c48c4
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/ashby_api/list_interviews_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 = "AshbyApi.ListInterviews"
+
+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': '{"status":"upcoming"}'
+}
+
+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/ashby_api/list_job_openings_example_call_tool.js b/public/examples/integrations/mcp-servers/ashby_api/list_job_openings_example_call_tool.js
new file mode 100644
index 00000000..8b114870
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/ashby_api/list_job_openings_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 = "AshbyApi.ListJobOpenings";
+
+// 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 = {
+ "last_sync_token": "abc123",
+ "page_cursor": "page_2"
+};
+
+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/ashby_api/list_job_openings_example_call_tool.py b/public/examples/integrations/mcp-servers/ashby_api/list_job_openings_example_call_tool.py
new file mode 100644
index 00000000..b72234bf
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/ashby_api/list_job_openings_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 = "AshbyApi.ListJobOpenings"
+
+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 = {
+ 'last_sync_token': 'abc123', 'page_cursor': 'page_2'
+}
+
+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/ashby_api/list_job_templates_example_call_tool.js b/public/examples/integrations/mcp-servers/ashby_api/list_job_templates_example_call_tool.js
new file mode 100644
index 00000000..ef565499
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/ashby_api/list_job_templates_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 = "AshbyApi.ListJobTemplates";
+
+// 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": "{\"status\":\"active\"}"
+};
+
+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/ashby_api/list_job_templates_example_call_tool.py b/public/examples/integrations/mcp-servers/ashby_api/list_job_templates_example_call_tool.py
new file mode 100644
index 00000000..4783cf3b
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/ashby_api/list_job_templates_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 = "AshbyApi.ListJobTemplates"
+
+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': '{"status":"active"}'
+}
+
+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/ashby_api/list_projects_example_call_tool.js b/public/examples/integrations/mcp-servers/ashby_api/list_projects_example_call_tool.js
new file mode 100644
index 00000000..33b26b60
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/ashby_api/list_projects_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 = "AshbyApi.ListProjects";
+
+// 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 = {
+ "last_sync_token": "abc123",
+ "max_items_to_return": 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/ashby_api/list_projects_example_call_tool.py b/public/examples/integrations/mcp-servers/ashby_api/list_projects_example_call_tool.py
new file mode 100644
index 00000000..aebbcdc0
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/ashby_api/list_projects_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 = "AshbyApi.ListProjects"
+
+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 = {
+ 'last_sync_token': 'abc123', 'max_items_to_return': 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/ashby_api/list_published_job_postings_example_call_tool.js b/public/examples/integrations/mcp-servers/ashby_api/list_published_job_postings_example_call_tool.js
new file mode 100644
index 00000000..4f187bdf
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/ashby_api/list_published_job_postings_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 = "AshbyApi.ListPublishedJobPostings";
+
+// 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": "{\"listedOnly\":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/ashby_api/list_published_job_postings_example_call_tool.py b/public/examples/integrations/mcp-servers/ashby_api/list_published_job_postings_example_call_tool.py
new file mode 100644
index 00000000..b30536ba
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/ashby_api/list_published_job_postings_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 = "AshbyApi.ListPublishedJobPostings"
+
+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': '{"listedOnly":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/ashby_api/list_source_tracking_links_example_call_tool.js b/public/examples/integrations/mcp-servers/ashby_api/list_source_tracking_links_example_call_tool.js
new file mode 100644
index 00000000..3d4dc672
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/ashby_api/list_source_tracking_links_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 = "AshbyApi.ListSourceTrackingLinks";
+
+// 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 = {
+ "include_disabled_tracking_links": 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/ashby_api/list_source_tracking_links_example_call_tool.py b/public/examples/integrations/mcp-servers/ashby_api/list_source_tracking_links_example_call_tool.py
new file mode 100644
index 00000000..51e273d2
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/ashby_api/list_source_tracking_links_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 = "AshbyApi.ListSourceTrackingLinks"
+
+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 = {
+ 'include_disabled_tracking_links': 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/ashby_api/list_survey_form_definitions_example_call_tool.js b/public/examples/integrations/mcp-servers/ashby_api/list_survey_form_definitions_example_call_tool.js
new file mode 100644
index 00000000..0af3b34d
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/ashby_api/list_survey_form_definitions_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 = "AshbyApi.ListSurveyFormDefinitions";
+
+// 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": "{\"surveyId\":\"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/ashby_api/list_survey_form_definitions_example_call_tool.py b/public/examples/integrations/mcp-servers/ashby_api/list_survey_form_definitions_example_call_tool.py
new file mode 100644
index 00000000..b767f90d
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/ashby_api/list_survey_form_definitions_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 = "AshbyApi.ListSurveyFormDefinitions"
+
+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': '{"surveyId":"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/ashby_api/list_survey_requests_example_call_tool.js b/public/examples/integrations/mcp-servers/ashby_api/list_survey_requests_example_call_tool.js
new file mode 100644
index 00000000..43e61696
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/ashby_api/list_survey_requests_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 = "AshbyApi.ListSurveyRequests";
+
+// 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": "get_request_schema"
+};
+
+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/ashby_api/list_survey_requests_example_call_tool.py b/public/examples/integrations/mcp-servers/ashby_api/list_survey_requests_example_call_tool.py
new file mode 100644
index 00000000..6876c22b
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/ashby_api/list_survey_requests_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 = "AshbyApi.ListSurveyRequests"
+
+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': 'get_request_schema'
+}
+
+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/ashby_api/list_survey_submissions_example_call_tool.js b/public/examples/integrations/mcp-servers/ashby_api/list_survey_submissions_example_call_tool.js
new file mode 100644
index 00000000..57f5a76e
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/ashby_api/list_survey_submissions_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 = "AshbyApi.ListSurveySubmissions";
+
+// 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": "{\"surveyType\":\"customer_feedback\"}"
+};
+
+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/ashby_api/list_survey_submissions_example_call_tool.py b/public/examples/integrations/mcp-servers/ashby_api/list_survey_submissions_example_call_tool.py
new file mode 100644
index 00000000..b52683d4
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/ashby_api/list_survey_submissions_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 = "AshbyApi.ListSurveySubmissions"
+
+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': '{"surveyType":"customer_feedback"}'
+}
+
+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/ashby_api/move_department_example_call_tool.js b/public/examples/integrations/mcp-servers/ashby_api/move_department_example_call_tool.js
new file mode 100644
index 00000000..6df7db1f
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/ashby_api/move_department_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 = "AshbyApi.MoveDepartment";
+
+// 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": "{\"departmentId\":\"123\",\"newParentId\":\"456\"}"
+};
+
+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/ashby_api/move_department_example_call_tool.py b/public/examples/integrations/mcp-servers/ashby_api/move_department_example_call_tool.py
new file mode 100644
index 00000000..78a7a3d5
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/ashby_api/move_department_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 = "AshbyApi.MoveDepartment"
+
+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': '{"departmentId":"123","newParentId":"456"}'
+}
+
+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/ashby_api/move_location_in_hierarchy_example_call_tool.js b/public/examples/integrations/mcp-servers/ashby_api/move_location_in_hierarchy_example_call_tool.js
new file mode 100644
index 00000000..975a9681
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/ashby_api/move_location_in_hierarchy_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 = "AshbyApi.MoveLocationInHierarchy";
+
+// 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": "{\"locationId\":\"123\",\"newParentId\":\"456\"}"
+};
+
+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/ashby_api/move_location_in_hierarchy_example_call_tool.py b/public/examples/integrations/mcp-servers/ashby_api/move_location_in_hierarchy_example_call_tool.py
new file mode 100644
index 00000000..64886f91
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/ashby_api/move_location_in_hierarchy_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 = "AshbyApi.MoveLocationInHierarchy"
+
+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': '{"locationId":"123","newParentId":"456"}'
+}
+
+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/ashby_api/offer_approval_action_example_call_tool.js b/public/examples/integrations/mcp-servers/ashby_api/offer_approval_action_example_call_tool.js
new file mode 100644
index 00000000..dcaaf970
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/ashby_api/offer_approval_action_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 = "AshbyApi.OfferApprovalAction";
+
+// 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": "{\"offerId\":\"12345\",\"approvalStepId\":\"67890\",\"userId\":\"abcde\"}"
+};
+
+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/ashby_api/offer_approval_action_example_call_tool.py b/public/examples/integrations/mcp-servers/ashby_api/offer_approval_action_example_call_tool.py
new file mode 100644
index 00000000..c7b07136
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/ashby_api/offer_approval_action_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 = "AshbyApi.OfferApprovalAction"
+
+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': '{"offerId":"12345","approvalStepId":"67890","userId":"abcde"}'
+}
+
+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/ashby_api/remove_hiring_team_member_example_call_tool.js b/public/examples/integrations/mcp-servers/ashby_api/remove_hiring_team_member_example_call_tool.js
new file mode 100644
index 00000000..76d7e4aa
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/ashby_api/remove_hiring_team_member_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 = "AshbyApi.RemoveHiringTeamMember";
+
+// 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 = {
+ "hiring_team_removal_details": {
+ "applicationId": "app123",
+ "teamMemberId": "user456",
+ "roleId": "role789"
+ }
+};
+
+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/ashby_api/remove_hiring_team_member_example_call_tool.py b/public/examples/integrations/mcp-servers/ashby_api/remove_hiring_team_member_example_call_tool.py
new file mode 100644
index 00000000..ff759124
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/ashby_api/remove_hiring_team_member_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 = "AshbyApi.RemoveHiringTeamMember"
+
+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 = {
+ 'hiring_team_removal_details': { 'applicationId': 'app123',
+ 'teamMemberId': 'user456',
+ 'roleId': 'role789'
+}
+
+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/ashby_api/remove_job_from_opening_example_call_tool.js b/public/examples/integrations/mcp-servers/ashby_api/remove_job_from_opening_example_call_tool.js
new file mode 100644
index 00000000..10ac0bf9
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/ashby_api/remove_job_from_opening_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 = "AshbyApi.RemoveJobFromOpening";
+
+// 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": "{\"jobId\":\"12345\",\"openingId\":\"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/ashby_api/remove_job_from_opening_example_call_tool.py b/public/examples/integrations/mcp-servers/ashby_api/remove_job_from_opening_example_call_tool.py
new file mode 100644
index 00000000..d774914c
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/ashby_api/remove_job_from_opening_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 = "AshbyApi.RemoveJobFromOpening"
+
+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': '{"jobId":"12345","openingId":"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/ashby_api/remove_location_from_opening_example_call_tool.js b/public/examples/integrations/mcp-servers/ashby_api/remove_location_from_opening_example_call_tool.js
new file mode 100644
index 00000000..32dabb86
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/ashby_api/remove_location_from_opening_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 = "AshbyApi.RemoveLocationFromOpening";
+
+// 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": "{\"job_id\":\"12345\",\"location\":\"New York\"}"
+};
+
+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/ashby_api/remove_location_from_opening_example_call_tool.py b/public/examples/integrations/mcp-servers/ashby_api/remove_location_from_opening_example_call_tool.py
new file mode 100644
index 00000000..969cd47e
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/ashby_api/remove_location_from_opening_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 = "AshbyApi.RemoveLocationFromOpening"
+
+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': '{"job_id":"12345","location":"New York"}'
+}
+
+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/ashby_api/remove_team_member_from_hiring_example_call_tool.js b/public/examples/integrations/mcp-servers/ashby_api/remove_team_member_from_hiring_example_call_tool.js
new file mode 100644
index 00000000..d8d804d7
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/ashby_api/remove_team_member_from_hiring_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 = "AshbyApi.RemoveTeamMemberFromHiring";
+
+// 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\",\"job_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/ashby_api/remove_team_member_from_hiring_example_call_tool.py b/public/examples/integrations/mcp-servers/ashby_api/remove_team_member_from_hiring_example_call_tool.py
new file mode 100644
index 00000000..7cc9b103
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/ashby_api/remove_team_member_from_hiring_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 = "AshbyApi.RemoveTeamMemberFromHiring"
+
+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","job_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/ashby_api/remove_user_from_interviewer_pool_example_call_tool.js b/public/examples/integrations/mcp-servers/ashby_api/remove_user_from_interviewer_pool_example_call_tool.js
new file mode 100644
index 00000000..c87e88bd
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/ashby_api/remove_user_from_interviewer_pool_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 = "AshbyApi.RemoveUserFromInterviewerPool";
+
+// 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": "{\"userId\":\"12345\",\"poolId\":\"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/ashby_api/remove_user_from_interviewer_pool_example_call_tool.py b/public/examples/integrations/mcp-servers/ashby_api/remove_user_from_interviewer_pool_example_call_tool.py
new file mode 100644
index 00000000..fdddc97c
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/ashby_api/remove_user_from_interviewer_pool_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 = "AshbyApi.RemoveUserFromInterviewerPool"
+
+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': '{"userId":"12345","poolId":"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/ashby_api/restore_archived_location_example_call_tool.js b/public/examples/integrations/mcp-servers/ashby_api/restore_archived_location_example_call_tool.js
new file mode 100644
index 00000000..3e496c25
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/ashby_api/restore_archived_location_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 = "AshbyApi.RestoreArchivedLocation";
+
+// 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": "{\"locationId\":\"12345\",\"restoreDate\":\"2023-10-01\"}"
+};
+
+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/ashby_api/restore_archived_location_example_call_tool.py b/public/examples/integrations/mcp-servers/ashby_api/restore_archived_location_example_call_tool.py
new file mode 100644
index 00000000..3928219a
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/ashby_api/restore_archived_location_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 = "AshbyApi.RestoreArchivedLocation"
+
+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': '{"locationId":"12345","restoreDate":"2023-10-01"}'
+}
+
+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/ashby_api/restore_department_example_call_tool.js b/public/examples/integrations/mcp-servers/ashby_api/restore_department_example_call_tool.js
new file mode 100644
index 00000000..03248c8b
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/ashby_api/restore_department_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 = "AshbyApi.RestoreDepartment";
+
+// 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": "{\"departmentId\":\"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/ashby_api/restore_department_example_call_tool.py b/public/examples/integrations/mcp-servers/ashby_api/restore_department_example_call_tool.py
new file mode 100644
index 00000000..8292d918
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/ashby_api/restore_department_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 = "AshbyApi.RestoreDepartment"
+
+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': '{"departmentId":"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/ashby_api/restore_interviewer_pool_example_call_tool.js b/public/examples/integrations/mcp-servers/ashby_api/restore_interviewer_pool_example_call_tool.js
new file mode 100644
index 00000000..c12abdec
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/ashby_api/restore_interviewer_pool_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 = "AshbyApi.RestoreInterviewerPool";
+
+// 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": "{\"pool_id\":\"12345\",\"status\":\"active\"}"
+};
+
+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/ashby_api/restore_interviewer_pool_example_call_tool.py b/public/examples/integrations/mcp-servers/ashby_api/restore_interviewer_pool_example_call_tool.py
new file mode 100644
index 00000000..d33e6168
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/ashby_api/restore_interviewer_pool_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 = "AshbyApi.RestoreInterviewerPool"
+
+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': '{"pool_id":"12345","status":"active"}'
+}
+
+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/ashby_api/retrieve_candidate_file_url_example_call_tool.js b/public/examples/integrations/mcp-servers/ashby_api/retrieve_candidate_file_url_example_call_tool.js
new file mode 100644
index 00000000..6b1790f8
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/ashby_api/retrieve_candidate_file_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 = "AshbyApi.RetrieveCandidateFileUrl";
+
+// 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": "{\"candidateId\":\"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/ashby_api/retrieve_candidate_file_url_example_call_tool.py b/public/examples/integrations/mcp-servers/ashby_api/retrieve_candidate_file_url_example_call_tool.py
new file mode 100644
index 00000000..2fa1ca1f
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/ashby_api/retrieve_candidate_file_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 = "AshbyApi.RetrieveCandidateFileUrl"
+
+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': '{"candidateId":"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/ashby_api/retrieve_sync_report_example_call_tool.js b/public/examples/integrations/mcp-servers/ashby_api/retrieve_sync_report_example_call_tool.js
new file mode 100644
index 00000000..56080b48
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/ashby_api/retrieve_sync_report_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 = "AshbyApi.RetrieveSyncReport";
+
+// 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": "{\"reportId\":\"12345\",\"filters\":{\"dateRange\":\"last_month\"}}"
+};
+
+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/ashby_api/retrieve_sync_report_example_call_tool.py b/public/examples/integrations/mcp-servers/ashby_api/retrieve_sync_report_example_call_tool.py
new file mode 100644
index 00000000..31675378
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/ashby_api/retrieve_sync_report_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 = "AshbyApi.RetrieveSyncReport"
+
+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': '{"reportId":"12345","filters":{"dateRange":"last_month"}}'
+}
+
+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/ashby_api/retrieve_webhook_info_example_call_tool.js b/public/examples/integrations/mcp-servers/ashby_api/retrieve_webhook_info_example_call_tool.js
new file mode 100644
index 00000000..f26af852
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/ashby_api/retrieve_webhook_info_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 = "AshbyApi.RetrieveWebhookInfo";
+
+// 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": "{\"webhook_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/ashby_api/retrieve_webhook_info_example_call_tool.py b/public/examples/integrations/mcp-servers/ashby_api/retrieve_webhook_info_example_call_tool.py
new file mode 100644
index 00000000..ea79b427
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/ashby_api/retrieve_webhook_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 = "AshbyApi.RetrieveWebhookInfo"
+
+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': '{"webhook_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/ashby_api/search_job_openings_example_call_tool.js b/public/examples/integrations/mcp-servers/ashby_api/search_job_openings_example_call_tool.js
new file mode 100644
index 00000000..016c8fb5
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/ashby_api/search_job_openings_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 = "AshbyApi.SearchJobOpenings";
+
+// 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": "{\"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/ashby_api/search_job_openings_example_call_tool.py b/public/examples/integrations/mcp-servers/ashby_api/search_job_openings_example_call_tool.py
new file mode 100644
index 00000000..f5bceb82
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/ashby_api/search_job_openings_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 = "AshbyApi.SearchJobOpenings"
+
+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': '{"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/ashby_api/search_jobs_by_title_example_call_tool.js b/public/examples/integrations/mcp-servers/ashby_api/search_jobs_by_title_example_call_tool.js
new file mode 100644
index 00000000..fcfdd5f2
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/ashby_api/search_jobs_by_title_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 = "AshbyApi.SearchJobsByTitle";
+
+// 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": "{\"title\":\"Software Engineer\",\"location\":\"New York\"}"
+};
+
+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/ashby_api/search_jobs_by_title_example_call_tool.py b/public/examples/integrations/mcp-servers/ashby_api/search_jobs_by_title_example_call_tool.py
new file mode 100644
index 00000000..4efa3cd6
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/ashby_api/search_jobs_by_title_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 = "AshbyApi.SearchJobsByTitle"
+
+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': '{"title":"Software Engineer","location":"New York"}'
+}
+
+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/ashby_api/search_projects_by_title_example_call_tool.js b/public/examples/integrations/mcp-servers/ashby_api/search_projects_by_title_example_call_tool.js
new file mode 100644
index 00000000..0e7eadb3
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/ashby_api/search_projects_by_title_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 = "AshbyApi.SearchProjectsByTitle";
+
+// 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 = {
+ "project_title": "AI Research"
+};
+
+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/ashby_api/search_projects_by_title_example_call_tool.py b/public/examples/integrations/mcp-servers/ashby_api/search_projects_by_title_example_call_tool.py
new file mode 100644
index 00000000..d4ba4a9d
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/ashby_api/search_projects_by_title_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 = "AshbyApi.SearchProjectsByTitle"
+
+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 = {
+ 'project_title': 'AI Research'
+}
+
+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/ashby_api/set_custom_field_value_example_call_tool.js b/public/examples/integrations/mcp-servers/ashby_api/set_custom_field_value_example_call_tool.js
new file mode 100644
index 00000000..252d96bc
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/ashby_api/set_custom_field_value_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 = "AshbyApi.SetCustomFieldValue";
+
+// 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": "{\"object_id\":\"12345\",\"custom_field\":\"status\",\"value\":\"active\"}"
+};
+
+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/ashby_api/set_custom_field_value_example_call_tool.py b/public/examples/integrations/mcp-servers/ashby_api/set_custom_field_value_example_call_tool.py
new file mode 100644
index 00000000..ffed367a
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/ashby_api/set_custom_field_value_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 = "AshbyApi.SetCustomFieldValue"
+
+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': '{"object_id":"12345","custom_field":"status","value":"active"}'
+}
+
+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/ashby_api/set_job_status_example_call_tool.js b/public/examples/integrations/mcp-servers/ashby_api/set_job_status_example_call_tool.js
new file mode 100644
index 00000000..1103e1b6
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/ashby_api/set_job_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 = "AshbyApi.SetJobStatus";
+
+// 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": "{\"jobId\":\"12345\",\"status\":\"Open\"}"
+};
+
+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/ashby_api/set_job_status_example_call_tool.py b/public/examples/integrations/mcp-servers/ashby_api/set_job_status_example_call_tool.py
new file mode 100644
index 00000000..0bc975c1
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/ashby_api/set_job_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 = "AshbyApi.SetJobStatus"
+
+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': '{"jobId":"12345","status":"Open"}'
+}
+
+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/ashby_api/set_opening_archived_state_example_call_tool.js b/public/examples/integrations/mcp-servers/ashby_api/set_opening_archived_state_example_call_tool.js
new file mode 100644
index 00000000..463bef3b
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/ashby_api/set_opening_archived_state_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 = "AshbyApi.SetOpeningArchivedState";
+
+// 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 = {
+ "opening_id": "12345",
+ "set_archived_state": 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/ashby_api/set_opening_archived_state_example_call_tool.py b/public/examples/integrations/mcp-servers/ashby_api/set_opening_archived_state_example_call_tool.py
new file mode 100644
index 00000000..abb35f78
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/ashby_api/set_opening_archived_state_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 = "AshbyApi.SetOpeningArchivedState"
+
+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 = {
+ 'opening_id': '12345', 'set_archived_state': 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/ashby_api/set_opening_state_example_call_tool.js b/public/examples/integrations/mcp-servers/ashby_api/set_opening_state_example_call_tool.js
new file mode 100644
index 00000000..f8213110
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/ashby_api/set_opening_state_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 = "AshbyApi.SetOpeningState";
+
+// 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 = {
+ "opening_id": "job_123",
+ "new_opening_state": "Closed",
+ "close_reason_id": "reason_456"
+};
+
+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/ashby_api/set_opening_state_example_call_tool.py b/public/examples/integrations/mcp-servers/ashby_api/set_opening_state_example_call_tool.py
new file mode 100644
index 00000000..16930a6e
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/ashby_api/set_opening_state_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 = "AshbyApi.SetOpeningState"
+
+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 = {
+ 'opening_id': 'job_123', 'new_opening_state': 'Closed', 'close_reason_id': 'reason_456'
+}
+
+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/ashby_api/start_assessment_example_call_tool.js b/public/examples/integrations/mcp-servers/ashby_api/start_assessment_example_call_tool.js
new file mode 100644
index 00000000..97cf310e
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/ashby_api/start_assessment_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 = "AshbyApi.StartAssessment";
+
+// 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": "{\"candidateId\":\"12345\",\"position\":\"Software Engineer\"}"
+};
+
+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/ashby_api/start_assessment_example_call_tool.py b/public/examples/integrations/mcp-servers/ashby_api/start_assessment_example_call_tool.py
new file mode 100644
index 00000000..bb1c7311
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/ashby_api/start_assessment_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 = "AshbyApi.StartAssessment"
+
+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': '{"candidateId":"12345","position":"Software Engineer"}'
+}
+
+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/ashby_api/start_offer_process_example_call_tool.js b/public/examples/integrations/mcp-servers/ashby_api/start_offer_process_example_call_tool.js
new file mode 100644
index 00000000..a1de2ded
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/ashby_api/start_offer_process_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 = "AshbyApi.StartOfferProcess";
+
+// 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": "{\"candidateId\":\"12345\",\"position\":\"Software Engineer\",\"salary\":100000}"
+};
+
+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/ashby_api/start_offer_process_example_call_tool.py b/public/examples/integrations/mcp-servers/ashby_api/start_offer_process_example_call_tool.py
new file mode 100644
index 00000000..2b2e85ab
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/ashby_api/start_offer_process_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 = "AshbyApi.StartOfferProcess"
+
+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': '{"candidateId":"12345","position":"Software Engineer","salary":100000}'
+}
+
+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/ashby_api/submit_application_feedback_example_call_tool.js b/public/examples/integrations/mcp-servers/ashby_api/submit_application_feedback_example_call_tool.js
new file mode 100644
index 00000000..396d8fe5
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/ashby_api/submit_application_feedback_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 = "AshbyApi.SubmitApplicationFeedback";
+
+// 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": "{\"feedback\":\"Great application!\",\"score\":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/ashby_api/submit_application_feedback_example_call_tool.py b/public/examples/integrations/mcp-servers/ashby_api/submit_application_feedback_example_call_tool.py
new file mode 100644
index 00000000..40cae41d
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/ashby_api/submit_application_feedback_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 = "AshbyApi.SubmitApplicationFeedback"
+
+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': '{"feedback":"Great application!","score":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/ashby_api/transfer_application_to_job_example_call_tool.js b/public/examples/integrations/mcp-servers/ashby_api/transfer_application_to_job_example_call_tool.js
new file mode 100644
index 00000000..0c000138
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/ashby_api/transfer_application_to_job_example_call_tool.js
@@ -0,0 +1,37 @@
+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 = "AshbyApi.TransferApplicationToJob";
+
+// 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 = {
+ "application_transfer_details": {
+ "applicationId": "12345",
+ "jobId": "67890",
+ "interviewPlanId": "abcde",
+ "interviewStageId": "stage1",
+ "startAutomaticActivities": 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/ashby_api/transfer_application_to_job_example_call_tool.py b/public/examples/integrations/mcp-servers/ashby_api/transfer_application_to_job_example_call_tool.py
new file mode 100644
index 00000000..a788878b
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/ashby_api/transfer_application_to_job_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 = "AshbyApi.TransferApplicationToJob"
+
+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 = {
+ 'application_transfer_details': { 'applicationId': '12345',
+ 'jobId': '67890',
+ 'interviewPlanId': 'abcde',
+ 'interviewStageId': 'stage1',
+ 'startAutomaticActivities': 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/ashby_api/update_application_history_example_call_tool.js b/public/examples/integrations/mcp-servers/ashby_api/update_application_history_example_call_tool.js
new file mode 100644
index 00000000..0fe07563
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/ashby_api/update_application_history_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 = "AshbyApi.UpdateApplicationHistory";
+
+// 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": "{\"applicationId\":\"12345\",\"stage\":\"interview\",\"timestamp\":\"2023-10-01T12:00:00Z\"}"
+};
+
+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/ashby_api/update_application_history_example_call_tool.py b/public/examples/integrations/mcp-servers/ashby_api/update_application_history_example_call_tool.py
new file mode 100644
index 00000000..54faa540
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/ashby_api/update_application_history_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 = "AshbyApi.UpdateApplicationHistory"
+
+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': '{"applicationId":"12345","stage":"interview","timestamp":"2023-10-01T12:00:00Z"}'
+}
+
+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/ashby_api/update_application_status_example_call_tool.js b/public/examples/integrations/mcp-servers/ashby_api/update_application_status_example_call_tool.js
new file mode 100644
index 00000000..1aedf39e
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/ashby_api/update_application_status_example_call_tool.js
@@ -0,0 +1,37 @@
+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 = "AshbyApi.UpdateApplicationStatus";
+
+// 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 = {
+ "application_update_payload": {
+ "applicationId": "12345",
+ "sourceId": "67890",
+ "creditedToUserId": "user_001",
+ "createdAt": "2023-10-01T12:00:00Z",
+ "sendNotifications": 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/ashby_api/update_application_status_example_call_tool.py b/public/examples/integrations/mcp-servers/ashby_api/update_application_status_example_call_tool.py
new file mode 100644
index 00000000..f66dfbac
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/ashby_api/update_application_status_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 = "AshbyApi.UpdateApplicationStatus"
+
+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 = {
+ 'application_update_payload': { 'applicationId': '12345',
+ 'sourceId': '67890',
+ 'creditedToUserId': 'user_001',
+ 'createdAt': '2023-10-01T12:00:00Z',
+ 'sendNotifications': 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/ashby_api/update_approval_definition_example_call_tool.js b/public/examples/integrations/mcp-servers/ashby_api/update_approval_definition_example_call_tool.js
new file mode 100644
index 00000000..0c60ae89
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/ashby_api/update_approval_definition_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 = "AshbyApi.UpdateApprovalDefinition";
+
+// 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": "{\"entityId\":\"12345\",\"approvalSteps\":[{\"step\":\"manager_approval\",\"required\":true},{\"step\":\"hr_approval\",\"required\":false}]}"
+};
+
+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/ashby_api/update_approval_definition_example_call_tool.py b/public/examples/integrations/mcp-servers/ashby_api/update_approval_definition_example_call_tool.py
new file mode 100644
index 00000000..2745ead6
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/ashby_api/update_approval_definition_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 = "AshbyApi.UpdateApprovalDefinition"
+
+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': '{"entityId":"12345","approvalSteps":[{"step":"manager_approval","required":true},{"step":"hr_approval","required":false}]}'
+}
+
+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/ashby_api/update_assessment_status_example_call_tool.js b/public/examples/integrations/mcp-servers/ashby_api/update_assessment_status_example_call_tool.js
new file mode 100644
index 00000000..398cd3aa
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/ashby_api/update_assessment_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 = "AshbyApi.UpdateAssessmentStatus";
+
+// 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": "{\"candidate_id\":\"12345\",\"assessment_status\":\"completed\"}"
+};
+
+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/ashby_api/update_assessment_status_example_call_tool.py b/public/examples/integrations/mcp-servers/ashby_api/update_assessment_status_example_call_tool.py
new file mode 100644
index 00000000..c348618f
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/ashby_api/update_assessment_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 = "AshbyApi.UpdateAssessmentStatus"
+
+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': '{"candidate_id":"12345","assessment_status":"completed"}'
+}
+
+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/ashby_api/update_candidate_info_example_call_tool.js b/public/examples/integrations/mcp-servers/ashby_api/update_candidate_info_example_call_tool.js
new file mode 100644
index 00000000..fa9b7666
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/ashby_api/update_candidate_info_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 = "AshbyApi.UpdateCandidateInfo";
+
+// 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": "{\"candidateId\":\"12345\",\"name\":\"John Doe\",\"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/ashby_api/update_candidate_info_example_call_tool.py b/public/examples/integrations/mcp-servers/ashby_api/update_candidate_info_example_call_tool.py
new file mode 100644
index 00000000..b87229f8
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/ashby_api/update_candidate_info_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 = "AshbyApi.UpdateCandidateInfo"
+
+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': '{"candidateId":"12345","name":"John Doe","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/ashby_api/update_department_example_call_tool.js b/public/examples/integrations/mcp-servers/ashby_api/update_department_example_call_tool.js
new file mode 100644
index 00000000..b84f6860
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/ashby_api/update_department_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 = "AshbyApi.UpdateDepartment";
+
+// 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": "{\"departmentId\":\"123\",\"name\":\"Engineering\",\"location\":\"Building 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/ashby_api/update_department_example_call_tool.py b/public/examples/integrations/mcp-servers/ashby_api/update_department_example_call_tool.py
new file mode 100644
index 00000000..7f067e33
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/ashby_api/update_department_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 = "AshbyApi.UpdateDepartment"
+
+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': '{"departmentId":"123","name":"Engineering","location":"Building 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/ashby_api/update_interview_schedule_example_call_tool.js b/public/examples/integrations/mcp-servers/ashby_api/update_interview_schedule_example_call_tool.js
new file mode 100644
index 00000000..6212de71
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/ashby_api/update_interview_schedule_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 = "AshbyApi.UpdateInterviewSchedule";
+
+// 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": "{\"interviewEventId\":\"12345\",\"action\":\"update\",\"newDate\":\"2023-10-15T10:00:00Z\"}"
+};
+
+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/ashby_api/update_interview_schedule_example_call_tool.py b/public/examples/integrations/mcp-servers/ashby_api/update_interview_schedule_example_call_tool.py
new file mode 100644
index 00000000..5fbd2bab
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/ashby_api/update_interview_schedule_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 = "AshbyApi.UpdateInterviewSchedule"
+
+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': '{"interviewEventId":"12345","action":"update","newDate":"2023-10-15T10:00:00Z"}'
+}
+
+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/ashby_api/update_interviewer_pool_example_call_tool.js b/public/examples/integrations/mcp-servers/ashby_api/update_interviewer_pool_example_call_tool.js
new file mode 100644
index 00000000..3eda67d9
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/ashby_api/update_interviewer_pool_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 = "AshbyApi.UpdateInterviewerPool";
+
+// 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": "{\"poolId\":\"12345\",\"interviewers\":[{\"name\":\"John Doe\",\"email\":\"john.doe@example.com\"},{\"name\":\"Jane Smith\",\"email\":\"jane.smith@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/ashby_api/update_interviewer_pool_example_call_tool.py b/public/examples/integrations/mcp-servers/ashby_api/update_interviewer_pool_example_call_tool.py
new file mode 100644
index 00000000..110ec35b
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/ashby_api/update_interviewer_pool_example_call_tool.py
@@ -0,0 +1,32 @@
+import json
+from arcadepy import Arcade
+
+client = Arcade() # Automatically finds the `ARCADE_API_KEY` env variable
+
+USER_ID = "{arcade_user_id}"
+TOOL_NAME = "AshbyApi.UpdateInterviewerPool"
+
+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': '{"poolId":"12345","interviewers":[{"name":"John '
+ 'Doe","email":"john.doe@example.com"},{"name":"Jane '
+ 'Smith","email":"jane.smith@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/ashby_api/update_interviewer_settings_example_call_tool.js b/public/examples/integrations/mcp-servers/ashby_api/update_interviewer_settings_example_call_tool.js
new file mode 100644
index 00000000..7faa649a
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/ashby_api/update_interviewer_settings_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 = "AshbyApi.UpdateInterviewerSettings";
+
+// 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": "{\"userId\":\"12345\",\"limits\":{\"maxInterviews\":5,\"minExperience\":2}}"
+};
+
+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/ashby_api/update_interviewer_settings_example_call_tool.py b/public/examples/integrations/mcp-servers/ashby_api/update_interviewer_settings_example_call_tool.py
new file mode 100644
index 00000000..af8fa1f9
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/ashby_api/update_interviewer_settings_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 = "AshbyApi.UpdateInterviewerSettings"
+
+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': '{"userId":"12345","limits":{"maxInterviews":5,"minExperience":2}}'
+}
+
+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/ashby_api/update_job_compensation_example_call_tool.js b/public/examples/integrations/mcp-servers/ashby_api/update_job_compensation_example_call_tool.js
new file mode 100644
index 00000000..1802e7ae
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/ashby_api/update_job_compensation_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 = "AshbyApi.UpdateJobCompensation";
+
+// 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": "{\"jobId\":\"12345\",\"compensation\":{\"baseSalary\":70000,\"bonus\":5000}}"
+};
+
+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/ashby_api/update_job_compensation_example_call_tool.py b/public/examples/integrations/mcp-servers/ashby_api/update_job_compensation_example_call_tool.py
new file mode 100644
index 00000000..1929a567
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/ashby_api/update_job_compensation_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 = "AshbyApi.UpdateJobCompensation"
+
+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': '{"jobId":"12345","compensation":{"baseSalary":70000,"bonus":5000}}'
+}
+
+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/ashby_api/update_job_details_example_call_tool.js b/public/examples/integrations/mcp-servers/ashby_api/update_job_details_example_call_tool.js
new file mode 100644
index 00000000..c9d52f16
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/ashby_api/update_job_details_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 = "AshbyApi.UpdateJobDetails";
+
+// 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": "{\"jobId\":\"12345\",\"title\":\"Software Engineer\",\"description\":\"Develop and maintain software applications.\"}"
+};
+
+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/ashby_api/update_job_details_example_call_tool.py b/public/examples/integrations/mcp-servers/ashby_api/update_job_details_example_call_tool.py
new file mode 100644
index 00000000..42fd496e
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/ashby_api/update_job_details_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 = "AshbyApi.UpdateJobDetails"
+
+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': '{"jobId":"12345","title":"Software Engineer","description":"Develop and '
+ 'maintain software applications."}'
+}
+
+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/ashby_api/update_job_opening_example_call_tool.js b/public/examples/integrations/mcp-servers/ashby_api/update_job_opening_example_call_tool.js
new file mode 100644
index 00000000..ff192c3b
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/ashby_api/update_job_opening_example_call_tool.js
@@ -0,0 +1,38 @@
+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 = "AshbyApi.UpdateJobOpening";
+
+// 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 = {
+ "department_team_id": "12345",
+ "employment_type": "FullTime",
+ "fields_to_update": "jobIds,targetHireDate",
+ "is_backfill": true,
+ "job_description_update": "We are looking for a skilled software engineer to join our team.",
+ "opening_identifier": "job-67890",
+ "target_hire_date": "2023-12-01",
+ "target_start_date": "2024-01-15"
+};
+
+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/ashby_api/update_job_opening_example_call_tool.py b/public/examples/integrations/mcp-servers/ashby_api/update_job_opening_example_call_tool.py
new file mode 100644
index 00000000..f8e274e2
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/ashby_api/update_job_opening_example_call_tool.py
@@ -0,0 +1,36 @@
+import json
+from arcadepy import Arcade
+
+client = Arcade() # Automatically finds the `ARCADE_API_KEY` env variable
+
+USER_ID = "{arcade_user_id}"
+TOOL_NAME = "AshbyApi.UpdateJobOpening"
+
+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 = {
+ 'department_team_id': '12345',
+ 'employment_type': 'FullTime',
+ 'fields_to_update': 'jobIds,targetHireDate',
+ 'is_backfill': True,
+ 'job_description_update': 'We are looking for a skilled software engineer to join our team.',
+ 'opening_identifier': 'job-67890',
+ 'target_hire_date': '2023-12-01',
+ 'target_start_date': '2024-01-15'
+}
+
+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/ashby_api/update_job_posting_example_call_tool.js b/public/examples/integrations/mcp-servers/ashby_api/update_job_posting_example_call_tool.js
new file mode 100644
index 00000000..4002ded9
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/ashby_api/update_job_posting_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 = "AshbyApi.UpdateJobPosting";
+
+// 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": "{\"jobId\":\"12345\",\"title\":\"Software Engineer\",\"descriptionParts\":{\"descriptionBody\":\"We are looking for a Software Engineer...\"},\"suppressDescriptionOpening\":true,\"suppressDescriptionClosing\":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/ashby_api/update_job_posting_example_call_tool.py b/public/examples/integrations/mcp-servers/ashby_api/update_job_posting_example_call_tool.py
new file mode 100644
index 00000000..431c63d7
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/ashby_api/update_job_posting_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 = "AshbyApi.UpdateJobPosting"
+
+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': '{"jobId":"12345","title":"Software '
+ 'Engineer","descriptionParts":{"descriptionBody":"We are looking for a '
+ 'Software '
+ 'Engineer..."},"suppressDescriptionOpening":true,"suppressDescriptionClosing":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/ashby_api/update_location_address_example_call_tool.js b/public/examples/integrations/mcp-servers/ashby_api/update_location_address_example_call_tool.js
new file mode 100644
index 00000000..ee2b1482
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/ashby_api/update_location_address_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 = "AshbyApi.UpdateLocationAddress";
+
+// 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": "{\"locationId\":\"12345\",\"newAddress\":\"123 New St, New City, NC 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/ashby_api/update_location_address_example_call_tool.py b/public/examples/integrations/mcp-servers/ashby_api/update_location_address_example_call_tool.py
new file mode 100644
index 00000000..5f6c064f
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/ashby_api/update_location_address_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 = "AshbyApi.UpdateLocationAddress"
+
+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': '{"locationId":"12345","newAddress":"123 New St, New City, NC 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/ashby_api/update_location_name_example_call_tool.js b/public/examples/integrations/mcp-servers/ashby_api/update_location_name_example_call_tool.js
new file mode 100644
index 00000000..365c2cac
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/ashby_api/update_location_name_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 = "AshbyApi.UpdateLocationName";
+
+// 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": "{\"locationId\":\"12345\",\"newName\":\"New Location Name\"}"
+};
+
+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/ashby_api/update_location_name_example_call_tool.py b/public/examples/integrations/mcp-servers/ashby_api/update_location_name_example_call_tool.py
new file mode 100644
index 00000000..ccf67464
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/ashby_api/update_location_name_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 = "AshbyApi.UpdateLocationName"
+
+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': '{"locationId":"12345","newName":"New Location Name"}'
+}
+
+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/ashby_api/update_location_remote_status_example_call_tool.js b/public/examples/integrations/mcp-servers/ashby_api/update_location_remote_status_example_call_tool.js
new file mode 100644
index 00000000..230e58a4
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/ashby_api/update_location_remote_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 = "AshbyApi.UpdateLocationRemoteStatus";
+
+// 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": "{\"locationId\":\"12345\",\"status\":\"active\"}"
+};
+
+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/ashby_api/update_location_remote_status_example_call_tool.py b/public/examples/integrations/mcp-servers/ashby_api/update_location_remote_status_example_call_tool.py
new file mode 100644
index 00000000..c4409e29
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/ashby_api/update_location_remote_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 = "AshbyApi.UpdateLocationRemoteStatus"
+
+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': '{"locationId":"12345","status":"active"}'
+}
+
+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/ashby_api/update_offer_example_call_tool.js b/public/examples/integrations/mcp-servers/ashby_api/update_offer_example_call_tool.js
new file mode 100644
index 00000000..44e82cc3
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/ashby_api/update_offer_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 = "AshbyApi.UpdateOffer";
+
+// 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": "{\"offerId\":\"12345\",\"newPrice\":199.99,\"isActive\":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/ashby_api/update_offer_example_call_tool.py b/public/examples/integrations/mcp-servers/ashby_api/update_offer_example_call_tool.py
new file mode 100644
index 00000000..b8df2474
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/ashby_api/update_offer_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 = "AshbyApi.UpdateOffer"
+
+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': '{"offerId":"12345","newPrice":199.99,"isActive":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/ashby_api/update_webhook_setting_example_call_tool.js b/public/examples/integrations/mcp-servers/ashby_api/update_webhook_setting_example_call_tool.js
new file mode 100644
index 00000000..e1d277d9
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/ashby_api/update_webhook_setting_example_call_tool.js
@@ -0,0 +1,34 @@
+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 = "AshbyApi.UpdateWebhookSetting";
+
+// 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 = {
+ "webhook_settings_payload": {
+ "webhookId": "12345",
+ "enabled": 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/ashby_api/update_webhook_setting_example_call_tool.py b/public/examples/integrations/mcp-servers/ashby_api/update_webhook_setting_example_call_tool.py
new file mode 100644
index 00000000..66c19819
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/ashby_api/update_webhook_setting_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 = "AshbyApi.UpdateWebhookSetting"
+
+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 = {
+ 'webhook_settings_payload': {'webhookId': '12345', 'enabled': 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/ashby_api/update_workplace_type_example_call_tool.js b/public/examples/integrations/mcp-servers/ashby_api/update_workplace_type_example_call_tool.js
new file mode 100644
index 00000000..fec8ecb0
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/ashby_api/update_workplace_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 = "AshbyApi.UpdateWorkplaceType";
+
+// 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": "{\"locationId\":\"12345\",\"workplaceType\":\"remote\"}"
+};
+
+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/ashby_api/update_workplace_type_example_call_tool.py b/public/examples/integrations/mcp-servers/ashby_api/update_workplace_type_example_call_tool.py
new file mode 100644
index 00000000..7973fa43
--- /dev/null
+++ b/public/examples/integrations/mcp-servers/ashby_api/update_workplace_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 = "AshbyApi.UpdateWorkplaceType"
+
+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': '{"locationId":"12345","workplaceType":"remote"}'
+}
+
+response = client.tools.execute(
+ tool_name=TOOL_NAME,
+ input=tool_input,
+ user_id=USER_ID,
+)
+print(json.dumps(response.output.value, indent=2))