From 5345b0b32c8534da96d770f959c40f53286fc560 Mon Sep 17 00:00:00 2001 From: Renato Byrro Date: Mon, 29 Sep 2025 11:07:02 -0300 Subject: [PATCH 1/3] Box.com starter toolkit docs --- .../custom/toolkits/toolkits-config.ts | 8 +- app/_components/starter-tool-info.tsx | 31 +- app/en/toolkits/productivity/box-api/page.mdx | 5655 +++++++++++++++++ .../social-communication/slack-api/page.mdx | 2 +- .../social-communication/slack_api.mdx | 1938 ------ next-env.d.ts | 1 + .../abort_upload_session_example_call_tool.js | 31 + .../abort_upload_session_example_call_tool.py | 29 + .../cancel_sign_request_example_call_tool.js | 31 + .../cancel_sign_request_example_call_tool.py | 29 + ...ck_user_invite_status_example_call_tool.js | 35 + ...ck_user_invite_status_example_call_tool.py | 29 + ...k_zip_download_status_example_call_tool.js | 31 + ...k_zip_download_status_example_call_tool.py | 29 + .../delete_ai_agent_example_call_tool.js | 31 + .../delete_ai_agent_example_call_tool.py | 29 + .../delete_archive_example_call_tool.js | 31 + .../delete_archive_example_call_tool.py | 29 + ...lete_box_file_version_example_call_tool.js | 33 + ...lete_box_file_version_example_call_tool.py | 31 + ...box_hub_collaboration_example_call_tool.js | 31 + ...box_hub_collaboration_example_call_tool.py | 29 + .../delete_box_hub_example_call_tool.js | 31 + .../delete_box_hub_example_call_tool.py | 29 + .../delete_collaboration_example_call_tool.js | 31 + .../delete_collaboration_example_call_tool.py | 29 + .../delete_comment_example_call_tool.js | 31 + .../delete_comment_example_call_tool.py | 29 + .../delete_device_pin_example_call_tool.js | 31 + .../delete_device_pin_example_call_tool.py | 29 + .../delete_file_from_box_example_call_tool.js | 32 + .../delete_file_from_box_example_call_tool.py | 29 + .../delete_file_metadata_example_call_tool.js | 33 + .../delete_file_metadata_example_call_tool.py | 31 + .../delete_file_request_example_call_tool.js | 31 + .../delete_file_request_example_call_tool.py | 29 + .../delete_folder_example_call_tool.js | 33 + .../delete_folder_example_call_tool.py | 31 + .../delete_folder_lock_example_call_tool.js | 31 + .../delete_folder_lock_example_call_tool.py | 29 + ...elete_folder_metadata_example_call_tool.js | 33 + ...elete_folder_metadata_example_call_tool.py | 31 + .../box_api/delete_group_example_call_tool.js | 31 + .../box_api/delete_group_example_call_tool.py | 29 + ...lete_group_membership_example_call_tool.js | 31 + ...lete_group_membership_example_call_tool.py | 29 + ...ete_legal_hold_policy_example_call_tool.js | 31 + ...ete_legal_hold_policy_example_call_tool.py | 29 + ...tadata_cascade_policy_example_call_tool.js | 31 + ...tadata_cascade_policy_example_call_tool.py | 29 + ...ete_metadata_template_example_call_tool.js | 32 + ...ete_metadata_template_example_call_tool.py | 29 + ...lete_retention_policy_example_call_tool.js | 31 + ...lete_retention_policy_example_call_tool.py | 29 + ...r_segment_restriction_example_call_tool.js | 31 + ...r_segment_restriction_example_call_tool.py | 29 + ...ation_barrier_segment_example_call_tool.js | 31 + ...ation_barrier_segment_example_call_tool.py | 29 + ...ete_shield_list_by_id_example_call_tool.js | 31 + ...ete_shield_list_by_id_example_call_tool.py | 29 + ...k_integration_mapping_example_call_tool.js | 31 + ...k_integration_mapping_example_call_tool.py | 29 + ...age_policy_assignment_example_call_tool.js | 31 + ...age_policy_assignment_example_call_tool.py | 29 + ...elete_task_assignment_example_call_tool.js | 31 + ...elete_task_assignment_example_call_tool.py | 29 + ...delete_task_from_file_example_call_tool.js | 31 + ...delete_task_from_file_example_call_tool.py | 29 + ...s_integration_mapping_example_call_tool.js | 31 + ...s_integration_mapping_example_call_tool.py | 29 + .../delete_user_account_example_call_tool.js | 33 + .../delete_user_account_example_call_tool.py | 29 + .../delete_web_link_example_call_tool.js | 31 + .../delete_web_link_example_call_tool.py | 29 + .../delete_webhook_example_call_tool.js | 31 + .../delete_webhook_example_call_tool.py | 29 + ...download_file_content_example_call_tool.js | 35 + ...download_file_content_example_call_tool.py | 33 + .../download_zip_content_example_call_tool.js | 31 + .../download_zip_content_example_call_tool.py | 29 + ...sign_template_details_example_call_tool.js | 31 + ...sign_template_details_example_call_tool.py | 29 + ...fetch_comment_details_example_call_tool.js | 36 + ...fetch_comment_details_example_call_tool.py | 29 + ...rise_storage_policies_example_call_tool.js | 36 + ...rise_storage_policies_example_call_tool.py | 31 + ...tadata_template_by_id_example_call_tool.js | 31 + ...tadata_template_by_id_example_call_tool.py | 29 + ..._collaboration_domain_example_call_tool.js | 31 + ..._collaboration_domain_example_call_tool.py | 29 + ...shield_barrier_report_example_call_tool.js | 31 + ...shield_barrier_report_example_call_tool.py | 29 + ...ch_signature_requests_example_call_tool.js | 37 + ...ch_signature_requests_example_call_tool.py | 32 + ...age_policy_assignment_example_call_tool.js | 31 + ...age_policy_assignment_example_call_tool.py | 29 + ...ge_policy_assignments_example_call_tool.js | 33 + ...ge_policy_assignments_example_call_tool.py | 31 + .../fetch_storage_policy_example_call_tool.js | 31 + .../fetch_storage_policy_example_call_tool.py | 29 + ...ind_metadata_template_example_call_tool.js | 33 + ...ind_metadata_template_example_call_tool.py | 31 + ..._agent_default_config_example_call_tool.js | 33 + ..._agent_default_config_example_call_tool.py | 31 + .../get_ai_agent_details_example_call_tool.js | 37 + .../get_ai_agent_details_example_call_tool.py | 30 + ...thenticated_user_info_example_call_tool.js | 35 + ...thenticated_user_info_example_call_tool.py | 29 + .../get_box2_events_example_call_tool.js | 40 + .../get_box2_events_example_call_tool.py | 34 + ...ox_docgen_job_details_example_call_tool.js | 31 + ...ox_docgen_job_details_example_call_tool.py | 29 + ...cgen_template_details_example_call_tool.js | 31 + ...cgen_template_details_example_call_tool.py | 29 + ...collaboration_details_example_call_tool.js | 31 + ...collaboration_details_example_call_tool.py | 29 + .../box_api/get_box_hubs_example_call_tool.js | 36 + .../box_api/get_box_hubs_example_call_tool.py | 34 + ...et_box_sign_templates_example_call_tool.js | 32 + ...et_box_sign_templates_example_call_tool.py | 29 + ...t_box_skills_metadata_example_call_tool.js | 31 + ...t_box_skills_metadata_example_call_tool.py | 29 + ...assification_metadata_example_call_tool.js | 29 + ...assification_metadata_example_call_tool.py | 29 + ...collaboration_details_example_call_tool.js | 35 + ...collaboration_details_example_call_tool.py | 29 + ...whitelist_exempt_user_example_call_tool.js | 31 + ...whitelist_exempt_user_example_call_tool.py | 29 + ...hitelist_exempt_users_example_call_tool.js | 32 + ...hitelist_exempt_users_example_call_tool.py | 29 + .../get_device_pin_info_example_call_tool.js | 31 + .../get_device_pin_info_example_call_tool.py | 29 + ...t_enterprise_box_hubs_example_call_tool.js | 35 + ...t_enterprise_box_hubs_example_call_tool.py | 33 + ...nterprise_device_pins_example_call_tool.js | 34 + ...nterprise_device_pins_example_call_tool.py | 32 + ...se_retention_policies_example_call_tool.js | 42 + ...se_retention_policies_example_call_tool.py | 34 + ...terprise_shield_lists_example_call_tool.js | 29 + ...terprise_shield_lists_example_call_tool.py | 29 + ...rise_terms_of_service_example_call_tool.js | 31 + ...rise_terms_of_service_example_call_tool.py | 29 + ...file_app_associations_example_call_tool.js | 34 + ...file_app_associations_example_call_tool.py | 32 + ...assification_metadata_example_call_tool.js | 31 + ...assification_metadata_example_call_tool.py | 29 + ...t_file_collaborations_example_call_tool.js | 38 + ...t_file_collaborations_example_call_tool.py | 32 + .../get_file_comments_example_call_tool.js | 38 + .../get_file_comments_example_call_tool.py | 32 + .../get_file_tasks_example_call_tool.js | 31 + .../get_file_tasks_example_call_tool.py | 29 + ..._file_version_history_example_call_tool.js | 39 + ..._file_version_history_example_call_tool.py | 32 + ...ersion_retention_info_example_call_tool.js | 31 + ...ersion_retention_info_example_call_tool.py | 29 + ...le_version_retentions_example_call_tool.js | 37 + ...le_version_retentions_example_call_tool.py | 35 + ...ersions_on_legal_hold_example_call_tool.js | 38 + ...ersions_on_legal_hold_example_call_tool.py | 32 + ...sions_under_retention_example_call_tool.js | 33 + ...sions_under_retention_example_call_tool.py | 31 + .../get_file_watermark_example_call_tool.js | 31 + .../get_file_watermark_example_call_tool.py | 29 + ...t_files_on_legal_hold_example_call_tool.js | 39 + ...t_files_on_legal_hold_example_call_tool.py | 32 + ...app_item_associations_example_call_tool.js | 34 + ...app_item_associations_example_call_tool.py | 32 + ...folder_classification_example_call_tool.js | 31 + ...folder_classification_example_call_tool.py | 29 + ...folder_collaborations_example_call_tool.js | 38 + ...folder_collaborations_example_call_tool.py | 32 + .../get_folder_details_example_call_tool.js | 43 + .../get_folder_details_example_call_tool.py | 36 + .../get_folder_metadata_example_call_tool.js | 33 + .../get_folder_metadata_example_call_tool.py | 31 + ...lder_shared_link_info_example_call_tool.js | 32 + ...lder_shared_link_info_example_call_tool.py | 30 + .../get_folder_watermark_example_call_tool.js | 31 + .../get_folder_watermark_example_call_tool.py | 29 + ..._group_collaborations_example_call_tool.js | 33 + ..._group_collaborations_example_call_tool.py | 29 + ...e_version_legal_holds_example_call_tool.js | 33 + ...e_version_legal_holds_example_call_tool.py | 29 + ...ld_policy_assignments_example_call_tool.js | 41 + ...ld_policy_assignments_example_call_tool.py | 34 + ...anual_start_workflows_example_call_tool.js | 34 + ...anual_start_workflows_example_call_tool.py | 32 + ...data_cascade_policies_example_call_tool.js | 34 + ...data_cascade_policies_example_call_tool.py | 32 + ...collaboration_invites_example_call_tool.js | 40 + ...collaboration_invites_example_call_tool.py | 32 + ...get_recent_items_info_example_call_tool.js | 37 + ...get_recent_items_info_example_call_tool.py | 31 + ...on_policy_assignments_example_call_tool.js | 39 + ...on_policy_assignments_example_call_tool.py | 33 + .../get_retention_policy_example_call_tool.js | 36 + .../get_retention_policy_example_call_tool.py | 29 + ...collaboration_domains_example_call_tool.js | 32 + ...collaboration_domains_example_call_tool.py | 29 + .../get_shared_app_item_example_call_tool.js | 31 + .../get_shared_app_item_example_call_tool.py | 29 + ...et_shared_folder_info_example_call_tool.js | 38 + ...et_shared_folder_info_example_call_tool.py | 31 + .../get_shared_link_info_example_call_tool.js | 32 + .../get_shared_link_info_example_call_tool.py | 29 + ..._shared_web_link_info_example_call_tool.js | 32 + ..._shared_web_link_info_example_call_tool.py | 30 + ...d_info_barrier_member_example_call_tool.js | 31 + ...d_info_barrier_member_example_call_tool.py | 29 + ..._info_barrier_segment_example_call_tool.js | 31 + ..._info_barrier_segment_example_call_tool.py | 29 + ...d_information_barrier_example_call_tool.js | 31 + ...d_information_barrier_example_call_tool.py | 29 + ...ation_barrier_reports_example_call_tool.js | 33 + ...ation_barrier_reports_example_call_tool.py | 31 + ..._barrier_segment_info_example_call_tool.js | 31 + ..._barrier_segment_info_example_call_tool.py | 29 + ...tion_barrier_segments_example_call_tool.js | 33 + ...tion_barrier_segments_example_call_tool.py | 31 + ..._information_barriers_example_call_tool.js | 32 + ..._information_barriers_example_call_tool.py | 29 + ...ormation_restrictions_example_call_tool.js | 33 + ...ormation_restrictions_example_call_tool.py | 29 + ...ific_terms_of_service_example_call_tool.js | 31 + ...ific_terms_of_service_example_call_tool.py | 29 + .../get_specific_webhook_example_call_tool.js | 31 + .../get_specific_webhook_example_call_tool.py | 29 + ..._integration_mappings_example_call_tool.js | 34 + ..._integration_mappings_example_call_tool.py | 32 + ...pload_session_details_example_call_tool.js | 31 + ...pload_session_details_example_call_tool.py | 29 + ..._uploaded_chunks_list_example_call_tool.js | 33 + ..._uploaded_chunks_list_example_call_tool.py | 29 + .../get_user_avatar_example_call_tool.js | 31 + .../get_user_avatar_example_call_tool.py | 29 + ...et_user_email_aliases_example_call_tool.js | 31 + ...et_user_email_aliases_example_call_tool.py | 29 + ...ser_group_memberships_example_call_tool.js | 33 + ...ser_group_memberships_example_call_tool.py | 29 + .../get_user_information_example_call_tool.js | 36 + .../get_user_information_example_call_tool.py | 29 + .../get_user_tos_status_example_call_tool.js | 32 + .../get_user_tos_status_example_call_tool.py | 29 + .../list_ai_agents_example_call_tool.js | 47 + .../list_ai_agents_example_call_tool.py | 34 + ...ist_box_doc_templates_example_call_tool.js | 32 + ...ist_box_doc_templates_example_call_tool.py | 29 + .../list_box_docgen_jobs_example_call_tool.js | 32 + .../list_box_docgen_jobs_example_call_tool.py | 29 + ..._docgen_template_tags_example_call_tool.js | 34 + ..._docgen_template_tags_example_call_tool.py | 32 + ...list_defined_webhooks_example_call_tool.js | 32 + ...list_defined_webhooks_example_call_tool.py | 29 + ...ist_docgen_batch_jobs_example_call_tool.js | 33 + ...ist_docgen_batch_jobs_example_call_tool.py | 31 + ...list_enterprise_users_example_call_tool.js | 39 + ...list_enterprise_users_example_call_tool.py | 34 + ...nder_retention_policy_example_call_tool.js | 33 + ...nder_retention_policy_example_call_tool.py | 31 + ...rrier_segment_members_example_call_tool.js | 33 + ...rrier_segment_members_example_call_tool.py | 29 + ..._integration_mappings_example_call_tool.js | 37 + ..._integration_mappings_example_call_tool.py | 35 + ...list_task_assignments_example_call_tool.js | 31 + ...list_task_assignments_example_call_tool.py | 29 + .../list_template_jobs_example_call_tool.js | 33 + .../list_template_jobs_example_call_tool.py | 31 + ...elete_file_from_trash_example_call_tool.js | 31 + ...elete_file_from_trash_example_call_tool.py | 29 + ...elete_folder_in_trash_example_call_tool.js | 31 + ...elete_folder_in_trash_example_call_tool.py | 29 + ...lete_trashed_web_link_example_call_tool.js | 31 + ...lete_trashed_web_link_example_call_tool.py | 29 + ...e_box_skills_metadata_example_call_tool.js | 31 + ...e_box_skills_metadata_example_call_tool.py | 29 + ...n_whitelist_exemption_example_call_tool.js | 31 + ...n_whitelist_exemption_example_call_tool.py | 29 + ...e_file_classification_example_call_tool.js | 31 + ...e_file_classification_example_call_tool.py | 29 + ...remove_file_watermark_example_call_tool.js | 31 + ...remove_file_watermark_example_call_tool.py | 29 + ...older_classifications_example_call_tool.js | 31 + ...older_classifications_example_call_tool.py | 29 + ..._legal_hold_from_item_example_call_tool.js | 31 + ..._legal_hold_from_item_example_call_tool.py | 29 + ...ion_policy_assignment_example_call_tool.js | 31 + ...ion_policy_assignment_example_call_tool.py | 29 + ..._collaboration_domain_example_call_tool.js | 31 + ..._collaboration_domain_example_call_tool.py | 29 + ...shield_barrier_member_example_call_tool.js | 31 + ...shield_barrier_member_example_call_tool.py | 29 + .../remove_user_avatar_example_call_tool.js | 31 + .../remove_user_avatar_example_call_tool.py | 29 + ...move_user_email_alias_example_call_tool.js | 32 + ...move_user_email_alias_example_call_tool.py | 29 + ...watermark_from_folder_example_call_tool.js | 31 + ...watermark_from_folder_example_call_tool.py | 29 + ...gnature_request_email_example_call_tool.js | 31 + ...gnature_request_email_example_call_tool.py | 29 + ...ox_hub_collaborations_example_call_tool.js | 33 + ...ox_hub_collaborations_example_call_tool.py | 29 + ...rieve_box_hub_details_example_call_tool.js | 31 + ...rieve_box_hub_details_example_call_tool.py | 29 + ...etrieve_box_hub_items_example_call_tool.js | 33 + ...etrieve_box_hub_items_example_call_tool.py | 31 + ...ieve_collection_by_id_example_call_tool.js | 31 + ...ieve_collection_by_id_example_call_tool.py | 29 + ...e_collection_contents_example_call_tool.js | 39 + ...e_collection_contents_example_call_tool.py | 32 + ...e_enterprise_archives_example_call_tool.js | 32 + ...e_enterprise_archives_example_call_tool.py | 29 + ...eve_enterprise_groups_example_call_tool.js | 38 + ...eve_enterprise_groups_example_call_tool.py | 32 + ...se_metadata_templates_example_call_tool.js | 32 + ...se_metadata_templates_example_call_tool.py | 29 + ...retrieve_file_details_example_call_tool.js | 39 + ...retrieve_file_details_example_call_tool.py | 33 + ...etrieve_file_metadata_example_call_tool.js | 31 + ...etrieve_file_metadata_example_call_tool.py | 29 + ...eve_file_request_info_example_call_tool.js | 31 + ...eve_file_request_info_example_call_tool.py | 29 + ...ile_template_metadata_example_call_tool.js | 33 + ...ile_template_metadata_example_call_tool.py | 31 + ...trieve_file_thumbnail_example_call_tool.js | 36 + ...trieve_file_thumbnail_example_call_tool.py | 34 + ...retrieve_file_version_example_call_tool.js | 37 + ...retrieve_file_version_example_call_tool.py | 31 + ...e_version_legal_holds_example_call_tool.js | 31 + ...e_version_legal_holds_example_call_tool.py | 29 + ...retrieve_folder_items_example_call_tool.js | 39 + ...retrieve_folder_items_example_call_tool.py | 34 + ...e_folder_lock_details_example_call_tool.js | 31 + ...e_folder_lock_details_example_call_tool.py | 29 + ...rieve_folder_metadata_example_call_tool.js | 31 + ...rieve_folder_metadata_example_call_tool.py | 29 + ...al_metadata_templates_example_call_tool.js | 32 + ...al_metadata_templates_example_call_tool.py | 29 + .../retrieve_group_info_example_call_tool.js | 36 + .../retrieve_group_info_example_call_tool.py | 29 + ...ieve_group_membership_example_call_tool.js | 36 + ...ieve_group_membership_example_call_tool.py | 29 + ...eve_group_memberships_example_call_tool.js | 33 + ...eve_group_memberships_example_call_tool.py | 29 + ...e_legal_hold_policies_example_call_tool.js | 38 + ...e_legal_hold_policies_example_call_tool.py | 32 + ...old_policy_assignment_example_call_tool.js | 31 + ...old_policy_assignment_example_call_tool.py | 29 + ...eve_legal_hold_policy_example_call_tool.js | 31 + ...eve_legal_hold_policy_example_call_tool.py | 29 + ...tadata_cascade_policy_example_call_tool.js | 31 + ...tadata_cascade_policy_example_call_tool.py | 29 + ...eve_metadata_template_example_call_tool.js | 32 + ...eve_metadata_template_example_call_tool.py | 29 + ...ion_policy_assignment_example_call_tool.js | 36 + ...ion_policy_assignment_example_call_tool.py | 30 + ...ieve_shared_file_info_example_call_tool.js | 36 + ...ieve_shared_file_info_example_call_tool.py | 31 + ...rieve_shared_web_link_example_call_tool.js | 38 + ...rieve_shared_web_link_example_call_tool.py | 31 + ...eve_shield_list_by_id_example_call_tool.js | 31 + ...eve_shield_list_by_id_example_call_tool.py | 29 + ...ve_sign_request_by_id_example_call_tool.js | 31 + ...ve_sign_request_by_id_example_call_tool.py | 29 + ..._task_assignment_info_example_call_tool.js | 31 + ..._task_assignment_info_example_call_tool.py | 29 + ...ieve_task_information_example_call_tool.js | 31 + ...ieve_task_information_example_call_tool.py | 29 + ...retrieve_trashed_file_example_call_tool.js | 36 + ...retrieve_trashed_file_example_call_tool.py | 29 + ...trieve_trashed_folder_example_call_tool.js | 36 + ...trieve_trashed_folder_example_call_tool.py | 30 + ...etrieve_trashed_items_example_call_tool.js | 41 + ...etrieve_trashed_items_example_call_tool.py | 35 + ...ieve_trashed_web_link_example_call_tool.js | 36 + ...ieve_trashed_web_link_example_call_tool.py | 29 + ...ieve_user_collections_example_call_tool.js | 37 + ...ieve_user_collections_example_call_tool.py | 31 + ...etrieve_web_link_info_example_call_tool.js | 31 + ...etrieve_web_link_info_example_call_tool.py | 29 + ...mark_box_doc_template_example_call_tool.js | 31 + ...mark_box_doc_template_example_call_tool.py | 29 + 382 files changed, 17550 insertions(+), 1952 deletions(-) create mode 100644 app/en/toolkits/productivity/box-api/page.mdx delete mode 100644 app/en/toolkits/social-communication/slack_api.mdx create mode 100644 public/examples/integrations/toolkits/box_api/abort_upload_session_example_call_tool.js create mode 100644 public/examples/integrations/toolkits/box_api/abort_upload_session_example_call_tool.py create mode 100644 public/examples/integrations/toolkits/box_api/cancel_sign_request_example_call_tool.js create mode 100644 public/examples/integrations/toolkits/box_api/cancel_sign_request_example_call_tool.py create mode 100644 public/examples/integrations/toolkits/box_api/check_user_invite_status_example_call_tool.js create mode 100644 public/examples/integrations/toolkits/box_api/check_user_invite_status_example_call_tool.py create mode 100644 public/examples/integrations/toolkits/box_api/check_zip_download_status_example_call_tool.js create mode 100644 public/examples/integrations/toolkits/box_api/check_zip_download_status_example_call_tool.py create mode 100644 public/examples/integrations/toolkits/box_api/delete_ai_agent_example_call_tool.js create mode 100644 public/examples/integrations/toolkits/box_api/delete_ai_agent_example_call_tool.py create mode 100644 public/examples/integrations/toolkits/box_api/delete_archive_example_call_tool.js create mode 100644 public/examples/integrations/toolkits/box_api/delete_archive_example_call_tool.py create mode 100644 public/examples/integrations/toolkits/box_api/delete_box_file_version_example_call_tool.js create mode 100644 public/examples/integrations/toolkits/box_api/delete_box_file_version_example_call_tool.py create mode 100644 public/examples/integrations/toolkits/box_api/delete_box_hub_collaboration_example_call_tool.js create mode 100644 public/examples/integrations/toolkits/box_api/delete_box_hub_collaboration_example_call_tool.py create mode 100644 public/examples/integrations/toolkits/box_api/delete_box_hub_example_call_tool.js create mode 100644 public/examples/integrations/toolkits/box_api/delete_box_hub_example_call_tool.py create mode 100644 public/examples/integrations/toolkits/box_api/delete_collaboration_example_call_tool.js create mode 100644 public/examples/integrations/toolkits/box_api/delete_collaboration_example_call_tool.py create mode 100644 public/examples/integrations/toolkits/box_api/delete_comment_example_call_tool.js create mode 100644 public/examples/integrations/toolkits/box_api/delete_comment_example_call_tool.py create mode 100644 public/examples/integrations/toolkits/box_api/delete_device_pin_example_call_tool.js create mode 100644 public/examples/integrations/toolkits/box_api/delete_device_pin_example_call_tool.py create mode 100644 public/examples/integrations/toolkits/box_api/delete_file_from_box_example_call_tool.js create mode 100644 public/examples/integrations/toolkits/box_api/delete_file_from_box_example_call_tool.py create mode 100644 public/examples/integrations/toolkits/box_api/delete_file_metadata_example_call_tool.js create mode 100644 public/examples/integrations/toolkits/box_api/delete_file_metadata_example_call_tool.py create mode 100644 public/examples/integrations/toolkits/box_api/delete_file_request_example_call_tool.js create mode 100644 public/examples/integrations/toolkits/box_api/delete_file_request_example_call_tool.py create mode 100644 public/examples/integrations/toolkits/box_api/delete_folder_example_call_tool.js create mode 100644 public/examples/integrations/toolkits/box_api/delete_folder_example_call_tool.py create mode 100644 public/examples/integrations/toolkits/box_api/delete_folder_lock_example_call_tool.js create mode 100644 public/examples/integrations/toolkits/box_api/delete_folder_lock_example_call_tool.py create mode 100644 public/examples/integrations/toolkits/box_api/delete_folder_metadata_example_call_tool.js create mode 100644 public/examples/integrations/toolkits/box_api/delete_folder_metadata_example_call_tool.py create mode 100644 public/examples/integrations/toolkits/box_api/delete_group_example_call_tool.js create mode 100644 public/examples/integrations/toolkits/box_api/delete_group_example_call_tool.py create mode 100644 public/examples/integrations/toolkits/box_api/delete_group_membership_example_call_tool.js create mode 100644 public/examples/integrations/toolkits/box_api/delete_group_membership_example_call_tool.py create mode 100644 public/examples/integrations/toolkits/box_api/delete_legal_hold_policy_example_call_tool.js create mode 100644 public/examples/integrations/toolkits/box_api/delete_legal_hold_policy_example_call_tool.py create mode 100644 public/examples/integrations/toolkits/box_api/delete_metadata_cascade_policy_example_call_tool.js create mode 100644 public/examples/integrations/toolkits/box_api/delete_metadata_cascade_policy_example_call_tool.py create mode 100644 public/examples/integrations/toolkits/box_api/delete_metadata_template_example_call_tool.js create mode 100644 public/examples/integrations/toolkits/box_api/delete_metadata_template_example_call_tool.py create mode 100644 public/examples/integrations/toolkits/box_api/delete_retention_policy_example_call_tool.js create mode 100644 public/examples/integrations/toolkits/box_api/delete_retention_policy_example_call_tool.py create mode 100644 public/examples/integrations/toolkits/box_api/delete_shield_barrier_segment_restriction_example_call_tool.js create mode 100644 public/examples/integrations/toolkits/box_api/delete_shield_barrier_segment_restriction_example_call_tool.py create mode 100644 public/examples/integrations/toolkits/box_api/delete_shield_information_barrier_segment_example_call_tool.js create mode 100644 public/examples/integrations/toolkits/box_api/delete_shield_information_barrier_segment_example_call_tool.py create mode 100644 public/examples/integrations/toolkits/box_api/delete_shield_list_by_id_example_call_tool.js create mode 100644 public/examples/integrations/toolkits/box_api/delete_shield_list_by_id_example_call_tool.py create mode 100644 public/examples/integrations/toolkits/box_api/delete_slack_integration_mapping_example_call_tool.js create mode 100644 public/examples/integrations/toolkits/box_api/delete_slack_integration_mapping_example_call_tool.py create mode 100644 public/examples/integrations/toolkits/box_api/delete_storage_policy_assignment_example_call_tool.js create mode 100644 public/examples/integrations/toolkits/box_api/delete_storage_policy_assignment_example_call_tool.py create mode 100644 public/examples/integrations/toolkits/box_api/delete_task_assignment_example_call_tool.js create mode 100644 public/examples/integrations/toolkits/box_api/delete_task_assignment_example_call_tool.py create mode 100644 public/examples/integrations/toolkits/box_api/delete_task_from_file_example_call_tool.js create mode 100644 public/examples/integrations/toolkits/box_api/delete_task_from_file_example_call_tool.py create mode 100644 public/examples/integrations/toolkits/box_api/delete_teams_integration_mapping_example_call_tool.js create mode 100644 public/examples/integrations/toolkits/box_api/delete_teams_integration_mapping_example_call_tool.py create mode 100644 public/examples/integrations/toolkits/box_api/delete_user_account_example_call_tool.js create mode 100644 public/examples/integrations/toolkits/box_api/delete_user_account_example_call_tool.py create mode 100644 public/examples/integrations/toolkits/box_api/delete_web_link_example_call_tool.js create mode 100644 public/examples/integrations/toolkits/box_api/delete_web_link_example_call_tool.py create mode 100644 public/examples/integrations/toolkits/box_api/delete_webhook_example_call_tool.js create mode 100644 public/examples/integrations/toolkits/box_api/delete_webhook_example_call_tool.py create mode 100644 public/examples/integrations/toolkits/box_api/download_file_content_example_call_tool.js create mode 100644 public/examples/integrations/toolkits/box_api/download_file_content_example_call_tool.py create mode 100644 public/examples/integrations/toolkits/box_api/download_zip_content_example_call_tool.js create mode 100644 public/examples/integrations/toolkits/box_api/download_zip_content_example_call_tool.py create mode 100644 public/examples/integrations/toolkits/box_api/fetch_box_sign_template_details_example_call_tool.js create mode 100644 public/examples/integrations/toolkits/box_api/fetch_box_sign_template_details_example_call_tool.py create mode 100644 public/examples/integrations/toolkits/box_api/fetch_comment_details_example_call_tool.js create mode 100644 public/examples/integrations/toolkits/box_api/fetch_comment_details_example_call_tool.py create mode 100644 public/examples/integrations/toolkits/box_api/fetch_enterprise_storage_policies_example_call_tool.js create mode 100644 public/examples/integrations/toolkits/box_api/fetch_enterprise_storage_policies_example_call_tool.py create mode 100644 public/examples/integrations/toolkits/box_api/fetch_metadata_template_by_id_example_call_tool.js create mode 100644 public/examples/integrations/toolkits/box_api/fetch_metadata_template_by_id_example_call_tool.py create mode 100644 public/examples/integrations/toolkits/box_api/fetch_safe_collaboration_domain_example_call_tool.js create mode 100644 public/examples/integrations/toolkits/box_api/fetch_safe_collaboration_domain_example_call_tool.py create mode 100644 public/examples/integrations/toolkits/box_api/fetch_shield_barrier_report_example_call_tool.js create mode 100644 public/examples/integrations/toolkits/box_api/fetch_shield_barrier_report_example_call_tool.py create mode 100644 public/examples/integrations/toolkits/box_api/fetch_signature_requests_example_call_tool.js create mode 100644 public/examples/integrations/toolkits/box_api/fetch_signature_requests_example_call_tool.py create mode 100644 public/examples/integrations/toolkits/box_api/fetch_storage_policy_assignment_example_call_tool.js create mode 100644 public/examples/integrations/toolkits/box_api/fetch_storage_policy_assignment_example_call_tool.py create mode 100644 public/examples/integrations/toolkits/box_api/fetch_storage_policy_assignments_example_call_tool.js create mode 100644 public/examples/integrations/toolkits/box_api/fetch_storage_policy_assignments_example_call_tool.py create mode 100644 public/examples/integrations/toolkits/box_api/fetch_storage_policy_example_call_tool.js create mode 100644 public/examples/integrations/toolkits/box_api/fetch_storage_policy_example_call_tool.py create mode 100644 public/examples/integrations/toolkits/box_api/find_metadata_template_example_call_tool.js create mode 100644 public/examples/integrations/toolkits/box_api/find_metadata_template_example_call_tool.py create mode 100644 public/examples/integrations/toolkits/box_api/get_ai_agent_default_config_example_call_tool.js create mode 100644 public/examples/integrations/toolkits/box_api/get_ai_agent_default_config_example_call_tool.py create mode 100644 public/examples/integrations/toolkits/box_api/get_ai_agent_details_example_call_tool.js create mode 100644 public/examples/integrations/toolkits/box_api/get_ai_agent_details_example_call_tool.py create mode 100644 public/examples/integrations/toolkits/box_api/get_authenticated_user_info_example_call_tool.js create mode 100644 public/examples/integrations/toolkits/box_api/get_authenticated_user_info_example_call_tool.py create mode 100644 public/examples/integrations/toolkits/box_api/get_box2_events_example_call_tool.js create mode 100644 public/examples/integrations/toolkits/box_api/get_box2_events_example_call_tool.py create mode 100644 public/examples/integrations/toolkits/box_api/get_box_docgen_job_details_example_call_tool.js create mode 100644 public/examples/integrations/toolkits/box_api/get_box_docgen_job_details_example_call_tool.py create mode 100644 public/examples/integrations/toolkits/box_api/get_box_docgen_template_details_example_call_tool.js create mode 100644 public/examples/integrations/toolkits/box_api/get_box_docgen_template_details_example_call_tool.py create mode 100644 public/examples/integrations/toolkits/box_api/get_box_hub_collaboration_details_example_call_tool.js create mode 100644 public/examples/integrations/toolkits/box_api/get_box_hub_collaboration_details_example_call_tool.py create mode 100644 public/examples/integrations/toolkits/box_api/get_box_hubs_example_call_tool.js create mode 100644 public/examples/integrations/toolkits/box_api/get_box_hubs_example_call_tool.py create mode 100644 public/examples/integrations/toolkits/box_api/get_box_sign_templates_example_call_tool.js create mode 100644 public/examples/integrations/toolkits/box_api/get_box_sign_templates_example_call_tool.py create mode 100644 public/examples/integrations/toolkits/box_api/get_box_skills_metadata_example_call_tool.js create mode 100644 public/examples/integrations/toolkits/box_api/get_box_skills_metadata_example_call_tool.py create mode 100644 public/examples/integrations/toolkits/box_api/get_classification_metadata_example_call_tool.js create mode 100644 public/examples/integrations/toolkits/box_api/get_classification_metadata_example_call_tool.py create mode 100644 public/examples/integrations/toolkits/box_api/get_collaboration_details_example_call_tool.js create mode 100644 public/examples/integrations/toolkits/box_api/get_collaboration_details_example_call_tool.py create mode 100644 public/examples/integrations/toolkits/box_api/get_collaboration_whitelist_exempt_user_example_call_tool.js create mode 100644 public/examples/integrations/toolkits/box_api/get_collaboration_whitelist_exempt_user_example_call_tool.py create mode 100644 public/examples/integrations/toolkits/box_api/get_collaboration_whitelist_exempt_users_example_call_tool.js create mode 100644 public/examples/integrations/toolkits/box_api/get_collaboration_whitelist_exempt_users_example_call_tool.py create mode 100644 public/examples/integrations/toolkits/box_api/get_device_pin_info_example_call_tool.js create mode 100644 public/examples/integrations/toolkits/box_api/get_device_pin_info_example_call_tool.py create mode 100644 public/examples/integrations/toolkits/box_api/get_enterprise_box_hubs_example_call_tool.js create mode 100644 public/examples/integrations/toolkits/box_api/get_enterprise_box_hubs_example_call_tool.py create mode 100644 public/examples/integrations/toolkits/box_api/get_enterprise_device_pins_example_call_tool.js create mode 100644 public/examples/integrations/toolkits/box_api/get_enterprise_device_pins_example_call_tool.py create mode 100644 public/examples/integrations/toolkits/box_api/get_enterprise_retention_policies_example_call_tool.js create mode 100644 public/examples/integrations/toolkits/box_api/get_enterprise_retention_policies_example_call_tool.py create mode 100644 public/examples/integrations/toolkits/box_api/get_enterprise_shield_lists_example_call_tool.js create mode 100644 public/examples/integrations/toolkits/box_api/get_enterprise_shield_lists_example_call_tool.py create mode 100644 public/examples/integrations/toolkits/box_api/get_enterprise_terms_of_service_example_call_tool.js create mode 100644 public/examples/integrations/toolkits/box_api/get_enterprise_terms_of_service_example_call_tool.py create mode 100644 public/examples/integrations/toolkits/box_api/get_file_app_associations_example_call_tool.js create mode 100644 public/examples/integrations/toolkits/box_api/get_file_app_associations_example_call_tool.py create mode 100644 public/examples/integrations/toolkits/box_api/get_file_classification_metadata_example_call_tool.js create mode 100644 public/examples/integrations/toolkits/box_api/get_file_classification_metadata_example_call_tool.py create mode 100644 public/examples/integrations/toolkits/box_api/get_file_collaborations_example_call_tool.js create mode 100644 public/examples/integrations/toolkits/box_api/get_file_collaborations_example_call_tool.py create mode 100644 public/examples/integrations/toolkits/box_api/get_file_comments_example_call_tool.js create mode 100644 public/examples/integrations/toolkits/box_api/get_file_comments_example_call_tool.py create mode 100644 public/examples/integrations/toolkits/box_api/get_file_tasks_example_call_tool.js create mode 100644 public/examples/integrations/toolkits/box_api/get_file_tasks_example_call_tool.py create mode 100644 public/examples/integrations/toolkits/box_api/get_file_version_history_example_call_tool.js create mode 100644 public/examples/integrations/toolkits/box_api/get_file_version_history_example_call_tool.py create mode 100644 public/examples/integrations/toolkits/box_api/get_file_version_retention_info_example_call_tool.js create mode 100644 public/examples/integrations/toolkits/box_api/get_file_version_retention_info_example_call_tool.py create mode 100644 public/examples/integrations/toolkits/box_api/get_file_version_retentions_example_call_tool.js create mode 100644 public/examples/integrations/toolkits/box_api/get_file_version_retentions_example_call_tool.py create mode 100644 public/examples/integrations/toolkits/box_api/get_file_versions_on_legal_hold_example_call_tool.js create mode 100644 public/examples/integrations/toolkits/box_api/get_file_versions_on_legal_hold_example_call_tool.py create mode 100644 public/examples/integrations/toolkits/box_api/get_file_versions_under_retention_example_call_tool.js create mode 100644 public/examples/integrations/toolkits/box_api/get_file_versions_under_retention_example_call_tool.py create mode 100644 public/examples/integrations/toolkits/box_api/get_file_watermark_example_call_tool.js create mode 100644 public/examples/integrations/toolkits/box_api/get_file_watermark_example_call_tool.py create mode 100644 public/examples/integrations/toolkits/box_api/get_files_on_legal_hold_example_call_tool.js create mode 100644 public/examples/integrations/toolkits/box_api/get_files_on_legal_hold_example_call_tool.py create mode 100644 public/examples/integrations/toolkits/box_api/get_folder_app_item_associations_example_call_tool.js create mode 100644 public/examples/integrations/toolkits/box_api/get_folder_app_item_associations_example_call_tool.py create mode 100644 public/examples/integrations/toolkits/box_api/get_folder_classification_example_call_tool.js create mode 100644 public/examples/integrations/toolkits/box_api/get_folder_classification_example_call_tool.py create mode 100644 public/examples/integrations/toolkits/box_api/get_folder_collaborations_example_call_tool.js create mode 100644 public/examples/integrations/toolkits/box_api/get_folder_collaborations_example_call_tool.py create mode 100644 public/examples/integrations/toolkits/box_api/get_folder_details_example_call_tool.js create mode 100644 public/examples/integrations/toolkits/box_api/get_folder_details_example_call_tool.py create mode 100644 public/examples/integrations/toolkits/box_api/get_folder_metadata_example_call_tool.js create mode 100644 public/examples/integrations/toolkits/box_api/get_folder_metadata_example_call_tool.py create mode 100644 public/examples/integrations/toolkits/box_api/get_folder_shared_link_info_example_call_tool.js create mode 100644 public/examples/integrations/toolkits/box_api/get_folder_shared_link_info_example_call_tool.py create mode 100644 public/examples/integrations/toolkits/box_api/get_folder_watermark_example_call_tool.js create mode 100644 public/examples/integrations/toolkits/box_api/get_folder_watermark_example_call_tool.py create mode 100644 public/examples/integrations/toolkits/box_api/get_group_collaborations_example_call_tool.js create mode 100644 public/examples/integrations/toolkits/box_api/get_group_collaborations_example_call_tool.py create mode 100644 public/examples/integrations/toolkits/box_api/get_legacy_file_version_legal_holds_example_call_tool.js create mode 100644 public/examples/integrations/toolkits/box_api/get_legacy_file_version_legal_holds_example_call_tool.py create mode 100644 public/examples/integrations/toolkits/box_api/get_legal_hold_policy_assignments_example_call_tool.js create mode 100644 public/examples/integrations/toolkits/box_api/get_legal_hold_policy_assignments_example_call_tool.py create mode 100644 public/examples/integrations/toolkits/box_api/get_manual_start_workflows_example_call_tool.js create mode 100644 public/examples/integrations/toolkits/box_api/get_manual_start_workflows_example_call_tool.py create mode 100644 public/examples/integrations/toolkits/box_api/get_metadata_cascade_policies_example_call_tool.js create mode 100644 public/examples/integrations/toolkits/box_api/get_metadata_cascade_policies_example_call_tool.py create mode 100644 public/examples/integrations/toolkits/box_api/get_pending_collaboration_invites_example_call_tool.js create mode 100644 public/examples/integrations/toolkits/box_api/get_pending_collaboration_invites_example_call_tool.py create mode 100644 public/examples/integrations/toolkits/box_api/get_recent_items_info_example_call_tool.js create mode 100644 public/examples/integrations/toolkits/box_api/get_recent_items_info_example_call_tool.py create mode 100644 public/examples/integrations/toolkits/box_api/get_retention_policy_assignments_example_call_tool.js create mode 100644 public/examples/integrations/toolkits/box_api/get_retention_policy_assignments_example_call_tool.py create mode 100644 public/examples/integrations/toolkits/box_api/get_retention_policy_example_call_tool.js create mode 100644 public/examples/integrations/toolkits/box_api/get_retention_policy_example_call_tool.py create mode 100644 public/examples/integrations/toolkits/box_api/get_safe_collaboration_domains_example_call_tool.js create mode 100644 public/examples/integrations/toolkits/box_api/get_safe_collaboration_domains_example_call_tool.py create mode 100644 public/examples/integrations/toolkits/box_api/get_shared_app_item_example_call_tool.js create mode 100644 public/examples/integrations/toolkits/box_api/get_shared_app_item_example_call_tool.py create mode 100644 public/examples/integrations/toolkits/box_api/get_shared_folder_info_example_call_tool.js create mode 100644 public/examples/integrations/toolkits/box_api/get_shared_folder_info_example_call_tool.py create mode 100644 public/examples/integrations/toolkits/box_api/get_shared_link_info_example_call_tool.js create mode 100644 public/examples/integrations/toolkits/box_api/get_shared_link_info_example_call_tool.py create mode 100644 public/examples/integrations/toolkits/box_api/get_shared_web_link_info_example_call_tool.js create mode 100644 public/examples/integrations/toolkits/box_api/get_shared_web_link_info_example_call_tool.py create mode 100644 public/examples/integrations/toolkits/box_api/get_shield_info_barrier_member_example_call_tool.js create mode 100644 public/examples/integrations/toolkits/box_api/get_shield_info_barrier_member_example_call_tool.py create mode 100644 public/examples/integrations/toolkits/box_api/get_shield_info_barrier_segment_example_call_tool.js create mode 100644 public/examples/integrations/toolkits/box_api/get_shield_info_barrier_segment_example_call_tool.py create mode 100644 public/examples/integrations/toolkits/box_api/get_shield_information_barrier_example_call_tool.js create mode 100644 public/examples/integrations/toolkits/box_api/get_shield_information_barrier_example_call_tool.py create mode 100644 public/examples/integrations/toolkits/box_api/get_shield_information_barrier_reports_example_call_tool.js create mode 100644 public/examples/integrations/toolkits/box_api/get_shield_information_barrier_reports_example_call_tool.py create mode 100644 public/examples/integrations/toolkits/box_api/get_shield_information_barrier_segment_info_example_call_tool.js create mode 100644 public/examples/integrations/toolkits/box_api/get_shield_information_barrier_segment_info_example_call_tool.py create mode 100644 public/examples/integrations/toolkits/box_api/get_shield_information_barrier_segments_example_call_tool.js create mode 100644 public/examples/integrations/toolkits/box_api/get_shield_information_barrier_segments_example_call_tool.py create mode 100644 public/examples/integrations/toolkits/box_api/get_shield_information_barriers_example_call_tool.js create mode 100644 public/examples/integrations/toolkits/box_api/get_shield_information_barriers_example_call_tool.py create mode 100644 public/examples/integrations/toolkits/box_api/get_shield_information_restrictions_example_call_tool.js create mode 100644 public/examples/integrations/toolkits/box_api/get_shield_information_restrictions_example_call_tool.py create mode 100644 public/examples/integrations/toolkits/box_api/get_specific_terms_of_service_example_call_tool.js create mode 100644 public/examples/integrations/toolkits/box_api/get_specific_terms_of_service_example_call_tool.py create mode 100644 public/examples/integrations/toolkits/box_api/get_specific_webhook_example_call_tool.js create mode 100644 public/examples/integrations/toolkits/box_api/get_specific_webhook_example_call_tool.py create mode 100644 public/examples/integrations/toolkits/box_api/get_teams_integration_mappings_example_call_tool.js create mode 100644 public/examples/integrations/toolkits/box_api/get_teams_integration_mappings_example_call_tool.py create mode 100644 public/examples/integrations/toolkits/box_api/get_upload_session_details_example_call_tool.js create mode 100644 public/examples/integrations/toolkits/box_api/get_upload_session_details_example_call_tool.py create mode 100644 public/examples/integrations/toolkits/box_api/get_uploaded_chunks_list_example_call_tool.js create mode 100644 public/examples/integrations/toolkits/box_api/get_uploaded_chunks_list_example_call_tool.py create mode 100644 public/examples/integrations/toolkits/box_api/get_user_avatar_example_call_tool.js create mode 100644 public/examples/integrations/toolkits/box_api/get_user_avatar_example_call_tool.py create mode 100644 public/examples/integrations/toolkits/box_api/get_user_email_aliases_example_call_tool.js create mode 100644 public/examples/integrations/toolkits/box_api/get_user_email_aliases_example_call_tool.py create mode 100644 public/examples/integrations/toolkits/box_api/get_user_group_memberships_example_call_tool.js create mode 100644 public/examples/integrations/toolkits/box_api/get_user_group_memberships_example_call_tool.py create mode 100644 public/examples/integrations/toolkits/box_api/get_user_information_example_call_tool.js create mode 100644 public/examples/integrations/toolkits/box_api/get_user_information_example_call_tool.py create mode 100644 public/examples/integrations/toolkits/box_api/get_user_tos_status_example_call_tool.js create mode 100644 public/examples/integrations/toolkits/box_api/get_user_tos_status_example_call_tool.py create mode 100644 public/examples/integrations/toolkits/box_api/list_ai_agents_example_call_tool.js create mode 100644 public/examples/integrations/toolkits/box_api/list_ai_agents_example_call_tool.py create mode 100644 public/examples/integrations/toolkits/box_api/list_box_doc_templates_example_call_tool.js create mode 100644 public/examples/integrations/toolkits/box_api/list_box_doc_templates_example_call_tool.py create mode 100644 public/examples/integrations/toolkits/box_api/list_box_docgen_jobs_example_call_tool.js create mode 100644 public/examples/integrations/toolkits/box_api/list_box_docgen_jobs_example_call_tool.py create mode 100644 public/examples/integrations/toolkits/box_api/list_box_docgen_template_tags_example_call_tool.js create mode 100644 public/examples/integrations/toolkits/box_api/list_box_docgen_template_tags_example_call_tool.py create mode 100644 public/examples/integrations/toolkits/box_api/list_defined_webhooks_example_call_tool.js create mode 100644 public/examples/integrations/toolkits/box_api/list_defined_webhooks_example_call_tool.py create mode 100644 public/examples/integrations/toolkits/box_api/list_docgen_batch_jobs_example_call_tool.js create mode 100644 public/examples/integrations/toolkits/box_api/list_docgen_batch_jobs_example_call_tool.py create mode 100644 public/examples/integrations/toolkits/box_api/list_enterprise_users_example_call_tool.js create mode 100644 public/examples/integrations/toolkits/box_api/list_enterprise_users_example_call_tool.py create mode 100644 public/examples/integrations/toolkits/box_api/list_files_under_retention_policy_example_call_tool.js create mode 100644 public/examples/integrations/toolkits/box_api/list_files_under_retention_policy_example_call_tool.py create mode 100644 public/examples/integrations/toolkits/box_api/list_shield_barrier_segment_members_example_call_tool.js create mode 100644 public/examples/integrations/toolkits/box_api/list_shield_barrier_segment_members_example_call_tool.py create mode 100644 public/examples/integrations/toolkits/box_api/list_slack_integration_mappings_example_call_tool.js create mode 100644 public/examples/integrations/toolkits/box_api/list_slack_integration_mappings_example_call_tool.py create mode 100644 public/examples/integrations/toolkits/box_api/list_task_assignments_example_call_tool.js create mode 100644 public/examples/integrations/toolkits/box_api/list_task_assignments_example_call_tool.py create mode 100644 public/examples/integrations/toolkits/box_api/list_template_jobs_example_call_tool.js create mode 100644 public/examples/integrations/toolkits/box_api/list_template_jobs_example_call_tool.py create mode 100644 public/examples/integrations/toolkits/box_api/permanently_delete_file_from_trash_example_call_tool.js create mode 100644 public/examples/integrations/toolkits/box_api/permanently_delete_file_from_trash_example_call_tool.py create mode 100644 public/examples/integrations/toolkits/box_api/permanently_delete_folder_in_trash_example_call_tool.js create mode 100644 public/examples/integrations/toolkits/box_api/permanently_delete_folder_in_trash_example_call_tool.py create mode 100644 public/examples/integrations/toolkits/box_api/permanently_delete_trashed_web_link_example_call_tool.js create mode 100644 public/examples/integrations/toolkits/box_api/permanently_delete_trashed_web_link_example_call_tool.py create mode 100644 public/examples/integrations/toolkits/box_api/remove_box_skills_metadata_example_call_tool.js create mode 100644 public/examples/integrations/toolkits/box_api/remove_box_skills_metadata_example_call_tool.py create mode 100644 public/examples/integrations/toolkits/box_api/remove_collaboration_whitelist_exemption_example_call_tool.js create mode 100644 public/examples/integrations/toolkits/box_api/remove_collaboration_whitelist_exemption_example_call_tool.py create mode 100644 public/examples/integrations/toolkits/box_api/remove_file_classification_example_call_tool.js create mode 100644 public/examples/integrations/toolkits/box_api/remove_file_classification_example_call_tool.py create mode 100644 public/examples/integrations/toolkits/box_api/remove_file_watermark_example_call_tool.js create mode 100644 public/examples/integrations/toolkits/box_api/remove_file_watermark_example_call_tool.py create mode 100644 public/examples/integrations/toolkits/box_api/remove_folder_classifications_example_call_tool.js create mode 100644 public/examples/integrations/toolkits/box_api/remove_folder_classifications_example_call_tool.py create mode 100644 public/examples/integrations/toolkits/box_api/remove_legal_hold_from_item_example_call_tool.js create mode 100644 public/examples/integrations/toolkits/box_api/remove_legal_hold_from_item_example_call_tool.py create mode 100644 public/examples/integrations/toolkits/box_api/remove_retention_policy_assignment_example_call_tool.js create mode 100644 public/examples/integrations/toolkits/box_api/remove_retention_policy_assignment_example_call_tool.py create mode 100644 public/examples/integrations/toolkits/box_api/remove_safe_collaboration_domain_example_call_tool.js create mode 100644 public/examples/integrations/toolkits/box_api/remove_safe_collaboration_domain_example_call_tool.py create mode 100644 public/examples/integrations/toolkits/box_api/remove_shield_barrier_member_example_call_tool.js create mode 100644 public/examples/integrations/toolkits/box_api/remove_shield_barrier_member_example_call_tool.py create mode 100644 public/examples/integrations/toolkits/box_api/remove_user_avatar_example_call_tool.js create mode 100644 public/examples/integrations/toolkits/box_api/remove_user_avatar_example_call_tool.py create mode 100644 public/examples/integrations/toolkits/box_api/remove_user_email_alias_example_call_tool.js create mode 100644 public/examples/integrations/toolkits/box_api/remove_user_email_alias_example_call_tool.py create mode 100644 public/examples/integrations/toolkits/box_api/remove_watermark_from_folder_example_call_tool.js create mode 100644 public/examples/integrations/toolkits/box_api/remove_watermark_from_folder_example_call_tool.py create mode 100644 public/examples/integrations/toolkits/box_api/resend_signature_request_email_example_call_tool.js create mode 100644 public/examples/integrations/toolkits/box_api/resend_signature_request_email_example_call_tool.py create mode 100644 public/examples/integrations/toolkits/box_api/retrieve_box_hub_collaborations_example_call_tool.js create mode 100644 public/examples/integrations/toolkits/box_api/retrieve_box_hub_collaborations_example_call_tool.py create mode 100644 public/examples/integrations/toolkits/box_api/retrieve_box_hub_details_example_call_tool.js create mode 100644 public/examples/integrations/toolkits/box_api/retrieve_box_hub_details_example_call_tool.py create mode 100644 public/examples/integrations/toolkits/box_api/retrieve_box_hub_items_example_call_tool.js create mode 100644 public/examples/integrations/toolkits/box_api/retrieve_box_hub_items_example_call_tool.py create mode 100644 public/examples/integrations/toolkits/box_api/retrieve_collection_by_id_example_call_tool.js create mode 100644 public/examples/integrations/toolkits/box_api/retrieve_collection_by_id_example_call_tool.py create mode 100644 public/examples/integrations/toolkits/box_api/retrieve_collection_contents_example_call_tool.js create mode 100644 public/examples/integrations/toolkits/box_api/retrieve_collection_contents_example_call_tool.py create mode 100644 public/examples/integrations/toolkits/box_api/retrieve_enterprise_archives_example_call_tool.js create mode 100644 public/examples/integrations/toolkits/box_api/retrieve_enterprise_archives_example_call_tool.py create mode 100644 public/examples/integrations/toolkits/box_api/retrieve_enterprise_groups_example_call_tool.js create mode 100644 public/examples/integrations/toolkits/box_api/retrieve_enterprise_groups_example_call_tool.py create mode 100644 public/examples/integrations/toolkits/box_api/retrieve_enterprise_metadata_templates_example_call_tool.js create mode 100644 public/examples/integrations/toolkits/box_api/retrieve_enterprise_metadata_templates_example_call_tool.py create mode 100644 public/examples/integrations/toolkits/box_api/retrieve_file_details_example_call_tool.js create mode 100644 public/examples/integrations/toolkits/box_api/retrieve_file_details_example_call_tool.py create mode 100644 public/examples/integrations/toolkits/box_api/retrieve_file_metadata_example_call_tool.js create mode 100644 public/examples/integrations/toolkits/box_api/retrieve_file_metadata_example_call_tool.py create mode 100644 public/examples/integrations/toolkits/box_api/retrieve_file_request_info_example_call_tool.js create mode 100644 public/examples/integrations/toolkits/box_api/retrieve_file_request_info_example_call_tool.py create mode 100644 public/examples/integrations/toolkits/box_api/retrieve_file_template_metadata_example_call_tool.js create mode 100644 public/examples/integrations/toolkits/box_api/retrieve_file_template_metadata_example_call_tool.py create mode 100644 public/examples/integrations/toolkits/box_api/retrieve_file_thumbnail_example_call_tool.js create mode 100644 public/examples/integrations/toolkits/box_api/retrieve_file_thumbnail_example_call_tool.py create mode 100644 public/examples/integrations/toolkits/box_api/retrieve_file_version_example_call_tool.js create mode 100644 public/examples/integrations/toolkits/box_api/retrieve_file_version_example_call_tool.py create mode 100644 public/examples/integrations/toolkits/box_api/retrieve_file_version_legal_holds_example_call_tool.js create mode 100644 public/examples/integrations/toolkits/box_api/retrieve_file_version_legal_holds_example_call_tool.py create mode 100644 public/examples/integrations/toolkits/box_api/retrieve_folder_items_example_call_tool.js create mode 100644 public/examples/integrations/toolkits/box_api/retrieve_folder_items_example_call_tool.py create mode 100644 public/examples/integrations/toolkits/box_api/retrieve_folder_lock_details_example_call_tool.js create mode 100644 public/examples/integrations/toolkits/box_api/retrieve_folder_lock_details_example_call_tool.py create mode 100644 public/examples/integrations/toolkits/box_api/retrieve_folder_metadata_example_call_tool.js create mode 100644 public/examples/integrations/toolkits/box_api/retrieve_folder_metadata_example_call_tool.py create mode 100644 public/examples/integrations/toolkits/box_api/retrieve_global_metadata_templates_example_call_tool.js create mode 100644 public/examples/integrations/toolkits/box_api/retrieve_global_metadata_templates_example_call_tool.py create mode 100644 public/examples/integrations/toolkits/box_api/retrieve_group_info_example_call_tool.js create mode 100644 public/examples/integrations/toolkits/box_api/retrieve_group_info_example_call_tool.py create mode 100644 public/examples/integrations/toolkits/box_api/retrieve_group_membership_example_call_tool.js create mode 100644 public/examples/integrations/toolkits/box_api/retrieve_group_membership_example_call_tool.py create mode 100644 public/examples/integrations/toolkits/box_api/retrieve_group_memberships_example_call_tool.js create mode 100644 public/examples/integrations/toolkits/box_api/retrieve_group_memberships_example_call_tool.py create mode 100644 public/examples/integrations/toolkits/box_api/retrieve_legal_hold_policies_example_call_tool.js create mode 100644 public/examples/integrations/toolkits/box_api/retrieve_legal_hold_policies_example_call_tool.py create mode 100644 public/examples/integrations/toolkits/box_api/retrieve_legal_hold_policy_assignment_example_call_tool.js create mode 100644 public/examples/integrations/toolkits/box_api/retrieve_legal_hold_policy_assignment_example_call_tool.py create mode 100644 public/examples/integrations/toolkits/box_api/retrieve_legal_hold_policy_example_call_tool.js create mode 100644 public/examples/integrations/toolkits/box_api/retrieve_legal_hold_policy_example_call_tool.py create mode 100644 public/examples/integrations/toolkits/box_api/retrieve_metadata_cascade_policy_example_call_tool.js create mode 100644 public/examples/integrations/toolkits/box_api/retrieve_metadata_cascade_policy_example_call_tool.py create mode 100644 public/examples/integrations/toolkits/box_api/retrieve_metadata_template_example_call_tool.js create mode 100644 public/examples/integrations/toolkits/box_api/retrieve_metadata_template_example_call_tool.py create mode 100644 public/examples/integrations/toolkits/box_api/retrieve_retention_policy_assignment_example_call_tool.js create mode 100644 public/examples/integrations/toolkits/box_api/retrieve_retention_policy_assignment_example_call_tool.py create mode 100644 public/examples/integrations/toolkits/box_api/retrieve_shared_file_info_example_call_tool.js create mode 100644 public/examples/integrations/toolkits/box_api/retrieve_shared_file_info_example_call_tool.py create mode 100644 public/examples/integrations/toolkits/box_api/retrieve_shared_web_link_example_call_tool.js create mode 100644 public/examples/integrations/toolkits/box_api/retrieve_shared_web_link_example_call_tool.py create mode 100644 public/examples/integrations/toolkits/box_api/retrieve_shield_list_by_id_example_call_tool.js create mode 100644 public/examples/integrations/toolkits/box_api/retrieve_shield_list_by_id_example_call_tool.py create mode 100644 public/examples/integrations/toolkits/box_api/retrieve_sign_request_by_id_example_call_tool.js create mode 100644 public/examples/integrations/toolkits/box_api/retrieve_sign_request_by_id_example_call_tool.py create mode 100644 public/examples/integrations/toolkits/box_api/retrieve_task_assignment_info_example_call_tool.js create mode 100644 public/examples/integrations/toolkits/box_api/retrieve_task_assignment_info_example_call_tool.py create mode 100644 public/examples/integrations/toolkits/box_api/retrieve_task_information_example_call_tool.js create mode 100644 public/examples/integrations/toolkits/box_api/retrieve_task_information_example_call_tool.py create mode 100644 public/examples/integrations/toolkits/box_api/retrieve_trashed_file_example_call_tool.js create mode 100644 public/examples/integrations/toolkits/box_api/retrieve_trashed_file_example_call_tool.py create mode 100644 public/examples/integrations/toolkits/box_api/retrieve_trashed_folder_example_call_tool.js create mode 100644 public/examples/integrations/toolkits/box_api/retrieve_trashed_folder_example_call_tool.py create mode 100644 public/examples/integrations/toolkits/box_api/retrieve_trashed_items_example_call_tool.js create mode 100644 public/examples/integrations/toolkits/box_api/retrieve_trashed_items_example_call_tool.py create mode 100644 public/examples/integrations/toolkits/box_api/retrieve_trashed_web_link_example_call_tool.js create mode 100644 public/examples/integrations/toolkits/box_api/retrieve_trashed_web_link_example_call_tool.py create mode 100644 public/examples/integrations/toolkits/box_api/retrieve_user_collections_example_call_tool.js create mode 100644 public/examples/integrations/toolkits/box_api/retrieve_user_collections_example_call_tool.py create mode 100644 public/examples/integrations/toolkits/box_api/retrieve_web_link_info_example_call_tool.js create mode 100644 public/examples/integrations/toolkits/box_api/retrieve_web_link_info_example_call_tool.py create mode 100644 public/examples/integrations/toolkits/box_api/unmark_box_doc_template_example_call_tool.js create mode 100644 public/examples/integrations/toolkits/box_api/unmark_box_doc_template_example_call_tool.py diff --git a/app/_components/custom/toolkits/toolkits-config.ts b/app/_components/custom/toolkits/toolkits-config.ts index 95d4388e9..2674a6bba 100644 --- a/app/_components/custom/toolkits/toolkits-config.ts +++ b/app/_components/custom/toolkits/toolkits-config.ts @@ -481,13 +481,13 @@ const comingSoonTools: Tool[] = [ isComingSoon: true, }, { - name: "Box", + name: "BoxApi", image: "box.svg", summary: "Manage files and folders in Box with your agents.", - link: "/toolkits/productivity/box", + link: "/toolkits/productivity/box-api", category: "productivity", - type: "arcade", - isComingSoon: true, + type: "arcade_starter", + isComingSoon: false, }, { name: "Braze", diff --git a/app/_components/starter-tool-info.tsx b/app/_components/starter-tool-info.tsx index 297fd5d31..ab9aa69cf 100644 --- a/app/_components/starter-tool-info.tsx +++ b/app/_components/starter-tool-info.tsx @@ -1,5 +1,5 @@ import { Callout } from "nextra/components"; -import type React from "react"; +import type * as React from "react"; type StarterToolInfoProps = { toolkitName: string; @@ -9,21 +9,34 @@ const StarterToolInfo: React.FC = ({ toolkitName }) => (

{toolkitName} is a{" "} - Starter{" "} - toolkit: each tool mirrors one HTTP endpoint and offers LLMs a way to - interact with the low-level API. + + + + Starter toolkit + + + + : each tool mirrors one HTTP endpoint and offers LLMs a way to interact + with the low-level API.

+

Differently from{" "} - - Optimized tools - + + + + Optimized tools + + + , Starter tools are heavily influenced by the original API design, which is not usually optimized for LLM usage. For this reason, we recommend thoroughly evaluating the toolkit with your Agents or chatbots before using it in production.{" "} - Read more about Optimized vs - Starter tools. + + Read more + {" "} + about Optimized vs Starter tools.

); diff --git a/app/en/toolkits/productivity/box-api/page.mdx b/app/en/toolkits/productivity/box-api/page.mdx new file mode 100644 index 000000000..3f4c67fe3 --- /dev/null +++ b/app/en/toolkits/productivity/box-api/page.mdx @@ -0,0 +1,5655 @@ +# BoxApi + +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 BoxApi toolkit provides a comprehensive set of tools for interacting with Box (Box2) features across content, collaboration, security, admin, and automation. With these tools you can: + +- Manage Box Docs (Doc Gen): list templates and jobs, get template/job details, list template tags, unmark templates, and handle batch jobs. +- Work with Hubs and collaborations: list/get/delete hubs, manage hub items and collaborations. +- Access and manipulate files and folders: retrieve details, download content/thumbnails/zip archives, get versions, metadata, watermarks, app associations, comments, tasks, and shared-link info; trash/restore/permanently delete files, folders, web links, and archived items; manage upload sessions and chunks. +- Manage metadata and templates: retrieve, find, create/delete metadata templates, cascade policies, and applied metadata on files/folders. +- Admin & enterprise operations: list users/groups, manage groups and memberships, enterprise events, collections, recent items, storage and retention policies, legal holds, device pins, terms of service, and retention/hold assignments and listings. +- Security and compliance: retrieve and manage shield information barriers, barrier segments, reports, restrictions, and exempt users; list enterprise shield lists and delete them. +- Collaboration controls: list and manage collaborations, pending invites, safe collaboration domains, whitelist exemptions, and integration mappings (Slack, Teams). +- Task, comment, webhook, and sign management: fetch/delete comments, tasks, task assignments, webhooks, and Box Sign requests/templates; resend or cancel sign requests. +- AI and automation: list AI agents, get agent details and default agent config, and delete agents; list workflows with manual start triggers. +- Other admin utilities: manage storage policies and assignments, terms of service statuses, device pins, and enterprise archives. + +Use these tools to build agents or apps that perform file/folder lifecycle operations, enforce and inspect security/compliance controls, manage enterprise users/groups/policy configuration, automate Doc Gen and signing workflows, and integrate Box with collaboration platforms. + +## 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-toolkit). + + +## BoxApi.ListBoxDocTemplates + +
+ + +Retrieve Box Doc Gen templates the user collaborates on. + +**Parameters** + +- **pagination_start_marker** (`string`, optional) Defines the starting position for pagination of results. Requires `usemarker` to be set to `true`. +- **max_items_per_page** (`integer`, optional) Specify the maximum number of Box Doc Gen templates to return in a single page. + +## BoxApi.UnmarkBoxDocTemplate + +
+ + +Unmarks a file as a Box Doc Gen template. + +**Parameters** + +- **file_id_to_unmark** (`string`, required) The ID of the file that will no longer be marked as a Box Doc Gen template. + +## BoxApi.GetBoxDocgenTemplateDetails + +
+ + +Fetch details of a specific Box Doc Gen template. + +**Parameters** + +- **box_docgen_template_id** (`string`, required) The ID of the Box Doc Gen template to retrieve details for. + +## BoxApi.ListBoxDocgenTemplateTags + +
+ + +Retrieve tags from a specific Box Doc Gen template. + +**Parameters** + +- **template_id** (`string`, required) The unique identifier for the Box Doc Gen template whose tags you want to retrieve. +- **template_version_id** (`string`, optional) The ID of the specific version of the template to retrieve tags from. +- **pagination_start_marker** (`string`, optional) Defines the starting position for results when using marker-based pagination. Must have `usemarker` set to `true`. +- **maximum_items_per_page** (`integer`, optional) Specifies the maximum number of tags to return per page from the Box Doc Gen template. + +## BoxApi.GetBoxDocgenJobDetails + +
+ + +Retrieve details of a Box Doc Gen job using its ID. + +**Parameters** + +- **box_doc_gen_job_id** (`string`, required) The unique identifier for the Box Doc Gen job you want details for. + +## BoxApi.ListBoxDocgenJobs + +
+ + +Retrieves a list of Box Doc Gen jobs for a user. + +**Parameters** + +- **pagination_marker** (`string`, optional) Starting position marker for paginating results. Requires 'usemarker' set to true. +- **maximum_items_per_page** (`integer`, optional) The maximum number of items to return per page. Specify an integer value to set the limit for pagination. + +## BoxApi.ListTemplateJobs + +
+ + +Retrieve jobs associated with a specific document template. + +**Parameters** + +- **template_identifier** (`string`, required) The unique ID of the template for which jobs need to be retrieved. +- **pagination_start_marker** (`string`, optional) Defines the starting position for pagination. Requires 'usemarker' to be set to true. +- **max_items_per_page** (`integer`, optional) The maximum number of items to return per page from the list of jobs. + +## BoxApi.ListDocgenBatchJobs + +
+ + +Retrieve details of Box Doc Gen jobs in a batch. + +**Parameters** + +- **box_doc_gen_batch_id** (`string`, required) The identifier for a Box Doc Gen batch used to retrieve specific job details. +- **pagination_marker** (`string`, optional) The position marker to start returning results. Use for marker-based pagination. Requires `usemarker` set to `true`. +- **maximum_items_per_page** (`integer`, optional) The maximum number of items to return per page when retrieving Box Doc Gen jobs. + +## BoxApi.GetBoxHubs + +
+ + +Retrieve all Box Hubs for the user. + +**Parameters** + +- **hub_search_query** (`string`, optional) The string to search for specific Box Hubs. Use keywords to refine search results. +- **hub_scope** (`string`, optional) Specifies which Box Hubs to retrieve. Options: `editable`, `view_only`, `all`. Default is `all`. +- **sort_results_by** (`string`, optional) Field to sort Box Hubs by: `name`, `updated_at`, `last_accessed_at`, `view_count`, `relevance` (default: `relevance`). +- **sort_direction** (`string`, optional) Specify the sort order: 'ASC' for ascending or 'DESC' for descending. +- **pagination_start_marker** (`string`, optional) Defines the position marker to begin returning results, used for marker-based pagination. +- **max_items_per_page** (`integer`, optional) The maximum number of Box Hubs to return per page. Use for pagination control. + +## BoxApi.GetEnterpriseBoxHubs + +
+ + +Retrieve Box Hubs for an enterprise. + +**Parameters** + +- **search_query_for_box_hubs** (`string`, optional) The search query string to find specific Box Hubs within an enterprise. +- **sort_results_by** (`string`, optional) The field to sort the Box Hubs by. Options: 'name', 'updated_at', 'last_accessed_at', 'view_count', 'relevance'. Default is 'relevance'. +- **sort_direction** (`string`, optional) The direction to sort results: alphabetical ascending ('ASC') or descending ('DESC'). +- **pagination_marker** (`string`, optional) The starting position marker for returning results, used in marker-based pagination. +- **max_items_per_page** (`integer`, optional) The maximum number of Box Hubs to return per page. This controls the page size for the result set. + +## BoxApi.RetrieveBoxHubDetails + +
+ + +Fetch Box Hub details using its ID. + +**Parameters** + +- **box_hub_identifier** (`string`, required) The unique ID representing a Box Hub, found in the URL when visiting the hub. + +## BoxApi.DeleteBoxHub + +
+ + +Delete a specific Box Hub using its ID. + +**Parameters** + +- **box_hub_unique_id** (`string`, required) The unique identifier for a Box Hub, obtainable from the hub's URL. + +## BoxApi.RetrieveBoxHubCollaborations + +
+ + +Retrieves collaborations for a Box Hub. + +**Parameters** + +- **hub_identifier** (`string`, required) The unique string identifier for a Box Hub, found in the Hub's URL. +- **pagination_marker** (`string`, optional) The position marker to begin returning results, used for marker-based pagination. Ensure `usemarker` is set to `true`. +- **max_items_per_page** (`integer`, optional) The maximum number of collaboration items to return per page. Determines the page size for results. + +## BoxApi.GetBoxHubCollaborationDetails + +
+ + +Retrieve details for a Box Hub collaboration by ID. + +**Parameters** + +- **hub_collaboration_id** (`string`, required) The unique identifier for the specific Box Hub collaboration you want to retrieve details for. + +## BoxApi.DeleteBoxHubCollaboration + +
+ + +Remove a specific Box Hub collaboration. + +**Parameters** + +- **hub_collaboration_identifier** (`string`, required) The unique identifier for the Box Hub collaboration to be deleted. + +## BoxApi.RetrieveBoxHubItems + +
+ + +Fetch all items from a specified Box Hub. + +**Parameters** + +- **hub_identifier** (`string`, required) The unique ID representing a Box Hub, retrievable from the hub's URL. +- **pagination_start_marker** (`string`, optional) Defines the starting position for results when using marker-based pagination. Requires `usemarker` to be `true`. +- **maximum_items_per_page** (`integer`, optional) The maximum number of items to return per page from a Box Hub. Specify an integer value to limit the number of items in each result set. + +## BoxApi.GetEnterpriseShieldLists + +
+ + +Retrieve all shield lists for the enterprise. + +**Parameters** + +This tool does not take any parameters. + +## BoxApi.RetrieveShieldListById + +
+ + +Retrieve details of a specific shield list by ID. + +**Parameters** + +- **shield_list_identifier** (`string`, required) The unique identifier for a shield list. Retrieve this ID by calling the endpoint that lists all shield lists for your enterprise. + +## BoxApi.DeleteShieldListById + +
+ + +Delete a shield list using its ID. + +**Parameters** + +- **shield_list_id** (`string`, required) The unique identifier for the shield list to be deleted. Obtainable from the response of fetching all shield lists for the enterprise. + +## BoxApi.RetrieveEnterpriseArchives + +
+ + +Retrieve archives for an enterprise from Box. + +**Parameters** + +- **max_items_per_page** (`integer`, optional) The maximum number of archive items to return per page when retrieving data. +- **pagination_start_marker** (`string`, optional) Defines the position marker to start returning results for pagination in archive retrieval. + +## BoxApi.DeleteArchive + +
+ + +Permanently delete an archive by ID. + +**Parameters** + +- **archive_id** (`string`, required) The unique identifier of the archive to be permanently deleted. This ID is required for the deletion process. + +## BoxApi.RetrieveFileDetails + +
+ + +Fetch details about a specific file using its ID. + +**Parameters** + +- **file_identifier** (`string`, required) The unique identifier for a file, found in the URL of the file in the web application. Example: from `https://*.app.box.com/files/123`, use `123`. +- **included_file_attributes** (`array[string]`, optional) Specify attributes to include in the response as a list of strings. Additional attributes replace standard fields unless explicitly included. Metadata can be queried using 'metadata' with scope and key. +- **etag_conditional_retrieval** (`string`, optional) Provide the last observed etag value to retrieve the file only if it has changed. Returns a 304 status if unchanged. +- **shared_link_with_optional_password** (`string`, optional) Provide the shared link URL for the item. Use the format 'shared_link=[link]' or 'shared_link=[link]&shared_link_password=[password]' if a password is required. +- **file_representations_request** (`string`, optional) Request specific representations of a file using hints, e.g., '[jpg?dimensions=32x32][jpg?dimensions=64x64]'. + +## BoxApi.DeleteFileFromBox + +
+ + +Delete a file from Box or move it to trash. + +**Parameters** + +- **file_identifier** (`string`, required) The unique ID representing a file in Box. Found in the URL when viewing a file: https://\*.app.box.com/files/\{file_id\}. +- **ensure_no_recent_changes_etag** (`string`, optional) Pass the file's last observed etag value to ensure it hasn't changed before deletion. If the etag has changed, the operation will fail. + +## BoxApi.GetFileAppAssociations + +
+ + +Retrieve app items associated with a specific file. + +**Parameters** + +- **file_identifier** (`string`, required) The unique ID representing a file in Box. Can be obtained from the file URL. +- **items_per_page_limit** (`integer`, optional) The maximum number of items to return per page. +- **pagination_marker** (`string`, optional) Defines the position marker for pagination. Required if using marker-based pagination. Ensure `usemarker` is set to `true`. +- **filter_by_application_type** (`string`, optional) Specify the application type to filter and return only app items related to it. + +## BoxApi.DownloadFileContent + +
+ + +Retrieve the binary content of a specified file. + +**Parameters** + +- **file_identifier** (`string`, required) The unique identifier for the file to download. Obtainable from the file's URL in the web application. +- **file_version_to_download** (`string`, optional) The specific version of the file to retrieve in binary format. +- **optional_access_token** (`string`, optional) A string for an optional access token to pre-authenticate the file download request. Ensure it's scoped for read access only. +- **download_byte_range** (`string`, optional) Specify the byte range for the content to download in the format `bytes={start_byte}-{end_byte}` to define which section of the file to retrieve. +- **shared_link_with_optional_password** (`string`, optional) Provide the shared link URL of the item. Include a password if required, using the format `shared_link=[link]` or `shared_link=[link]&shared_link_password=[password]`. This allows access to files not explicitly shared with the user. + +## BoxApi.GetUploadSessionDetails + +
+ + +Retrieve details of a specific file upload session. + +**Parameters** + +- **upload_session_id** (`string`, required) The ID of the upload session to retrieve information for. + +## BoxApi.AbortUploadSession + +
+ + +Abort an upload session and discard all uploaded data. + +**Parameters** + +- **upload_session_id** (`string`, required) The unique identifier of the upload session to be aborted. This ID is required to specify which upload session should be cancelled and its data discarded. + +## BoxApi.GetUploadedChunksList + +
+ + +Retrieve the list of uploaded chunks for an upload session. + +**Parameters** + +- **upload_session_identifier** (`string`, required) The unique identifier for the upload session. Use this to retrieve the list of uploaded chunks. +- **response_offset** (`integer`, optional) The starting position of the response item list. Must not exceed 10000, as higher values will result in a 400 error. +- **max_items_per_page** (`integer`, optional) The maximum number of uploaded chunks to return per page in the response. + +## BoxApi.RetrieveFileThumbnail + +
+ + +Retrieves a thumbnail image of a specified file. + +**Parameters** + +- **file_identifier** (`string`, required) The unique identifier for the file. You can find this ID in the file URL on the Box web application. +- **thumbnail_file_format** (`string`, required) Specify the file format for the thumbnail, either 'png' or 'jpg'. +- **minimum_thumbnail_height** (`integer`, optional) Specify the minimum height for the thumbnail image required. Accepts an integer value. +- **minimum_thumbnail_width** (`integer`, optional) The minimum width of the thumbnail to be retrieved. Specify an integer value. +- **maximum_thumbnail_height** (`integer`, optional) The maximum height of the thumbnail in pixels. Valid values depend on the specified format. For .png, maximum is 256; for .jpg, maximum is 320. +- **maximum_thumbnail_width** (`integer`, optional) The maximum width for the thumbnail image in pixels. Define the width according to the available sizes in .png or .jpg formats. + +## BoxApi.GetFileCollaborations + +
+ + +Retrieve collaborations for a specific file. + +**Parameters** + +- **file_identifier** (`string`, required) The unique file ID needed to retrieve collaborations. Obtainable from the file's URL in the web app. +- **requested_fields** (`array[string]`, optional) A list of specific attributes to include in the response. These fields are not typically included and override the standard response fields. +- **max_items_per_page** (`integer`, optional) The maximum number of collaboration items to return per page in the response. Useful for paginating results. +- **pagination_start_marker** (`string`, optional) Specifies the position marker for starting result pagination. Requires 'usemarker' set to 'true'. + +## BoxApi.GetFileComments + +
+ + +Retrieve comments for a specific file. + +**Parameters** + +- **file_identifier** (`string`, required) The unique file ID, found in the Box web app URL, e.g., for `https://*.app.box.com/files/123`, the ID is `123`. +- **include_fields_in_response** (`array[string]`, optional) List of attributes to include in the response. Only specified fields and mini representation are returned. +- **maximum_items_per_page** (`integer`, optional) The maximum number of comments to return per page for the specified file. +- **response_start_offset** (`integer`, optional) The starting point for comments retrieval. Must not exceed 10000, or a 400 error occurs. + +## BoxApi.GetFileTasks + +
+ + +Retrieve all tasks associated with a specific file. + +**Parameters** + +- **file_identifier** (`string`, required) The unique identifier for a file, found in the file URL on the Box web application. + +## BoxApi.RetrieveTrashedFile + +
+ + +Retrieve a file that has been moved to the trash. + +**Parameters** + +- **file_identifier** (`string`, required) The unique identifier of a file moved to trash, obtained from the file's URL in the web application. +- **include_attributes_in_response** (`array[string]`, optional) A list of attributes to include in the response. Only specified fields and mini representation fields are returned. + +## BoxApi.PermanentlyDeleteFileFromTrash + +
+ + +Permanently delete a file that is in the trash. + +**Parameters** + +- **file_identifier** (`string`, required) The unique identifier of a file to be permanently deleted from the trash. Obtainable from the file URL. + +## BoxApi.GetFileVersionHistory + +
+ + +Retrieve a list of past versions for a file. + +**Parameters** + +- **file_identifier** (`string`, required) The unique ID representing a file in Box. Obtainable from the file's URL, e.g., `https://*.app.box.com/files/123` where `123` is the ID. +- **requested_fields** (`array[string]`, optional) A list of specific file attributes to include in the response. Only these fields, plus the mini representation, will be returned. +- **max_items_per_page** (`integer`, optional) Maximum number of file versions to return per page. +- **response_start_offset** (`integer`, optional) The item offset to begin the response from. Must not exceed 10000; otherwise, a 400 error will be returned. + +## BoxApi.RetrieveFileVersion + +
+ + +Retrieve a specific version of a file for premium Box users. + +**Parameters** + +- **unique_file_identifier** (`string`, required) The unique identifier for a file on Box. Obtainable from the file's URL (e.g., '123' in 'https://\*.app.box.com/files/123'). +- **file_version_identifier** (`string`, required) The unique ID representing the specific version of a file to retrieve. +- **include_additional_attributes** (`array[string]`, optional) List of additional attributes to include in the response. Specify as an array of strings. Only fields specified will be returned, along with the mini representation. + +## BoxApi.DeleteBoxFileVersion + +
+ + +Delete a specific file version from Box. + +**Parameters** + +- **file_identifier** (`string`, required) The unique identifier for a file in Box. Obtain it from the file's URL in the web app. Example: '123' for URL 'https://\*.app.box.com/files/123'. +- **file_version_id** (`string`, required) The unique identifier of the file version to be deleted. Obtainable from the Box platform. +- **if_match_etag_value** (`string`, optional) Pass the item's last observed etag value to ensure it hasn't changed before deletion. Use this to prevent conflicts. + +## BoxApi.RetrieveFileMetadata + +
+ + +Retrieve all metadata for a specific file. + +**Parameters** + +- **file_identifier** (`string`, required) The unique identifier of a file, obtained from the URL in the Box2 web application. For example, from `https://*.app.box.com/files/123`, the `file_id` is `123`. + +## BoxApi.GetFileClassificationMetadata + +
+ + +Retrieve classification metadata for a specific file. + +**Parameters** + +- **file_identifier** (`string`, required) The unique identifier for a file, obtained from the file's URL in the Box web application. For example, in `https://*.app.box.com/files/123`, the `file_id` is `123`. + +## BoxApi.RemoveFileClassification + +
+ + +Remove classifications from a specified file. + +**Parameters** + +- **file_identifier** (`string`, required) The unique identifier for the file whose classification is to be removed. Obtainable from the Box2 file URL. + +## BoxApi.RetrieveFileTemplateMetadata + +
+ + +Retrieve metadata for a specific file template. + +**Parameters** + +- **file_identifier** (`string`, required) The unique identifier for a file, obtainable from the file URL in the Box web application. +- **metadata_scope** (`string`, required) Defines the scope of the metadata template to be retrieved. Options are 'global' or 'enterprise'. +- **metadata_template_name** (`string`, required) The name of the metadata template to retrieve for the specified file. + +## BoxApi.DeleteFileMetadata + +
+ + +Deletes metadata from a specified file. + +**Parameters** + +- **file_identifier** (`string`, required) The unique identifier for a file, retrievable from the file URL, e.g., `https://*.app.box.com/files/123` where `123` is the ID. +- **metadata_scope** (`string`, required) Specifies the scope of the metadata template. Choose 'global' or 'enterprise'. +- **metadata_template_name** (`string`, required) The name of the metadata template to be deleted from the file. + +## BoxApi.GetBoxSkillsMetadata + +
+ + +Retrieve Box Skills metadata cards for a given file. + +**Parameters** + +- **file_id** (`string`, required) The unique identifier for the file in Box. Obtainable from the file's URL in the Box web app. + +## BoxApi.RemoveBoxSkillsMetadata + +
+ + +Remove Box Skills cards metadata from a file. + +**Parameters** + +- **file_identifier** (`string`, required) The unique identifier for a file, which can be extracted from the URL in the web application. For example, in `https://*.app.box.com/files/123`, the `file_id` is `123`. + +## BoxApi.GetFileWatermark + +
+ + +Retrieve the watermark for a file by its ID. + +**Parameters** + +- **file_identifier** (`string`, required) The unique identifier of a file. Obtainable from the URL when viewing a file on the web application. + +## BoxApi.RemoveFileWatermark + +
+ + +Removes the watermark from a specified file. + +**Parameters** + +- **file_identifier** (`string`, required) The unique ID for the file, found in its Box URL. For example, from `https://*.app.box.com/files/123`, `file_id` is `123`. + +## BoxApi.RetrieveFileRequestInfo + +
+ + +Retrieve information about a specific file request. + +**Parameters** + +- **file_request_unique_id** (`string`, required) The unique identifier for a file request, obtainable from the URL in the file request builder. + +## BoxApi.DeleteFileRequest + +
+ + +Permanently delete a specific file request. + +**Parameters** + +- **file_request_identifier** (`string`, required) The unique ID representing a file request, extracted from the URL in the file request builder. + +## BoxApi.GetFolderDetails + +
+ + +Retrieve details for a folder and its first 100 entries. + +**Parameters** + +- **folder_unique_identifier** (`string`, required) The unique identifier for a folder. Obtainable from the folder's URL, e.g., `123` in `https://*.app.box.com/folder/123`. The root folder's ID is `0`. +- **requested_fields** (`array[string]`, optional) A list of attributes to include in the response. Use for fields not normally returned in standard responses or for querying file metadata. +- **secondary_sort_attribute** (`string`, optional) Defines the second attribute by which folder items are sorted. Options include 'id', 'name', 'date', or 'size'. Not supported for root folders. +- **sort_direction** (`string`, optional) The order to sort results: 'ASC' for ascending or 'DESC' for descending. +- **response_offset** (`integer`, optional) The zero-based index to start the response from. Values exceeding 10000 are rejected with a 400 error. +- **max_items_per_page** (`integer`, optional) The maximum number of items to return in a single page of results. Controls pagination by limiting the number of entries per response. +- **ensure_item_has_changed** (`string`, optional) Supply the item's last known etag value to receive a response only if the item has changed. If unchanged, it returns a 304 status. +- **shared_link_credentials** (`string`, optional) The URL and optional password for the shared link to access items. Format as `shared_link=[link]` or `shared_link=[link]&shared_link_password=[password]`. + +## BoxApi.DeleteFolder + +
+ + +Delete a folder permanently or move it to the trash. + +**Parameters** + +- **folder_identifier** (`string`, required) The unique identifier representing a folder. Determine it by copying the ID from the folder's URL in the Box web application. The root folder ID is '0'. +- **ensure_unchanged_etag** (`string`, optional) Last observed `etag` value to ensure the folder hasn't changed before deletion. If changed, the operation fails with a 412 error. +- **delete_recursively** (`boolean`, optional) Set to true to delete a non-empty folder and all its content recursively. + +## BoxApi.GetFolderAppItemAssociations + +
+ + +Retrieve app items associated with a specific folder. + +**Parameters** + +- **folder_identifier** (`string`, required) The unique identifier representing a folder. Obtainable from the folder's URL. The root folder ID is '0'. +- **max_items_per_page** (`integer`, optional) The maximum number of items to return per page when retrieving app items associated with a folder. +- **pagination_start_marker** (`string`, optional) Position marker to begin returning results. Used for marker-based pagination. Requires `usemarker` set to `true`. +- **filter_by_application_type** (`string`, optional) Return only app items for the specified application type. + +## BoxApi.RetrieveFolderItems + +
+ + +Retrieve items in a specified folder, including files and links. + +**Parameters** + +- **folder_identifier** (`string`, required) Unique ID of a folder. Obtainable from the folder's URL. Root folder ID is always '0'. +- **included_attributes** (`array[string]`, optional) List of attributes to include in the response. Specify fields normally omitted in standard responses or query metadata. +- **pagination_start_marker** (`string`, optional) Specifies the starting point for marker-based pagination. Requires 'usemarker' to be set to true. +- **starting_item_offset** (`integer`, optional) Specifies the starting point for the items to be returned. Must be an integer and cannot exceed 10000, or a 400 response is returned. +- **max_items_per_page** (`integer`, optional) The maximum number of items to return per page. Specify an integer value. +- **sort_attribute** (`string`, optional) Specifies the secondary attribute for sorting folder items. Options: 'id', 'name', 'date', or 'size'. Not supported for marker-based pagination on root folders. +- **sort_direction** (`string`, optional) The direction to sort results: alphabetical ascending (ASC) or descending (DESC). +- **shared_link_credentials** (`string`, optional) Provide the shared link URL and optional password to access items not explicitly shared with a user. Use 'shared_link=[link]' or 'shared_link=[link]&shared_link_password=[password]'. +- **use_marker_based_pagination** (`boolean`, optional) Set to true to enable marker-based pagination, which returns a marker for fetching the next page. Only one pagination method can be active at a time. + +## BoxApi.GetFolderCollaborations + +
+ + +Retrieve pending and active collaborations for a folder. + +**Parameters** + +- **folder_identifier** (`string`, required) The unique identifier for a folder, obtainable from the folder's URL in the Box web application. For example, in the URL `https://*.app.box.com/folder/123`, the `folder_id` is `123`. +- **included_attributes** (`array[string]`, optional) List of attributes to include in the response, overriding standard fields unless specified. +- **max_items_per_page** (`integer`, optional) The maximum number of items to return per page. +- **start_position_marker** (`string`, optional) The position marker to begin returning results for marker-based pagination. Requires usemarker set to true. + +## BoxApi.RetrieveTrashedFolder + +
+ + +Retrieve a specific folder from the trash. + +**Parameters** + +- **folder_identifier** (`string`, required) The unique identifier for a folder. Obtainable from the folder's URL in the web application. '0' represents the root folder. +- **include_attributes_in_response** (`array[string]`, optional) A list of attribute names to include in the response, specifying non-standard fields for retrieval. + +## BoxApi.PermanentlyDeleteFolderInTrash + +
+ + +Permanently delete a folder from the trash. + +**Parameters** + +- **folder_identifier** (`string`, required) The unique identifier representing a folder to be permanently deleted from the trash. Obtainable from folder URL or use '0' for root folder. + +## BoxApi.RetrieveFolderMetadata + +
+ + +Retrieve all metadata for a specific folder. + +**Parameters** + +- **folder_identifier** (`string`, required) The unique identifier for a folder, excluding the root folder with ID `0`. Obtainable from the URL when viewing a folder in Box. + +## BoxApi.GetFolderClassification + +
+ + +Retrieve classification metadata for a specific folder. + +**Parameters** + +- **folder_identifier** (`string`, required) The unique identifier for a folder, retrievable from the folder's URL or as `0` for the root folder. + +## BoxApi.RemoveFolderClassifications + +
+ + +Remove classifications from a specified folder. + +**Parameters** + +- **folder_identifier** (`string`, required) The unique identifier representing a folder. Obtain this by visiting the folder URL (e.g., `https://*.app.box.com/folder/123`). The root folder ID is `0`. + +## BoxApi.GetFolderMetadata + +
+ + +Retrieve metadata template instance applied to a folder. + +**Parameters** + +- **folder_identifier** (`string`, required) The unique ID representing a folder. Obtainable from the folder's URL, but not the root folder (ID `0`). +- **metadata_scope** (`string`, required) The scope of the metadata template. It can be either 'global' or 'enterprise'. +- **metadata_template_name** (`string`, required) The name of the metadata template to retrieve from the folder. Excludes root folder (ID `0`). + +## BoxApi.DeleteFolderMetadata + +
+ + +Deletes metadata from a specified folder. + +**Parameters** + +- **folder_identifier** (`string`, required) The unique identifier for a folder. Obtainable from the folder URL; use '0' for the root folder. +- **metadata_template_scope** (`string`, required) The scope of the metadata template. Choose either 'global' or 'enterprise'. +- **metadata_template_name** (`string`, required) The name of the metadata template to be deleted from the folder. + +## BoxApi.RetrieveTrashedItems + +
+ + +Retrieve files and folders from the trash. + +**Parameters** + +- **include_attributes** (`array[string]`, optional) List of attributes to include in the response, such as non-default fields. Only these and mini representation fields will be returned. +- **maximum_items_per_page** (`integer`, optional) Specify the maximum number of items to return per page when retrieving trashed items. This value controls pagination to limit the items returned in a single request. +- **pagination_offset** (`integer`, optional) The index to start retrieving items from the trash. Must be less than or equal to 10000. +- **pagination_marker** (`string`, optional) Defines the position marker for marker-based pagination. Requires 'use_marker_based_pagination' to be true. +- **sort_direction** (`string`, optional) The direction to sort results: 'ASC' for ascending or 'DESC' for descending alphabetical order. +- **secondary_sort_attribute** (`string`, optional) Defines the second attribute by which items are sorted, such as 'name', 'date', or 'size'. Unsupported with marker-based pagination. +- **use_marker_based_pagination** (`boolean`, optional) Set to true to use marker-based pagination instead of offset-based pagination, allowing retrieval of the next page with a 'marker' field. + +## BoxApi.GetFolderWatermark + +
+ + +Retrieve the watermark for a specific folder. + +**Parameters** + +- **folder_identifier** (`string`, required) The unique ID representing a folder. It can be found in the URL when viewing the folder in the web app. The root folder ID is '0'. + +## BoxApi.RemoveWatermarkFromFolder + +
+ + +Removes the watermark from a specified folder. + +**Parameters** + +- **folder_identifier** (`string`, required) The unique identifier for a folder. This ID can be found in the URL when visiting the folder in the Box web application. For instance, in `https://*.app.box.com/folder/123`, the `folder_id` is `123`. The root folder is always `0`. + +## BoxApi.RetrieveFolderLockDetails + +
+ + +Retrieve lock details for a specific folder. + +**Parameters** + +- **folder_identifier** (`string`, required) The unique identifier for a folder. Obtainable by visiting the folder URL in the Box web app. The root folder is ID '0'. + +## BoxApi.DeleteFolderLock + +
+ + +Delete a specific folder lock if you're the owner or co-owner. + +**Parameters** + +- **folder_lock_identifier** (`string`, required) The unique ID of the folder lock to be deleted. You must be the owner or co-owner of the folder. + +## BoxApi.FindMetadataTemplate + +
+ + +Retrieve metadata template details by ID. + +**Parameters** + +- **metadata_instance_id** (`string`, required) The ID of the metadata template instance to retrieve details for. +- **pagination_position_marker** (`string`, optional) Defines the starting position for marker-based pagination results. Requires `usemarker` to be `true`. +- **items_per_page_limit** (`integer`, optional) Specify the maximum number of items to return per page for pagination purposes. + +## BoxApi.GetClassificationMetadata + +
+ + +Retrieve classification metadata template for the enterprise. + +**Parameters** + +This tool does not take any parameters. + +## BoxApi.RetrieveMetadataTemplate + +
+ + +Retrieve a metadata template by scope and template key. + +**Parameters** + +- **metadata_template_scope** (`string`, required) Specifies the scope for the metadata template. Choose between 'global' or 'enterprise'. +- **metadata_template_name** (`string`, required) The name of the metadata template to retrieve its details. + +## BoxApi.DeleteMetadataTemplate + +
+ + +Permanently delete a metadata template and its instances. + +**Parameters** + +- **metadata_template_scope** (`string`, required) Specifies the scope of the metadata template. Allowed values are 'global' or 'enterprise'. +- **metadata_template_name** (`string`, required) The name of the metadata template to be permanently deleted. + +## BoxApi.FetchMetadataTemplateById + +
+ + +Retrieve a metadata template using its ID. + +**Parameters** + +- **template_id** (`string`, required) The unique identifier for the metadata template to be retrieved. Provide a valid template ID. + +## BoxApi.RetrieveGlobalMetadataTemplates + +
+ + +Fetches global metadata templates from Box. + +**Parameters** + +- **pagination_start_marker** (`string`, optional) Specifies the position marker to begin returning results for paginated data. +- **max_items_per_page** (`integer`, optional) The maximum number of metadata templates to return per page from the Box global templates. + +## BoxApi.RetrieveEnterpriseMetadataTemplates + +
+ + +Retrieve metadata templates for the user's enterprise. + +**Parameters** + +- **pagination_start_marker** (`string`, optional) Position marker to begin returning results, used with marker-based pagination. Requires `usemarker` to be `true`. +- **maximum_items_per_page** (`integer`, optional) The maximum number of items to return per page when retrieving metadata templates. + +## BoxApi.GetMetadataCascadePolicies + +
+ + +Retrieve metadata cascade policies for a folder. + +**Parameters** + +- **target_folder_id** (`string`, required) The ID of the folder to query for metadata cascade policies. The root folder with ID '0' is not allowed. +- **owner_enterprise_id** (`string`, optional) The ID of the enterprise to find metadata cascade policies for. Defaults to the current enterprise if not specified. +- **pagination_marker** (`string`, optional) Position marker for paginating results. Set `usemarker` to true to enable. +- **response_offset** (`integer`, optional) The offset at which to begin the response, must not exceed 10000. + +## BoxApi.RetrieveMetadataCascadePolicy + +
+ + +Retrieve a specific metadata cascade policy for a folder. + +**Parameters** + +- **metadata_cascade_policy_id** (`string`, required) The unique identifier for the metadata cascade policy to retrieve. + +## BoxApi.DeleteMetadataCascadePolicy + +
+ + +Deletes a metadata cascade policy by ID. + +**Parameters** + +- **metadata_cascade_policy_id** (`string`, required) The unique ID of the metadata cascade policy to be deleted. Ensure it is valid and exists. + +## BoxApi.FetchCommentDetails + +
+ + +Retrieve detailed information about a specific comment. + +**Parameters** + +- **comment_id** (`string`, required) The unique identifier for the comment whose details are being fetched. This ID is required to retrieve the comment's message, metadata, and creator information. +- **include_fields** (`array[string]`, optional) A list of attributes to include in the response. Only specified fields will be returned along with the mini representation. + +## BoxApi.DeleteComment + +
+ + +Permanently deletes a specific comment by ID. + +**Parameters** + +- **comment_id** (`string`, required) The unique identifier of the comment you want to permanently delete. + +## BoxApi.GetCollaborationDetails + +
+ + +Retrieve details of a specific collaboration. + +**Parameters** + +- **collaboration_id** (`string`, required) The unique identifier for the collaboration to retrieve details about. +- **include_fields** (`array[string]`, optional) List of specific attributes to include in the response, which are not typically returned. Specify explicitly to retrieve these fields. + +## BoxApi.DeleteCollaboration + +
+ + +Deletes a specified collaboration by ID. + +**Parameters** + +- **collaboration_id_to_delete** (`string`, required) The unique identifier of the collaboration to be deleted. Provide this ID to remove the specified collaboration. + +## BoxApi.GetPendingCollaborationInvites + +
+ + +Retrieve user's pending collaboration invites from Box2. + +**Parameters** + +- **collaboration_status** (`string`, required) Set to 'pending' to retrieve all pending collaboration invitations. +- **include_attributes** (`array[string]`, optional) List of attribute names to include in the response. This overrides default fields, returning only specified attributes. +- **starting_item_offset** (`integer`, optional) Starting index for the response items. Cannot exceed 10000 to avoid errors. +- **maximum_items_per_page** (`integer`, optional) The maximum number of collaboration invites to return per page. + +## BoxApi.RetrieveTaskInformation + +
+ + +Fetch details of a specific task by ID. + +**Parameters** + +- **task_id** (`string`, required) The unique identifier for the specific task to retrieve information about. + +## BoxApi.DeleteTaskFromFile + +
+ + +Removes a specific task from a file. + +**Parameters** + +- **task_identifier** (`string`, required) The unique identifier for the task to be removed from the file. + +## BoxApi.ListTaskAssignments + +
+ + +Retrieve all assignments for a specified task. + +**Parameters** + +- **task_id** (`string`, required) The unique identifier of the task for which assignments need to be retrieved. It must be provided as a string. + +## BoxApi.RetrieveTaskAssignmentInfo + +
+ + +Retrieve detailed information about a task assignment. + +**Parameters** + +- **task_assignment_id** (`string`, required) The unique identifier for the task assignment to retrieve its details. + +## BoxApi.DeleteTaskAssignment + +
+ + +Delete a specific task assignment. + +**Parameters** + +- **task_assignment_id** (`string`, required) The unique identifier of the task assignment to be deleted. + +## BoxApi.RetrieveSharedFileInfo + +
+ + +Retrieve file information from a shared link. + +**Parameters** + +- **shared_link_credentials** (`string`, required) A header string containing the shared link and optional password. Format: `shared_link=[link]&shared_link_password=[password]`. +- **include_attributes_in_response** (`array[string]`, optional) A list of attributes to include in the response, specifying non-standard fields and affecting returned data format. +- **etag_for_change_detection** (`string`, optional) Pass the last observed etag value to return the item only if it has changed. + +## BoxApi.GetSharedLinkInfo + +
+ + +Retrieve shared link details for a specific file. + +**Parameters** + +- **include_shared_link_fields** (`string`, required) Specify if the `shared_link` fields should be explicitly returned for the file item. +- **file_identifier** (`string`, required) The unique identifier for a file, found in the URL when accessing a file in the web application (e.g., for the URL `https://*.app.box.com/files/123`, the `file_id` is `123`). + +## BoxApi.GetSharedFolderInfo + +
+ + +Retrieve folder details using a shared link. + +**Parameters** + +- **shared_link_header** (`string`, required) A string containing the shared link and optional password formatted as 'shared_link=[link]&shared_link_password=[password]'. +- **include_fields** (`array[string]`, optional) A list of specific attributes to include in the response. Only these fields will be returned unless explicitly specified otherwise. +- **etag_condition** (`string`, optional) Provide the last observed etag to receive the item only if it has changed. Useful for caching and reducing unnecessary data transfer. + +## BoxApi.GetFolderSharedLinkInfo + +
+ + +Retrieve information for a shared link on a folder. + +**Parameters** + +- **include_shared_link_fields** (`string`, required) Specify if the shared_link fields should be explicitly returned for this folder. +- **folder_identifier** (`string`, required) The unique ID of the folder to retrieve shared link info for. It can be found in the folder URL in Box or use '0' for the root folder. + +## BoxApi.RetrieveWebLinkInfo + +
+ + +Retrieve information about a specific web link. + +**Parameters** + +- **web_link_id** (`string`, required) The unique identifier for the web link to retrieve information about. +- **shared_link_access_details** (`string`, optional) The URL and optional password for accessing the shared link, formatted as `shared_link=[link]` or `shared_link=[link]&shared_link_password=[password]`. Use this to access items not explicitly shared with a user. + +## BoxApi.DeleteWebLink + +
+ + +Delete a specified web link based on its ID. + +**Parameters** + +- **web_link_id** (`string`, required) The unique identifier for the web link to be deleted. + +## BoxApi.RetrieveTrashedWebLink + +
+ + +Retrieves a web link that has been moved to the trash. + +**Parameters** + +- **web_link_id** (`string`, required) The unique identifier of the web link to retrieve from the trash. +- **include_fields_in_response** (`array[string]`, optional) List of attributes to include in the response, overriding standard fields; only mini representation plus these fields will be returned. + +## BoxApi.PermanentlyDeleteTrashedWebLink + +
+ + +Permanently delete a trashed web link. + +**Parameters** + +- **web_link_identifier** (`string`, required) The unique identifier of the web link to be permanently deleted from the trash. This ID is required to specify which web link should be removed. + +## BoxApi.RetrieveSharedWebLink + +
+ + +Retrieve information about a shared web link using a shared link. + +**Parameters** + +- **shared_link_header** (`string`, required) A string containing the shared link and optional password in the format: 'shared_link=[link]&shared_link_password=[password]'. +- **include_attributes_in_response** (`array[string]`, optional) A list of attributes to include in the response. Only specified fields and fields for the mini representation will be returned. +- **etag_if_updated_only** (`string`, optional) Provide the last observed etag value to only return the web link if it has been updated. This helps avoid unnecessary data transfer if no changes have occurred. + +## BoxApi.GetSharedWebLinkInfo + +
+ + +Retrieve shared link information for a web link. + +**Parameters** + +- **request_shared_link_fields** (`string`, required) Specify the shared link fields to be explicitly returned for the web link. +- **web_link_identifier** (`string`, required) The ID of the web link for which to retrieve shared link information. + +## BoxApi.GetSharedAppItem + +
+ + +Retrieve details of an app item using a shared link. + +**Parameters** + +- **shared_link_information** (`string`, required) A string with the format `shared_link=[link]&shared_link_password=[password]`, containing the shared link and an optional password. + +## BoxApi.ListEnterpriseUsers + +
+ + +Retrieve all users in the enterprise. + +**Parameters** + +- **search_term_for_user_filtering** (`string`, optional) Limits results to users whose name or login begins with the specified term. Complete match required for external users. +- **user_type_filter** (`string`, optional) Specify the type of users to include: 'all', 'managed', or 'external'. +- **filter_by_external_app_user_id** (`string`, optional) Filter results to app users with the specified external app user ID. Used for retrieving users matching this ID. +- **include_additional_fields** (`array[string]`, optional) Specify additional attributes for inclusion in the response. Only selected fields and mini representation fields will be returned. +- **response_offset** (`integer`, optional) The starting point for the response; queries exceeding 10000 will return a 400 error. +- **max_items_per_page** (`integer`, optional) The maximum number of user records to return per page. +- **pagination_start_marker** (`string`, optional) Defines the position marker where results begin when using marker-based pagination. Requires `usemarker` set to `true`. +- **use_marker_pagination** (`boolean`, optional) Set to true to use marker-based pagination. This enables a `marker` field in the response for pagination. + +## BoxApi.GetAuthenticatedUserInfo + +
+ + +Retrieve details of the currently authenticated user. + +**Parameters** + +- **requested_user_attributes** (`array[string]`, optional) List of user attributes to include in the response. Use to request non-standard fields, results in basic fields only unless specified. + +## BoxApi.GetUserInformation + +
+ + +Retrieve detailed user information in the enterprise. + +**Parameters** + +- **user_identifier** (`string`, required) The unique identifier for the user whose information you want to retrieve. +- **requested_user_fields** (`array[string]`, optional) An array of attributes to include in the response. Only specified fields are returned unless otherwise stated. + +## BoxApi.DeleteUserAccount + +
+ + +Delete a user account from the system. + +**Parameters** + +- **user_id** (`string`, required) The unique identifier for the user to be deleted. Required for specifying which user account to delete. +- **send_deletion_notification** (`boolean`, optional) Indicate whether the user should receive an email notification about the deletion. Set to true to send notification. +- **force_delete_user** (`boolean`, optional) Set to true to delete the user and their files even if they still own content. + +## BoxApi.GetUserAvatar + +
+ + +Retrieve the image of a user's avatar. + +**Parameters** + +- **user_id** (`string`, required) The ID of the user whose avatar you want to retrieve. + +## BoxApi.RemoveUserAvatar + +
+ + +Removes a user's existing avatar. + +**Parameters** + +- **user_identifier** (`string`, required) The unique identifier of the user whose avatar is to be deleted. Ensure this ID is correct, as the operation cannot be reversed. + +## BoxApi.GetUserEmailAliases + +
+ + +Retrieve all email aliases for a specific user. + +**Parameters** + +- **user_identifier** (`string`, required) The unique ID of the user to retrieve email aliases for, formatted as a string. + +## BoxApi.RemoveUserEmailAlias + +
+ + +Removes an email alias from a user account. + +**Parameters** + +- **user_identifier** (`string`, required) The unique ID of the user whose email alias is to be removed. +- **email_alias_id** (`string`, required) The unique identifier of the email alias to be removed. This is required to specify which alias to delete from the user account. + +## BoxApi.GetUserGroupMemberships + +
+ + +Retrieve all groups a user belongs to. + +**Parameters** + +- **user_identifier** (`string`, required) The ID of the user to retrieve group memberships for. +- **max_items_per_page** (`integer`, optional) Maximum number of items to return per page. Set an integer value to limit the results displayed at once. +- **response_offset** (`integer`, optional) The starting point offset for the response items. Must be 10000 or less. + +## BoxApi.CheckUserInviteStatus + +
+ + +Retrieve the status of a specific user invite. + +**Parameters** + +- **invite_id** (`string`, required) The unique identifier for the user invite you want to check. This ID is necessary to retrieve the invite's status. +- **included_attributes** (`array[string]`, optional) A list of attributes to include in the response. Specify attributes not normally returned in a standard response. Only the mini representation fields are returned unless explicitly specified. + +## BoxApi.RetrieveEnterpriseGroups + +
+ + +Retrieve all groups for an enterprise with admin rights. + +**Parameters** + +- **group_name_starts_with** (`string`, optional) Returns groups whose names start with this search term. +- **included_attributes** (`array[string]`, optional) List of specific attributes to include in the response. Defaults to mini representation if unspecified. +- **max_items_per_page** (`integer`, optional) The maximum number of groups to return per page. +- **starting_item_offset** (`integer`, optional) The offset of the item at which to begin the response. Ensure the value does not exceed 10000 to avoid errors. + +## BoxApi.RetrieveGroupInfo + +
+ + +Retrieve detailed information about a specified group. + +**Parameters** + +- **group_id** (`string`, required) The unique identifier of the group to retrieve information for. Ensure the user has the necessary permissions. +- **include_additional_fields** (`array[string]`, optional) A list of attributes to include in the response. Only specified fields will be returned alongside default mini representation fields. + +## BoxApi.DeleteGroup + +
+ + +Permanently delete a group with admin permissions. + +**Parameters** + +- **group_id** (`string`, required) The unique identifier of the group to be permanently deleted. Must be used by an admin. + +## BoxApi.RetrieveGroupMemberships + +
+ + +Fetch members of a specified group. + +**Parameters** + +- **group_identifier** (`string`, required) The unique ID of the group to fetch its members. Only members or admins can access this. +- **max_items_per_page** (`integer`, optional) Specify the maximum number of members to retrieve per page. +- **response_offset** (`integer`, optional) The starting point for retrieving members. Must not exceed 10000 to avoid errors. + +## BoxApi.GetGroupCollaborations + +
+ + +Retrieve collaborations for a specified group. + +**Parameters** + +- **group_id** (`string`, required) The unique identifier of the group whose collaborations you want to retrieve. This ID is required to specify the group. +- **max_items_per_page** (`integer`, optional) Specifies the maximum number of collaboration items to return per page. Accepts an integer value. +- **response_offset** (`integer`, optional) Starting point in the list of collaborations. Must be an integer not exceeding 10000 to avoid rejection. + +## BoxApi.RetrieveGroupMembership + +
+ + +Fetch details of a specific group membership. + +**Parameters** + +- **group_membership_id** (`string`, required) The unique identifier for the specific group membership to retrieve. Only admins or users with admin-level permissions can access this information. +- **include_fields_list** (`array[string]`, optional) List of specific attributes to include in the response, overriding standard fields. + +## BoxApi.DeleteGroupMembership + +
+ + +Delete a specific group membership by ID. + +**Parameters** + +- **group_membership_id** (`string`, required) The unique identifier for the group membership to be deleted. Required for specifying which membership to remove. + +## BoxApi.ListDefinedWebhooks + +
+ + +Retrieve all webhooks for your application. + +**Parameters** + +- **pagination_start_marker** (`string`, optional) The position marker to start returning results from. Required for marker-based pagination with `usemarker` set to `true`. +- **maximum_items_per_page** (`integer`, optional) The maximum number of webhooks to return per page. + +## BoxApi.GetSpecificWebhook + +
+ + +Retrieve details of a specific webhook by ID. + +**Parameters** + +- **webhook_id** (`string`, required) The unique identifier of the webhook to retrieve details for. + +## BoxApi.DeleteWebhook + +
+ + +Delete a specified webhook. + +**Parameters** + +- **webhook_id** (`string`, required) The unique identifier of the webhook to be deleted. It must be a valid string. + +## BoxApi.GetBox2Events + +
+ + +Retrieve up to a year of past events for a user or enterprise. + +**Parameters** + +- **event_stream_type** (`string`, optional) Specifies the category of events to retrieve. Options: 'all' for all user events, 'changes' for file updates, 'sync' for synced folders, 'admin_logs' for full enterprise events (requires admin), and 'admin_logs_streaming' for live enterprise events (requires admin). +- **event_stream_start_position** (`string`, optional) Specifies where to start receiving events in the stream. Use 'now' for initialization or '0' to retrieve all events. +- **event_limit** (`integer`, optional) The maximum number of events to retrieve. Fewer events may be returned if already available. +- **event_type_filter** (`array[string]`, optional) List of event types to filter by. Only applicable for 'admin_logs' or 'admin_logs_streaming' stream types. +- **event_start_date** (`string`, optional) The start date and time for filtering events. Used only with 'admin_logs' stream type. +- **event_time_upper_bound** (`string`, optional) The upper bound date and time for returning events, used only with 'admin_logs' stream type. Ignored for other stream types. + +## BoxApi.RetrieveUserCollections + +
+ + +Retrieve collections for a user, including favorites. + +**Parameters** + +- **requested_fields** (`array[string]`, optional) A list of attribute names to include in the response. Only specified fields will be returned along with the mini representation. +- **pagination_offset** (`integer`, optional) Offset of the item to start the response. Must be 10000 or less to avoid rejection with a 400 error. +- **maximum_items_per_page** (`integer`, optional) The maximum number of items to return per page when retrieving user collections. + +## BoxApi.RetrieveCollectionContents + +
+ + +Fetch files and folders from a specific collection. + +**Parameters** + +- **collection_id** (`string`, required) The unique identifier for the collection whose contents are to be retrieved. +- **attributes_to_include** (`array[string]`, optional) List of attributes to include in the response. Only the specified fields will be returned alongside the mini representation. +- **response_offset** (`integer`, optional) The starting position in the collection. Must not exceed 10000 to avoid errors. +- **max_items_per_page** (`integer`, optional) Specifies the maximum number of items to return per page when retrieving the collection contents. This controls pagination and helps manage large datasets. + +## BoxApi.RetrieveCollectionById + +
+ + +Retrieve details of a collection using its ID. + +**Parameters** + +- **collection_identifier** (`string`, required) The unique ID of the collection to retrieve details for. + +## BoxApi.GetRecentItemsInfo + +
+ + +Fetch recent items accessed by a user in Box2. + +**Parameters** + +- **include_additional_fields** (`array[string]`, optional) A list of attributes to include in the response, overriding the default fields. +- **max_items_per_page** (`integer`, optional) The maximum number of items to return per page when fetching recent items accessed by a user. +- **pagination_start_marker** (`string`, optional) A position marker to begin returning results, used for marker-based pagination. Requires `usemarker=true`. + +## BoxApi.GetEnterpriseRetentionPolicies + +
+ + +Retrieve all retention policies for an enterprise. + +**Parameters** + +- **filter_by_policy_name_prefix** (`string`, optional) Filter results using a case-sensitive prefix for retention policy names. +- **filter_by_retention_policy_type** (`string`, optional) Filter retention policies by type: 'finite' or 'indefinite'. +- **filter_by_creator_user_id** (`string`, optional) Filters the retention policies by the ID of the user who created them. Provide the user ID for specific filtering. +- **include_fields** (`array[string]`, optional) A list of attributes to include in the response, replacing standard fields unless specified. +- **maximum_items_per_page** (`integer`, optional) The maximum number of retention policies to return per page. +- **pagination_start_marker** (`string`, optional) Defines the position marker to begin returning results for marker-based pagination. + +## BoxApi.GetRetentionPolicy + +
+ + +Retrieve details of a specified retention policy. + +**Parameters** + +- **retention_policy_id** (`string`, required) The ID of the retention policy to retrieve details for. This ID is essential for accessing the specific policy information. +- **include_attributes** (`array[string]`, optional) List of attributes to include in the response. Standard fields are omitted unless explicitly specified. + +## BoxApi.DeleteRetentionPolicy + +
+ + +Permanently deletes a specified retention policy. + +**Parameters** + +- **retention_policy_id** (`string`, required) The unique identifier of the retention policy to be permanently deleted. + +## BoxApi.GetRetentionPolicyAssignments + +
+ + +Retrieve retention policy assignments by policy ID. + +**Parameters** + +- **retention_policy_id** (`string`, required) The unique identifier of the retention policy to retrieve assignments for. +- **assignment_type** (`string`, optional) The type of retention policy assignment to retrieve, such as 'folder', 'enterprise', or 'metadata_template'. +- **include_fields_in_response** (`array[string]`, optional) A list of attribute names to include in the response. These specify additional fields to return beyond the standard response. +- **pagination_start_marker** (`string`, optional) The position marker to begin returning results for marker-based pagination. +- **max_items_per_page** (`integer`, optional) The maximum number of items to return per page when retrieving retention policy assignments. + +## BoxApi.RetrieveRetentionPolicyAssignment + +
+ + +Fetch details of a retention policy assignment by ID. + +**Parameters** + +- **retention_policy_assignment_id** (`string`, required) The ID of the specific retention policy assignment to retrieve details for. +- **include_fields_in_response** (`array[string]`, optional) A list of attributes to include in the response. If specified, standard fields are excluded unless explicitly mentioned. + +## BoxApi.RemoveRetentionPolicyAssignment + +
+ + +Removes a retention policy assignment from content. + +**Parameters** + +- **retention_policy_assignment_id** (`string`, required) The unique identifier for the retention policy assignment to be removed. + +## BoxApi.ListFilesUnderRetentionPolicy + +
+ + +Retrieve files under a retention policy assignment. + +**Parameters** + +- **retention_policy_assignment_id** (`string`, required) The ID of the retention policy assignment used to identify which retention policy's files to retrieve. +- **position_marker** (`string`, optional) A string to define where to start returning results for pagination using marker-based pagination. Requires `usemarker` to be `true`. +- **max_items_per_page** (`integer`, optional) The maximum number of files to retrieve per page. Determines the page size for the results. + +## BoxApi.GetFileVersionsUnderRetention + +
+ + +Fetch file versions under a specific retention policy assignment. + +**Parameters** + +- **retention_policy_assignment_id** (`string`, required) The ID of the retention policy assignment to retrieve file versions under retention. +- **pagination_start_marker** (`string`, optional) Defines the position marker to start returning results. Requires `usemarker` to be `true` for marker-based pagination. +- **max_items_per_page** (`integer`, optional) Specifies the maximum number of file versions to return per page during retrieval. + +## BoxApi.RetrieveLegalHoldPolicies + +
+ + +Retrieve a list of enterprise legal hold policies. + +**Parameters** + +- **policy_name_prefix** (`string`, optional) Limits results to policies where names start with this term. It's case-insensitive. +- **response_attributes** (`array[string]`, optional) A list of attributes to include in the response. Only the specified fields and mini representation fields will be returned. +- **pagination_marker** (`string`, optional) The position marker to start returning results, used for marker-based pagination. Requires `usemarker` to be `true`. +- **maximum_items_per_page** (`integer`, optional) The maximum number of items to return per page. This controls the number of legal hold policies retrieved in a single request. + +## BoxApi.RetrieveLegalHoldPolicy + +
+ + +Retrieve information about a specific legal hold policy. + +**Parameters** + +- **legal_hold_policy_id** (`string`, required) The unique identifier for the specific legal hold policy to retrieve. + +## BoxApi.DeleteLegalHoldPolicy + +
+ + +Initiate deletion of a legal hold policy. + +**Parameters** + +- **legal_hold_policy_id** (`string`, required) The ID of the legal hold policy to delete. This is necessary to identify and initiate the deletion of the specified policy. + +## BoxApi.GetLegalHoldPolicyAssignments + +
+ + +Retrieve items assigned to a legal hold policy. + +**Parameters** + +- **legal_hold_policy_id** (`string`, required) The unique identifier for the legal hold policy to retrieve assignments for. +- **filter_by_assignment_type** (`string`, optional) Specify the type of item (e.g., file, folder, user, etc.) the policy was applied to. Choices: ['file', 'file_version', 'folder', 'user', 'ownership', 'interactions']. +- **filter_by_item_id** (`string`, optional) Filters results by the ID of the item the policy was applied to. +- **pagination_marker** (`string`, optional) Specifies the position to start retrieving results using marker-based pagination. Requires `usemarker` to be set to `true`. +- **maximum_items_per_page** (`integer`, optional) Set the maximum number of items to retrieve per page for optimal pagination control. +- **response_fields** (`array[string]`, optional) List of attributes to include in the response, overriding standard fields unless specified. + +## BoxApi.RetrieveLegalHoldPolicyAssignment + +
+ + +Retrieve details of a specific legal hold policy assignment. + +**Parameters** + +- **legal_hold_policy_assignment_id** (`string`, required) The unique identifier for the legal hold policy assignment to retrieve details about. + +## BoxApi.RemoveLegalHoldFromItem + +
+ + +Initiate removal of a legal hold from an item. + +**Parameters** + +- **legal_hold_policy_assignment_id** (`string`, required) The unique identifier for the legal hold policy assignment you wish to remove. This value is necessary to initiate the removal process. + +## BoxApi.GetFilesOnLegalHold + +
+ + +Retrieve files currently on legal hold for a specific assignment. + +**Parameters** + +- **legal_hold_policy_assignment_id** (`string`, required) The ID of the legal hold policy assignment to retrieve files currently on hold. +- **pagination_marker** (`string`, optional) Position marker for starting the result set when using marker-based pagination. Requires the 'usemarker' parameter to be true. +- **maximum_items_per_page** (`integer`, optional) The maximum number of items to return per page. Use this to control pagination size. +- **included_attributes** (`array[string]`, optional) A list of specific attributes to include in the response. Only these attributes will be returned unless others are explicitly specified. Use this to customize the response fields. + +## BoxApi.GetFileVersionRetentions + +
+ + +Retrieve file version retentions for an enterprise. + +**Parameters** + +- **filter_by_file_id** (`string`, optional) Filters results to include only files with this specific file ID. +- **filter_by_file_version_id** (`string`, optional) Filters results by file versions matching this ID. +- **retention_policy_id** (`string`, optional) Filter results by the specific retention policy ID. +- **filter_by_disposition_action** (`string`, optional) Filter results based on the retention policy's disposition action, such as 'permanently_delete' or 'remove_retention'. +- **filter_by_disposition_before_date** (`string`, optional) Provide a date to filter results by files that will have their disposition come into effect before this date. Format: YYYY-MM-DD. +- **disposition_effective_after_date** (`string`, optional) Filter results by files with disposition effective after this date. Use ISO 8601 format (e.g., '2023-10-01'). +- **max_items_per_page** (`integer`, optional) The maximum number of items to return per page. +- **pagination_start_marker** (`string`, optional) Defines the starting point for paginated results using a position marker. Requires marker-based pagination to be enabled. + +## BoxApi.GetFileVersionsOnLegalHold + +
+ + +Retrieve previous file versions under a legal hold assignment. + +**Parameters** + +- **legal_hold_policy_assignment_id** (`string`, required) The ID of the legal hold policy assignment to retrieve previous file versions for. +- **pagination_start_marker** (`string`, optional) Defines the position marker to start returning results for paginated data retrieval. Requires `usemarker` to be set to `true`. +- **max_items_per_page** (`integer`, optional) The maximum number of items to return per page when retrieving file versions. +- **include_additional_fields_in_response** (`array[string]`, optional) List of attribute names to include in the response. Only specified fields and mini representation fields will be returned. + +## BoxApi.GetFileVersionRetentionInfo + +
+ + +Retrieve details of a file version retention. + +**Parameters** + +- **file_version_retention_id** (`string`, required) The ID of the specific file version retention to retrieve information for. This is required to access retention details. + +## BoxApi.RetrieveFileVersionLegalHolds + +
+ + +Get details of legal holds on a specific file version. + +**Parameters** + +- **file_version_legal_hold_id** (`string`, required) The unique identifier of the file version legal hold to retrieve specific legal hold policy details. + +## BoxApi.GetLegacyFileVersionLegalHolds + +
+ + +Retrieve file versions on legal hold in the legacy system. + +**Parameters** + +- **legal_hold_policy_id** (`string`, required) The ID of the legal hold policy for which file version legal holds need to be retrieved. +- **pagination_marker** (`string`, optional) A string that defines the starting point for marker-based pagination. Requires `usemarker` to be true. +- **max_items_per_page** (`integer`, optional) Specify the maximum number of items to return per page for the request. + +## BoxApi.GetShieldInformationBarrier + +
+ + +Retrieve shield information barrier by ID. + +**Parameters** + +- **shield_information_barrier_id** (`string`, required) The unique identifier for the shield information barrier to be retrieved. + +## BoxApi.GetShieldInformationBarriers + +
+ + +Retrieve shield information barriers for the enterprise. + +**Parameters** + +- **pagination_marker** (`string`, optional) Defines the starting point for paginated results using marker-based pagination. +- **max_items_per_page** (`integer`, optional) The maximum number of shield information barrier objects to return per page. This controls the pagination size. + +## BoxApi.GetShieldInformationBarrierReports + +
+ + +Retrieve shield information barrier reports. + +**Parameters** + +- **shield_information_barrier_id** (`string`, required) The unique identifier for the shield information barrier whose reports need to be fetched. +- **pagination_marker** (`string`, optional) Position marker to start returning results for pagination. Requires 'usemarker' set to 'true'. +- **maximum_items_per_page** (`integer`, optional) The maximum number of shield information barrier reports to return per page. This integer value controls the page size for result sets. + +## BoxApi.FetchShieldBarrierReport + +
+ + +Retrieve details of a shield information barrier report by ID. + +**Parameters** + +- **shield_barrier_report_id** (`string`, required) The unique ID of the shield information barrier report to retrieve. + +## BoxApi.GetShieldInfoBarrierSegment + +
+ + +Retrieve shield information barrier segment by ID. + +**Parameters** + +- **barrier_segment_id** (`string`, required) The unique ID of the shield information barrier segment to be retrieved. + +## BoxApi.DeleteShieldInformationBarrierSegment + +
+ + +Delete a shield information barrier segment by ID. + +**Parameters** + +- **shield_information_barrier_segment_id** (`string`, required) The ID of the shield information barrier segment to delete. This should be a valid string representing the segment's unique identifier. + +## BoxApi.GetShieldInformationBarrierSegments + +
+ + +Retrieve shield information barrier segment details. + +**Parameters** + +- **shield_information_barrier_id** (`string`, required) The unique identifier for the shield information barrier that specifies the segment objects to retrieve. +- **pagination_position_marker** (`string`, optional) Defines the position marker to start returning results from, used for marker-based pagination. Requires usemarker to be true. +- **maximum_items_per_page** (`integer`, optional) The maximum number of shield information barrier segment items to return in a single request. Ideal for controlling page size during pagination. + +## BoxApi.GetShieldInfoBarrierMember + +
+ + +Retrieve details of a shield information barrier segment member. + +**Parameters** + +- **member_id** (`string`, required) The ID of the shield information barrier segment member to retrieve details for. + +## BoxApi.RemoveShieldBarrierMember + +
+ + +Delete a shield information barrier segment member by ID. + +**Parameters** + +- **member_id_for_deletion** (`string`, required) The ID of the shield information barrier segment member to be deleted. + +## BoxApi.ListShieldBarrierSegmentMembers + +
+ + +Retrieve members of shield information barrier segments. + +**Parameters** + +- **segment_id** (`string`, required) The ID of the shield information barrier segment to retrieve members for. +- **pagination_marker** (`string`, optional) The position marker to begin returning paginated results. Requires `usemarker` to be `true`. +- **items_per_page_limit** (`integer`, optional) The maximum number of segment members to return per page. Use this to control pagination by specifying the number of results per page. + +## BoxApi.GetShieldInformationBarrierSegmentInfo + +
+ + +Retrieve shield barrier segment restriction by ID. + +**Parameters** + +- **segment_restriction_id** (`string`, required) The unique identifier for the shield information barrier segment restriction. + +## BoxApi.DeleteShieldBarrierSegmentRestriction + +
+ + +Delete a specific shield barrier segment restriction by ID. + +**Parameters** + +- **barrier_segment_restriction_id** (`string`, required) The ID of the shield information barrier segment restriction to delete. + +## BoxApi.GetShieldInformationRestrictions + +
+ + +Retrieve restrictions for a shield information barrier segment. + +**Parameters** + +- **segment_id** (`string`, required) The unique identifier for the shield information barrier segment to retrieve restrictions. +- **pagination_position_marker** (`string`, optional) Defines the position marker to begin results, used for marker-based pagination. Requires `usemarker` to be `true`. +- **max_items_per_page** (`integer`, optional) The maximum number of items to return per page when retrieving shield information barrier segment restrictions. + +## BoxApi.GetDevicePinInfo + +
+ + +Retrieve details of a specific device pin. + +**Parameters** + +- **device_pin_identifier** (`string`, required) The unique identifier for the device pin to retrieve information about. + +## BoxApi.DeleteDevicePin + +
+ + +Delete a specific device pin from the system. + +**Parameters** + +- **device_pin_id** (`string`, required) The unique identifier of the device pin to be deleted. + +## BoxApi.GetEnterpriseDevicePins + +
+ + +Retrieve all device pins for a specific enterprise. + +**Parameters** + +- **enterprise_id** (`string`, required) The unique identifier for the enterprise whose device pins are to be retrieved. This is a mandatory field. +- **pagination_start_marker** (`string`, optional) Defines the starting position for paginated results. Requires 'usemarker' to be true. +- **max_items_per_page** (`integer`, optional) The maximum number of device pins to retrieve per page. +- **sort_direction** (`string`, optional) The direction to sort results: alphabetical ascending ('ASC') or descending ('DESC'). + +## BoxApi.GetEnterpriseTermsOfService + +
+ + +Retrieve the enterprise's terms of service. + +**Parameters** + +- **terms_of_service_type** (`string`, optional) Specify the type of terms of service to retrieve. Options are 'external' or 'managed'. + +## BoxApi.GetSpecificTermsOfService + +
+ + +Fetches details of a specific terms of service. + +**Parameters** + +- **terms_of_service_id** (`string`, required) The unique identifier for the terms of service to be fetched. + +## BoxApi.GetUserTosStatus + +
+ + +Retrieve user acceptance status for terms of service. + +**Parameters** + +- **terms_of_service_id** (`string`, required) The unique identifier for the specific terms of service document. +- **filter_by_user_id** (`string`, optional) Limits results to the specified user ID for retrieving their terms of service acceptance status. + +## BoxApi.GetSafeCollaborationDomains + +
+ + +Retrieve domains approved for safe collaboration. + +**Parameters** + +- **pagination_start_marker** (`string`, optional) The position marker to begin returning results, used for marker-based pagination. Requires `usemarker` to be `true`. +- **maximum_items_per_page** (`integer`, optional) The maximum number of domains to return per page. Adjust this to control the page size of results. + +## BoxApi.FetchSafeCollaborationDomain + +
+ + +Retrieve a designated safe collaboration domain within an enterprise. + +**Parameters** + +- **collaboration_whitelist_entry_id** (`string`, required) The ID of the trusted domain entry in the whitelist. Provide this to retrieve its details. + +## BoxApi.RemoveSafeCollaborationDomain + +
+ + +Remove a domain from the safe collaboration list. + +**Parameters** + +- **whitelist_entry_id** (`string`, required) The unique identifier for the domain entry in the safe collaboration list to be removed. + +## BoxApi.GetCollaborationWhitelistExemptUsers + +
+ + +Retrieve users exempt from collaboration restrictions. + +**Parameters** + +- **pagination_position_marker** (`string`, optional) Start position for returning results. Used for marker-based pagination. Requires `usemarker` set to `true`. +- **max_items_per_page** (`integer`, optional) The maximum number of users to return per page. Controls pagination size. + +## BoxApi.GetCollaborationWhitelistExemptUser + +
+ + +Retrieve user exempt from collaboration restrictions. + +**Parameters** + +- **exemption_target_id** (`string`, required) The ID of the user who is exempt from collaboration domain restrictions. This ID is required to retrieve specific user details. + +## BoxApi.RemoveCollaborationWhitelistExemption + +
+ + +Remove a user's exemption from domain restrictions in collaborations. + +**Parameters** + +- **exemption_id** (`string`, required) The ID of the user's exemption to be removed from the collaboration whitelist. + +## BoxApi.FetchEnterpriseStoragePolicies + +
+ + +Fetches all storage policies in the enterprise. + +**Parameters** + +- **include_attributes** (`array[string]`, optional) An array of attribute names to include in the response. Specify attributes not normally returned in a standard response. Only mini representation fields and requested attributes will be returned. +- **pagination_marker** (`string`, optional) Defines the starting position for returning results using marker-based pagination. Requires `usemarker` to be `true`. +- **max_items_per_page** (`integer`, optional) Specify the maximum number of storage policy items to return per page. + +## BoxApi.FetchStoragePolicy + +
+ + +Retrieve details of a specific storage policy. + +**Parameters** + +- **storage_policy_identifier** (`string`, required) The unique ID of the storage policy to retrieve details for. + +## BoxApi.FetchStoragePolicyAssignments + +
+ + +Retrieve storage policy assignments for enterprise or user. + +**Parameters** + +- **target_type_for_assignments** (`string`, required) Specifies whether to return storage policy assignments for a 'user' or 'enterprise'. +- **target_user_or_enterprise_id** (`string`, required) The ID of the user or enterprise to fetch storage policy assignments for. +- **pagination_marker** (`string`, optional) Defines the position marker to start returning results for pagination. Requires 'usemarker' to be true. + +## BoxApi.FetchStoragePolicyAssignment + +
+ + +Retrieve a storage policy assignment by ID. + +**Parameters** + +- **storage_policy_assignment_id** (`string`, required) The unique identifier of the storage policy assignment to be retrieved. + +## BoxApi.DeleteStoragePolicyAssignment + +
+ + +Delete a user's storage policy assignment. + +**Parameters** + +- **storage_policy_assignment_id** (`string`, required) The ID of the storage policy assignment to delete. This is required and identifies which assignment to delete, reverting the user to the default policy. + +## BoxApi.DownloadZipContent + +
+ + +Download the contents of a zip archive. + +**Parameters** + +- **zip_archive_unique_id** (`string`, required) The unique identifier for the zip archive to be downloaded. This ID must be obtained from the 'Create zip download' API response. + +## BoxApi.CheckZipDownloadStatus + +
+ + +Check the status of a zip archive download. + +**Parameters** + +- **zip_archive_unique_identifier** (`string`, required) The unique identifier representing the zip archive for which to check download status. Obtainable from the `status_url` in the Create zip download API. + +## BoxApi.CancelSignRequest + +
+ + +Cancel an existing sign request to stop further processing. + +**Parameters** + +- **sign_request_id** (`string`, required) The unique identifier of the signature request to be cancelled. + +## BoxApi.ResendSignatureRequestEmail + +
+ + +Resend signature request email to outstanding signers. + +**Parameters** + +- **signature_request_id** (`string`, required) The unique identifier of the signature request to resend emails to outstanding signers. + +## BoxApi.RetrieveSignRequestById + +
+ + +Retrieve details of a specific sign request by ID. + +**Parameters** + +- **signature_request_id** (`string`, required) The unique identifier for the signature request to retrieve. + +## BoxApi.FetchSignatureRequests + +
+ + +Retrieve signature requests created by a user. + +**Parameters** + +- **pagination_marker** (`string`, optional) Defines the starting point for returning results, used for marker-based pagination. Requires use_marker to be true. +- **max_items_per_page** (`integer`, optional) Specify the maximum number of signature requests to return per page. +- **sender_email_list** (`array[string]`, optional) A list of sender emails to filter the signature requests by sender. `shared_requests` must be `true` if provided. +- **include_shared_requests** (`boolean`, optional) Set to true to include signature requests where the user is a collaborator but not the owner. Must be true if sender emails are provided. + +## BoxApi.GetManualStartWorkflows + +
+ + +Retrieve workflows with manual start triggers for a folder. + +**Parameters** + +- **folder_id** (`string`, required) The unique identifier representing a folder. You can find this by visiting the folder in the web application and copying the ID from the URL. The root folder is always represented by ID '0'. +- **trigger_type_filter** (`string`, optional) Specify the trigger type to search for in workflows. Use 'WORKFLOW_MANUAL_START' for manual triggers. +- **max_items_per_page** (`integer`, optional) The maximum number of workflows to retrieve per page. Adjust based on your needs to control pagination. +- **pagination_marker** (`string`, optional) Specifies the position marker to start returning results. Used for marker-based pagination and requires `usemarker` to be set to `true`. + +## BoxApi.GetBoxSignTemplates + +
+ + +Retrieve Box Sign templates created by a user. + +**Parameters** + +- **pagination_marker** (`string`, optional) The starting position marker for result pagination. Requires `usemarker` to be set to `true`. +- **max_items_per_page** (`integer`, optional) The maximum number of templates to return in a single response. + +## BoxApi.FetchBoxSignTemplateDetails + +
+ + +Retrieve details of a specific Box Sign template. + +**Parameters** + +- **box_sign_template_id** (`string`, required) The unique identifier for a Box Sign template to retrieve its details. + +## BoxApi.ListSlackIntegrationMappings + +
+ + +Retrieve Slack integration mappings for a Box enterprise. + +**Parameters** + +- **pagination_start_marker** (`string`, optional) Defines the starting position for pagination results. Requires 'usemarker' to be true. +- **max_items_per_page** (`integer`, optional) The maximum number of Slack integration mappings to return per page from the user's enterprise. +- **mapped_item_type** (`string`, optional) The type of mapped item for which the Slack integration mapping should be returned. Only 'channel' is supported. +- **mapped_item_id** (`string`, optional) ID of the mapped item for which the Slack integration mapping should be retrieved. +- **box_item_id** (`string`, optional) Box item ID for which to retrieve Slack integration mappings. Must be a valid ID within the user's enterprise. +- **box_item_type** (`string`, optional) Specify the type of Box item for which the mappings should be returned. Currently, only 'folder' is supported. +- **include_manually_created_mappings** (`boolean`, optional) Set to true to include mappings that have been manually created. + +## BoxApi.DeleteSlackIntegrationMapping + +
+ + +Deletes a Slack integration mapping for Box content. + +**Parameters** + +- **slack_integration_mapping_id** (`string`, required) The ID of the Slack integration mapping to be deleted. This requires Admin or Co-Admin permission. + +## BoxApi.GetTeamsIntegrationMappings + +
+ + +Retrieve Teams integration mappings for an enterprise. + +**Parameters** + +- **mapped_item_type** (`string`, optional) Specify the type of item ('channel' or 'team') for which the mapping should be returned. +- **mapped_item_id** (`string`, optional) The ID of the mapped item for which the mapping should be returned. Required for retrieving specific integration mappings. +- **box_item_id_for_mappings** (`string`, optional) The Box item ID to retrieve integration mappings for. Required for fetching specific mappings. +- **box_item_type** (`string`, optional) Specify the type of Box item for which the mappings should be returned. Acceptable value is 'folder'. + +## BoxApi.DeleteTeamsIntegrationMapping + +
+ + +Deletes a Teams integration mapping in Box. + +**Parameters** + +- **integration_mapping_identifier** (`string`, required) The ID of the Teams integration mapping to be deleted. Required for identifying the specific mapping. + +## BoxApi.GetAiAgentDefaultConfig + +
+ + +Retrieve the default configuration for the AI agent. + +**Parameters** + +- **filter_mode** (`string`, required) Specifies the mode to filter and return the agent configuration. Options: 'ask', 'text_gen', 'extract', 'extract_structured'. +- **agent_config_language_code** (`string`, optional) The ISO language code to specify the language for the AI agent configuration. Default is returned if unsupported. +- **model_identifier** (`string`, optional) Specify the model name to retrieve the default agent configuration. Ensure it matches the supported model names. + +## BoxApi.ListAiAgents + +
+ + +Retrieve a list of AI agents with specified parameters. + +**Parameters** + +- **filter_by_mode** (`array[string]`, optional) List of modes to filter the agent configuration. Options: `ask`, `text_gen`, `extract`. +- **response_fields** (`array[string]`, optional) List of fields to return for each AI agent in the response. Specify as an array of strings. +- **agent_state_filter** (`array[string]`, optional) Specify the states of agents to return. Acceptable values include: 'enabled', 'disabled', and 'enabled_for_selected_users'. +- **results_start_position_marker** (`string`, optional) The starting point marker for returning paginated results. Use this to continue a previous query from where it left off. +- **max_items_per_page** (`integer`, optional) The maximum number of AI agents to return for a single page of results. +- **include_box_default_agents** (`boolean`, optional) Set to true to include Box default AI agents in the response, false otherwise. + +## BoxApi.GetAiAgentDetails + +
+ + +Retrieve details of a specific AI agent by ID. + +**Parameters** + +- **agent_unique_identifier** (`string`, required) The unique identifier of the AI agent to retrieve details for. +- **fields_to_return** (`array[string]`, optional) List of specific fields to return in the response for the AI agent details. + +## BoxApi.DeleteAiAgent + +
+ + +Removes an AI agent by its ID. + +**Parameters** + +- **agent_id** (`string`, required) The unique identifier of the AI agent you want to delete. This ID specifies which agent will be removed. + + diff --git a/app/en/toolkits/social-communication/slack-api/page.mdx b/app/en/toolkits/social-communication/slack-api/page.mdx index 08ad67a8a..fee73acdd 100644 --- a/app/en/toolkits/social-communication/slack-api/page.mdx +++ b/app/en/toolkits/social-communication/slack-api/page.mdx @@ -17,7 +17,7 @@ import { Callout } from "nextra/components"; - + The SlackApi toolkit offers a comprehensive set of tools for administering Slack workspaces, automating messaging, managing channels, calls, files, emojis, user groups, invites, and user/team data. Key capabilities include: diff --git a/app/en/toolkits/social-communication/slack_api.mdx b/app/en/toolkits/social-communication/slack_api.mdx deleted file mode 100644 index eff0ce095..000000000 --- a/app/en/toolkits/social-communication/slack_api.mdx +++ /dev/null @@ -1,1938 +0,0 @@ -# SlackApi - -import StarterToolInfo from "@/components/StarterToolInfo"; -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 SlackApi toolkit offers a comprehensive set of tools for administering Slack workspaces, automating messaging, managing channels, calls, files, emojis, user groups, invites, and user/team data. Key capabilities include: - -- Workspace & team management: create/update team name/description, fetch team info, settings, preferences, integration logs, billable users, and list/inspect teams in an Enterprise org. -- User and identity operations: list workspace/team users, find users by email, get user profiles, presence, identity, and manage profile photos. -- Channels & conversations: create/join conversations, get conversation info and members, list channels/conversations accessible to a user, open/resume DMs, invite users, set read cursors, and manage shared channel invites. -- Messaging & scheduling: send messages (regular and ephemeral), schedule/delete scheduled messages, list scheduled messages, get message permalinks, and search messages/files. -- Calls: register calls, get call info, add/remove participants. -- Files & sharing: obtain external upload URLs, fetch remote file info, share remote files to channels, enable public sharing. -- Bookmarks, pins & reactions: add/edit/remove bookmarks, pin/list pinned items, add/remove reactions. -- Emoji management: list custom emojis, rename emojis, and add emoji aliases (Enterprise). -- User groups: create, enable/disable, list, update user groups and their membership. -- Invite/workflow management: list pending/approved/denied workspace invites, accept/approve/deny shared channel invites, and list shared invites. -- Admin tools & verification: fetch workspace settings, owners, channels for org usergroups, list enterprise emojis/teams, revoke tokens, verify API calling code, and retrieve integration logs. -- Custom behavior: provide custom unfurling for URLs. - -This toolkit is designed for admins and apps requiring broad Slack API access (admin, invites, calls, chat, files, usergroups, reactions, users scopes). - -## 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-toolkit). - - -## SlackApi.AddSlackEmojiAlias - -
- - -Add an emoji alias in a Slack Enterprise organization. - -**Parameters** - -- **emoji_alias_name** (`string`, required) The new alias for the specified emoji. Whitespace or colons will be automatically trimmed. -- **target_emoji_name** (`string`, required) The name of the existing emoji to which the new alias is being added. Remove any surrounding whitespace or colons. - - -## SlackApi.ListSlackEnterpriseEmojis - -
- - -Retrieve emojis for a Slack Enterprise organization. - -**Parameters** - -- **pagination_cursor** (`string`, optional) Cursor for fetching the next page of emojis. Use 'next_cursor' from the previous response. -- **max_items_to_return** (`integer`, optional) The maximum number of emojis to return, between 1 and 1000 inclusive. (default: '100') - - -## SlackApi.RenameSlackEmoji - -
- - -Rename an emoji in a Slack Enterprise organization. - -**Parameters** - -- **current_emoji_name** (`string`, required) The current name of the emoji to be renamed. Colons (:myemoji:) around the value are optional. -- **new_emoji_name** (`string`, required) The new name to assign to the emoji in the Slack Enterprise organization. - - -## SlackApi.ListApprovedWorkspaceInviteRequests - -
- - -Retrieve all approved workspace invite requests from Slack. - -**Parameters** - -- **workspace_id** (`string`, optional) ID for the Slack workspace where the invite requests were made. Required if the Enterprise org has more than one workspace. -- **pagination_cursor** (`string`, optional) Value of the `next_cursor` from the previous API response for paginating results. -- **result_limit** (`integer`, optional) Specify the number of results to return, between 1 and 1000 inclusive. (default: '100') - - -## SlackApi.ListDeniedSlackInviteRequests - -
- - -Retrieve denied Slack workspace invite requests. - -**Parameters** - -- **workspace_team_id** (`string`, optional) ID of the workspace where the invite requests were made. Required if the Enterprise org has multiple workspaces. -- **pagination_cursor** (`string`, optional) The cursor value from the previous API response to fetch the next set of results. Use this for pagination. -- **result_limit** (`integer`, optional) Specify the number of denied invite request results to return, between 1 and 1000 inclusive. (default: '100') - - -## SlackApi.ListPendingWorkspaceInvites - -
- - -Retrieve all pending workspace invite requests from Slack. - -**Parameters** - -- **workspace_id** (`string`, optional) The ID of the workspace to list pending invite requests from. Required for multi-workspace enterprises. -- **pagination_cursor** (`string`, optional) The cursor value for fetching the next set of invite requests. Use the `next_cursor` from the previous response if available. -- **result_limit** (`integer`, optional) The number of invite requests to return per call, must be between 1 and 1000. (default: '100') - - -## SlackApi.ListTeamsInEnterprise - -
- - -Retrieve all teams in an Enterprise organization on Slack. - -**Parameters** - -- **maximum_items_to_return** (`integer`, optional) Specify the maximum number of teams to retrieve. Must be a positive integer, up to 1000. (default: '100') -- **pagination_cursor** (`string`, optional) Use this to retrieve the next page of results by setting it to the `next_cursor` from the previous response. - - -## SlackApi.ListSlackWorkspaceOwners - -
- - -Retrieve all owners in a Slack workspace. - -**Parameters** - -- **workspace_id** (`string`, required) The unique identifier of the Slack workspace for which to list the owners. -- **maximum_items_to_return** (`integer`, optional) Specifies the maximum number of owners to return, ranging from 1 to 1000. (default: '100') -- **pagination_cursor** (`string`, optional) The cursor from the previous response used to fetch the next page of owners. Leave empty for the first page. - - -## SlackApi.FetchWorkspaceSettingsInfo - -
- - -Retrieve settings information for a Slack workspace. - -**Parameters** - -- **slack_team_id** (`string`, required) The unique identifier of the Slack workspace (team) for which to fetch the settings information. - - -## SlackApi.SetWorkspaceDescription - -
- - -Update the description of a Slack workspace. - -**Parameters** - -- **workspace_id** (`string`, required) The unique identifier for the Slack workspace where the description will be updated. -- **workspace_description** (`string`, required) The new description to set for the Slack workspace. Provide a clear and concise text. - - -## SlackApi.SetSlackWorkspaceName - -
- - -Update the name of a Slack workspace. - -**Parameters** - -- **workspace_id** (`string`, required) Unique identifier for the Slack workspace whose name you want to update. -- **new_workspace_name** (`string`, required) The desired new name for the Slack workspace. This replaces the existing name. - - -## SlackApi.ListChannelsForUsergroup - -
- - -Retrieve channels linked to an org-level user group in Slack. - -**Parameters** - -- **usergroup_id** (`string`, required) The ID of the IDP group to list channels for. It identifies which organizational group to retrieve the default channels from. -- **workspace_id** (`string`, optional) The unique identifier for the Slack workspace. -- **include_member_count_in_channels** (`boolean`, optional) Set to true to include the count of members for each channel, otherwise set to false. - - -## SlackApi.ListWorkspaceUsers - -
- - -Retrieve a list of users from a Slack workspace. - -**Parameters** - -- **workspace_team_id** (`string`, optional) The ID of the Slack workspace (e.g., T1234) to filter users from. Only users from this workspace will be listed. -- **pagination_cursor** (`string`, optional) Use this to navigate through paginated results by setting it to the `next_cursor` from a previous response. -- **user_retrieval_limit** (`integer`, optional) Maximum number of users to retrieve per page from the Slack workspace. (default: '100') -- **return_only_active_users** (`boolean`, optional) Return only active users if true; return only deactivated users if false. Default is true. -- **include_deactivated_user_workspaces** (`boolean`, optional) Include workspaces for users even if they are deactivated. Only applies with org token and no team_id. Default is false. -- **return_only_guest_users** (`boolean`, optional) If true, returns only guests and their expiration dates that belong to the specified team_id. - - -## SlackApi.CheckApiCallingCode - -
- - -Verify the correctness of API calling code for Slack. - -**Parameters** - -- **simulate_error_response** (`string`, optional) Specify an error code to simulate an error response for testing API calls. Useful for testing error handling. - - -## SlackApi.RevokeSlackToken - -
- - -Revoke a Slack authentication token. - -**Parameters** - -- **trigger_testing_mode** (`boolean`, optional) Set to true to trigger testing mode where the token will not be revoked. Useful for testing. - - -## SlackApi.EditSlackBookmark - -
- - -Edit an existing bookmark in a Slack channel. - -**Parameters** - -- **slack_channel_id** (`string`, required) The ID of the Slack channel where the bookmark will be updated. -- **target_bookmark_id** (`string`, required) The unique identifier of the bookmark you want to update. -- **bookmark_title** (`string`, optional) The new title for the bookmark to update. -- **bookmark_link** (`string`, optional) URL of the bookmark to be edited. Ensure it is a valid format starting with http or https. -- **emoji_tag** (`string`, optional) The emoji tag to apply to the bookmark link. It should be a valid emoji code (e.g., :smile:). - - -## SlackApi.RemoveSlackBookmark - -
- - -Remove a bookmark from a Slack channel. - -**Parameters** - -- **slack_channel_id_to_remove_bookmark** (`string`, required) The ID of the Slack channel from which the bookmark should be removed. This ID specifies the target channel and is required to locate and delete the bookmark. -- **bookmark_id_to_remove** (`string`, required) The ID of the bookmark to be removed from a Slack channel. Ensure it is specified correctly to delete the correct bookmark. -- **quip_section_id** (`string`, optional) The ID of the Quip section to unbookmark. This is required to specify which section's bookmark should be removed. - - -## SlackApi.GetSlackBotInfo - -
- - -Retrieve details about a Slack bot user. - -**Parameters** - -- **target_bot_id** (`string`, optional) The unique bot ID for which information is requested. This ID is specific to each workspace the bot is in. -- **team_id_for_org_token_use** (`string`, optional) Encoded team or enterprise ID where the bot exists. Required if using an organization token. Ignored if using a workspace-level token. - - -## SlackApi.RegisterSlackCall - -
- - -Registers a new call on Slack. - -**Parameters** - -- **unique_call_id** (`string`, required) A unique ID for the Call, provided by the 3rd-party Call provider. Ensure it is unique across all calls from your service. -- **call_join_url** (`string`, required) The URL required for a client to join the Call on Slack. -- **optional_human_readable_display_id** (`string`, optional) An optional, human-readable ID for the call, supplied by the third-party provider. This ID will be displayed in the Call object if given. -- **desktop_app_join_url** (`string`, optional) The URL used to directly launch the 3rd-party Call from Slack clients, if provided. -- **call_start_timestamp** (`integer`, optional) Unix timestamp indicating when the call is scheduled to start. -- **call_title** (`string`, optional) The name of the Call to be registered on Slack. This title will be used to identify the Call within Slack. -- **call_creator_user_id** (`string`, optional) The valid Slack user ID of the creator of this call. Optional if using a user token, which defaults to the authed user. -- **participants_info** (`array[string]`, optional) A list of participants to register for the call, including 'slack_id', 'external_id', 'display_name', and 'avatar_url' for each user. - - -## SlackApi.GetCallInformation - -
- - -Retrieve detailed information about a specific call in Slack. - -**Parameters** - -- **call_id** (`string`, required) The unique identifier of the call as returned by the `calls.add` method. This ID is necessary to retrieve detailed call information. - - -## SlackApi.AddCallParticipants - -
- - -Add new participants to a Slack call. - -**Parameters** - -- **call_id** (`string`, required) The unique identifier for the call, as returned by the `calls.add` method. This ID specifies which call the participants will be added to. -- **participant_users** (`array[string]`, required) List of users to add, specified by `slack_id` or `external_id`. Include optional `display_name` and `avatar_url` for each user. - - -## SlackApi.RemoveCallParticipants - -
- - -Remove participants from a Slack call. - -**Parameters** - -- **call_id** (`string`, required) The unique identifier for the call from which participants are to be removed. This `id` is obtained from the `calls.add` method. -- **users_to_remove** (`array[string]`, required) A list of user IDs to remove as participants from the call. Refer to Slack's documentation for specifying user IDs. - - -## SlackApi.DeleteScheduledSlackMessage - -
- - -Delete a pending scheduled message from Slack queue. - -**Parameters** - -- **channel_id** (`string`, required) The ID of the channel where the scheduled message is set to post. Required to identify the correct message to delete. -- **scheduled_message_id** (`string`, required) The ID of the scheduled message to be deleted. This ID is obtained from the `chat.scheduleMessage` response. -- **delete_as_authenticated_user** (`boolean`, optional) Set to true to delete the message as the authenticated user with `chat:write:user` scope. Bot users are considered authenticated users. If false, the message will be deleted with `chat:write:bot` scope. - - -## SlackApi.GetSlackMessagePermalink - -
- - -Retrieve a permalink URL for a specific Slack message. - -**Parameters** - -- **channel_id** (`string`, required) The unique identifier of the Slack conversation or channel containing the message. -- **message_timestamp** (`string`, required) The unique timestamp of the message to retrieve the permalink for. It identifies the message within the Slack channel. - - -## SlackApi.SendEphemeralMessageSlack - -
- - -Send an ephemeral message to a user in a Slack channel. - -**Parameters** - -- **target_channel** (`string`, required) The channel, private group, or IM channel where the ephemeral message will be sent. Accepts an encoded ID or the channel's name. -- **recipient_user_id** (`string`, required) The ID of the user who will receive the ephemeral message. Must be in the specified channel. -- **structured_attachments** (`array[string]`, optional) A JSON-encoded array of structured attachments for the message. Presented as a URL-encoded string. -- **structured_blocks** (`array[string]`, optional) A URL-encoded JSON array of structured Slack block elements. Use for rich message formatting. -- **message_icon_emoji** (`string`, optional) Emoji to display as the message icon, overriding icon_url. Specify using the emoji name like :smile:. -- **message_icon_url** (`string`, optional) URL for the image to be used as the icon for the message. It overrides the icon_emoji if provided. -- **message_markdown_text** (`string`, optional) The main text formatted in markdown to be sent as an ephemeral message. Do not use with `blocks` or `text`. Character limit: 12,000. -- **message_parse_mode** (`string`, optional) Specifies how the message text is interpreted. Options are: 'none', 'full', 'mrkdwn', or 'false'. Defaults to 'none'. (default: 'none') -- **ephemeral_message_text** (`string`, optional) The main text of the ephemeral message for Slack. It acts as a fallback when using blocks; can be formatted as plain text or markdown. Limit to a few thousand bytes. -- **parent_message_timestamp** (`string`, optional) The timestamp of the parent message to post this ephemeral message in its thread. Ensure there is already an active thread. -- **bot_username** (`string`, optional) The username for the bot sending the ephemeral message. This sets the display name in the Slack message. -- **link_names_auto_link** (`boolean`, optional) Set to true to automatically find and link channel names and usernames. - - -## SlackApi.SendSlackMessage - -
- - -Sends a message to a Slack channel. - -**Parameters** - -- **target_channel_id_or_name** (`string`, required) The encoded ID or name of the channel, private group, or IM where the message will be sent. Retrieve using Slack's conversations.list API. -- **message_attachments** (`array[string]`, optional) A JSON array of structured attachment objects for the message, provided as a URL-encoded string. Example: `[{"pretext": "pre-hello", "text": "text-world"}]`. -- **structured_blocks** (`array[string]`, optional) A JSON-based array of structured blocks for constructing messages using Block Kit. Provide as a URL-encoded string. Include fallback text if necessary. -- **emoji_icon_for_message** (`string`, optional) Emoji to display as the icon for the Slack message. Overrides any image URL icon. -- **message_icon_url** (`string`, optional) URL to an image to use as the icon for the message. Overrides any specified icon emoji. -- **message_markdown** (`string`, optional) The message text formatted using markdown, up to 12,000 characters. Cannot be used with `blocks` or `text`. -- **message_metadata** (`string`, optional) A JSON object with 'event_type' and 'event_payload' fields, URL-encoded, providing additional metadata for the message. -- **parse_mode** (`string`, optional) Specifies how the message content should be treated. Options are 'none' to remove hyperlinks or 'full' to ignore markdown formatting. -- **message_text** (`string`, optional) The main text of the message. Acts as the primary message or a fallback for notifications when using blocks. Supports plain text or markdown. -- **thread_timestamp** (`string`, optional) Timestamp of the parent message to which this message will be a reply. Use the parent's `ts` value, not a reply's. -- **bot_username** (`string`, optional) The display name to use for the bot when sending the message to Slack. -- **post_as_authenticated_user** (`boolean`, optional) Set to true to post the message as the authenticated user instead of as a bot. Only applicable for classic apps. -- **link_user_groups** (`boolean`, optional) Enable linking of user groups in the message. Individual user linking is not supported. -- **enable_slack_markup_parsing** (`boolean`, optional) Set to true to enable Slack markup parsing in the message. Default is enabled. -- **broadcast_reply_to_channel** (`boolean`, optional) Set to true to make the reply visible to everyone in the channel when responding to a thread. Use with 'thread_ts'. Default is false. -- **enable_unfurling_text_content** (`boolean`, optional) Set to true to enable unfurling of primarily text-based content in Slack messages. -- **disable_media_unfurling** (`boolean`, optional) Set to false to enable media unfurling and true to disable it. (default: 'false') - - -## SlackApi.ListScheduledMessages - -
- - -Retrieve scheduled messages from Slack. - -**Parameters** - -- **channel_id** (`string`, optional) The ID of the Slack channel from which to retrieve scheduled messages. -- **pagination_cursor** (`string`, optional) Cursor value for pagination to specify the starting point of the list from a previous call. -- **latest_timestamp** (`string`, optional) A Unix timestamp marking the latest point in the time range for fetching scheduled messages. Ensure it is greater than the `oldest` timestamp if both are set. -- **max_number_of_entries** (`integer`, optional) Specify the maximum number of scheduled messages to return from Slack. -- **oldest_timestamp** (`string`, optional) A Unix timestamp representing the start of the time range for scheduled messages. It must be less than the `latest_timestamp` if both are specified. -- **team_id** (`string`, optional) Encoded team ID to specify which team's channels to list. Required if using an org-level token; ignore for workspace-level tokens. - - -## SlackApi.ScheduleSlackMessage - -
- - -Schedule a message to be sent later in Slack. - -**Parameters** - -- **slack_channel_id_or_name** (`string`, required) Specify the target Slack channel, private group, or DM. Use an encoded ID or the channel name. Retrieve channel ID via `conversations.list`. -- **schedule_time_unix_timestamp** (`integer`, required) Unix timestamp for when the message should be posted to Slack. Must be within 120 days and not exceed 30 messages per 5-minute window. -- **attachments_json** (`string`, optional) A JSON array of structured attachments as a URL-encoded string for the Slack message. -- **structured_blocks_json** (`string`, optional) A URL-encoded string of a JSON-based array containing structured blocks for message formatting. -- **message_markdown** (`string`, optional) Message text in markdown format. Avoid using with 'blocks' or 'text'. Maximum 12,000 characters. -- **message_parsing_mode** (`string`, optional) Specifies how the message content should be parsed and interpreted when sending to Slack. For more details, refer to chat.postMessage documentation. -- **message_text** (`string`, optional) The main body of the Slack message or a fallback text when using blocks. Can be plain text or formatted with mrkdwn. -- **parent_message_timestamp** (`string`, optional) Timestamp of the parent message to which this message is a reply. Use the original message's timestamp, not a reply's timestamp. -- **metadata_json** (`string`, optional) JSON object containing 'event_type' and 'event_payload' fields. Must be URL-encoded. Note: using this will prevent scheduled messages from posting. -- **enable_group_linking** (`boolean`, optional) Set to true to link user groups in the message. Linking individual users is not supported; use mention syntax instead. -- **make_reply_visible_to_everyone** (`boolean`, optional) Set to true to make the reply visible to everyone in the channel or conversation. Use with `thread_ts`. Defaults to false. -- **enable_link_unfurling** (`boolean`, optional) Pass true to enable unfurling of primarily text-based content. -- **disable_unfurling_of_media_content** (`boolean`, optional) Set to true to disable unfurling of media content. Defaults to false. - - -## SlackApi.CustomUnfurlSlackUrls - -
- - -Provide custom unfurl behavior for user-posted URLs on Slack. - -**Parameters** - -- **channel_id** (`string`, required) ID of the Slack channel where the message is posted. Required with 'ts' for custom unfurl or with 'unfurl_id' and 'source'. -- **message_timestamp** (`string`, required) Timestamp of the message to which unfurl behavior will be added. Ensure it corresponds to a message in the specified channel containing a fully-qualified URL registered with your Slack app. -- **unfurl_url_map** (`string`, required) A URL-encoded JSON map with URLs as keys and their corresponding unfurl data as values. Each URL should point to a single attachment, like message buttons. -- **authentication_invitation_message** (`string`, optional) A simple formatted string sent as an ephemeral message inviting the user to authenticate for full unfurl behavior. Supports Slack's *bold*, _italics_, and linking formatting. If provided, this takes precedence over `authentication_invitation_url`. -- **custom_authentication_url** (`string`, optional) A URL to redirect users for app authentication to enable full URL unfurling, requires URL encoding. -- **user_authentication_blocks** (`array[string]`, optional) A URL-encoded JSON array of structured blocks to send as an ephemeral message for user authentication invitation. -- **unfurl_link_id** (`string`, optional) The ID of the link to unfurl. Must be used with 'source'. -- **link_source** (`string`, optional) Specify the source of the link to unfurl as either 'composer' for links inside the message composer or 'conversations_history' for links posted to a conversation. Must be used with 'unfurl_id', or alternatively with 'channel' and 'ts'. -- **require_user_authentication** (`boolean`, optional) Set to true if the user must install your Slack app to trigger unfurls for this domain. - - -## SlackApi.AcceptSlackInvite - -
- - -Accept invitations to a Slack Connect channel. - -**Parameters** - -- **channel_name** (`string`, required) Provide the desired name for the Slack Connect channel. If the channel doesn't exist in your workspace, this name will be assigned to it. -- **invite_id** (`string`, optional) ID of the invitation you want to accept. Must provide either this or channel_id. -- **slack_channel_id_to_accept** (`string`, optional) The ID of the channel you would like to accept the invitation for. Either this or `invite_id` is required. -- **workspace_id** (`string`, optional) The ID of the workspace where the channel should be accepted. Required if using an org-level token. -- **is_channel_private** (`boolean`, optional) True to make the channel private; false to make it public. -- **use_free_trial** (`boolean`, optional) Set to 'True' to use your workspace's free trial to start using Slack Connect. - - -## SlackApi.ApproveSlackChannelInvitation - -
- - -Approve an invitation to a Slack Connect channel. - -**Parameters** - -- **shared_channel_invite_id** (`string`, required) The ID of the shared channel invitation you want to approve. It is required to specifically identify which invitation is being approved for the Slack Connect channel. -- **other_party_team_id** (`string`, optional) The team or enterprise ID of the other party involved in the Slack Connect invitation you are approving. - - -## SlackApi.CreateSlackConversation - -
- - -Create a new public or private Slack conversation. - -**Parameters** - -- **channel_name** (`string`, required) The name of the new Slack channel to create. It must contain only lowercase letters, numbers, hyphens, and underscores, and be 80 characters or less. -- **encoded_team_id** (`string`, optional) The encoded team ID where the channel will be created. Required when using an organization-level token. Ignored if using a workspace-level token. -- **create_private_channel** (`boolean`, optional) Set to true to create a private channel instead of a public one. - - -## SlackApi.GetConversationInfo - -
- - -Fetches information about a Slack conversation. - -**Parameters** - -- **conversation_id** (`string`, required) The unique ID of the Slack conversation to retrieve information for. -- **include_locale** (`boolean`, optional) Set to `true` to receive the locale for this conversation. Defaults to `false`. -- **include_member_count** (`boolean`, optional) Set to true to include the member count for the specified conversation. Defaults to false. - - -## SlackApi.InviteUserToSlackChannel - -
- - -Invite users to a Slack channel. - -**Parameters** - -- **slack_channel_id** (`string`, required) The ID of the Slack channel to invite users to. It can be a public or private channel ID. -- **user_ids_list** (`string`, required) A list of up to 100 user IDs to invite, separated by commas. -- **continue_with_valid_users** (`boolean`, optional) Set to true to invite valid users while ignoring invalid IDs when multiple user IDs are provided. Default is false. - - -## SlackApi.JoinSlackConversation - -
- - -Join an existing conversation in Slack. - -**Parameters** - -- **conversation_id** (`string`, required) The ID of the conversation or channel you want to join in Slack. - - -## SlackApi.ListSlackChannels - -
- - -Retrieve a list of all channels in a Slack team. - -**Parameters** - -- **pagination_cursor** (`string`, optional) The cursor used to paginate through data collections. Use the `next_cursor` from a previous response to continue; omit for the first page. -- **maximum_number_of_channels** (`integer`, optional) Specify the maximum number of channels to return. Must be an integer under 1000. Note that fewer channels than requested may be returned. (default: '100') -- **team_id_for_org_app** (`string`, optional) Encoded team ID to list channels. Required for org-level tokens; ignored for workspace-level tokens. -- **channel_types** (`string`, optional) Comma-separated list of channel types to include, e.g., 'public_channel', 'private_channel', 'mpim', 'im'. (default: 'public_channel') -- **exclude_archived_channels** (`boolean`, optional) Set to true to exclude archived channels from the list of Slack channels. Default is false. - - -## SlackApi.ListSharedChannelInvites - -
- - -Retrieve unapproved shared channel invites from Slack. - -**Parameters** - -- **workspace_team_id** (`string`, optional) The encoded team ID for the workspace to retrieve invites from. Required when using an organization token. -- **maximum_invites_to_return** (`integer`, optional) Specify the maximum number of unapproved shared channel invites to retrieve. (default: '100') -- **pagination_cursor** (`string`, optional) The cursor for paginating through results, obtained from a previous call's next_cursor. - - -## SlackApi.SetSlackChannelReadCursor - -
- - -Update the read cursor in a Slack channel. - -**Parameters** - -- **channel_id** (`string`, required) The ID of the Slack channel or conversation where you want to set the read cursor. This should be a valid Slack channel ID. -- **timestamp_of_message_to_mark_as_read** (`string`, required) The unique identifier (timestamp) of the message you want to mark as most recently seen in the conversation. - - -## SlackApi.GetSlackConversationMembers - -
- - -Retrieve members from a specified Slack conversation. - -**Parameters** - -- **conversation_id** (`string`, required) The ID of the Slack conversation to retrieve members from. This can be a channel, group, or direct message. -- **pagination_cursor** (`string`, optional) Cursor for pagination, set to the `next_cursor` value from a previous response to continue retrieving members from a conversation. -- **max_items_to_return** (`integer`, optional) The maximum number of conversation members to return. Recommended to specify a value under 1000, with no more than 200 results at a time for optimal pagination. (default: '100') - - -## SlackApi.OpenOrResumeSlackConversation - -
- - -Open or resume a direct or multi-person message in Slack. - -**Parameters** - -- **conversation_channel_id** (`string`, optional) The ID of an existing direct or multi-person message channel to resume. Alternatively, provide the `users` field to start a new conversation. -- **target_user_ids** (`string`, optional) A comma-separated list of user IDs to open or resume a conversation. Provide 1 to 8 IDs. Supplying 1 ID opens a 1:1 DM, while more than 1 ID opens a multi-person DM. Do not include the caller's ID. -- **return_full_im_channel_definition** (`boolean`, optional) Set to true to receive the entire IM channel definition; false returns only the conversation ID. -- **prevent_creation** (`boolean`, optional) If true, does not create a new conversation and instead checks for an existing DM or MPDM. - - -## SlackApi.GetSlackThreadMessages - -
- - -Retrieve messages from a Slack conversation thread. - -**Parameters** - -- **conversation_id** (`string`, required) The ID of the Slack conversation from which to fetch the message thread. -- **thread_message_timestamp** (`string`, required) Unique identifier of a parent message or a thread message (timestamp). Fetches the thread or the single message. -- **pagination_cursor** (`string`, optional) Cursor for pagination. Use the `next_cursor` from a previous response to fetch the next page of data. -- **latest_message_timestamp** (`string`, optional) Only include messages posted before this Unix timestamp in the results. (default: 'now') -- **maximum_items_to_return** (`integer`, optional) Specify the maximum number of messages to fetch. The default and maximum are 15 for certain apps, with possible rate limits. (default: '1000') -- **start_time_unix_timestamp** (`string`, optional) Only include messages after this Unix timestamp in results. (default: '0') -- **include_all_message_metadata** (`boolean`, optional) Set to true to return all metadata associated with this message. -- **include_boundary_timestamps** (`boolean`, optional) Include messages with 'oldest' or 'latest' timestamps. Ignored unless either timestamp is specified. - - -## SlackApi.DenySharedInviteRequest - -
- - -Denies an external user invitation to a Slack channel. - -**Parameters** - -- **shared_channel_invite_id** (`string`, required) The ID for the shared channel invite request that you intend to deny. This is required for specifying which invite to decline. -- **deny_invite_message** (`string`, optional) An optional message explaining why the invitation was denied. This message will be sent to the requester. - - -## SlackApi.ListCustomEmojiForTeam - -
- - -Retrieve a list of custom emojis for a specific team. - -**Parameters** - -- **include_emoji_categories** (`boolean`, optional) Set to true to include categories for Unicode emojis in the response. - - -## SlackApi.GetExternalFileUploadUrl - -
- - -Retrieve a URL to upload an external file to Slack. - -**Parameters** - -- **file_size_in_bytes** (`integer`, required) Specify the size of the file to be uploaded, measured in bytes. Ensure this value accurately reflects the file size. -- **file_name** (`string`, required) The name of the file to be uploaded to Slack. -- **snippet_syntax_type** (`string`, optional) Specify the syntax highlighting type for the snippet being uploaded, such as 'javascript', 'python', etc. -- **alt_text_description** (`string`, optional) A description of the image for screen-readers, limited to 1000 characters. - - -## SlackApi.GetRemoteFileInfoSlack - -
- - -Retrieve details about a remote file from Slack. - -**Parameters** - -- **file_external_identifier** (`string`, optional) The GUID defined by the creator for the remote file to retrieve its information. -- **file_id** (`string`, optional) The unique identifier of the file to retrieve information about. Use this to specify the file in Slack. - - -## SlackApi.GetSlackRemoteFilesInfo - -
- - -Retrieve information about remote files added to Slack. - -**Parameters** - -- **filter_by_channel_id** (`string`, optional) Filter remote files to only include those appearing in the specified Slack channel, indicated by its channel ID. -- **pagination_cursor** (`string`, optional) A cursor for paginating through data. Use the `next_cursor` from a prior request to fetch the next set of results. Defaults to the first page if not set. -- **maximum_items_to_return** (`integer`, optional) Specify the maximum number of remote file records to retrieve from Slack. -- **filter_files_from_timestamp** (`string`, optional) Filter files created after this inclusive timestamp. Use a Unix timestamp format. (default: '0') -- **timestamp_filter_end** (`string`, optional) Filter files created before this timestamp (inclusive) in Unix epoch time format. (default: 'now') - - -## SlackApi.ShareRemoteFileInChannel - -
- - -Share a remote file into a Slack channel. - -**Parameters** - -- **target_channel_ids** (`string`, required) Comma-separated list of Slack channel IDs where the remote file will be shared. Ensure IDs are valid and the user has permission to share files in these channels. -- **file_external_identifier** (`string`, optional) The globally unique identifier (GUID) for the file set by the app when registering with Slack. Required if 'file' is not provided. -- **file_id** (`string`, optional) The ID of a file registered with Slack to be shared. Required if `external_id` is not provided. - - -## SlackApi.EnableSlackFileSharing - -
- - -Enable a Slack file for public sharing. - -**Parameters** - -- **file_id_to_share** (`string`, required) The ID of the file on Slack that you want to enable for public sharing. - - -## SlackApi.PinItemToSlackChannel - -
- - -Pin an item to a Slack channel. - -**Parameters** - -- **channel_id** (`string`, required) The ID of the Slack channel where the message will be pinned. A `timestamp` must also be provided. -- **message_timestamp** (`string`, optional) The timestamp (`ts`) of the message to pin in the Slack channel. Ensure the channel is also specified. - - -## SlackApi.ListPinnedItems - -
- - -Retrieve items pinned to a Slack channel. - -**Parameters** - -- **channel_id** (`string`, required) The ID of the Slack channel to retrieve pinned items from. This is required to specify which channel's pinned items will be listed. - - -## SlackApi.AddSlackReaction - -
- - -Add a reaction to a Slack item. - -**Parameters** - -- **slack_channel_id** (`string`, required) ID of the channel where the message is posted. Use to specify the location for adding a reaction. -- **reaction_emoji_name** (`string`, required) The name of the emoji to be used as a reaction. Include skin tone modifiers if applicable (e.g., 'thumbsup::skin-tone-2'). -- **message_timestamp** (`string`, required) The timestamp of the message to which the reaction will be added. Ensure the format matches the Slack API requirements. - - -## SlackApi.RemoveReactionFromItem - -
- - -Remove a reaction from a Slack item. - -**Parameters** - -- **reaction_emoji_name** (`string`, required) The name of the emoji reaction to be removed, such as 'smile' or 'thumbsup'. -- **target_file_id** (`string`, optional) The identifier of the file from which to remove the reaction. Specify either this, `target_file_comment_id`, or both `target_channel_id` and `target_message_timestamp`. -- **file_comment_id** (`string`, optional) The ID of the file comment from which you want to remove the reaction. Provide this if the reaction is on a file comment. -- **message_channel_id** (`string`, optional) Channel ID where the message to remove the reaction from was posted. Required if removing a reaction from a message. Use in combination with 'message_timestamp'. -- **message_timestamp** (`string`, optional) The exact timestamp of the message from which to remove the reaction. Specify when targeting a message. - - -## SlackApi.SearchFilesInSlack - -
- - -Search for files in Slack using a query. - -**Parameters** - -- **search_query** (`string`, required) The text string to search for in Slack files. Use keywords or phrases to narrow down results. -- **items_per_page** (`integer`, optional) The number of file results to return per page. Maximum allowed value is 100. (default: '20') -- **results_page_number** (`integer`, optional) The specific page number of results to retrieve, with a maximum value of 100. (default: '1') -- **sort_files_by** (`string`, optional) Specify how to sort the search results: either by 'score' or 'timestamp'. (default: 'score') -- **sort_direction** (`string`, optional) Change the sort direction for search results to ascending ('asc') or descending ('desc'). (default: 'desc') -- **encoded_team_id** (`string`, optional) Encoded team ID to specify the search domain when using an org-level token. Ignored with a workspace-level token. -- **enable_query_highlight** (`boolean`, optional) Set to true to enable highlight markers for matching query terms in the search results. - - -## SlackApi.SearchSlackMessages - -
- - -Search Slack messages based on a query. - -**Parameters** - -- **search_query** (`string`, required) The text to search for in Slack messages. Use keywords or phrases to narrow down results. -- **results_per_page** (`integer`, optional) The number of search results to return per page, with a maximum limit of 100. (default: '20') -- **page_number** (`integer`, optional) The page number of search results to retrieve, maximum value of 100. (default: '1') -- **pagination_cursor** (`string`, optional) Use '*' for the first call to start pagination or provide the 'next_cursor' value from previous results to continue. -- **sort_results_by** (`string`, optional) Specify the criterion for sorting the search results, either by 'score' for relevance or 'timestamp' for chronological order. (default: 'score') -- **sort_direction** (`string`, optional) Specify the order for sorting results: use 'asc' for ascending or 'desc' for descending. (default: 'desc') -- **team_id** (`string`, optional) The encoded team ID to search within. Required only if an organization-level token is used. Ignored for workspace-level tokens. -- **enable_query_highlighting** (`boolean`, optional) Set to true to enable query highlight markers, marking matching terms in the results. - - -## SlackApi.GetTeamBillableUsersInfo - -
- - -Retrieves billable users info for the current Slack team. - -**Parameters** - -- **pagination_cursor** (`string`, optional) Cursor for pagination. Use the `next_cursor` from the previous response to fetch the next page of users. (default: 'fetches the first page') -- **maximum_items_to_return** (`integer`, optional) Specifies the maximum number of billable user entries to be retrieved. -- **specific_user_id** (`string`, optional) The ID of a specific user to retrieve billable information for. Leave empty to retrieve info for all users. -- **encoded_team_id** (`string`, optional) Encoded team ID for retrieving billable info, required if using an org token. Ignored with workspace-level tokens. - - -## SlackApi.GetCurrentSlackTeamInfo - -
- - -Retrieve information about the current Slack team. - -**Parameters** - -- **query_by_domain** (`string`, optional) Comma-separated domains to query instead of a team, used when the team is not specified. This only works for domains in the same enterprise as the querying team token. -- **specific_team_id** (`string`, optional) The ID of the Slack team to retrieve information about. If omitted, information about the current team will be returned. - - -## SlackApi.GetIntegrationLogs - -
- - -Retrieve integration logs for the current Slack team. - -**Parameters** - -- **filter_by_app_id** (`string`, optional) Filter integration logs to a specific Slack app. If not provided, logs for all apps are retrieved. -- **filter_by_change_type** (`string`, optional) Specify the change type to filter logs. Options: 'added', 'removed', 'enabled', 'disabled', 'updated'. Defaults to all logs. -- **result_count** (`string`, optional) The number of log entries to retrieve. Specify the maximum number of logs to return in a single request. (default: '100') -- **result_page_number** (`string`, optional) The specific page number of the integration logs to retrieve. Used for pagination. (default: '1') -- **filter_by_service_id** (`string`, optional) Specify the service ID to filter integration logs related to a specific service. If not provided, logs for all services will be retrieved. -- **encoded_team_id** (`string`, optional) The encoded team ID to get logs from, required if using an org-level token. Ignored if using a workspace-level token. -- **filter_by_user** (`string`, optional) Filter logs generated by a specific user's actions. Defaults to all logs if not specified. - - -## SlackApi.GetSlackTeamPreferences - -
- - -Retrieve a list of a workspace's team preferences. - -**Parameters** - -This tool does not take any parameters. - -## SlackApi.GetTeamProfile - -
- - -Retrieve a team's profile information from Slack. - -**Parameters** - -- **visibility_filter** (`string`, optional) Filter the profile fields based on visibility. Options: 'all', 'visible', 'hidden'. Default is 'all'. - - -## SlackApi.CreateSlackUserGroup - -
- - -Creates a new user group in Slack. - -**Parameters** - -- **user_group_name** (`string`, required) A unique name for the user group to be created, distinguishing it from other user groups. -- **default_channel_ids** (`array[string]`, optional) A list of channel IDs to set as default for the User Group. Use comma-separated values. -- **custom_additional_channels** (`array[string]`, optional) Comma-separated encoded channel IDs where the User Group can add members. -- **user_group_description** (`string`, optional) A brief text describing the purpose or role of the user group in Slack. -- **unique_mention_handle** (`string`, optional) A unique mention handle for the user group. It must not duplicate existing handles of channels, users, or other user groups. -- **team_id_for_user_group_creation** (`string`, optional) Encoded team ID for the user group creation, required if using an org-level token. -- **include_user_count** (`boolean`, optional) Set to true to include the number of users in each User Group. -- **enable_display_as_sidebar_section** (`boolean`, optional) Set to true to display the user group as a sidebar section for all group members if the group has one or more default channels. - - -## SlackApi.DisableUserGroup - -
- - -Disable an existing Slack User Group. - -**Parameters** - -- **user_group_id** (`string`, required) The encoded ID of the User Group to be disabled. -- **team_id** (`string`, optional) Encoded target team ID where the user group exists. Required only if using an org-level token; ignored for workspace-level tokens. -- **include_user_count** (`boolean`, optional) Include the number of users in the User Group. Set to true to include the count. - - -## SlackApi.EnableSlackUserGroup - -
- - -Enable a user group in Slack. - -**Parameters** - -- **user_group_id** (`string`, required) The encoded ID of the User Group to be enabled in Slack. -- **team_id** (`string`, optional) Provide the encoded team ID where the user group is located. Only required if using an org-level token. Ignored with workspace-level tokens. -- **include_user_count** (`boolean`, optional) Set to true to include the number of users in the User Group. - - -## SlackApi.ListSlackUserGroups - -
- - -Retrieve all user groups for a Slack team. - -**Parameters** - -- **team_id_for_org_token** (`string`, optional) Encoded team ID required when using an org-level token. Ignored if using a workspace-level token. -- **include_user_count** (`boolean`, optional) Set to true to include the number of users in each User Group. -- **include_disabled_groups** (`boolean`, optional) Set to true to include disabled user groups in the results. -- **include_users_in_group** (`boolean`, optional) Include the list of users for each User Group in the response. - - -## SlackApi.UpdateSlackUserGroup - -
- - -Update an existing User Group in Slack. - -**Parameters** - -- **user_group_id** (`string`, required) The encoded ID of the User Group to update in Slack. -- **default_channel_ids** (`array[string]`, optional) A comma-separated list of channel IDs where the User Group is set as default. Use encoded channel IDs. -- **additional_channel_ids** (`array[string]`, optional) Comma separated encoded channel IDs for custom additions to user group members. -- **user_group_description** (`string`, optional) A short description of the User Group to update in Slack. This should clearly define the group's purpose or role. -- **user_group_handle** (`string`, optional) Unique mention handle for the User Group, distinct from all channels, users, and other User Groups. -- **user_group_name** (`string`, optional) A unique name for the User Group to update. Ensure it does not duplicate any existing User Group names. -- **team_id_for_org_token** (`string`, optional) Encoded team ID where the user group exists, required for org-level tokens. Ignored if using a workspace-level token. -- **include_user_count** (`boolean`, optional) Set to true to include the number of users in the User Group. -- **enable_sidebar_section** (`boolean`, optional) Set to true to configure the user group to appear as a sidebar section for all group members. Only relevant if the group has 1 or more default channels. - - -## SlackApi.UpdateSlackUsergroupUsers - -
- - -Update the list of users in a Slack user group. - -**Parameters** - -- **user_group_id** (`string`, required) The encoded ID of the Slack user group to update. -- **user_ids_list** (`array[string]`, required) A comma separated string of encoded Slack user IDs representing the complete user list for the group. This replaces all current members. -- **team_id_for_org_token** (`string`, optional) Encoded team ID where the user group exists. Required if using an organization token; ignored with workspace-level token. -- **update_additional_channels** (`array[string]`, optional) Encoded channel IDs to add user group members to, separated by commas. These represent additional channels for custom user group member additions. -- **include_user_count** (`boolean`, optional) Set to true to include the number of users in the user group in the response. -- **is_shared_section** (`boolean`, optional) Indicates if the API call involves a shared section. Set to true if it does, otherwise false. - - -## SlackApi.ListAccessibleSlackConversations - -
- - -Retrieve a list of conversations the user can access on Slack. - -**Parameters** - -- **pagination_cursor** (`string`, optional) A cursor for pagination to continue listing conversations from a specific point. Use the 'next_cursor' from a previous response. Default is the first page. -- **maximum_items_to_return** (`integer`, optional) The maximum number of conversations to return in the response. Must be an integer with a maximum value of 999. It is recommended to request no more than 200 results at a time for optimal performance. (default: '100') -- **slack_team_id** (`string`, optional) The encoded ID of the Slack team to list conversations for. Required if using an organization-level token. Ignored if a workspace-level token is used. -- **channel_types** (`string`, optional) Comma-separated list of channel types to filter conversations. Options: public_channel, private_channel, mpim, im. (default: 'public_channel') -- **specific_user_id** (`string`, optional) Filter conversations by a specific user ID's membership. Only includes conversations shared with the calling user. -- **exclude_archived_channels** (`boolean`, optional) Set to true to exclude archived channels from the retrieved list of Slack conversations. (default: false) - - -## SlackApi.CheckSlackDiscoverability - -
- - -Check if an email is discoverable on Slack. - -**Parameters** - -- **email_to_check** (`string`, required) The email address to verify if it is associated with a discoverable Slack user. - - -## SlackApi.GetSlackUserPresence - -
- - -Retrieve user presence information from Slack. - -**Parameters** - -- **target_user_id** (`string`, optional) The Slack user ID for which you want to retrieve presence information. (default: 'authed user') - - -## SlackApi.GetUserIdentity - -
- - -Retrieve a user's identity information from Slack. - -**Parameters** - -This tool does not take any parameters. - -## SlackApi.ListSlackTeamUsers - -
- - -Fetches a list of all users in a Slack team. - -**Parameters** - -- **pagination_cursor** (`string`, optional) Cursor for paginating through data. Use the `next_cursor` from a previous response to continue. -- **maximum_items_to_return** (`integer`, optional) Maximum number of users to return (recommended max is 200 for pagination). -- **slack_team_id** (`string`, optional) The encoded team ID to list users from, necessary if an organization-level token is used. Ignored if a workspace-level token is provided. -- **include_user_locale** (`boolean`, optional) Set to true to receive locale information for each user. Default is false. - - -## SlackApi.FindSlackUserByEmail - -
- - -Find a Slack user using their email address. - -**Parameters** - -- **user_email_address** (`string`, required) The email address of the user in the Slack workspace to search for. - - -## SlackApi.GetSlackUserProfile - -
- - -Retrieve Slack user profile information and custom status. - -**Parameters** - -- **target_user_id** (`string`, optional) The unique identifier of the Slack user whose profile information is to be retrieved. -- **include_labels** (`boolean`, optional) Include labels for each ID in custom profile fields. This option can heavily rate-limit requests and is not recommended. Default is false. - - -## SlackApi.SetSlackProfilePhoto - -
- - -Set the user's profile photo on Slack. - -**Parameters** - -- **crop_box_size** (`string`, optional) The size of the square crop box for the profile photo in pixels. Specify the width and height, which are the same value for a square. -- **crop_box_x_coordinate** (`string`, optional) X coordinate of the top-left corner of the crop box for the profile photo. -- **crop_y_coordinate** (`string`, optional) Y coordinate of the top-left corner of the crop box for the user's profile photo on Slack. This determines where the cropping of the image will start on the vertical axis. -- **profile_photo_image** (`string`, optional) The image file to set as the Slack profile photo. Provide image data directly with the correct content type (e.g., image/jpeg, image/png). - - - - - diff --git a/next-env.d.ts b/next-env.d.ts index 830fb594c..36a4fe488 100644 --- a/next-env.d.ts +++ b/next-env.d.ts @@ -1,5 +1,6 @@ /// /// +/// /// // NOTE: This file should not be edited diff --git a/public/examples/integrations/toolkits/box_api/abort_upload_session_example_call_tool.js b/public/examples/integrations/toolkits/box_api/abort_upload_session_example_call_tool.js new file mode 100644 index 000000000..27bc2d1d7 --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/abort_upload_session_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 = "BoxApi.AbortUploadSession"; + +// 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 = { + "upload_session_id": "sess_9a7b3f2c" +}; + +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/toolkits/box_api/abort_upload_session_example_call_tool.py b/public/examples/integrations/toolkits/box_api/abort_upload_session_example_call_tool.py new file mode 100644 index 000000000..795decdf7 --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/abort_upload_session_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 = "BoxApi.AbortUploadSession" + +auth_response = client.tools.authorize( + tool_name=TOOL_NAME, + user_id=TOOL_NAME +) + +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 = { + 'upload_session_id': 'sess_9a7b3f2c' +} + +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/toolkits/box_api/cancel_sign_request_example_call_tool.js b/public/examples/integrations/toolkits/box_api/cancel_sign_request_example_call_tool.js new file mode 100644 index 000000000..2f9994a37 --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/cancel_sign_request_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 = "BoxApi.CancelSignRequest"; + +// 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 = { + "sign_request_id": "sr_12345abcde" +}; + +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/toolkits/box_api/cancel_sign_request_example_call_tool.py b/public/examples/integrations/toolkits/box_api/cancel_sign_request_example_call_tool.py new file mode 100644 index 000000000..c7460d52e --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/cancel_sign_request_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 = "BoxApi.CancelSignRequest" + +auth_response = client.tools.authorize( + tool_name=TOOL_NAME, + user_id=TOOL_NAME +) + +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 = { + 'sign_request_id': 'sr_12345abcde' +} + +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/toolkits/box_api/check_user_invite_status_example_call_tool.js b/public/examples/integrations/toolkits/box_api/check_user_invite_status_example_call_tool.js new file mode 100644 index 000000000..617189c08 --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/check_user_invite_status_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 = "BoxApi.CheckUserInviteStatus"; + +// 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 = { + "invite_id": "inv_8a3f2b", + "included_attributes": [ + "email", + "sent_at" + ] +}; + +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/toolkits/box_api/check_user_invite_status_example_call_tool.py b/public/examples/integrations/toolkits/box_api/check_user_invite_status_example_call_tool.py new file mode 100644 index 000000000..8b0bad13a --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/check_user_invite_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 = "BoxApi.CheckUserInviteStatus" + +auth_response = client.tools.authorize( + tool_name=TOOL_NAME, + user_id=TOOL_NAME +) + +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 = { + 'invite_id': 'inv_8a3f2b', 'included_attributes': ['email', 'sent_at'] +} + +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/toolkits/box_api/check_zip_download_status_example_call_tool.js b/public/examples/integrations/toolkits/box_api/check_zip_download_status_example_call_tool.js new file mode 100644 index 000000000..c4b478259 --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/check_zip_download_status_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 = "BoxApi.CheckZipDownloadStatus"; + +// 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 = { + "zip_archive_unique_identifier": "zip_12345abcde_status" +}; + +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/toolkits/box_api/check_zip_download_status_example_call_tool.py b/public/examples/integrations/toolkits/box_api/check_zip_download_status_example_call_tool.py new file mode 100644 index 000000000..cc8cd43e3 --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/check_zip_download_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 = "BoxApi.CheckZipDownloadStatus" + +auth_response = client.tools.authorize( + tool_name=TOOL_NAME, + user_id=TOOL_NAME +) + +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 = { + 'zip_archive_unique_identifier': 'zip_12345abcde_status' +} + +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/toolkits/box_api/delete_ai_agent_example_call_tool.js b/public/examples/integrations/toolkits/box_api/delete_ai_agent_example_call_tool.js new file mode 100644 index 000000000..5c69abaac --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/delete_ai_agent_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 = "BoxApi.DeleteAiAgent"; + +// 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 = { + "agent_id": "agent_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/toolkits/box_api/delete_ai_agent_example_call_tool.py b/public/examples/integrations/toolkits/box_api/delete_ai_agent_example_call_tool.py new file mode 100644 index 000000000..5216e4ccb --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/delete_ai_agent_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 = "BoxApi.DeleteAiAgent" + +auth_response = client.tools.authorize( + tool_name=TOOL_NAME, + user_id=TOOL_NAME +) + +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 = { + 'agent_id': 'agent_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/toolkits/box_api/delete_archive_example_call_tool.js b/public/examples/integrations/toolkits/box_api/delete_archive_example_call_tool.js new file mode 100644 index 000000000..b7e971bfe --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/delete_archive_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 = "BoxApi.DeleteArchive"; + +// 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 = { + "archive_id": "arch_12345_deleted" +}; + +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/toolkits/box_api/delete_archive_example_call_tool.py b/public/examples/integrations/toolkits/box_api/delete_archive_example_call_tool.py new file mode 100644 index 000000000..0e5ce41ad --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/delete_archive_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 = "BoxApi.DeleteArchive" + +auth_response = client.tools.authorize( + tool_name=TOOL_NAME, + user_id=TOOL_NAME +) + +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 = { + 'archive_id': 'arch_12345_deleted' +} + +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/toolkits/box_api/delete_box_file_version_example_call_tool.js b/public/examples/integrations/toolkits/box_api/delete_box_file_version_example_call_tool.js new file mode 100644 index 000000000..ec52ffaae --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/delete_box_file_version_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 = "BoxApi.DeleteBoxFileVersion"; + +// 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 = { + "file_identifier": "123456789", + "file_version_id": "987654321", + "if_match_etag_value": "\"3a7f9b2c\"" +}; + +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/toolkits/box_api/delete_box_file_version_example_call_tool.py b/public/examples/integrations/toolkits/box_api/delete_box_file_version_example_call_tool.py new file mode 100644 index 000000000..6b39bfda7 --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/delete_box_file_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 = "BoxApi.DeleteBoxFileVersion" + +auth_response = client.tools.authorize( + tool_name=TOOL_NAME, + user_id=TOOL_NAME +) + +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 = { + 'file_identifier': '123456789', + 'file_version_id': '987654321', + 'if_match_etag_value': '"3a7f9b2c"' +} + +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/toolkits/box_api/delete_box_hub_collaboration_example_call_tool.js b/public/examples/integrations/toolkits/box_api/delete_box_hub_collaboration_example_call_tool.js new file mode 100644 index 000000000..0d389be05 --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/delete_box_hub_collaboration_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 = "BoxApi.DeleteBoxHubCollaboration"; + +// 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 = { + "hub_collaboration_identifier": "1234567890" +}; + +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/toolkits/box_api/delete_box_hub_collaboration_example_call_tool.py b/public/examples/integrations/toolkits/box_api/delete_box_hub_collaboration_example_call_tool.py new file mode 100644 index 000000000..6229a08fa --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/delete_box_hub_collaboration_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 = "BoxApi.DeleteBoxHubCollaboration" + +auth_response = client.tools.authorize( + tool_name=TOOL_NAME, + user_id=TOOL_NAME +) + +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 = { + 'hub_collaboration_identifier': '1234567890' +} + +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/toolkits/box_api/delete_box_hub_example_call_tool.js b/public/examples/integrations/toolkits/box_api/delete_box_hub_example_call_tool.js new file mode 100644 index 000000000..06917eb14 --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/delete_box_hub_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 = "BoxApi.DeleteBoxHub"; + +// 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 = { + "box_hub_unique_id": "1234567890abcdef" +}; + +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/toolkits/box_api/delete_box_hub_example_call_tool.py b/public/examples/integrations/toolkits/box_api/delete_box_hub_example_call_tool.py new file mode 100644 index 000000000..6912f5205 --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/delete_box_hub_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 = "BoxApi.DeleteBoxHub" + +auth_response = client.tools.authorize( + tool_name=TOOL_NAME, + user_id=TOOL_NAME +) + +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 = { + 'box_hub_unique_id': '1234567890abcdef' +} + +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/toolkits/box_api/delete_collaboration_example_call_tool.js b/public/examples/integrations/toolkits/box_api/delete_collaboration_example_call_tool.js new file mode 100644 index 000000000..b62316c82 --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/delete_collaboration_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 = "BoxApi.DeleteCollaboration"; + +// 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 = { + "collaboration_id_to_delete": "colab_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/toolkits/box_api/delete_collaboration_example_call_tool.py b/public/examples/integrations/toolkits/box_api/delete_collaboration_example_call_tool.py new file mode 100644 index 000000000..9935ef724 --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/delete_collaboration_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 = "BoxApi.DeleteCollaboration" + +auth_response = client.tools.authorize( + tool_name=TOOL_NAME, + user_id=TOOL_NAME +) + +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 = { + 'collaboration_id_to_delete': 'colab_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/toolkits/box_api/delete_comment_example_call_tool.js b/public/examples/integrations/toolkits/box_api/delete_comment_example_call_tool.js new file mode 100644 index 000000000..1f7276b44 --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/delete_comment_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 = "BoxApi.DeleteComment"; + +// 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 = { + "comment_id": "cmt_789b12f4" +}; + +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/toolkits/box_api/delete_comment_example_call_tool.py b/public/examples/integrations/toolkits/box_api/delete_comment_example_call_tool.py new file mode 100644 index 000000000..e720b3545 --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/delete_comment_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 = "BoxApi.DeleteComment" + +auth_response = client.tools.authorize( + tool_name=TOOL_NAME, + user_id=TOOL_NAME +) + +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 = { + 'comment_id': 'cmt_789b12f4' +} + +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/toolkits/box_api/delete_device_pin_example_call_tool.js b/public/examples/integrations/toolkits/box_api/delete_device_pin_example_call_tool.js new file mode 100644 index 000000000..767742293 --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/delete_device_pin_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 = "BoxApi.DeleteDevicePin"; + +// 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 = { + "device_pin_id": "pin_9a8b7c6d" +}; + +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/toolkits/box_api/delete_device_pin_example_call_tool.py b/public/examples/integrations/toolkits/box_api/delete_device_pin_example_call_tool.py new file mode 100644 index 000000000..3f687fbbc --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/delete_device_pin_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 = "BoxApi.DeleteDevicePin" + +auth_response = client.tools.authorize( + tool_name=TOOL_NAME, + user_id=TOOL_NAME +) + +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 = { + 'device_pin_id': 'pin_9a8b7c6d' +} + +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/toolkits/box_api/delete_file_from_box_example_call_tool.js b/public/examples/integrations/toolkits/box_api/delete_file_from_box_example_call_tool.js new file mode 100644 index 000000000..6a988a8e4 --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/delete_file_from_box_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 = "BoxApi.DeleteFileFromBox"; + +// 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 = { + "file_identifier": "1234567890", + "ensure_no_recent_changes_etag": "0a1b2c3d4e" +}; + +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/toolkits/box_api/delete_file_from_box_example_call_tool.py b/public/examples/integrations/toolkits/box_api/delete_file_from_box_example_call_tool.py new file mode 100644 index 000000000..69b4c82b6 --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/delete_file_from_box_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 = "BoxApi.DeleteFileFromBox" + +auth_response = client.tools.authorize( + tool_name=TOOL_NAME, + user_id=TOOL_NAME +) + +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 = { + 'file_identifier': '1234567890', 'ensure_no_recent_changes_etag': '0a1b2c3d4e' +} + +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/toolkits/box_api/delete_file_metadata_example_call_tool.js b/public/examples/integrations/toolkits/box_api/delete_file_metadata_example_call_tool.js new file mode 100644 index 000000000..a4c64cb47 --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/delete_file_metadata_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 = "BoxApi.DeleteFileMetadata"; + +// 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 = { + "file_identifier": "12345", + "metadata_scope": "enterprise", + "metadata_template_name": "project_info" +}; + +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/toolkits/box_api/delete_file_metadata_example_call_tool.py b/public/examples/integrations/toolkits/box_api/delete_file_metadata_example_call_tool.py new file mode 100644 index 000000000..8f2f82ad4 --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/delete_file_metadata_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 = "BoxApi.DeleteFileMetadata" + +auth_response = client.tools.authorize( + tool_name=TOOL_NAME, + user_id=TOOL_NAME +) + +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 = { + 'file_identifier': '12345', + 'metadata_scope': 'enterprise', + 'metadata_template_name': 'project_info' +} + +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/toolkits/box_api/delete_file_request_example_call_tool.js b/public/examples/integrations/toolkits/box_api/delete_file_request_example_call_tool.js new file mode 100644 index 000000000..6a0a1a967 --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/delete_file_request_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 = "BoxApi.DeleteFileRequest"; + +// 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 = { + "file_request_identifier": "frq_12345abcde" +}; + +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/toolkits/box_api/delete_file_request_example_call_tool.py b/public/examples/integrations/toolkits/box_api/delete_file_request_example_call_tool.py new file mode 100644 index 000000000..ef9391adf --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/delete_file_request_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 = "BoxApi.DeleteFileRequest" + +auth_response = client.tools.authorize( + tool_name=TOOL_NAME, + user_id=TOOL_NAME +) + +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 = { + 'file_request_identifier': 'frq_12345abcde' +} + +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/toolkits/box_api/delete_folder_example_call_tool.js b/public/examples/integrations/toolkits/box_api/delete_folder_example_call_tool.js new file mode 100644 index 000000000..ddf7ff192 --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/delete_folder_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 = "BoxApi.DeleteFolder"; + +// 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 = { + "folder_identifier": "1234567890", + "ensure_unchanged_etag": "0abc123etag", + "delete_recursively": 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/toolkits/box_api/delete_folder_example_call_tool.py b/public/examples/integrations/toolkits/box_api/delete_folder_example_call_tool.py new file mode 100644 index 000000000..773d96f66 --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/delete_folder_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 = "BoxApi.DeleteFolder" + +auth_response = client.tools.authorize( + tool_name=TOOL_NAME, + user_id=TOOL_NAME +) + +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 = { + 'folder_identifier': '1234567890', + 'ensure_unchanged_etag': '0abc123etag', + 'delete_recursively': 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/toolkits/box_api/delete_folder_lock_example_call_tool.js b/public/examples/integrations/toolkits/box_api/delete_folder_lock_example_call_tool.js new file mode 100644 index 000000000..6395f7785 --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/delete_folder_lock_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 = "BoxApi.DeleteFolderLock"; + +// 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 = { + "folder_lock_identifier": "lock_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/toolkits/box_api/delete_folder_lock_example_call_tool.py b/public/examples/integrations/toolkits/box_api/delete_folder_lock_example_call_tool.py new file mode 100644 index 000000000..38c31916b --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/delete_folder_lock_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 = "BoxApi.DeleteFolderLock" + +auth_response = client.tools.authorize( + tool_name=TOOL_NAME, + user_id=TOOL_NAME +) + +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 = { + 'folder_lock_identifier': 'lock_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/toolkits/box_api/delete_folder_metadata_example_call_tool.js b/public/examples/integrations/toolkits/box_api/delete_folder_metadata_example_call_tool.js new file mode 100644 index 000000000..c81d3300c --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/delete_folder_metadata_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 = "BoxApi.DeleteFolderMetadata"; + +// 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 = { + "folder_identifier": "1234567890", + "metadata_template_scope": "enterprise", + "metadata_template_name": "projectDetails" +}; + +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/toolkits/box_api/delete_folder_metadata_example_call_tool.py b/public/examples/integrations/toolkits/box_api/delete_folder_metadata_example_call_tool.py new file mode 100644 index 000000000..15c0ec97c --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/delete_folder_metadata_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 = "BoxApi.DeleteFolderMetadata" + +auth_response = client.tools.authorize( + tool_name=TOOL_NAME, + user_id=TOOL_NAME +) + +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 = { + 'folder_identifier': '1234567890', + 'metadata_template_scope': 'enterprise', + 'metadata_template_name': 'projectDetails' +} + +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/toolkits/box_api/delete_group_example_call_tool.js b/public/examples/integrations/toolkits/box_api/delete_group_example_call_tool.js new file mode 100644 index 000000000..0335fc3da --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/delete_group_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 = "BoxApi.DeleteGroup"; + +// 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 = { + "group_id": "grp_8f3a1b2c" +}; + +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/toolkits/box_api/delete_group_example_call_tool.py b/public/examples/integrations/toolkits/box_api/delete_group_example_call_tool.py new file mode 100644 index 000000000..88ebeb47d --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/delete_group_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 = "BoxApi.DeleteGroup" + +auth_response = client.tools.authorize( + tool_name=TOOL_NAME, + user_id=TOOL_NAME +) + +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 = { + 'group_id': 'grp_8f3a1b2c' +} + +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/toolkits/box_api/delete_group_membership_example_call_tool.js b/public/examples/integrations/toolkits/box_api/delete_group_membership_example_call_tool.js new file mode 100644 index 000000000..81edab6e3 --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/delete_group_membership_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 = "BoxApi.DeleteGroupMembership"; + +// 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 = { + "group_membership_id": "gm_12345abcde" +}; + +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/toolkits/box_api/delete_group_membership_example_call_tool.py b/public/examples/integrations/toolkits/box_api/delete_group_membership_example_call_tool.py new file mode 100644 index 000000000..361204ee0 --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/delete_group_membership_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 = "BoxApi.DeleteGroupMembership" + +auth_response = client.tools.authorize( + tool_name=TOOL_NAME, + user_id=TOOL_NAME +) + +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 = { + 'group_membership_id': 'gm_12345abcde' +} + +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/toolkits/box_api/delete_legal_hold_policy_example_call_tool.js b/public/examples/integrations/toolkits/box_api/delete_legal_hold_policy_example_call_tool.js new file mode 100644 index 000000000..07fe0fc3c --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/delete_legal_hold_policy_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 = "BoxApi.DeleteLegalHoldPolicy"; + +// 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 = { + "legal_hold_policy_id": "lhp_8a7f3b2c" +}; + +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/toolkits/box_api/delete_legal_hold_policy_example_call_tool.py b/public/examples/integrations/toolkits/box_api/delete_legal_hold_policy_example_call_tool.py new file mode 100644 index 000000000..bd449beb7 --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/delete_legal_hold_policy_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 = "BoxApi.DeleteLegalHoldPolicy" + +auth_response = client.tools.authorize( + tool_name=TOOL_NAME, + user_id=TOOL_NAME +) + +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 = { + 'legal_hold_policy_id': 'lhp_8a7f3b2c' +} + +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/toolkits/box_api/delete_metadata_cascade_policy_example_call_tool.js b/public/examples/integrations/toolkits/box_api/delete_metadata_cascade_policy_example_call_tool.js new file mode 100644 index 000000000..c45240c0e --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/delete_metadata_cascade_policy_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 = "BoxApi.DeleteMetadataCascadePolicy"; + +// 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 = { + "metadata_cascade_policy_id": "mcsp_1234567890abcdef" +}; + +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/toolkits/box_api/delete_metadata_cascade_policy_example_call_tool.py b/public/examples/integrations/toolkits/box_api/delete_metadata_cascade_policy_example_call_tool.py new file mode 100644 index 000000000..0d16bb88f --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/delete_metadata_cascade_policy_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 = "BoxApi.DeleteMetadataCascadePolicy" + +auth_response = client.tools.authorize( + tool_name=TOOL_NAME, + user_id=TOOL_NAME +) + +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 = { + 'metadata_cascade_policy_id': 'mcsp_1234567890abcdef' +} + +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/toolkits/box_api/delete_metadata_template_example_call_tool.js b/public/examples/integrations/toolkits/box_api/delete_metadata_template_example_call_tool.js new file mode 100644 index 000000000..b1f9e2858 --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/delete_metadata_template_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 = "BoxApi.DeleteMetadataTemplate"; + +// 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 = { + "metadata_template_scope": "enterprise", + "metadata_template_name": "project_config_v2" +}; + +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/toolkits/box_api/delete_metadata_template_example_call_tool.py b/public/examples/integrations/toolkits/box_api/delete_metadata_template_example_call_tool.py new file mode 100644 index 000000000..ef57eda90 --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/delete_metadata_template_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 = "BoxApi.DeleteMetadataTemplate" + +auth_response = client.tools.authorize( + tool_name=TOOL_NAME, + user_id=TOOL_NAME +) + +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 = { + 'metadata_template_scope': 'enterprise', 'metadata_template_name': 'project_config_v2' +} + +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/toolkits/box_api/delete_retention_policy_example_call_tool.js b/public/examples/integrations/toolkits/box_api/delete_retention_policy_example_call_tool.js new file mode 100644 index 000000000..6c2b000a7 --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/delete_retention_policy_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 = "BoxApi.DeleteRetentionPolicy"; + +// 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 = { + "retention_policy_id": "rp_1234567890abcdef" +}; + +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/toolkits/box_api/delete_retention_policy_example_call_tool.py b/public/examples/integrations/toolkits/box_api/delete_retention_policy_example_call_tool.py new file mode 100644 index 000000000..2fc817940 --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/delete_retention_policy_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 = "BoxApi.DeleteRetentionPolicy" + +auth_response = client.tools.authorize( + tool_name=TOOL_NAME, + user_id=TOOL_NAME +) + +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 = { + 'retention_policy_id': 'rp_1234567890abcdef' +} + +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/toolkits/box_api/delete_shield_barrier_segment_restriction_example_call_tool.js b/public/examples/integrations/toolkits/box_api/delete_shield_barrier_segment_restriction_example_call_tool.js new file mode 100644 index 000000000..b41a60a76 --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/delete_shield_barrier_segment_restriction_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 = "BoxApi.DeleteShieldBarrierSegmentRestriction"; + +// 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 = { + "barrier_segment_restriction_id": "sbr_12345abcde" +}; + +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/toolkits/box_api/delete_shield_barrier_segment_restriction_example_call_tool.py b/public/examples/integrations/toolkits/box_api/delete_shield_barrier_segment_restriction_example_call_tool.py new file mode 100644 index 000000000..0c9343ffa --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/delete_shield_barrier_segment_restriction_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 = "BoxApi.DeleteShieldBarrierSegmentRestriction" + +auth_response = client.tools.authorize( + tool_name=TOOL_NAME, + user_id=TOOL_NAME +) + +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 = { + 'barrier_segment_restriction_id': 'sbr_12345abcde' +} + +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/toolkits/box_api/delete_shield_information_barrier_segment_example_call_tool.js b/public/examples/integrations/toolkits/box_api/delete_shield_information_barrier_segment_example_call_tool.js new file mode 100644 index 000000000..50ed62cf8 --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/delete_shield_information_barrier_segment_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 = "BoxApi.DeleteShieldInformationBarrierSegment"; + +// 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 = { + "shield_information_barrier_segment_id": "sibseg_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/toolkits/box_api/delete_shield_information_barrier_segment_example_call_tool.py b/public/examples/integrations/toolkits/box_api/delete_shield_information_barrier_segment_example_call_tool.py new file mode 100644 index 000000000..e210c7650 --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/delete_shield_information_barrier_segment_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 = "BoxApi.DeleteShieldInformationBarrierSegment" + +auth_response = client.tools.authorize( + tool_name=TOOL_NAME, + user_id=TOOL_NAME +) + +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 = { + 'shield_information_barrier_segment_id': 'sibseg_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/toolkits/box_api/delete_shield_list_by_id_example_call_tool.js b/public/examples/integrations/toolkits/box_api/delete_shield_list_by_id_example_call_tool.js new file mode 100644 index 000000000..49d69519d --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/delete_shield_list_by_id_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 = "BoxApi.DeleteShieldListById"; + +// 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 = { + "shield_list_id": "sl_9a8b7c6d" +}; + +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/toolkits/box_api/delete_shield_list_by_id_example_call_tool.py b/public/examples/integrations/toolkits/box_api/delete_shield_list_by_id_example_call_tool.py new file mode 100644 index 000000000..b1964ca60 --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/delete_shield_list_by_id_example_call_tool.py @@ -0,0 +1,29 @@ +import json +from arcadepy import Arcade + +client = Arcade() # Automatically finds the `ARCADE_API_KEY` env variable + +USER_ID = "{arcade_user_id}" +TOOL_NAME = "BoxApi.DeleteShieldListById" + +auth_response = client.tools.authorize( + tool_name=TOOL_NAME, + user_id=TOOL_NAME +) + +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 = { + 'shield_list_id': 'sl_9a8b7c6d' +} + +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/toolkits/box_api/delete_slack_integration_mapping_example_call_tool.js b/public/examples/integrations/toolkits/box_api/delete_slack_integration_mapping_example_call_tool.js new file mode 100644 index 000000000..49c7b05ae --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/delete_slack_integration_mapping_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 = "BoxApi.DeleteSlackIntegrationMapping"; + +// 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 = { + "slack_integration_mapping_id": "sim_1234567890" +}; + +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/toolkits/box_api/delete_slack_integration_mapping_example_call_tool.py b/public/examples/integrations/toolkits/box_api/delete_slack_integration_mapping_example_call_tool.py new file mode 100644 index 000000000..cd32e3c54 --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/delete_slack_integration_mapping_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 = "BoxApi.DeleteSlackIntegrationMapping" + +auth_response = client.tools.authorize( + tool_name=TOOL_NAME, + user_id=TOOL_NAME +) + +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 = { + 'slack_integration_mapping_id': 'sim_1234567890' +} + +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/toolkits/box_api/delete_storage_policy_assignment_example_call_tool.js b/public/examples/integrations/toolkits/box_api/delete_storage_policy_assignment_example_call_tool.js new file mode 100644 index 000000000..061f7ef6b --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/delete_storage_policy_assignment_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 = "BoxApi.DeleteStoragePolicyAssignment"; + +// 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 = { + "storage_policy_assignment_id": "spa_12345ABC" +}; + +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/toolkits/box_api/delete_storage_policy_assignment_example_call_tool.py b/public/examples/integrations/toolkits/box_api/delete_storage_policy_assignment_example_call_tool.py new file mode 100644 index 000000000..4b5674ebc --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/delete_storage_policy_assignment_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 = "BoxApi.DeleteStoragePolicyAssignment" + +auth_response = client.tools.authorize( + tool_name=TOOL_NAME, + user_id=TOOL_NAME +) + +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 = { + 'storage_policy_assignment_id': 'spa_12345ABC' +} + +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/toolkits/box_api/delete_task_assignment_example_call_tool.js b/public/examples/integrations/toolkits/box_api/delete_task_assignment_example_call_tool.js new file mode 100644 index 000000000..c97fb1d1f --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/delete_task_assignment_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 = "BoxApi.DeleteTaskAssignment"; + +// 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 = { + "task_assignment_id": "ta_7890abcd" +}; + +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/toolkits/box_api/delete_task_assignment_example_call_tool.py b/public/examples/integrations/toolkits/box_api/delete_task_assignment_example_call_tool.py new file mode 100644 index 000000000..bc758ffc4 --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/delete_task_assignment_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 = "BoxApi.DeleteTaskAssignment" + +auth_response = client.tools.authorize( + tool_name=TOOL_NAME, + user_id=TOOL_NAME +) + +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 = { + 'task_assignment_id': 'ta_7890abcd' +} + +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/toolkits/box_api/delete_task_from_file_example_call_tool.js b/public/examples/integrations/toolkits/box_api/delete_task_from_file_example_call_tool.js new file mode 100644 index 000000000..cf2182e38 --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/delete_task_from_file_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 = "BoxApi.DeleteTaskFromFile"; + +// 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 = { + "task_identifier": "task-1234" +}; + +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/toolkits/box_api/delete_task_from_file_example_call_tool.py b/public/examples/integrations/toolkits/box_api/delete_task_from_file_example_call_tool.py new file mode 100644 index 000000000..5105d531e --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/delete_task_from_file_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 = "BoxApi.DeleteTaskFromFile" + +auth_response = client.tools.authorize( + tool_name=TOOL_NAME, + user_id=TOOL_NAME +) + +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 = { + 'task_identifier': 'task-1234' +} + +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/toolkits/box_api/delete_teams_integration_mapping_example_call_tool.js b/public/examples/integrations/toolkits/box_api/delete_teams_integration_mapping_example_call_tool.js new file mode 100644 index 000000000..7bcda6384 --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/delete_teams_integration_mapping_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 = "BoxApi.DeleteTeamsIntegrationMapping"; + +// 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 = { + "integration_mapping_identifier": "mapping_987654321" +}; + +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/toolkits/box_api/delete_teams_integration_mapping_example_call_tool.py b/public/examples/integrations/toolkits/box_api/delete_teams_integration_mapping_example_call_tool.py new file mode 100644 index 000000000..80b7ef809 --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/delete_teams_integration_mapping_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 = "BoxApi.DeleteTeamsIntegrationMapping" + +auth_response = client.tools.authorize( + tool_name=TOOL_NAME, + user_id=TOOL_NAME +) + +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 = { + 'integration_mapping_identifier': 'mapping_987654321' +} + +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/toolkits/box_api/delete_user_account_example_call_tool.js b/public/examples/integrations/toolkits/box_api/delete_user_account_example_call_tool.js new file mode 100644 index 000000000..8d0b01835 --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/delete_user_account_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 = "BoxApi.DeleteUserAccount"; + +// 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 = { + "user_id": "user_98765", + "send_deletion_notification": true, + "force_delete_user": 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/toolkits/box_api/delete_user_account_example_call_tool.py b/public/examples/integrations/toolkits/box_api/delete_user_account_example_call_tool.py new file mode 100644 index 000000000..8360bb6fd --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/delete_user_account_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 = "BoxApi.DeleteUserAccount" + +auth_response = client.tools.authorize( + tool_name=TOOL_NAME, + user_id=TOOL_NAME +) + +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 = { + 'user_id': 'user_98765', 'send_deletion_notification': True, 'force_delete_user': 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/toolkits/box_api/delete_web_link_example_call_tool.js b/public/examples/integrations/toolkits/box_api/delete_web_link_example_call_tool.js new file mode 100644 index 000000000..2a8e6b173 --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/delete_web_link_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 = "BoxApi.DeleteWebLink"; + +// 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 = { + "web_link_id": "wl_9a3f2b" +}; + +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/toolkits/box_api/delete_web_link_example_call_tool.py b/public/examples/integrations/toolkits/box_api/delete_web_link_example_call_tool.py new file mode 100644 index 000000000..81073d9a3 --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/delete_web_link_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 = "BoxApi.DeleteWebLink" + +auth_response = client.tools.authorize( + tool_name=TOOL_NAME, + user_id=TOOL_NAME +) + +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 = { + 'web_link_id': 'wl_9a3f2b' +} + +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/toolkits/box_api/delete_webhook_example_call_tool.js b/public/examples/integrations/toolkits/box_api/delete_webhook_example_call_tool.js new file mode 100644 index 000000000..60177321a --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/delete_webhook_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 = "BoxApi.DeleteWebhook"; + +// 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": "wh_12345abcdef" +}; + +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/toolkits/box_api/delete_webhook_example_call_tool.py b/public/examples/integrations/toolkits/box_api/delete_webhook_example_call_tool.py new file mode 100644 index 000000000..a16afb17c --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/delete_webhook_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 = "BoxApi.DeleteWebhook" + +auth_response = client.tools.authorize( + tool_name=TOOL_NAME, + user_id=TOOL_NAME +) + +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': 'wh_12345abcdef' +} + +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/toolkits/box_api/download_file_content_example_call_tool.js b/public/examples/integrations/toolkits/box_api/download_file_content_example_call_tool.js new file mode 100644 index 000000000..7669c4f57 --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/download_file_content_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 = "BoxApi.DownloadFileContent"; + +// 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 = { + "file_identifier": "file_abc123", + "file_version_to_download": "v2", + "optional_access_token": "pk_live_4f8cTOKEN", + "download_byte_range": "bytes=0-1048575", + "shared_link_with_optional_password": "shared_link=https://app.example.com/s/xyz&shared_link_password=pass123" +}; + +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/toolkits/box_api/download_file_content_example_call_tool.py b/public/examples/integrations/toolkits/box_api/download_file_content_example_call_tool.py new file mode 100644 index 000000000..0633ec3ac --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/download_file_content_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 = "BoxApi.DownloadFileContent" + +auth_response = client.tools.authorize( + tool_name=TOOL_NAME, + user_id=TOOL_NAME +) + +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 = { + 'file_identifier': 'file_abc123', + 'file_version_to_download': 'v2', + 'optional_access_token': 'pk_live_4f8cTOKEN', + 'download_byte_range': 'bytes=0-1048575', + 'shared_link_with_optional_password': 'shared_link=https://app.example.com/s/xyz&shared_link_password=pass123' +} + +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/toolkits/box_api/download_zip_content_example_call_tool.js b/public/examples/integrations/toolkits/box_api/download_zip_content_example_call_tool.js new file mode 100644 index 000000000..946dcaaea --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/download_zip_content_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 = "BoxApi.DownloadZipContent"; + +// 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 = { + "zip_archive_unique_id": "zip_abc123xyz" +}; + +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/toolkits/box_api/download_zip_content_example_call_tool.py b/public/examples/integrations/toolkits/box_api/download_zip_content_example_call_tool.py new file mode 100644 index 000000000..2193df821 --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/download_zip_content_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 = "BoxApi.DownloadZipContent" + +auth_response = client.tools.authorize( + tool_name=TOOL_NAME, + user_id=TOOL_NAME +) + +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 = { + 'zip_archive_unique_id': 'zip_abc123xyz' +} + +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/toolkits/box_api/fetch_box_sign_template_details_example_call_tool.js b/public/examples/integrations/toolkits/box_api/fetch_box_sign_template_details_example_call_tool.js new file mode 100644 index 000000000..4eb5fb688 --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/fetch_box_sign_template_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 = "BoxApi.FetchBoxSignTemplateDetails"; + +// 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 = { + "box_sign_template_id": "tmpl_12345abcde" +}; + +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/toolkits/box_api/fetch_box_sign_template_details_example_call_tool.py b/public/examples/integrations/toolkits/box_api/fetch_box_sign_template_details_example_call_tool.py new file mode 100644 index 000000000..2be9b757c --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/fetch_box_sign_template_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 = "BoxApi.FetchBoxSignTemplateDetails" + +auth_response = client.tools.authorize( + tool_name=TOOL_NAME, + user_id=TOOL_NAME +) + +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 = { + 'box_sign_template_id': 'tmpl_12345abcde' +} + +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/toolkits/box_api/fetch_comment_details_example_call_tool.js b/public/examples/integrations/toolkits/box_api/fetch_comment_details_example_call_tool.js new file mode 100644 index 000000000..b80c0b021 --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/fetch_comment_details_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 = "BoxApi.FetchCommentDetails"; + +// 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 = { + "comment_id": "cmt_92a7f1b3", + "include_fields": [ + "message", + "creator", + "metadata" + ] +}; + +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/toolkits/box_api/fetch_comment_details_example_call_tool.py b/public/examples/integrations/toolkits/box_api/fetch_comment_details_example_call_tool.py new file mode 100644 index 000000000..8feedb02d --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/fetch_comment_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 = "BoxApi.FetchCommentDetails" + +auth_response = client.tools.authorize( + tool_name=TOOL_NAME, + user_id=TOOL_NAME +) + +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 = { + 'comment_id': 'cmt_92a7f1b3', 'include_fields': ['message', 'creator', 'metadata'] +} + +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/toolkits/box_api/fetch_enterprise_storage_policies_example_call_tool.js b/public/examples/integrations/toolkits/box_api/fetch_enterprise_storage_policies_example_call_tool.js new file mode 100644 index 000000000..7e064fc14 --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/fetch_enterprise_storage_policies_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 = "BoxApi.FetchEnterpriseStoragePolicies"; + +// 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_attributes": [ + "created_at", + "modified_by" + ], + "pagination_marker": "abc123marker", + "max_items_per_page": 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/toolkits/box_api/fetch_enterprise_storage_policies_example_call_tool.py b/public/examples/integrations/toolkits/box_api/fetch_enterprise_storage_policies_example_call_tool.py new file mode 100644 index 000000000..7100136be --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/fetch_enterprise_storage_policies_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 = "BoxApi.FetchEnterpriseStoragePolicies" + +auth_response = client.tools.authorize( + tool_name=TOOL_NAME, + user_id=TOOL_NAME +) + +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_attributes': ['created_at', 'modified_by'], + 'pagination_marker': 'abc123marker', + 'max_items_per_page': 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/toolkits/box_api/fetch_metadata_template_by_id_example_call_tool.js b/public/examples/integrations/toolkits/box_api/fetch_metadata_template_by_id_example_call_tool.js new file mode 100644 index 000000000..3909d3e79 --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/fetch_metadata_template_by_id_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 = "BoxApi.FetchMetadataTemplateById"; + +// 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 = { + "template_id": "tmpl_12345ABCDE" +}; + +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/toolkits/box_api/fetch_metadata_template_by_id_example_call_tool.py b/public/examples/integrations/toolkits/box_api/fetch_metadata_template_by_id_example_call_tool.py new file mode 100644 index 000000000..e9d4cb09c --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/fetch_metadata_template_by_id_example_call_tool.py @@ -0,0 +1,29 @@ +import json +from arcadepy import Arcade + +client = Arcade() # Automatically finds the `ARCADE_API_KEY` env variable + +USER_ID = "{arcade_user_id}" +TOOL_NAME = "BoxApi.FetchMetadataTemplateById" + +auth_response = client.tools.authorize( + tool_name=TOOL_NAME, + user_id=TOOL_NAME +) + +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 = { + 'template_id': 'tmpl_12345ABCDE' +} + +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/toolkits/box_api/fetch_safe_collaboration_domain_example_call_tool.js b/public/examples/integrations/toolkits/box_api/fetch_safe_collaboration_domain_example_call_tool.js new file mode 100644 index 000000000..7950607bc --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/fetch_safe_collaboration_domain_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 = "BoxApi.FetchSafeCollaborationDomain"; + +// 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 = { + "collaboration_whitelist_entry_id": "whitelist-entry-789" +}; + +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/toolkits/box_api/fetch_safe_collaboration_domain_example_call_tool.py b/public/examples/integrations/toolkits/box_api/fetch_safe_collaboration_domain_example_call_tool.py new file mode 100644 index 000000000..dfe4898cf --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/fetch_safe_collaboration_domain_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 = "BoxApi.FetchSafeCollaborationDomain" + +auth_response = client.tools.authorize( + tool_name=TOOL_NAME, + user_id=TOOL_NAME +) + +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 = { + 'collaboration_whitelist_entry_id': 'whitelist-entry-789' +} + +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/toolkits/box_api/fetch_shield_barrier_report_example_call_tool.js b/public/examples/integrations/toolkits/box_api/fetch_shield_barrier_report_example_call_tool.js new file mode 100644 index 000000000..8b3126056 --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/fetch_shield_barrier_report_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 = "BoxApi.FetchShieldBarrierReport"; + +// 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 = { + "shield_barrier_report_id": "rpt_12345abcde" +}; + +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/toolkits/box_api/fetch_shield_barrier_report_example_call_tool.py b/public/examples/integrations/toolkits/box_api/fetch_shield_barrier_report_example_call_tool.py new file mode 100644 index 000000000..b900c0cc4 --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/fetch_shield_barrier_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 = "BoxApi.FetchShieldBarrierReport" + +auth_response = client.tools.authorize( + tool_name=TOOL_NAME, + user_id=TOOL_NAME +) + +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 = { + 'shield_barrier_report_id': 'rpt_12345abcde' +} + +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/toolkits/box_api/fetch_signature_requests_example_call_tool.js b/public/examples/integrations/toolkits/box_api/fetch_signature_requests_example_call_tool.js new file mode 100644 index 000000000..163210ba4 --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/fetch_signature_requests_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 = "BoxApi.FetchSignatureRequests"; + +// 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 = { + "pagination_marker": "abc123", + "max_items_per_page": 25, + "sender_email_list": [ + "alice@example.com", + "bob@example.com" + ], + "include_shared_requests": 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/toolkits/box_api/fetch_signature_requests_example_call_tool.py b/public/examples/integrations/toolkits/box_api/fetch_signature_requests_example_call_tool.py new file mode 100644 index 000000000..e86349bb2 --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/fetch_signature_requests_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 = "BoxApi.FetchSignatureRequests" + +auth_response = client.tools.authorize( + tool_name=TOOL_NAME, + user_id=TOOL_NAME +) + +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 = { + 'pagination_marker': 'abc123', + 'max_items_per_page': 25, + 'sender_email_list': ['alice@example.com', 'bob@example.com'], + 'include_shared_requests': 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/toolkits/box_api/fetch_storage_policy_assignment_example_call_tool.js b/public/examples/integrations/toolkits/box_api/fetch_storage_policy_assignment_example_call_tool.js new file mode 100644 index 000000000..e8bd11160 --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/fetch_storage_policy_assignment_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 = "BoxApi.FetchStoragePolicyAssignment"; + +// 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 = { + "storage_policy_assignment_id": "1234567890" +}; + +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/toolkits/box_api/fetch_storage_policy_assignment_example_call_tool.py b/public/examples/integrations/toolkits/box_api/fetch_storage_policy_assignment_example_call_tool.py new file mode 100644 index 000000000..0ddbe35d8 --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/fetch_storage_policy_assignment_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 = "BoxApi.FetchStoragePolicyAssignment" + +auth_response = client.tools.authorize( + tool_name=TOOL_NAME, + user_id=TOOL_NAME +) + +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 = { + 'storage_policy_assignment_id': '1234567890' +} + +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/toolkits/box_api/fetch_storage_policy_assignments_example_call_tool.js b/public/examples/integrations/toolkits/box_api/fetch_storage_policy_assignments_example_call_tool.js new file mode 100644 index 000000000..702cddc41 --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/fetch_storage_policy_assignments_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 = "BoxApi.FetchStoragePolicyAssignments"; + +// 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 = { + "target_type_for_assignments": "user", + "target_user_or_enterprise_id": "12345", + "pagination_marker": "marker_abc" +}; + +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/toolkits/box_api/fetch_storage_policy_assignments_example_call_tool.py b/public/examples/integrations/toolkits/box_api/fetch_storage_policy_assignments_example_call_tool.py new file mode 100644 index 000000000..120d68cd2 --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/fetch_storage_policy_assignments_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 = "BoxApi.FetchStoragePolicyAssignments" + +auth_response = client.tools.authorize( + tool_name=TOOL_NAME, + user_id=TOOL_NAME +) + +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 = { + 'target_type_for_assignments': 'user', + 'target_user_or_enterprise_id': '12345', + 'pagination_marker': 'marker_abc' +} + +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/toolkits/box_api/fetch_storage_policy_example_call_tool.js b/public/examples/integrations/toolkits/box_api/fetch_storage_policy_example_call_tool.js new file mode 100644 index 000000000..d9048d11a --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/fetch_storage_policy_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 = "BoxApi.FetchStoragePolicy"; + +// 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 = { + "storage_policy_identifier": "sp_1234567890" +}; + +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/toolkits/box_api/fetch_storage_policy_example_call_tool.py b/public/examples/integrations/toolkits/box_api/fetch_storage_policy_example_call_tool.py new file mode 100644 index 000000000..86dc80677 --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/fetch_storage_policy_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 = "BoxApi.FetchStoragePolicy" + +auth_response = client.tools.authorize( + tool_name=TOOL_NAME, + user_id=TOOL_NAME +) + +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 = { + 'storage_policy_identifier': 'sp_1234567890' +} + +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/toolkits/box_api/find_metadata_template_example_call_tool.js b/public/examples/integrations/toolkits/box_api/find_metadata_template_example_call_tool.js new file mode 100644 index 000000000..1349d5e3b --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/find_metadata_template_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 = "BoxApi.FindMetadataTemplate"; + +// 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 = { + "metadata_instance_id": "12345abcd", + "pagination_position_marker": "marker_6789", + "items_per_page_limit": 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/toolkits/box_api/find_metadata_template_example_call_tool.py b/public/examples/integrations/toolkits/box_api/find_metadata_template_example_call_tool.py new file mode 100644 index 000000000..099c000f5 --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/find_metadata_template_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 = "BoxApi.FindMetadataTemplate" + +auth_response = client.tools.authorize( + tool_name=TOOL_NAME, + user_id=TOOL_NAME +) + +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 = { + 'metadata_instance_id': '12345abcd', + 'pagination_position_marker': 'marker_6789', + 'items_per_page_limit': 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/toolkits/box_api/get_ai_agent_default_config_example_call_tool.js b/public/examples/integrations/toolkits/box_api/get_ai_agent_default_config_example_call_tool.js new file mode 100644 index 000000000..01c5cc075 --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/get_ai_agent_default_config_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 = "BoxApi.GetAiAgentDefaultConfig"; + +// 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 = { + "filter_mode": "text_gen", + "agent_config_language_code": "en-US", + "model_identifier": "gpt-4o-mini" +}; + +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/toolkits/box_api/get_ai_agent_default_config_example_call_tool.py b/public/examples/integrations/toolkits/box_api/get_ai_agent_default_config_example_call_tool.py new file mode 100644 index 000000000..32eaa84ee --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/get_ai_agent_default_config_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 = "BoxApi.GetAiAgentDefaultConfig" + +auth_response = client.tools.authorize( + tool_name=TOOL_NAME, + user_id=TOOL_NAME +) + +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 = { + 'filter_mode': 'text_gen', + 'agent_config_language_code': 'en-US', + 'model_identifier': 'gpt-4o-mini' +} + +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/toolkits/box_api/get_ai_agent_details_example_call_tool.js b/public/examples/integrations/toolkits/box_api/get_ai_agent_details_example_call_tool.js new file mode 100644 index 000000000..f59c327ac --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/get_ai_agent_details_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 = "BoxApi.GetAiAgentDetails"; + +// 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 = { + "agent_unique_identifier": "agent_12345", + "fields_to_return": [ + "name", + "status", + "created_at", + "capabilities" + ] +}; + +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/toolkits/box_api/get_ai_agent_details_example_call_tool.py b/public/examples/integrations/toolkits/box_api/get_ai_agent_details_example_call_tool.py new file mode 100644 index 000000000..de3b2fcb7 --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/get_ai_agent_details_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 = "BoxApi.GetAiAgentDetails" + +auth_response = client.tools.authorize( + tool_name=TOOL_NAME, + user_id=TOOL_NAME +) + +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 = { + 'agent_unique_identifier': 'agent_12345', + 'fields_to_return': ['name', 'status', 'created_at', 'capabilities'] +} + +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/toolkits/box_api/get_authenticated_user_info_example_call_tool.js b/public/examples/integrations/toolkits/box_api/get_authenticated_user_info_example_call_tool.js new file mode 100644 index 000000000..473012d12 --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/get_authenticated_user_info_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 = "BoxApi.GetAuthenticatedUserInfo"; + +// 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 = { + "requested_user_attributes": [ + "email", + "roles", + "department" + ] +}; + +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/toolkits/box_api/get_authenticated_user_info_example_call_tool.py b/public/examples/integrations/toolkits/box_api/get_authenticated_user_info_example_call_tool.py new file mode 100644 index 000000000..90d1eda38 --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/get_authenticated_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 = "BoxApi.GetAuthenticatedUserInfo" + +auth_response = client.tools.authorize( + tool_name=TOOL_NAME, + user_id=TOOL_NAME +) + +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 = { + 'requested_user_attributes': ['email', 'roles', 'department'] +} + +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/toolkits/box_api/get_box2_events_example_call_tool.js b/public/examples/integrations/toolkits/box_api/get_box2_events_example_call_tool.js new file mode 100644 index 000000000..06b6127da --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/get_box2_events_example_call_tool.js @@ -0,0 +1,40 @@ +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 = "BoxApi.GetBox2Events"; + +// Start the authorization process +const authResponse = await client.tools.authorize({ + tool_name: TOOL_NAME, + user_id: USER_ID +}); + +if (authResponse.status !== "completed") { + console.log(`Click this link to authorize: ${authResponse.url}`); +} + +// Wait for the authorization to complete +await client.auth.waitForCompletion(authResponse); + +const toolInput = { + "event_stream_type": "admin_logs", + "event_stream_start_position": "0", + "event_limit": 100, + "event_type_filter": [ + "ITEM_CREATE", + "ITEM_UPLOAD", + "USER_LOGIN" + ], + "event_start_date": "2024-01-01T00:00:00Z", + "event_time_upper_bound": "2024-06-30T23:59:59Z" +}; + +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/toolkits/box_api/get_box2_events_example_call_tool.py b/public/examples/integrations/toolkits/box_api/get_box2_events_example_call_tool.py new file mode 100644 index 000000000..0893dc65b --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/get_box2_events_example_call_tool.py @@ -0,0 +1,34 @@ +import json +from arcadepy import Arcade + +client = Arcade() # Automatically finds the `ARCADE_API_KEY` env variable + +USER_ID = "{arcade_user_id}" +TOOL_NAME = "BoxApi.GetBox2Events" + +auth_response = client.tools.authorize( + tool_name=TOOL_NAME, + user_id=TOOL_NAME +) + +if auth_response.status != "completed": + print(f"Click this link to authorize: {auth_response.url}") + +# Wait for the authorization to complete +client.auth.wait_for_completion(auth_response) + +tool_input = { + 'event_stream_type': 'admin_logs', + 'event_stream_start_position': '0', + 'event_limit': 100, + 'event_type_filter': ['ITEM_CREATE', 'ITEM_UPLOAD', 'USER_LOGIN'], + 'event_start_date': '2024-01-01T00:00:00Z', + 'event_time_upper_bound': '2024-06-30T23:59:59Z' +} + +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/toolkits/box_api/get_box_docgen_job_details_example_call_tool.js b/public/examples/integrations/toolkits/box_api/get_box_docgen_job_details_example_call_tool.js new file mode 100644 index 000000000..b6825b866 --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/get_box_docgen_job_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 = "BoxApi.GetBoxDocgenJobDetails"; + +// 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 = { + "box_doc_gen_job_id": "job_12345abcde" +}; + +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/toolkits/box_api/get_box_docgen_job_details_example_call_tool.py b/public/examples/integrations/toolkits/box_api/get_box_docgen_job_details_example_call_tool.py new file mode 100644 index 000000000..743d2d9d2 --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/get_box_docgen_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 = "BoxApi.GetBoxDocgenJobDetails" + +auth_response = client.tools.authorize( + tool_name=TOOL_NAME, + user_id=TOOL_NAME +) + +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 = { + 'box_doc_gen_job_id': 'job_12345abcde' +} + +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/toolkits/box_api/get_box_docgen_template_details_example_call_tool.js b/public/examples/integrations/toolkits/box_api/get_box_docgen_template_details_example_call_tool.js new file mode 100644 index 000000000..3a3a4906d --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/get_box_docgen_template_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 = "BoxApi.GetBoxDocgenTemplateDetails"; + +// 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 = { + "box_docgen_template_id": "tmpl_12345abc" +}; + +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/toolkits/box_api/get_box_docgen_template_details_example_call_tool.py b/public/examples/integrations/toolkits/box_api/get_box_docgen_template_details_example_call_tool.py new file mode 100644 index 000000000..0e914cbae --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/get_box_docgen_template_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 = "BoxApi.GetBoxDocgenTemplateDetails" + +auth_response = client.tools.authorize( + tool_name=TOOL_NAME, + user_id=TOOL_NAME +) + +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 = { + 'box_docgen_template_id': 'tmpl_12345abc' +} + +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/toolkits/box_api/get_box_hub_collaboration_details_example_call_tool.js b/public/examples/integrations/toolkits/box_api/get_box_hub_collaboration_details_example_call_tool.js new file mode 100644 index 000000000..cc00914c9 --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/get_box_hub_collaboration_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 = "BoxApi.GetBoxHubCollaborationDetails"; + +// 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 = { + "hub_collaboration_id": "1234567890" +}; + +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/toolkits/box_api/get_box_hub_collaboration_details_example_call_tool.py b/public/examples/integrations/toolkits/box_api/get_box_hub_collaboration_details_example_call_tool.py new file mode 100644 index 000000000..8b90aec53 --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/get_box_hub_collaboration_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 = "BoxApi.GetBoxHubCollaborationDetails" + +auth_response = client.tools.authorize( + tool_name=TOOL_NAME, + user_id=TOOL_NAME +) + +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 = { + 'hub_collaboration_id': '1234567890' +} + +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/toolkits/box_api/get_box_hubs_example_call_tool.js b/public/examples/integrations/toolkits/box_api/get_box_hubs_example_call_tool.js new file mode 100644 index 000000000..0e9078431 --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/get_box_hubs_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 = "BoxApi.GetBoxHubs"; + +// 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 = { + "hub_search_query": "design sprint", + "hub_scope": "editable", + "sort_results_by": "updated_at", + "sort_direction": "DESC", + "pagination_start_marker": "marker_123", + "max_items_per_page": 25 +}; + +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/toolkits/box_api/get_box_hubs_example_call_tool.py b/public/examples/integrations/toolkits/box_api/get_box_hubs_example_call_tool.py new file mode 100644 index 000000000..cfb5f3eee --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/get_box_hubs_example_call_tool.py @@ -0,0 +1,34 @@ +import json +from arcadepy import Arcade + +client = Arcade() # Automatically finds the `ARCADE_API_KEY` env variable + +USER_ID = "{arcade_user_id}" +TOOL_NAME = "BoxApi.GetBoxHubs" + +auth_response = client.tools.authorize( + tool_name=TOOL_NAME, + user_id=TOOL_NAME +) + +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 = { + 'hub_search_query': 'design sprint', + 'hub_scope': 'editable', + 'sort_results_by': 'updated_at', + 'sort_direction': 'DESC', + 'pagination_start_marker': 'marker_123', + 'max_items_per_page': 25 +} + +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/toolkits/box_api/get_box_sign_templates_example_call_tool.js b/public/examples/integrations/toolkits/box_api/get_box_sign_templates_example_call_tool.js new file mode 100644 index 000000000..6b012907d --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/get_box_sign_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 = "BoxApi.GetBoxSignTemplates"; + +// 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 = { + "pagination_marker": "abc123", + "max_items_per_page": 25 +}; + +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/toolkits/box_api/get_box_sign_templates_example_call_tool.py b/public/examples/integrations/toolkits/box_api/get_box_sign_templates_example_call_tool.py new file mode 100644 index 000000000..adf9d6b48 --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/get_box_sign_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 = "BoxApi.GetBoxSignTemplates" + +auth_response = client.tools.authorize( + tool_name=TOOL_NAME, + user_id=TOOL_NAME +) + +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 = { + 'pagination_marker': 'abc123', 'max_items_per_page': 25 +} + +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/toolkits/box_api/get_box_skills_metadata_example_call_tool.js b/public/examples/integrations/toolkits/box_api/get_box_skills_metadata_example_call_tool.js new file mode 100644 index 000000000..0e79f0e9f --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/get_box_skills_metadata_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 = "BoxApi.GetBoxSkillsMetadata"; + +// 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 = { + "file_id": "1234567890" +}; + +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/toolkits/box_api/get_box_skills_metadata_example_call_tool.py b/public/examples/integrations/toolkits/box_api/get_box_skills_metadata_example_call_tool.py new file mode 100644 index 000000000..4f144107f --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/get_box_skills_metadata_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 = "BoxApi.GetBoxSkillsMetadata" + +auth_response = client.tools.authorize( + tool_name=TOOL_NAME, + user_id=TOOL_NAME +) + +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 = { + 'file_id': '1234567890' +} + +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/toolkits/box_api/get_classification_metadata_example_call_tool.js b/public/examples/integrations/toolkits/box_api/get_classification_metadata_example_call_tool.js new file mode 100644 index 000000000..f6791efbe --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/get_classification_metadata_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 = "BoxApi.GetClassificationMetadata"; + +// 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/toolkits/box_api/get_classification_metadata_example_call_tool.py b/public/examples/integrations/toolkits/box_api/get_classification_metadata_example_call_tool.py new file mode 100644 index 000000000..9bdcecc5a --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/get_classification_metadata_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 = "BoxApi.GetClassificationMetadata" + +auth_response = client.tools.authorize( + tool_name=TOOL_NAME, + user_id=TOOL_NAME +) + +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/toolkits/box_api/get_collaboration_details_example_call_tool.js b/public/examples/integrations/toolkits/box_api/get_collaboration_details_example_call_tool.js new file mode 100644 index 000000000..f020afaf8 --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/get_collaboration_details_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 = "BoxApi.GetCollaborationDetails"; + +// 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 = { + "collaboration_id": "col_987654321", + "include_fields": [ + "auditTrail", + "sharedWithExternalUsers" + ] +}; + +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/toolkits/box_api/get_collaboration_details_example_call_tool.py b/public/examples/integrations/toolkits/box_api/get_collaboration_details_example_call_tool.py new file mode 100644 index 000000000..e3a75711b --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/get_collaboration_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 = "BoxApi.GetCollaborationDetails" + +auth_response = client.tools.authorize( + tool_name=TOOL_NAME, + user_id=TOOL_NAME +) + +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 = { + 'collaboration_id': 'col_987654321', 'include_fields': ['auditTrail', 'sharedWithExternalUsers'] +} + +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/toolkits/box_api/get_collaboration_whitelist_exempt_user_example_call_tool.js b/public/examples/integrations/toolkits/box_api/get_collaboration_whitelist_exempt_user_example_call_tool.js new file mode 100644 index 000000000..653c40b94 --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/get_collaboration_whitelist_exempt_user_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 = "BoxApi.GetCollaborationWhitelistExemptUser"; + +// 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 = { + "exemption_target_id": "1234567890" +}; + +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/toolkits/box_api/get_collaboration_whitelist_exempt_user_example_call_tool.py b/public/examples/integrations/toolkits/box_api/get_collaboration_whitelist_exempt_user_example_call_tool.py new file mode 100644 index 000000000..56a26aa24 --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/get_collaboration_whitelist_exempt_user_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 = "BoxApi.GetCollaborationWhitelistExemptUser" + +auth_response = client.tools.authorize( + tool_name=TOOL_NAME, + user_id=TOOL_NAME +) + +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 = { + 'exemption_target_id': '1234567890' +} + +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/toolkits/box_api/get_collaboration_whitelist_exempt_users_example_call_tool.js b/public/examples/integrations/toolkits/box_api/get_collaboration_whitelist_exempt_users_example_call_tool.js new file mode 100644 index 000000000..63b5c252a --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/get_collaboration_whitelist_exempt_users_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 = "BoxApi.GetCollaborationWhitelistExemptUsers"; + +// 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 = { + "pagination_position_marker": "marker_abc123", + "max_items_per_page": 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/toolkits/box_api/get_collaboration_whitelist_exempt_users_example_call_tool.py b/public/examples/integrations/toolkits/box_api/get_collaboration_whitelist_exempt_users_example_call_tool.py new file mode 100644 index 000000000..2f0479173 --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/get_collaboration_whitelist_exempt_users_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 = "BoxApi.GetCollaborationWhitelistExemptUsers" + +auth_response = client.tools.authorize( + tool_name=TOOL_NAME, + user_id=TOOL_NAME +) + +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 = { + 'pagination_position_marker': 'marker_abc123', 'max_items_per_page': 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/toolkits/box_api/get_device_pin_info_example_call_tool.js b/public/examples/integrations/toolkits/box_api/get_device_pin_info_example_call_tool.js new file mode 100644 index 000000000..32ab4c992 --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/get_device_pin_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 = "BoxApi.GetDevicePinInfo"; + +// 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 = { + "device_pin_identifier": "pin-1234" +}; + +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/toolkits/box_api/get_device_pin_info_example_call_tool.py b/public/examples/integrations/toolkits/box_api/get_device_pin_info_example_call_tool.py new file mode 100644 index 000000000..5e205e7aa --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/get_device_pin_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 = "BoxApi.GetDevicePinInfo" + +auth_response = client.tools.authorize( + tool_name=TOOL_NAME, + user_id=TOOL_NAME +) + +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 = { + 'device_pin_identifier': 'pin-1234' +} + +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/toolkits/box_api/get_enterprise_box_hubs_example_call_tool.js b/public/examples/integrations/toolkits/box_api/get_enterprise_box_hubs_example_call_tool.js new file mode 100644 index 000000000..e60e68604 --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/get_enterprise_box_hubs_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 = "BoxApi.GetEnterpriseBoxHubs"; + +// 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 = { + "search_query_for_box_hubs": "engineering roadmap", + "sort_results_by": "updated_at", + "sort_direction": "DESC", + "pagination_marker": "cursor_abc123", + "max_items_per_page": 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/toolkits/box_api/get_enterprise_box_hubs_example_call_tool.py b/public/examples/integrations/toolkits/box_api/get_enterprise_box_hubs_example_call_tool.py new file mode 100644 index 000000000..c13210733 --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/get_enterprise_box_hubs_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 = "BoxApi.GetEnterpriseBoxHubs" + +auth_response = client.tools.authorize( + tool_name=TOOL_NAME, + user_id=TOOL_NAME +) + +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 = { + 'search_query_for_box_hubs': 'engineering roadmap', + 'sort_results_by': 'updated_at', + 'sort_direction': 'DESC', + 'pagination_marker': 'cursor_abc123', + 'max_items_per_page': 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/toolkits/box_api/get_enterprise_device_pins_example_call_tool.js b/public/examples/integrations/toolkits/box_api/get_enterprise_device_pins_example_call_tool.js new file mode 100644 index 000000000..11514e124 --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/get_enterprise_device_pins_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 = "BoxApi.GetEnterpriseDevicePins"; + +// 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 = { + "enterprise_id": "ent_12345", + "pagination_start_marker": "marker_abc", + "max_items_per_page": 50, + "sort_direction": "ASC" +}; + +const response = await client.tools.execute({ + tool_name: TOOL_NAME, + input: toolInput, + user_id: USER_ID, +}); + +console.log(JSON.stringify(response.output.value, null, 2)); diff --git a/public/examples/integrations/toolkits/box_api/get_enterprise_device_pins_example_call_tool.py b/public/examples/integrations/toolkits/box_api/get_enterprise_device_pins_example_call_tool.py new file mode 100644 index 000000000..88704a020 --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/get_enterprise_device_pins_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 = "BoxApi.GetEnterpriseDevicePins" + +auth_response = client.tools.authorize( + tool_name=TOOL_NAME, + user_id=TOOL_NAME +) + +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 = { + 'enterprise_id': 'ent_12345', + 'pagination_start_marker': 'marker_abc', + 'max_items_per_page': 50, + 'sort_direction': 'ASC' +} + +response = client.tools.execute( + tool_name=TOOL_NAME, + input=tool_input, + user_id=USER_ID, +) +print(json.dumps(response.output.value, indent=2)) diff --git a/public/examples/integrations/toolkits/box_api/get_enterprise_retention_policies_example_call_tool.js b/public/examples/integrations/toolkits/box_api/get_enterprise_retention_policies_example_call_tool.js new file mode 100644 index 000000000..d3e79e334 --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/get_enterprise_retention_policies_example_call_tool.js @@ -0,0 +1,42 @@ +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 = "BoxApi.GetEnterpriseRetentionPolicies"; + +// 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 = { + "filter_by_policy_name_prefix": "LegalHold_", + "filter_by_retention_policy_type": "finite", + "filter_by_creator_user_id": "12345", + "include_fields": [ + "id", + "name", + "type", + "created_by", + "retention_length_days" + ], + "maximum_items_per_page": 50, + "pagination_start_marker": "marker_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/toolkits/box_api/get_enterprise_retention_policies_example_call_tool.py b/public/examples/integrations/toolkits/box_api/get_enterprise_retention_policies_example_call_tool.py new file mode 100644 index 000000000..892b43f10 --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/get_enterprise_retention_policies_example_call_tool.py @@ -0,0 +1,34 @@ +import json +from arcadepy import Arcade + +client = Arcade() # Automatically finds the `ARCADE_API_KEY` env variable + +USER_ID = "{arcade_user_id}" +TOOL_NAME = "BoxApi.GetEnterpriseRetentionPolicies" + +auth_response = client.tools.authorize( + tool_name=TOOL_NAME, + user_id=TOOL_NAME +) + +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 = { + 'filter_by_policy_name_prefix': 'LegalHold_', + 'filter_by_retention_policy_type': 'finite', + 'filter_by_creator_user_id': '12345', + 'include_fields': ['id', 'name', 'type', 'created_by', 'retention_length_days'], + 'maximum_items_per_page': 50, + 'pagination_start_marker': 'marker_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/toolkits/box_api/get_enterprise_shield_lists_example_call_tool.js b/public/examples/integrations/toolkits/box_api/get_enterprise_shield_lists_example_call_tool.js new file mode 100644 index 000000000..cdfe908e4 --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/get_enterprise_shield_lists_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 = "BoxApi.GetEnterpriseShieldLists"; + +// 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/toolkits/box_api/get_enterprise_shield_lists_example_call_tool.py b/public/examples/integrations/toolkits/box_api/get_enterprise_shield_lists_example_call_tool.py new file mode 100644 index 000000000..68b4f6be8 --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/get_enterprise_shield_lists_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 = "BoxApi.GetEnterpriseShieldLists" + +auth_response = client.tools.authorize( + tool_name=TOOL_NAME, + user_id=TOOL_NAME +) + +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/toolkits/box_api/get_enterprise_terms_of_service_example_call_tool.js b/public/examples/integrations/toolkits/box_api/get_enterprise_terms_of_service_example_call_tool.js new file mode 100644 index 000000000..2c01dc4ab --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/get_enterprise_terms_of_service_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 = "BoxApi.GetEnterpriseTermsOfService"; + +// 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 = { + "terms_of_service_type": "external" +}; + +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/toolkits/box_api/get_enterprise_terms_of_service_example_call_tool.py b/public/examples/integrations/toolkits/box_api/get_enterprise_terms_of_service_example_call_tool.py new file mode 100644 index 000000000..0f59ca94a --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/get_enterprise_terms_of_service_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 = "BoxApi.GetEnterpriseTermsOfService" + +auth_response = client.tools.authorize( + tool_name=TOOL_NAME, + user_id=TOOL_NAME +) + +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 = { + 'terms_of_service_type': 'external' +} + +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/toolkits/box_api/get_file_app_associations_example_call_tool.js b/public/examples/integrations/toolkits/box_api/get_file_app_associations_example_call_tool.js new file mode 100644 index 000000000..ad166b0f0 --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/get_file_app_associations_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 = "BoxApi.GetFileAppAssociations"; + +// 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 = { + "file_identifier": "1234567890", + "items_per_page_limit": 25, + "pagination_marker": "marker_abc123", + "filter_by_application_type": "com.box.external.app" +}; + +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/toolkits/box_api/get_file_app_associations_example_call_tool.py b/public/examples/integrations/toolkits/box_api/get_file_app_associations_example_call_tool.py new file mode 100644 index 000000000..adb331cf2 --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/get_file_app_associations_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 = "BoxApi.GetFileAppAssociations" + +auth_response = client.tools.authorize( + tool_name=TOOL_NAME, + user_id=TOOL_NAME +) + +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 = { + 'file_identifier': '1234567890', + 'items_per_page_limit': 25, + 'pagination_marker': 'marker_abc123', + 'filter_by_application_type': 'com.box.external.app' +} + +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/toolkits/box_api/get_file_classification_metadata_example_call_tool.js b/public/examples/integrations/toolkits/box_api/get_file_classification_metadata_example_call_tool.js new file mode 100644 index 000000000..80a139c44 --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/get_file_classification_metadata_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 = "BoxApi.GetFileClassificationMetadata"; + +// 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 = { + "file_identifier": "123" +}; + +const response = await client.tools.execute({ + tool_name: TOOL_NAME, + input: toolInput, + user_id: USER_ID, +}); + +console.log(JSON.stringify(response.output.value, null, 2)); diff --git a/public/examples/integrations/toolkits/box_api/get_file_classification_metadata_example_call_tool.py b/public/examples/integrations/toolkits/box_api/get_file_classification_metadata_example_call_tool.py new file mode 100644 index 000000000..8e830916e --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/get_file_classification_metadata_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 = "BoxApi.GetFileClassificationMetadata" + +auth_response = client.tools.authorize( + tool_name=TOOL_NAME, + user_id=TOOL_NAME +) + +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 = { + 'file_identifier': '123' +} + +response = client.tools.execute( + tool_name=TOOL_NAME, + input=tool_input, + user_id=USER_ID, +) +print(json.dumps(response.output.value, indent=2)) diff --git a/public/examples/integrations/toolkits/box_api/get_file_collaborations_example_call_tool.js b/public/examples/integrations/toolkits/box_api/get_file_collaborations_example_call_tool.js new file mode 100644 index 000000000..931695f3a --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/get_file_collaborations_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 = "BoxApi.GetFileCollaborations"; + +// 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 = { + "file_identifier": "1234567890", + "requested_fields": [ + "role", + "status", + "created_at" + ], + "max_items_per_page": 50, + "pagination_start_marker": "marker_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/toolkits/box_api/get_file_collaborations_example_call_tool.py b/public/examples/integrations/toolkits/box_api/get_file_collaborations_example_call_tool.py new file mode 100644 index 000000000..0359f0554 --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/get_file_collaborations_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 = "BoxApi.GetFileCollaborations" + +auth_response = client.tools.authorize( + tool_name=TOOL_NAME, + user_id=TOOL_NAME +) + +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 = { + 'file_identifier': '1234567890', + 'requested_fields': ['role', 'status', 'created_at'], + 'max_items_per_page': 50, + 'pagination_start_marker': 'marker_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/toolkits/box_api/get_file_comments_example_call_tool.js b/public/examples/integrations/toolkits/box_api/get_file_comments_example_call_tool.js new file mode 100644 index 000000000..dd822cfcc --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/get_file_comments_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 = "BoxApi.GetFileComments"; + +// 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 = { + "file_identifier": "12345", + "include_fields_in_response": [ + "message", + "created_by", + "created_at" + ], + "maximum_items_per_page": 50, + "response_start_offset": 0 +}; + +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/toolkits/box_api/get_file_comments_example_call_tool.py b/public/examples/integrations/toolkits/box_api/get_file_comments_example_call_tool.py new file mode 100644 index 000000000..7c2376444 --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/get_file_comments_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 = "BoxApi.GetFileComments" + +auth_response = client.tools.authorize( + tool_name=TOOL_NAME, + user_id=TOOL_NAME +) + +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 = { + 'file_identifier': '12345', + 'include_fields_in_response': ['message', 'created_by', 'created_at'], + 'maximum_items_per_page': 50, + 'response_start_offset': 0 +} + +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/toolkits/box_api/get_file_tasks_example_call_tool.js b/public/examples/integrations/toolkits/box_api/get_file_tasks_example_call_tool.js new file mode 100644 index 000000000..82ac13706 --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/get_file_tasks_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 = "BoxApi.GetFileTasks"; + +// 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 = { + "file_identifier": "1234567890" +}; + +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/toolkits/box_api/get_file_tasks_example_call_tool.py b/public/examples/integrations/toolkits/box_api/get_file_tasks_example_call_tool.py new file mode 100644 index 000000000..25bf4dc4e --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/get_file_tasks_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 = "BoxApi.GetFileTasks" + +auth_response = client.tools.authorize( + tool_name=TOOL_NAME, + user_id=TOOL_NAME +) + +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 = { + 'file_identifier': '1234567890' +} + +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/toolkits/box_api/get_file_version_history_example_call_tool.js b/public/examples/integrations/toolkits/box_api/get_file_version_history_example_call_tool.js new file mode 100644 index 000000000..7027fdb1d --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/get_file_version_history_example_call_tool.js @@ -0,0 +1,39 @@ +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 = "BoxApi.GetFileVersionHistory"; + +// 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 = { + "file_identifier": "1234567890", + "requested_fields": [ + "id", + "version_number", + "modified_at", + "modified_by" + ], + "max_items_per_page": 25, + "response_start_offset": 0 +}; + +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/toolkits/box_api/get_file_version_history_example_call_tool.py b/public/examples/integrations/toolkits/box_api/get_file_version_history_example_call_tool.py new file mode 100644 index 000000000..a7e38d616 --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/get_file_version_history_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 = "BoxApi.GetFileVersionHistory" + +auth_response = client.tools.authorize( + tool_name=TOOL_NAME, + user_id=TOOL_NAME +) + +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 = { + 'file_identifier': '1234567890', + 'requested_fields': ['id', 'version_number', 'modified_at', 'modified_by'], + 'max_items_per_page': 25, + 'response_start_offset': 0 +} + +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/toolkits/box_api/get_file_version_retention_info_example_call_tool.js b/public/examples/integrations/toolkits/box_api/get_file_version_retention_info_example_call_tool.js new file mode 100644 index 000000000..43b013ad3 --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/get_file_version_retention_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 = "BoxApi.GetFileVersionRetentionInfo"; + +// 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 = { + "file_version_retention_id": "fvr_1234567890abcdef" +}; + +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/toolkits/box_api/get_file_version_retention_info_example_call_tool.py b/public/examples/integrations/toolkits/box_api/get_file_version_retention_info_example_call_tool.py new file mode 100644 index 000000000..1a85c4f0b --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/get_file_version_retention_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 = "BoxApi.GetFileVersionRetentionInfo" + +auth_response = client.tools.authorize( + tool_name=TOOL_NAME, + user_id=TOOL_NAME +) + +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 = { + 'file_version_retention_id': 'fvr_1234567890abcdef' +} + +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/toolkits/box_api/get_file_version_retentions_example_call_tool.js b/public/examples/integrations/toolkits/box_api/get_file_version_retentions_example_call_tool.js new file mode 100644 index 000000000..b04c9ca46 --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/get_file_version_retentions_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 = "BoxApi.GetFileVersionRetentions"; + +// 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 = { + "filter_by_file_id": "1234567890", + "retention_policy_id": "rp_987654", + "filter_by_disposition_action": "permanently_delete", + "filter_by_disposition_before_date": "2025-12-31", + "disposition_effective_after_date": "2024-01-01", + "max_items_per_page": 50, + "pagination_start_marker": "marker_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/toolkits/box_api/get_file_version_retentions_example_call_tool.py b/public/examples/integrations/toolkits/box_api/get_file_version_retentions_example_call_tool.py new file mode 100644 index 000000000..cceff1938 --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/get_file_version_retentions_example_call_tool.py @@ -0,0 +1,35 @@ +import json +from arcadepy import Arcade + +client = Arcade() # Automatically finds the `ARCADE_API_KEY` env variable + +USER_ID = "{arcade_user_id}" +TOOL_NAME = "BoxApi.GetFileVersionRetentions" + +auth_response = client.tools.authorize( + tool_name=TOOL_NAME, + user_id=TOOL_NAME +) + +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 = { + 'filter_by_file_id': '1234567890', + 'retention_policy_id': 'rp_987654', + 'filter_by_disposition_action': 'permanently_delete', + 'filter_by_disposition_before_date': '2025-12-31', + 'disposition_effective_after_date': '2024-01-01', + 'max_items_per_page': 50, + 'pagination_start_marker': 'marker_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/toolkits/box_api/get_file_versions_on_legal_hold_example_call_tool.js b/public/examples/integrations/toolkits/box_api/get_file_versions_on_legal_hold_example_call_tool.js new file mode 100644 index 000000000..d12d1b0d4 --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/get_file_versions_on_legal_hold_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 = "BoxApi.GetFileVersionsOnLegalHold"; + +// 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 = { + "legal_hold_policy_assignment_id": "lhpa_7890abcd", + "pagination_start_marker": "marker_2", + "max_items_per_page": 50, + "include_additional_fields_in_response": [ + "file_name", + "version_id", + "modified_at" + ] +}; + +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/toolkits/box_api/get_file_versions_on_legal_hold_example_call_tool.py b/public/examples/integrations/toolkits/box_api/get_file_versions_on_legal_hold_example_call_tool.py new file mode 100644 index 000000000..8fc2b0abe --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/get_file_versions_on_legal_hold_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 = "BoxApi.GetFileVersionsOnLegalHold" + +auth_response = client.tools.authorize( + tool_name=TOOL_NAME, + user_id=TOOL_NAME +) + +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 = { + 'legal_hold_policy_assignment_id': 'lhpa_7890abcd', + 'pagination_start_marker': 'marker_2', + 'max_items_per_page': 50, + 'include_additional_fields_in_response': ['file_name', 'version_id', 'modified_at'] +} + +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/toolkits/box_api/get_file_versions_under_retention_example_call_tool.js b/public/examples/integrations/toolkits/box_api/get_file_versions_under_retention_example_call_tool.js new file mode 100644 index 000000000..ef9ae5861 --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/get_file_versions_under_retention_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 = "BoxApi.GetFileVersionsUnderRetention"; + +// 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 = { + "retention_policy_assignment_id": "rpa_12345", + "pagination_start_marker": "marker_abc", + "max_items_per_page": 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/toolkits/box_api/get_file_versions_under_retention_example_call_tool.py b/public/examples/integrations/toolkits/box_api/get_file_versions_under_retention_example_call_tool.py new file mode 100644 index 000000000..6a71b3d07 --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/get_file_versions_under_retention_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 = "BoxApi.GetFileVersionsUnderRetention" + +auth_response = client.tools.authorize( + tool_name=TOOL_NAME, + user_id=TOOL_NAME +) + +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 = { + 'retention_policy_assignment_id': 'rpa_12345', + 'pagination_start_marker': 'marker_abc', + 'max_items_per_page': 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/toolkits/box_api/get_file_watermark_example_call_tool.js b/public/examples/integrations/toolkits/box_api/get_file_watermark_example_call_tool.js new file mode 100644 index 000000000..34b1a9dab --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/get_file_watermark_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 = "BoxApi.GetFileWatermark"; + +// 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 = { + "file_identifier": "file_12345abcd" +}; + +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/toolkits/box_api/get_file_watermark_example_call_tool.py b/public/examples/integrations/toolkits/box_api/get_file_watermark_example_call_tool.py new file mode 100644 index 000000000..9f36e1280 --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/get_file_watermark_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 = "BoxApi.GetFileWatermark" + +auth_response = client.tools.authorize( + tool_name=TOOL_NAME, + user_id=TOOL_NAME +) + +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 = { + 'file_identifier': 'file_12345abcd' +} + +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/toolkits/box_api/get_files_on_legal_hold_example_call_tool.js b/public/examples/integrations/toolkits/box_api/get_files_on_legal_hold_example_call_tool.js new file mode 100644 index 000000000..f2b068477 --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/get_files_on_legal_hold_example_call_tool.js @@ -0,0 +1,39 @@ +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 = "BoxApi.GetFilesOnLegalHold"; + +// 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 = { + "legal_hold_policy_assignment_id": "lhpa_7890", + "pagination_marker": "marker_2a", + "maximum_items_per_page": 50, + "included_attributes": [ + "file_id", + "version_id", + "file_path", + "hold_reason" + ] +}; + +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/toolkits/box_api/get_files_on_legal_hold_example_call_tool.py b/public/examples/integrations/toolkits/box_api/get_files_on_legal_hold_example_call_tool.py new file mode 100644 index 000000000..61b56b78d --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/get_files_on_legal_hold_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 = "BoxApi.GetFilesOnLegalHold" + +auth_response = client.tools.authorize( + tool_name=TOOL_NAME, + user_id=TOOL_NAME +) + +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 = { + 'legal_hold_policy_assignment_id': 'lhpa_7890', + 'pagination_marker': 'marker_2a', + 'maximum_items_per_page': 50, + 'included_attributes': ['file_id', 'version_id', 'file_path', 'hold_reason'] +} + +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/toolkits/box_api/get_folder_app_item_associations_example_call_tool.js b/public/examples/integrations/toolkits/box_api/get_folder_app_item_associations_example_call_tool.js new file mode 100644 index 000000000..a94d75c7f --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/get_folder_app_item_associations_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 = "BoxApi.GetFolderAppItemAssociations"; + +// 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 = { + "folder_identifier": "12345", + "max_items_per_page": 50, + "pagination_start_marker": "marker_abc123", + "filter_by_application_type": "spreadsheet" +}; + +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/toolkits/box_api/get_folder_app_item_associations_example_call_tool.py b/public/examples/integrations/toolkits/box_api/get_folder_app_item_associations_example_call_tool.py new file mode 100644 index 000000000..117135b4c --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/get_folder_app_item_associations_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 = "BoxApi.GetFolderAppItemAssociations" + +auth_response = client.tools.authorize( + tool_name=TOOL_NAME, + user_id=TOOL_NAME +) + +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 = { + 'folder_identifier': '12345', + 'max_items_per_page': 50, + 'pagination_start_marker': 'marker_abc123', + 'filter_by_application_type': 'spreadsheet' +} + +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/toolkits/box_api/get_folder_classification_example_call_tool.js b/public/examples/integrations/toolkits/box_api/get_folder_classification_example_call_tool.js new file mode 100644 index 000000000..eb9299222 --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/get_folder_classification_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 = "BoxApi.GetFolderClassification"; + +// 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 = { + "folder_identifier": "f_9a8b7c6d" +}; + +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/toolkits/box_api/get_folder_classification_example_call_tool.py b/public/examples/integrations/toolkits/box_api/get_folder_classification_example_call_tool.py new file mode 100644 index 000000000..512891914 --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/get_folder_classification_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 = "BoxApi.GetFolderClassification" + +auth_response = client.tools.authorize( + tool_name=TOOL_NAME, + user_id=TOOL_NAME +) + +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 = { + 'folder_identifier': 'f_9a8b7c6d' +} + +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/toolkits/box_api/get_folder_collaborations_example_call_tool.js b/public/examples/integrations/toolkits/box_api/get_folder_collaborations_example_call_tool.js new file mode 100644 index 000000000..d925c014b --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/get_folder_collaborations_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 = "BoxApi.GetFolderCollaborations"; + +// 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 = { + "folder_identifier": "12345", + "included_attributes": [ + "role", + "status", + "created_at" + ], + "max_items_per_page": 100, + "start_position_marker": "marker_abc" +}; + +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/toolkits/box_api/get_folder_collaborations_example_call_tool.py b/public/examples/integrations/toolkits/box_api/get_folder_collaborations_example_call_tool.py new file mode 100644 index 000000000..a50aa3809 --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/get_folder_collaborations_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 = "BoxApi.GetFolderCollaborations" + +auth_response = client.tools.authorize( + tool_name=TOOL_NAME, + user_id=TOOL_NAME +) + +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 = { + 'folder_identifier': '12345', + 'included_attributes': ['role', 'status', 'created_at'], + 'max_items_per_page': 100, + 'start_position_marker': 'marker_abc' +} + +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/toolkits/box_api/get_folder_details_example_call_tool.js b/public/examples/integrations/toolkits/box_api/get_folder_details_example_call_tool.js new file mode 100644 index 000000000..9d0bbfd03 --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/get_folder_details_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 = "BoxApi.GetFolderDetails"; + +// 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 = { + "folder_unique_identifier": "12345", + "requested_fields": [ + "id", + "name", + "created_at", + "size" + ], + "secondary_sort_attribute": "name", + "sort_direction": "ASC", + "response_offset": 0, + "max_items_per_page": 100, + "ensure_item_has_changed": "0a1b2c3d4e", + "shared_link_credentials": "shared_link=https://app.box.com/s/abcd1234&shared_link_password=secret" +}; + +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/toolkits/box_api/get_folder_details_example_call_tool.py b/public/examples/integrations/toolkits/box_api/get_folder_details_example_call_tool.py new file mode 100644 index 000000000..78260c99b --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/get_folder_details_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 = "BoxApi.GetFolderDetails" + +auth_response = client.tools.authorize( + tool_name=TOOL_NAME, + user_id=TOOL_NAME +) + +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 = { + 'folder_unique_identifier': '12345', + 'requested_fields': ['id', 'name', 'created_at', 'size'], + 'secondary_sort_attribute': 'name', + 'sort_direction': 'ASC', + 'response_offset': 0, + 'max_items_per_page': 100, + 'ensure_item_has_changed': '0a1b2c3d4e', + 'shared_link_credentials': 'shared_link=https://app.box.com/s/abcd1234&shared_link_password=secret' +} + +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/toolkits/box_api/get_folder_metadata_example_call_tool.js b/public/examples/integrations/toolkits/box_api/get_folder_metadata_example_call_tool.js new file mode 100644 index 000000000..8acec7ed8 --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/get_folder_metadata_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 = "BoxApi.GetFolderMetadata"; + +// 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 = { + "folder_identifier": "123456789", + "metadata_scope": "enterprise", + "metadata_template_name": "ProjectStatus" +}; + +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/toolkits/box_api/get_folder_metadata_example_call_tool.py b/public/examples/integrations/toolkits/box_api/get_folder_metadata_example_call_tool.py new file mode 100644 index 000000000..7561d9d91 --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/get_folder_metadata_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 = "BoxApi.GetFolderMetadata" + +auth_response = client.tools.authorize( + tool_name=TOOL_NAME, + user_id=TOOL_NAME +) + +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 = { + 'folder_identifier': '123456789', + 'metadata_scope': 'enterprise', + 'metadata_template_name': 'ProjectStatus' +} + +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/toolkits/box_api/get_folder_shared_link_info_example_call_tool.js b/public/examples/integrations/toolkits/box_api/get_folder_shared_link_info_example_call_tool.js new file mode 100644 index 000000000..18027aa60 --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/get_folder_shared_link_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 = "BoxApi.GetFolderSharedLinkInfo"; + +// 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_shared_link_fields": "shared_link,shared_link.access,shared_link.permissions", + "folder_identifier": "123456789" +}; + +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/toolkits/box_api/get_folder_shared_link_info_example_call_tool.py b/public/examples/integrations/toolkits/box_api/get_folder_shared_link_info_example_call_tool.py new file mode 100644 index 000000000..581d21e2d --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/get_folder_shared_link_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 = "BoxApi.GetFolderSharedLinkInfo" + +auth_response = client.tools.authorize( + tool_name=TOOL_NAME, + user_id=TOOL_NAME +) + +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_shared_link_fields': 'shared_link,shared_link.access,shared_link.permissions', + 'folder_identifier': '123456789' +} + +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/toolkits/box_api/get_folder_watermark_example_call_tool.js b/public/examples/integrations/toolkits/box_api/get_folder_watermark_example_call_tool.js new file mode 100644 index 000000000..44b8cb4c5 --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/get_folder_watermark_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 = "BoxApi.GetFolderWatermark"; + +// 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 = { + "folder_identifier": "1234567890" +}; + +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/toolkits/box_api/get_folder_watermark_example_call_tool.py b/public/examples/integrations/toolkits/box_api/get_folder_watermark_example_call_tool.py new file mode 100644 index 000000000..878436c3c --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/get_folder_watermark_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 = "BoxApi.GetFolderWatermark" + +auth_response = client.tools.authorize( + tool_name=TOOL_NAME, + user_id=TOOL_NAME +) + +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 = { + 'folder_identifier': '1234567890' +} + +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/toolkits/box_api/get_group_collaborations_example_call_tool.js b/public/examples/integrations/toolkits/box_api/get_group_collaborations_example_call_tool.js new file mode 100644 index 000000000..3d4c9fb04 --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/get_group_collaborations_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 = "BoxApi.GetGroupCollaborations"; + +// 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 = { + "group_id": "1234567890", + "max_items_per_page": 50, + "response_offset": 0 +}; + +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/toolkits/box_api/get_group_collaborations_example_call_tool.py b/public/examples/integrations/toolkits/box_api/get_group_collaborations_example_call_tool.py new file mode 100644 index 000000000..6b2c0e02c --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/get_group_collaborations_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 = "BoxApi.GetGroupCollaborations" + +auth_response = client.tools.authorize( + tool_name=TOOL_NAME, + user_id=TOOL_NAME +) + +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 = { + 'group_id': '1234567890', 'max_items_per_page': 50, 'response_offset': 0 +} + +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/toolkits/box_api/get_legacy_file_version_legal_holds_example_call_tool.js b/public/examples/integrations/toolkits/box_api/get_legacy_file_version_legal_holds_example_call_tool.js new file mode 100644 index 000000000..dce0982d7 --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/get_legacy_file_version_legal_holds_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 = "BoxApi.GetLegacyFileVersionLegalHolds"; + +// 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 = { + "legal_hold_policy_id": "lhp_7890", + "pagination_marker": "marker_abc123", + "max_items_per_page": 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/toolkits/box_api/get_legacy_file_version_legal_holds_example_call_tool.py b/public/examples/integrations/toolkits/box_api/get_legacy_file_version_legal_holds_example_call_tool.py new file mode 100644 index 000000000..a5d5efea7 --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/get_legacy_file_version_legal_holds_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 = "BoxApi.GetLegacyFileVersionLegalHolds" + +auth_response = client.tools.authorize( + tool_name=TOOL_NAME, + user_id=TOOL_NAME +) + +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 = { + 'legal_hold_policy_id': 'lhp_7890', 'pagination_marker': 'marker_abc123', 'max_items_per_page': 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/toolkits/box_api/get_legal_hold_policy_assignments_example_call_tool.js b/public/examples/integrations/toolkits/box_api/get_legal_hold_policy_assignments_example_call_tool.js new file mode 100644 index 000000000..9c00d0af9 --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/get_legal_hold_policy_assignments_example_call_tool.js @@ -0,0 +1,41 @@ +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 = "BoxApi.GetLegalHoldPolicyAssignments"; + +// 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 = { + "legal_hold_policy_id": "lhp_9b3f2a7d", + "filter_by_assignment_type": "file_version", + "filter_by_item_id": "1234567890", + "pagination_marker": "marker_abc", + "maximum_items_per_page": 100, + "response_fields": [ + "id", + "assigned_to", + "assignment_type", + "created_at" + ] +}; + +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/toolkits/box_api/get_legal_hold_policy_assignments_example_call_tool.py b/public/examples/integrations/toolkits/box_api/get_legal_hold_policy_assignments_example_call_tool.py new file mode 100644 index 000000000..3cc61bcfa --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/get_legal_hold_policy_assignments_example_call_tool.py @@ -0,0 +1,34 @@ +import json +from arcadepy import Arcade + +client = Arcade() # Automatically finds the `ARCADE_API_KEY` env variable + +USER_ID = "{arcade_user_id}" +TOOL_NAME = "BoxApi.GetLegalHoldPolicyAssignments" + +auth_response = client.tools.authorize( + tool_name=TOOL_NAME, + user_id=TOOL_NAME +) + +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 = { + 'legal_hold_policy_id': 'lhp_9b3f2a7d', + 'filter_by_assignment_type': 'file_version', + 'filter_by_item_id': '1234567890', + 'pagination_marker': 'marker_abc', + 'maximum_items_per_page': 100, + 'response_fields': ['id', 'assigned_to', 'assignment_type', 'created_at'] +} + +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/toolkits/box_api/get_manual_start_workflows_example_call_tool.js b/public/examples/integrations/toolkits/box_api/get_manual_start_workflows_example_call_tool.js new file mode 100644 index 000000000..a37c65015 --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/get_manual_start_workflows_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 = "BoxApi.GetManualStartWorkflows"; + +// 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 = { + "folder_id": "123456789", + "trigger_type_filter": "WORKFLOW_MANUAL_START", + "max_items_per_page": 50, + "pagination_marker": "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/toolkits/box_api/get_manual_start_workflows_example_call_tool.py b/public/examples/integrations/toolkits/box_api/get_manual_start_workflows_example_call_tool.py new file mode 100644 index 000000000..ac7a45fdf --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/get_manual_start_workflows_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 = "BoxApi.GetManualStartWorkflows" + +auth_response = client.tools.authorize( + tool_name=TOOL_NAME, + user_id=TOOL_NAME +) + +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 = { + 'folder_id': '123456789', + 'trigger_type_filter': 'WORKFLOW_MANUAL_START', + 'max_items_per_page': 50, + 'pagination_marker': '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/toolkits/box_api/get_metadata_cascade_policies_example_call_tool.js b/public/examples/integrations/toolkits/box_api/get_metadata_cascade_policies_example_call_tool.js new file mode 100644 index 000000000..a81f7d6fd --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/get_metadata_cascade_policies_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 = "BoxApi.GetMetadataCascadePolicies"; + +// 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 = { + "target_folder_id": "1234567890", + "owner_enterprise_id": "987654321", + "pagination_marker": "abcMarker123", + "response_offset": 0 +}; + +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/toolkits/box_api/get_metadata_cascade_policies_example_call_tool.py b/public/examples/integrations/toolkits/box_api/get_metadata_cascade_policies_example_call_tool.py new file mode 100644 index 000000000..0897f4a60 --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/get_metadata_cascade_policies_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 = "BoxApi.GetMetadataCascadePolicies" + +auth_response = client.tools.authorize( + tool_name=TOOL_NAME, + user_id=TOOL_NAME +) + +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 = { + 'target_folder_id': '1234567890', + 'owner_enterprise_id': '987654321', + 'pagination_marker': 'abcMarker123', + 'response_offset': 0 +} + +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/toolkits/box_api/get_pending_collaboration_invites_example_call_tool.js b/public/examples/integrations/toolkits/box_api/get_pending_collaboration_invites_example_call_tool.js new file mode 100644 index 000000000..6204cc086 --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/get_pending_collaboration_invites_example_call_tool.js @@ -0,0 +1,40 @@ +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 = "BoxApi.GetPendingCollaborationInvites"; + +// 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 = { + "collaboration_status": "pending", + "include_attributes": [ + "id", + "created_at", + "access_level", + "inviter", + "item" + ], + "starting_item_offset": 0, + "maximum_items_per_page": 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/toolkits/box_api/get_pending_collaboration_invites_example_call_tool.py b/public/examples/integrations/toolkits/box_api/get_pending_collaboration_invites_example_call_tool.py new file mode 100644 index 000000000..f1899e22a --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/get_pending_collaboration_invites_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 = "BoxApi.GetPendingCollaborationInvites" + +auth_response = client.tools.authorize( + tool_name=TOOL_NAME, + user_id=TOOL_NAME +) + +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 = { + 'collaboration_status': 'pending', + 'include_attributes': ['id', 'created_at', 'access_level', 'inviter', 'item'], + 'starting_item_offset': 0, + 'maximum_items_per_page': 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/toolkits/box_api/get_recent_items_info_example_call_tool.js b/public/examples/integrations/toolkits/box_api/get_recent_items_info_example_call_tool.js new file mode 100644 index 000000000..07860096b --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/get_recent_items_info_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 = "BoxApi.GetRecentItemsInfo"; + +// 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_additional_fields": [ + "path_collection", + "modified_by", + "size" + ], + "max_items_per_page": 100, + "pagination_start_marker": "marker_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/toolkits/box_api/get_recent_items_info_example_call_tool.py b/public/examples/integrations/toolkits/box_api/get_recent_items_info_example_call_tool.py new file mode 100644 index 000000000..c0b5cd715 --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/get_recent_items_info_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 = "BoxApi.GetRecentItemsInfo" + +auth_response = client.tools.authorize( + tool_name=TOOL_NAME, + user_id=TOOL_NAME +) + +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_additional_fields': ['path_collection', 'modified_by', 'size'], + 'max_items_per_page': 100, + 'pagination_start_marker': 'marker_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/toolkits/box_api/get_retention_policy_assignments_example_call_tool.js b/public/examples/integrations/toolkits/box_api/get_retention_policy_assignments_example_call_tool.js new file mode 100644 index 000000000..8409d1146 --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/get_retention_policy_assignments_example_call_tool.js @@ -0,0 +1,39 @@ +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 = "BoxApi.GetRetentionPolicyAssignments"; + +// 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 = { + "retention_policy_id": "rp_9876543210", + "assignment_type": "folder", + "include_fields_in_response": [ + "assigned_by", + "assigned_at", + "assignment_scope" + ], + "pagination_start_marker": "marker_abc123", + "max_items_per_page": 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/toolkits/box_api/get_retention_policy_assignments_example_call_tool.py b/public/examples/integrations/toolkits/box_api/get_retention_policy_assignments_example_call_tool.py new file mode 100644 index 000000000..cb2772d71 --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/get_retention_policy_assignments_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 = "BoxApi.GetRetentionPolicyAssignments" + +auth_response = client.tools.authorize( + tool_name=TOOL_NAME, + user_id=TOOL_NAME +) + +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 = { + 'retention_policy_id': 'rp_9876543210', + 'assignment_type': 'folder', + 'include_fields_in_response': ['assigned_by', 'assigned_at', 'assignment_scope'], + 'pagination_start_marker': 'marker_abc123', + 'max_items_per_page': 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/toolkits/box_api/get_retention_policy_example_call_tool.js b/public/examples/integrations/toolkits/box_api/get_retention_policy_example_call_tool.js new file mode 100644 index 000000000..6c2da91ab --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/get_retention_policy_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 = "BoxApi.GetRetentionPolicy"; + +// 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 = { + "retention_policy_id": "rp_12345", + "include_attributes": [ + "name", + "rules", + "created_by" + ] +}; + +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/toolkits/box_api/get_retention_policy_example_call_tool.py b/public/examples/integrations/toolkits/box_api/get_retention_policy_example_call_tool.py new file mode 100644 index 000000000..62a418403 --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/get_retention_policy_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 = "BoxApi.GetRetentionPolicy" + +auth_response = client.tools.authorize( + tool_name=TOOL_NAME, + user_id=TOOL_NAME +) + +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 = { + 'retention_policy_id': 'rp_12345', 'include_attributes': ['name', 'rules', 'created_by'] +} + +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/toolkits/box_api/get_safe_collaboration_domains_example_call_tool.js b/public/examples/integrations/toolkits/box_api/get_safe_collaboration_domains_example_call_tool.js new file mode 100644 index 000000000..8b01aa6a1 --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/get_safe_collaboration_domains_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 = "BoxApi.GetSafeCollaborationDomains"; + +// 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 = { + "pagination_start_marker": "abc123", + "maximum_items_per_page": 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/toolkits/box_api/get_safe_collaboration_domains_example_call_tool.py b/public/examples/integrations/toolkits/box_api/get_safe_collaboration_domains_example_call_tool.py new file mode 100644 index 000000000..6a71de86a --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/get_safe_collaboration_domains_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 = "BoxApi.GetSafeCollaborationDomains" + +auth_response = client.tools.authorize( + tool_name=TOOL_NAME, + user_id=TOOL_NAME +) + +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 = { + 'pagination_start_marker': 'abc123', 'maximum_items_per_page': 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/toolkits/box_api/get_shared_app_item_example_call_tool.js b/public/examples/integrations/toolkits/box_api/get_shared_app_item_example_call_tool.js new file mode 100644 index 000000000..d458297a4 --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/get_shared_app_item_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 = "BoxApi.GetSharedAppItem"; + +// 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 = { + "shared_link_information": "shared_link=https://example.com/s/abc123&shared_link_password=secret" +}; + +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/toolkits/box_api/get_shared_app_item_example_call_tool.py b/public/examples/integrations/toolkits/box_api/get_shared_app_item_example_call_tool.py new file mode 100644 index 000000000..63250044b --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/get_shared_app_item_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 = "BoxApi.GetSharedAppItem" + +auth_response = client.tools.authorize( + tool_name=TOOL_NAME, + user_id=TOOL_NAME +) + +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 = { + 'shared_link_information': 'shared_link=https://example.com/s/abc123&shared_link_password=secret' +} + +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/toolkits/box_api/get_shared_folder_info_example_call_tool.js b/public/examples/integrations/toolkits/box_api/get_shared_folder_info_example_call_tool.js new file mode 100644 index 000000000..0aed81ab7 --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/get_shared_folder_info_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 = "BoxApi.GetSharedFolderInfo"; + +// 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 = { + "shared_link_header": "shared_link=https://files.example.com/s/AbCdEf12345&shared_link_password=s3cr3t", + "include_fields": [ + "name", + "id", + "size", + "modified_at" + ], + "etag_condition": "\"a1b2c3d4\"" +}; + +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/toolkits/box_api/get_shared_folder_info_example_call_tool.py b/public/examples/integrations/toolkits/box_api/get_shared_folder_info_example_call_tool.py new file mode 100644 index 000000000..61b13137f --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/get_shared_folder_info_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 = "BoxApi.GetSharedFolderInfo" + +auth_response = client.tools.authorize( + tool_name=TOOL_NAME, + user_id=TOOL_NAME +) + +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 = { + 'shared_link_header': 'shared_link=https://files.example.com/s/AbCdEf12345&shared_link_password=s3cr3t', + 'include_fields': ['name', 'id', 'size', 'modified_at'], + 'etag_condition': '"a1b2c3d4"' +} + +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/toolkits/box_api/get_shared_link_info_example_call_tool.js b/public/examples/integrations/toolkits/box_api/get_shared_link_info_example_call_tool.js new file mode 100644 index 000000000..0c261e3f0 --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/get_shared_link_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 = "BoxApi.GetSharedLinkInfo"; + +// 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_shared_link_fields": "true", + "file_identifier": "123" +}; + +const response = await client.tools.execute({ + tool_name: TOOL_NAME, + input: toolInput, + user_id: USER_ID, +}); + +console.log(JSON.stringify(response.output.value, null, 2)); diff --git a/public/examples/integrations/toolkits/box_api/get_shared_link_info_example_call_tool.py b/public/examples/integrations/toolkits/box_api/get_shared_link_info_example_call_tool.py new file mode 100644 index 000000000..c7030eb92 --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/get_shared_link_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 = "BoxApi.GetSharedLinkInfo" + +auth_response = client.tools.authorize( + tool_name=TOOL_NAME, + user_id=TOOL_NAME +) + +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_shared_link_fields': 'true', 'file_identifier': '123' +} + +response = client.tools.execute( + tool_name=TOOL_NAME, + input=tool_input, + user_id=USER_ID, +) +print(json.dumps(response.output.value, indent=2)) diff --git a/public/examples/integrations/toolkits/box_api/get_shared_web_link_info_example_call_tool.js b/public/examples/integrations/toolkits/box_api/get_shared_web_link_info_example_call_tool.js new file mode 100644 index 000000000..13ad588cb --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/get_shared_web_link_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 = "BoxApi.GetSharedWebLinkInfo"; + +// 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_shared_link_fields": "url,access,permissions,created_by,expires_at", + "web_link_identifier": "wl_12345abcdef" +}; + +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/toolkits/box_api/get_shared_web_link_info_example_call_tool.py b/public/examples/integrations/toolkits/box_api/get_shared_web_link_info_example_call_tool.py new file mode 100644 index 000000000..b5746aa88 --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/get_shared_web_link_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 = "BoxApi.GetSharedWebLinkInfo" + +auth_response = client.tools.authorize( + tool_name=TOOL_NAME, + user_id=TOOL_NAME +) + +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_shared_link_fields': 'url,access,permissions,created_by,expires_at', + 'web_link_identifier': 'wl_12345abcdef' +} + +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/toolkits/box_api/get_shield_info_barrier_member_example_call_tool.js b/public/examples/integrations/toolkits/box_api/get_shield_info_barrier_member_example_call_tool.js new file mode 100644 index 000000000..516c6d1c3 --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/get_shield_info_barrier_member_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 = "BoxApi.GetShieldInfoBarrierMember"; + +// 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 = { + "member_id": "memb_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/toolkits/box_api/get_shield_info_barrier_member_example_call_tool.py b/public/examples/integrations/toolkits/box_api/get_shield_info_barrier_member_example_call_tool.py new file mode 100644 index 000000000..bdde38545 --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/get_shield_info_barrier_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 = "BoxApi.GetShieldInfoBarrierMember" + +auth_response = client.tools.authorize( + tool_name=TOOL_NAME, + user_id=TOOL_NAME +) + +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 = { + 'member_id': 'memb_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/toolkits/box_api/get_shield_info_barrier_segment_example_call_tool.js b/public/examples/integrations/toolkits/box_api/get_shield_info_barrier_segment_example_call_tool.js new file mode 100644 index 000000000..723a34ef1 --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/get_shield_info_barrier_segment_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 = "BoxApi.GetShieldInfoBarrierSegment"; + +// 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 = { + "barrier_segment_id": "sbseg_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/toolkits/box_api/get_shield_info_barrier_segment_example_call_tool.py b/public/examples/integrations/toolkits/box_api/get_shield_info_barrier_segment_example_call_tool.py new file mode 100644 index 000000000..4c5c8d221 --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/get_shield_info_barrier_segment_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 = "BoxApi.GetShieldInfoBarrierSegment" + +auth_response = client.tools.authorize( + tool_name=TOOL_NAME, + user_id=TOOL_NAME +) + +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 = { + 'barrier_segment_id': 'sbseg_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/toolkits/box_api/get_shield_information_barrier_example_call_tool.js b/public/examples/integrations/toolkits/box_api/get_shield_information_barrier_example_call_tool.js new file mode 100644 index 000000000..308e3f0f0 --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/get_shield_information_barrier_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 = "BoxApi.GetShieldInformationBarrier"; + +// 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 = { + "shield_information_barrier_id": "sib_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/toolkits/box_api/get_shield_information_barrier_example_call_tool.py b/public/examples/integrations/toolkits/box_api/get_shield_information_barrier_example_call_tool.py new file mode 100644 index 000000000..c338519b3 --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/get_shield_information_barrier_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 = "BoxApi.GetShieldInformationBarrier" + +auth_response = client.tools.authorize( + tool_name=TOOL_NAME, + user_id=TOOL_NAME +) + +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 = { + 'shield_information_barrier_id': 'sib_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/toolkits/box_api/get_shield_information_barrier_reports_example_call_tool.js b/public/examples/integrations/toolkits/box_api/get_shield_information_barrier_reports_example_call_tool.js new file mode 100644 index 000000000..c0adae8fa --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/get_shield_information_barrier_reports_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 = "BoxApi.GetShieldInformationBarrierReports"; + +// 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 = { + "shield_information_barrier_id": "sib_987654321", + "pagination_marker": "marker_2", + "maximum_items_per_page": 25 +}; + +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/toolkits/box_api/get_shield_information_barrier_reports_example_call_tool.py b/public/examples/integrations/toolkits/box_api/get_shield_information_barrier_reports_example_call_tool.py new file mode 100644 index 000000000..c6465b8d3 --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/get_shield_information_barrier_reports_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 = "BoxApi.GetShieldInformationBarrierReports" + +auth_response = client.tools.authorize( + tool_name=TOOL_NAME, + user_id=TOOL_NAME +) + +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 = { + 'shield_information_barrier_id': 'sib_987654321', + 'pagination_marker': 'marker_2', + 'maximum_items_per_page': 25 +} + +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/toolkits/box_api/get_shield_information_barrier_segment_info_example_call_tool.js b/public/examples/integrations/toolkits/box_api/get_shield_information_barrier_segment_info_example_call_tool.js new file mode 100644 index 000000000..eddc81e2b --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/get_shield_information_barrier_segment_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 = "BoxApi.GetShieldInformationBarrierSegmentInfo"; + +// 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 = { + "segment_restriction_id": "sr_9a8b7c6d5e" +}; + +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/toolkits/box_api/get_shield_information_barrier_segment_info_example_call_tool.py b/public/examples/integrations/toolkits/box_api/get_shield_information_barrier_segment_info_example_call_tool.py new file mode 100644 index 000000000..c8d618729 --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/get_shield_information_barrier_segment_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 = "BoxApi.GetShieldInformationBarrierSegmentInfo" + +auth_response = client.tools.authorize( + tool_name=TOOL_NAME, + user_id=TOOL_NAME +) + +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 = { + 'segment_restriction_id': 'sr_9a8b7c6d5e' +} + +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/toolkits/box_api/get_shield_information_barrier_segments_example_call_tool.js b/public/examples/integrations/toolkits/box_api/get_shield_information_barrier_segments_example_call_tool.js new file mode 100644 index 000000000..ad72f684c --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/get_shield_information_barrier_segments_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 = "BoxApi.GetShieldInformationBarrierSegments"; + +// 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 = { + "shield_information_barrier_id": "sib-abc123", + "pagination_position_marker": "marker-2", + "maximum_items_per_page": 25 +}; + +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/toolkits/box_api/get_shield_information_barrier_segments_example_call_tool.py b/public/examples/integrations/toolkits/box_api/get_shield_information_barrier_segments_example_call_tool.py new file mode 100644 index 000000000..3aa7fc141 --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/get_shield_information_barrier_segments_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 = "BoxApi.GetShieldInformationBarrierSegments" + +auth_response = client.tools.authorize( + tool_name=TOOL_NAME, + user_id=TOOL_NAME +) + +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 = { + 'shield_information_barrier_id': 'sib-abc123', + 'pagination_position_marker': 'marker-2', + 'maximum_items_per_page': 25 +} + +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/toolkits/box_api/get_shield_information_barriers_example_call_tool.js b/public/examples/integrations/toolkits/box_api/get_shield_information_barriers_example_call_tool.js new file mode 100644 index 000000000..98fee594b --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/get_shield_information_barriers_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 = "BoxApi.GetShieldInformationBarriers"; + +// 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 = { + "pagination_marker": "abc123", + "max_items_per_page": 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/toolkits/box_api/get_shield_information_barriers_example_call_tool.py b/public/examples/integrations/toolkits/box_api/get_shield_information_barriers_example_call_tool.py new file mode 100644 index 000000000..9fbe6f405 --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/get_shield_information_barriers_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 = "BoxApi.GetShieldInformationBarriers" + +auth_response = client.tools.authorize( + tool_name=TOOL_NAME, + user_id=TOOL_NAME +) + +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 = { + 'pagination_marker': 'abc123', 'max_items_per_page': 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/toolkits/box_api/get_shield_information_restrictions_example_call_tool.js b/public/examples/integrations/toolkits/box_api/get_shield_information_restrictions_example_call_tool.js new file mode 100644 index 000000000..8d9d08f4b --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/get_shield_information_restrictions_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 = "BoxApi.GetShieldInformationRestrictions"; + +// 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 = { + "segment_id": "seg_abc123", + "pagination_position_marker": "marker_2", + "max_items_per_page": 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/toolkits/box_api/get_shield_information_restrictions_example_call_tool.py b/public/examples/integrations/toolkits/box_api/get_shield_information_restrictions_example_call_tool.py new file mode 100644 index 000000000..555f83481 --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/get_shield_information_restrictions_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 = "BoxApi.GetShieldInformationRestrictions" + +auth_response = client.tools.authorize( + tool_name=TOOL_NAME, + user_id=TOOL_NAME +) + +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 = { + 'segment_id': 'seg_abc123', 'pagination_position_marker': 'marker_2', 'max_items_per_page': 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/toolkits/box_api/get_specific_terms_of_service_example_call_tool.js b/public/examples/integrations/toolkits/box_api/get_specific_terms_of_service_example_call_tool.js new file mode 100644 index 000000000..dde9f74d6 --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/get_specific_terms_of_service_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 = "BoxApi.GetSpecificTermsOfService"; + +// 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 = { + "terms_of_service_id": "tos_12345_example" +}; + +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/toolkits/box_api/get_specific_terms_of_service_example_call_tool.py b/public/examples/integrations/toolkits/box_api/get_specific_terms_of_service_example_call_tool.py new file mode 100644 index 000000000..c196de64f --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/get_specific_terms_of_service_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 = "BoxApi.GetSpecificTermsOfService" + +auth_response = client.tools.authorize( + tool_name=TOOL_NAME, + user_id=TOOL_NAME +) + +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 = { + 'terms_of_service_id': 'tos_12345_example' +} + +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/toolkits/box_api/get_specific_webhook_example_call_tool.js b/public/examples/integrations/toolkits/box_api/get_specific_webhook_example_call_tool.js new file mode 100644 index 000000000..c6aaab86c --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/get_specific_webhook_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 = "BoxApi.GetSpecificWebhook"; + +// 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": "wh_1234567890abcdef" +}; + +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/toolkits/box_api/get_specific_webhook_example_call_tool.py b/public/examples/integrations/toolkits/box_api/get_specific_webhook_example_call_tool.py new file mode 100644 index 000000000..3016d7f43 --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/get_specific_webhook_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 = "BoxApi.GetSpecificWebhook" + +auth_response = client.tools.authorize( + tool_name=TOOL_NAME, + user_id=TOOL_NAME +) + +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': 'wh_1234567890abcdef' +} + +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/toolkits/box_api/get_teams_integration_mappings_example_call_tool.js b/public/examples/integrations/toolkits/box_api/get_teams_integration_mappings_example_call_tool.js new file mode 100644 index 000000000..bfde4771b --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/get_teams_integration_mappings_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 = "BoxApi.GetTeamsIntegrationMappings"; + +// 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 = { + "mapped_item_type": "channel", + "mapped_item_id": "19:abc123def456@thread.tacv2", + "box_item_id_for_mappings": "987654321", + "box_item_type": "folder" +}; + +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/toolkits/box_api/get_teams_integration_mappings_example_call_tool.py b/public/examples/integrations/toolkits/box_api/get_teams_integration_mappings_example_call_tool.py new file mode 100644 index 000000000..94b787859 --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/get_teams_integration_mappings_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 = "BoxApi.GetTeamsIntegrationMappings" + +auth_response = client.tools.authorize( + tool_name=TOOL_NAME, + user_id=TOOL_NAME +) + +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 = { + 'mapped_item_type': 'channel', + 'mapped_item_id': '19:abc123def456@thread.tacv2', + 'box_item_id_for_mappings': '987654321', + 'box_item_type': 'folder' +} + +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/toolkits/box_api/get_upload_session_details_example_call_tool.js b/public/examples/integrations/toolkits/box_api/get_upload_session_details_example_call_tool.js new file mode 100644 index 000000000..dd64373dc --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/get_upload_session_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 = "BoxApi.GetUploadSessionDetails"; + +// 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 = { + "upload_session_id": "sess_98765abc123" +}; + +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/toolkits/box_api/get_upload_session_details_example_call_tool.py b/public/examples/integrations/toolkits/box_api/get_upload_session_details_example_call_tool.py new file mode 100644 index 000000000..44780acc9 --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/get_upload_session_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 = "BoxApi.GetUploadSessionDetails" + +auth_response = client.tools.authorize( + tool_name=TOOL_NAME, + user_id=TOOL_NAME +) + +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 = { + 'upload_session_id': 'sess_98765abc123' +} + +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/toolkits/box_api/get_uploaded_chunks_list_example_call_tool.js b/public/examples/integrations/toolkits/box_api/get_uploaded_chunks_list_example_call_tool.js new file mode 100644 index 000000000..6cfa63772 --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/get_uploaded_chunks_list_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 = "BoxApi.GetUploadedChunksList"; + +// 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 = { + "upload_session_identifier": "sess_abc123", + "response_offset": 0, + "max_items_per_page": 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/toolkits/box_api/get_uploaded_chunks_list_example_call_tool.py b/public/examples/integrations/toolkits/box_api/get_uploaded_chunks_list_example_call_tool.py new file mode 100644 index 000000000..80c96b969 --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/get_uploaded_chunks_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 = "BoxApi.GetUploadedChunksList" + +auth_response = client.tools.authorize( + tool_name=TOOL_NAME, + user_id=TOOL_NAME +) + +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 = { + 'upload_session_identifier': 'sess_abc123', 'response_offset': 0, 'max_items_per_page': 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/toolkits/box_api/get_user_avatar_example_call_tool.js b/public/examples/integrations/toolkits/box_api/get_user_avatar_example_call_tool.js new file mode 100644 index 000000000..fcf6ce3c1 --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/get_user_avatar_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 = "BoxApi.GetUserAvatar"; + +// 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 = { + "user_id": "user_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/toolkits/box_api/get_user_avatar_example_call_tool.py b/public/examples/integrations/toolkits/box_api/get_user_avatar_example_call_tool.py new file mode 100644 index 000000000..991bbcfc2 --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/get_user_avatar_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 = "BoxApi.GetUserAvatar" + +auth_response = client.tools.authorize( + tool_name=TOOL_NAME, + user_id=TOOL_NAME +) + +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 = { + 'user_id': 'user_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/toolkits/box_api/get_user_email_aliases_example_call_tool.js b/public/examples/integrations/toolkits/box_api/get_user_email_aliases_example_call_tool.js new file mode 100644 index 000000000..05aa0d19c --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/get_user_email_aliases_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 = "BoxApi.GetUserEmailAliases"; + +// 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 = { + "user_identifier": "user_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/toolkits/box_api/get_user_email_aliases_example_call_tool.py b/public/examples/integrations/toolkits/box_api/get_user_email_aliases_example_call_tool.py new file mode 100644 index 000000000..6ee6cd62c --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/get_user_email_aliases_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 = "BoxApi.GetUserEmailAliases" + +auth_response = client.tools.authorize( + tool_name=TOOL_NAME, + user_id=TOOL_NAME +) + +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 = { + 'user_identifier': 'user_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/toolkits/box_api/get_user_group_memberships_example_call_tool.js b/public/examples/integrations/toolkits/box_api/get_user_group_memberships_example_call_tool.js new file mode 100644 index 000000000..ebefe5a93 --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/get_user_group_memberships_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 = "BoxApi.GetUserGroupMemberships"; + +// 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 = { + "user_identifier": "user-7890", + "max_items_per_page": 50, + "response_offset": 0 +}; + +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/toolkits/box_api/get_user_group_memberships_example_call_tool.py b/public/examples/integrations/toolkits/box_api/get_user_group_memberships_example_call_tool.py new file mode 100644 index 000000000..2f534b9a1 --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/get_user_group_memberships_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 = "BoxApi.GetUserGroupMemberships" + +auth_response = client.tools.authorize( + tool_name=TOOL_NAME, + user_id=TOOL_NAME +) + +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 = { + 'user_identifier': 'user-7890', 'max_items_per_page': 50, 'response_offset': 0 +} + +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/toolkits/box_api/get_user_information_example_call_tool.js b/public/examples/integrations/toolkits/box_api/get_user_information_example_call_tool.js new file mode 100644 index 000000000..fdb935807 --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/get_user_information_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 = "BoxApi.GetUserInformation"; + +// 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 = { + "user_identifier": "user-12345", + "requested_user_fields": [ + "email", + "displayName", + "jobTitle" + ] +}; + +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/toolkits/box_api/get_user_information_example_call_tool.py b/public/examples/integrations/toolkits/box_api/get_user_information_example_call_tool.py new file mode 100644 index 000000000..ba37b67b0 --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/get_user_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 = "BoxApi.GetUserInformation" + +auth_response = client.tools.authorize( + tool_name=TOOL_NAME, + user_id=TOOL_NAME +) + +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 = { + 'user_identifier': 'user-12345', 'requested_user_fields': ['email', 'displayName', 'jobTitle'] +} + +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/toolkits/box_api/get_user_tos_status_example_call_tool.js b/public/examples/integrations/toolkits/box_api/get_user_tos_status_example_call_tool.js new file mode 100644 index 000000000..11631c1fd --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/get_user_tos_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 = "BoxApi.GetUserTosStatus"; + +// 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 = { + "terms_of_service_id": "tos_2025_09_v1", + "filter_by_user_id": "user_98765" +}; + +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/toolkits/box_api/get_user_tos_status_example_call_tool.py b/public/examples/integrations/toolkits/box_api/get_user_tos_status_example_call_tool.py new file mode 100644 index 000000000..ba9b1a983 --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/get_user_tos_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 = "BoxApi.GetUserTosStatus" + +auth_response = client.tools.authorize( + tool_name=TOOL_NAME, + user_id=TOOL_NAME +) + +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 = { + 'terms_of_service_id': 'tos_2025_09_v1', 'filter_by_user_id': 'user_98765' +} + +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/toolkits/box_api/list_ai_agents_example_call_tool.js b/public/examples/integrations/toolkits/box_api/list_ai_agents_example_call_tool.js new file mode 100644 index 000000000..49a14617a --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/list_ai_agents_example_call_tool.js @@ -0,0 +1,47 @@ +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 = "BoxApi.ListAiAgents"; + +// 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 = { + "filter_by_mode": [ + "text_gen", + "extract" + ], + "response_fields": [ + "id", + "name", + "mode", + "status" + ], + "agent_state_filter": [ + "enabled", + "enabled_for_selected_users" + ], + "results_start_position_marker": "cursor_abc123", + "max_items_per_page": 25, + "include_box_default_agents": 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/toolkits/box_api/list_ai_agents_example_call_tool.py b/public/examples/integrations/toolkits/box_api/list_ai_agents_example_call_tool.py new file mode 100644 index 000000000..0626b6be3 --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/list_ai_agents_example_call_tool.py @@ -0,0 +1,34 @@ +import json +from arcadepy import Arcade + +client = Arcade() # Automatically finds the `ARCADE_API_KEY` env variable + +USER_ID = "{arcade_user_id}" +TOOL_NAME = "BoxApi.ListAiAgents" + +auth_response = client.tools.authorize( + tool_name=TOOL_NAME, + user_id=TOOL_NAME +) + +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 = { + 'filter_by_mode': ['text_gen', 'extract'], + 'response_fields': ['id', 'name', 'mode', 'status'], + 'agent_state_filter': ['enabled', 'enabled_for_selected_users'], + 'results_start_position_marker': 'cursor_abc123', + 'max_items_per_page': 25, + 'include_box_default_agents': 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/toolkits/box_api/list_box_doc_templates_example_call_tool.js b/public/examples/integrations/toolkits/box_api/list_box_doc_templates_example_call_tool.js new file mode 100644 index 000000000..36a794ad4 --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/list_box_doc_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 = "BoxApi.ListBoxDocTemplates"; + +// 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 = { + "pagination_start_marker": "marker_abc123", + "max_items_per_page": 25 +}; + +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/toolkits/box_api/list_box_doc_templates_example_call_tool.py b/public/examples/integrations/toolkits/box_api/list_box_doc_templates_example_call_tool.py new file mode 100644 index 000000000..2c58c65c4 --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/list_box_doc_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 = "BoxApi.ListBoxDocTemplates" + +auth_response = client.tools.authorize( + tool_name=TOOL_NAME, + user_id=TOOL_NAME +) + +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 = { + 'pagination_start_marker': 'marker_abc123', 'max_items_per_page': 25 +} + +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/toolkits/box_api/list_box_docgen_jobs_example_call_tool.js b/public/examples/integrations/toolkits/box_api/list_box_docgen_jobs_example_call_tool.js new file mode 100644 index 000000000..2967d3e99 --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/list_box_docgen_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 = "BoxApi.ListBoxDocgenJobs"; + +// 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 = { + "pagination_marker": "abc123marker", + "maximum_items_per_page": 25 +}; + +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/toolkits/box_api/list_box_docgen_jobs_example_call_tool.py b/public/examples/integrations/toolkits/box_api/list_box_docgen_jobs_example_call_tool.py new file mode 100644 index 000000000..5b1bbf324 --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/list_box_docgen_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 = "BoxApi.ListBoxDocgenJobs" + +auth_response = client.tools.authorize( + tool_name=TOOL_NAME, + user_id=TOOL_NAME +) + +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 = { + 'pagination_marker': 'abc123marker', 'maximum_items_per_page': 25 +} + +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/toolkits/box_api/list_box_docgen_template_tags_example_call_tool.js b/public/examples/integrations/toolkits/box_api/list_box_docgen_template_tags_example_call_tool.js new file mode 100644 index 000000000..414f75ede --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/list_box_docgen_template_tags_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 = "BoxApi.ListBoxDocgenTemplateTags"; + +// 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 = { + "template_id": "tmpl_12345", + "template_version_id": "v2", + "pagination_start_marker": "marker_0", + "maximum_items_per_page": 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/toolkits/box_api/list_box_docgen_template_tags_example_call_tool.py b/public/examples/integrations/toolkits/box_api/list_box_docgen_template_tags_example_call_tool.py new file mode 100644 index 000000000..05b9d06c4 --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/list_box_docgen_template_tags_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 = "BoxApi.ListBoxDocgenTemplateTags" + +auth_response = client.tools.authorize( + tool_name=TOOL_NAME, + user_id=TOOL_NAME +) + +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 = { + 'template_id': 'tmpl_12345', + 'template_version_id': 'v2', + 'pagination_start_marker': 'marker_0', + 'maximum_items_per_page': 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/toolkits/box_api/list_defined_webhooks_example_call_tool.js b/public/examples/integrations/toolkits/box_api/list_defined_webhooks_example_call_tool.js new file mode 100644 index 000000000..fad3c8f23 --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/list_defined_webhooks_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 = "BoxApi.ListDefinedWebhooks"; + +// 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 = { + "pagination_start_marker": "abc123", + "maximum_items_per_page": 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/toolkits/box_api/list_defined_webhooks_example_call_tool.py b/public/examples/integrations/toolkits/box_api/list_defined_webhooks_example_call_tool.py new file mode 100644 index 000000000..00b80d3e8 --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/list_defined_webhooks_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 = "BoxApi.ListDefinedWebhooks" + +auth_response = client.tools.authorize( + tool_name=TOOL_NAME, + user_id=TOOL_NAME +) + +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 = { + 'pagination_start_marker': 'abc123', 'maximum_items_per_page': 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/toolkits/box_api/list_docgen_batch_jobs_example_call_tool.js b/public/examples/integrations/toolkits/box_api/list_docgen_batch_jobs_example_call_tool.js new file mode 100644 index 000000000..4ae8e4744 --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/list_docgen_batch_jobs_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 = "BoxApi.ListDocgenBatchJobs"; + +// 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 = { + "box_doc_gen_batch_id": "batch_98765", + "pagination_marker": "marker_abc123", + "maximum_items_per_page": 25 +}; + +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/toolkits/box_api/list_docgen_batch_jobs_example_call_tool.py b/public/examples/integrations/toolkits/box_api/list_docgen_batch_jobs_example_call_tool.py new file mode 100644 index 000000000..db5ef4c5d --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/list_docgen_batch_jobs_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 = "BoxApi.ListDocgenBatchJobs" + +auth_response = client.tools.authorize( + tool_name=TOOL_NAME, + user_id=TOOL_NAME +) + +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 = { + 'box_doc_gen_batch_id': 'batch_98765', + 'pagination_marker': 'marker_abc123', + 'maximum_items_per_page': 25 +} + +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/toolkits/box_api/list_enterprise_users_example_call_tool.js b/public/examples/integrations/toolkits/box_api/list_enterprise_users_example_call_tool.js new file mode 100644 index 000000000..da01dbf53 --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/list_enterprise_users_example_call_tool.js @@ -0,0 +1,39 @@ +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 = "BoxApi.ListEnterpriseUsers"; + +// 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 = { + "search_term_for_user_filtering": "alex", + "user_type_filter": "managed", + "include_additional_fields": [ + "role", + "avatar_url" + ], + "response_offset": 0, + "max_items_per_page": 50, + "use_marker_pagination": 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/toolkits/box_api/list_enterprise_users_example_call_tool.py b/public/examples/integrations/toolkits/box_api/list_enterprise_users_example_call_tool.py new file mode 100644 index 000000000..d404a7566 --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/list_enterprise_users_example_call_tool.py @@ -0,0 +1,34 @@ +import json +from arcadepy import Arcade + +client = Arcade() # Automatically finds the `ARCADE_API_KEY` env variable + +USER_ID = "{arcade_user_id}" +TOOL_NAME = "BoxApi.ListEnterpriseUsers" + +auth_response = client.tools.authorize( + tool_name=TOOL_NAME, + user_id=TOOL_NAME +) + +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 = { + 'search_term_for_user_filtering': 'alex', + 'user_type_filter': 'managed', + 'include_additional_fields': ['role', 'avatar_url'], + 'response_offset': 0, + 'max_items_per_page': 50, + 'use_marker_pagination': 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/toolkits/box_api/list_files_under_retention_policy_example_call_tool.js b/public/examples/integrations/toolkits/box_api/list_files_under_retention_policy_example_call_tool.js new file mode 100644 index 000000000..ac3f89df1 --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/list_files_under_retention_policy_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 = "BoxApi.ListFilesUnderRetentionPolicy"; + +// 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 = { + "retention_policy_assignment_id": "rpa_12345abcd", + "position_marker": "marker_0001", + "max_items_per_page": 100 +}; + +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/toolkits/box_api/list_files_under_retention_policy_example_call_tool.py b/public/examples/integrations/toolkits/box_api/list_files_under_retention_policy_example_call_tool.py new file mode 100644 index 000000000..eb5a8e4d5 --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/list_files_under_retention_policy_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 = "BoxApi.ListFilesUnderRetentionPolicy" + +auth_response = client.tools.authorize( + tool_name=TOOL_NAME, + user_id=TOOL_NAME +) + +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 = { + 'retention_policy_assignment_id': 'rpa_12345abcd', + 'position_marker': 'marker_0001', + 'max_items_per_page': 100 +} + +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/toolkits/box_api/list_shield_barrier_segment_members_example_call_tool.js b/public/examples/integrations/toolkits/box_api/list_shield_barrier_segment_members_example_call_tool.js new file mode 100644 index 000000000..5c88ea63f --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/list_shield_barrier_segment_members_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 = "BoxApi.ListShieldBarrierSegmentMembers"; + +// 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 = { + "segment_id": "seg-82b1f4", + "pagination_marker": "mkr-3a9", + "items_per_page_limit": 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/toolkits/box_api/list_shield_barrier_segment_members_example_call_tool.py b/public/examples/integrations/toolkits/box_api/list_shield_barrier_segment_members_example_call_tool.py new file mode 100644 index 000000000..3f201c653 --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/list_shield_barrier_segment_members_example_call_tool.py @@ -0,0 +1,29 @@ +import json +from arcadepy import Arcade + +client = Arcade() # Automatically finds the `ARCADE_API_KEY` env variable + +USER_ID = "{arcade_user_id}" +TOOL_NAME = "BoxApi.ListShieldBarrierSegmentMembers" + +auth_response = client.tools.authorize( + tool_name=TOOL_NAME, + user_id=TOOL_NAME +) + +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 = { + 'segment_id': 'seg-82b1f4', 'pagination_marker': 'mkr-3a9', 'items_per_page_limit': 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/toolkits/box_api/list_slack_integration_mappings_example_call_tool.js b/public/examples/integrations/toolkits/box_api/list_slack_integration_mappings_example_call_tool.js new file mode 100644 index 000000000..fe7e8a062 --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/list_slack_integration_mappings_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 = "BoxApi.ListSlackIntegrationMappings"; + +// 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 = { + "pagination_start_marker": "abc123marker", + "max_items_per_page": 50, + "mapped_item_type": "channel", + "mapped_item_id": "C01234567", + "box_item_id": "1234567890", + "box_item_type": "folder", + "include_manually_created_mappings": 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/toolkits/box_api/list_slack_integration_mappings_example_call_tool.py b/public/examples/integrations/toolkits/box_api/list_slack_integration_mappings_example_call_tool.py new file mode 100644 index 000000000..1d53c06e7 --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/list_slack_integration_mappings_example_call_tool.py @@ -0,0 +1,35 @@ +import json +from arcadepy import Arcade + +client = Arcade() # Automatically finds the `ARCADE_API_KEY` env variable + +USER_ID = "{arcade_user_id}" +TOOL_NAME = "BoxApi.ListSlackIntegrationMappings" + +auth_response = client.tools.authorize( + tool_name=TOOL_NAME, + user_id=TOOL_NAME +) + +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 = { + 'pagination_start_marker': 'abc123marker', + 'max_items_per_page': 50, + 'mapped_item_type': 'channel', + 'mapped_item_id': 'C01234567', + 'box_item_id': '1234567890', + 'box_item_type': 'folder', + 'include_manually_created_mappings': 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/toolkits/box_api/list_task_assignments_example_call_tool.js b/public/examples/integrations/toolkits/box_api/list_task_assignments_example_call_tool.js new file mode 100644 index 000000000..d5d8ce7c8 --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/list_task_assignments_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 = "BoxApi.ListTaskAssignments"; + +// 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 = { + "task_id": "task_98765" +}; + +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/toolkits/box_api/list_task_assignments_example_call_tool.py b/public/examples/integrations/toolkits/box_api/list_task_assignments_example_call_tool.py new file mode 100644 index 000000000..31f92302d --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/list_task_assignments_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 = "BoxApi.ListTaskAssignments" + +auth_response = client.tools.authorize( + tool_name=TOOL_NAME, + user_id=TOOL_NAME +) + +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 = { + 'task_id': 'task_98765' +} + +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/toolkits/box_api/list_template_jobs_example_call_tool.js b/public/examples/integrations/toolkits/box_api/list_template_jobs_example_call_tool.js new file mode 100644 index 000000000..ae0e89f46 --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/list_template_jobs_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 = "BoxApi.ListTemplateJobs"; + +// 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 = { + "template_identifier": "tpl_9f3a21", + "pagination_start_marker": "marker_02", + "max_items_per_page": 25 +}; + +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/toolkits/box_api/list_template_jobs_example_call_tool.py b/public/examples/integrations/toolkits/box_api/list_template_jobs_example_call_tool.py new file mode 100644 index 000000000..0f194b4f6 --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/list_template_jobs_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 = "BoxApi.ListTemplateJobs" + +auth_response = client.tools.authorize( + tool_name=TOOL_NAME, + user_id=TOOL_NAME +) + +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 = { + 'template_identifier': 'tpl_9f3a21', + 'pagination_start_marker': 'marker_02', + 'max_items_per_page': 25 +} + +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/toolkits/box_api/permanently_delete_file_from_trash_example_call_tool.js b/public/examples/integrations/toolkits/box_api/permanently_delete_file_from_trash_example_call_tool.js new file mode 100644 index 000000000..b31668e41 --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/permanently_delete_file_from_trash_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 = "BoxApi.PermanentlyDeleteFileFromTrash"; + +// 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 = { + "file_identifier": "file_9a8b7c6d" +}; + +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/toolkits/box_api/permanently_delete_file_from_trash_example_call_tool.py b/public/examples/integrations/toolkits/box_api/permanently_delete_file_from_trash_example_call_tool.py new file mode 100644 index 000000000..060945870 --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/permanently_delete_file_from_trash_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 = "BoxApi.PermanentlyDeleteFileFromTrash" + +auth_response = client.tools.authorize( + tool_name=TOOL_NAME, + user_id=TOOL_NAME +) + +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 = { + 'file_identifier': 'file_9a8b7c6d' +} + +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/toolkits/box_api/permanently_delete_folder_in_trash_example_call_tool.js b/public/examples/integrations/toolkits/box_api/permanently_delete_folder_in_trash_example_call_tool.js new file mode 100644 index 000000000..bd9dbd809 --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/permanently_delete_folder_in_trash_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 = "BoxApi.PermanentlyDeleteFolderInTrash"; + +// 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 = { + "folder_identifier": "a1b2c3d4-folder-id" +}; + +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/toolkits/box_api/permanently_delete_folder_in_trash_example_call_tool.py b/public/examples/integrations/toolkits/box_api/permanently_delete_folder_in_trash_example_call_tool.py new file mode 100644 index 000000000..d0b44a9e8 --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/permanently_delete_folder_in_trash_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 = "BoxApi.PermanentlyDeleteFolderInTrash" + +auth_response = client.tools.authorize( + tool_name=TOOL_NAME, + user_id=TOOL_NAME +) + +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 = { + 'folder_identifier': 'a1b2c3d4-folder-id' +} + +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/toolkits/box_api/permanently_delete_trashed_web_link_example_call_tool.js b/public/examples/integrations/toolkits/box_api/permanently_delete_trashed_web_link_example_call_tool.js new file mode 100644 index 000000000..5703fe378 --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/permanently_delete_trashed_web_link_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 = "BoxApi.PermanentlyDeleteTrashedWebLink"; + +// 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 = { + "web_link_identifier": "1234567890" +}; + +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/toolkits/box_api/permanently_delete_trashed_web_link_example_call_tool.py b/public/examples/integrations/toolkits/box_api/permanently_delete_trashed_web_link_example_call_tool.py new file mode 100644 index 000000000..a3c962cde --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/permanently_delete_trashed_web_link_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 = "BoxApi.PermanentlyDeleteTrashedWebLink" + +auth_response = client.tools.authorize( + tool_name=TOOL_NAME, + user_id=TOOL_NAME +) + +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 = { + 'web_link_identifier': '1234567890' +} + +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/toolkits/box_api/remove_box_skills_metadata_example_call_tool.js b/public/examples/integrations/toolkits/box_api/remove_box_skills_metadata_example_call_tool.js new file mode 100644 index 000000000..8a654eeb7 --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/remove_box_skills_metadata_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 = "BoxApi.RemoveBoxSkillsMetadata"; + +// 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 = { + "file_identifier": "1234567890" +}; + +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/toolkits/box_api/remove_box_skills_metadata_example_call_tool.py b/public/examples/integrations/toolkits/box_api/remove_box_skills_metadata_example_call_tool.py new file mode 100644 index 000000000..37b58f94c --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/remove_box_skills_metadata_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 = "BoxApi.RemoveBoxSkillsMetadata" + +auth_response = client.tools.authorize( + tool_name=TOOL_NAME, + user_id=TOOL_NAME +) + +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 = { + 'file_identifier': '1234567890' +} + +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/toolkits/box_api/remove_collaboration_whitelist_exemption_example_call_tool.js b/public/examples/integrations/toolkits/box_api/remove_collaboration_whitelist_exemption_example_call_tool.js new file mode 100644 index 000000000..e0cebf672 --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/remove_collaboration_whitelist_exemption_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 = "BoxApi.RemoveCollaborationWhitelistExemption"; + +// 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 = { + "exemption_id": "ex_9876543210" +}; + +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/toolkits/box_api/remove_collaboration_whitelist_exemption_example_call_tool.py b/public/examples/integrations/toolkits/box_api/remove_collaboration_whitelist_exemption_example_call_tool.py new file mode 100644 index 000000000..5b23587f9 --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/remove_collaboration_whitelist_exemption_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 = "BoxApi.RemoveCollaborationWhitelistExemption" + +auth_response = client.tools.authorize( + tool_name=TOOL_NAME, + user_id=TOOL_NAME +) + +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 = { + 'exemption_id': 'ex_9876543210' +} + +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/toolkits/box_api/remove_file_classification_example_call_tool.js b/public/examples/integrations/toolkits/box_api/remove_file_classification_example_call_tool.js new file mode 100644 index 000000000..de5a91470 --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/remove_file_classification_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 = "BoxApi.RemoveFileClassification"; + +// 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 = { + "file_identifier": "https://box2.example.com/file/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/toolkits/box_api/remove_file_classification_example_call_tool.py b/public/examples/integrations/toolkits/box_api/remove_file_classification_example_call_tool.py new file mode 100644 index 000000000..deab722b9 --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/remove_file_classification_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 = "BoxApi.RemoveFileClassification" + +auth_response = client.tools.authorize( + tool_name=TOOL_NAME, + user_id=TOOL_NAME +) + +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 = { + 'file_identifier': 'https://box2.example.com/file/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/toolkits/box_api/remove_file_watermark_example_call_tool.js b/public/examples/integrations/toolkits/box_api/remove_file_watermark_example_call_tool.js new file mode 100644 index 000000000..94f36f921 --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/remove_file_watermark_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 = "BoxApi.RemoveFileWatermark"; + +// 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 = { + "file_identifier": "1234567890" +}; + +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/toolkits/box_api/remove_file_watermark_example_call_tool.py b/public/examples/integrations/toolkits/box_api/remove_file_watermark_example_call_tool.py new file mode 100644 index 000000000..04bba9fda --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/remove_file_watermark_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 = "BoxApi.RemoveFileWatermark" + +auth_response = client.tools.authorize( + tool_name=TOOL_NAME, + user_id=TOOL_NAME +) + +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 = { + 'file_identifier': '1234567890' +} + +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/toolkits/box_api/remove_folder_classifications_example_call_tool.js b/public/examples/integrations/toolkits/box_api/remove_folder_classifications_example_call_tool.js new file mode 100644 index 000000000..46254696c --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/remove_folder_classifications_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 = "BoxApi.RemoveFolderClassifications"; + +// 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 = { + "folder_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/toolkits/box_api/remove_folder_classifications_example_call_tool.py b/public/examples/integrations/toolkits/box_api/remove_folder_classifications_example_call_tool.py new file mode 100644 index 000000000..a3428ddcb --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/remove_folder_classifications_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 = "BoxApi.RemoveFolderClassifications" + +auth_response = client.tools.authorize( + tool_name=TOOL_NAME, + user_id=TOOL_NAME +) + +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 = { + 'folder_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/toolkits/box_api/remove_legal_hold_from_item_example_call_tool.js b/public/examples/integrations/toolkits/box_api/remove_legal_hold_from_item_example_call_tool.js new file mode 100644 index 000000000..de763d000 --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/remove_legal_hold_from_item_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 = "BoxApi.RemoveLegalHoldFromItem"; + +// 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 = { + "legal_hold_policy_assignment_id": "lhpa_89b3f2a1" +}; + +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/toolkits/box_api/remove_legal_hold_from_item_example_call_tool.py b/public/examples/integrations/toolkits/box_api/remove_legal_hold_from_item_example_call_tool.py new file mode 100644 index 000000000..6650d544c --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/remove_legal_hold_from_item_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 = "BoxApi.RemoveLegalHoldFromItem" + +auth_response = client.tools.authorize( + tool_name=TOOL_NAME, + user_id=TOOL_NAME +) + +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 = { + 'legal_hold_policy_assignment_id': 'lhpa_89b3f2a1' +} + +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/toolkits/box_api/remove_retention_policy_assignment_example_call_tool.js b/public/examples/integrations/toolkits/box_api/remove_retention_policy_assignment_example_call_tool.js new file mode 100644 index 000000000..681108cea --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/remove_retention_policy_assignment_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 = "BoxApi.RemoveRetentionPolicyAssignment"; + +// 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 = { + "retention_policy_assignment_id": "1234567890" +}; + +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/toolkits/box_api/remove_retention_policy_assignment_example_call_tool.py b/public/examples/integrations/toolkits/box_api/remove_retention_policy_assignment_example_call_tool.py new file mode 100644 index 000000000..5fd609c22 --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/remove_retention_policy_assignment_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 = "BoxApi.RemoveRetentionPolicyAssignment" + +auth_response = client.tools.authorize( + tool_name=TOOL_NAME, + user_id=TOOL_NAME +) + +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 = { + 'retention_policy_assignment_id': '1234567890' +} + +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/toolkits/box_api/remove_safe_collaboration_domain_example_call_tool.js b/public/examples/integrations/toolkits/box_api/remove_safe_collaboration_domain_example_call_tool.js new file mode 100644 index 000000000..a2792f92b --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/remove_safe_collaboration_domain_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 = "BoxApi.RemoveSafeCollaborationDomain"; + +// 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 = { + "whitelist_entry_id": "entry_7f3a2b9c" +}; + +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/toolkits/box_api/remove_safe_collaboration_domain_example_call_tool.py b/public/examples/integrations/toolkits/box_api/remove_safe_collaboration_domain_example_call_tool.py new file mode 100644 index 000000000..7ad9653a4 --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/remove_safe_collaboration_domain_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 = "BoxApi.RemoveSafeCollaborationDomain" + +auth_response = client.tools.authorize( + tool_name=TOOL_NAME, + user_id=TOOL_NAME +) + +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 = { + 'whitelist_entry_id': 'entry_7f3a2b9c' +} + +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/toolkits/box_api/remove_shield_barrier_member_example_call_tool.js b/public/examples/integrations/toolkits/box_api/remove_shield_barrier_member_example_call_tool.js new file mode 100644 index 000000000..09e1211a0 --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/remove_shield_barrier_member_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 = "BoxApi.RemoveShieldBarrierMember"; + +// 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 = { + "member_id_for_deletion": "mbr_987654321" +}; + +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/toolkits/box_api/remove_shield_barrier_member_example_call_tool.py b/public/examples/integrations/toolkits/box_api/remove_shield_barrier_member_example_call_tool.py new file mode 100644 index 000000000..38a73166b --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/remove_shield_barrier_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 = "BoxApi.RemoveShieldBarrierMember" + +auth_response = client.tools.authorize( + tool_name=TOOL_NAME, + user_id=TOOL_NAME +) + +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 = { + 'member_id_for_deletion': 'mbr_987654321' +} + +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/toolkits/box_api/remove_user_avatar_example_call_tool.js b/public/examples/integrations/toolkits/box_api/remove_user_avatar_example_call_tool.js new file mode 100644 index 000000000..39da7dc5e --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/remove_user_avatar_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 = "BoxApi.RemoveUserAvatar"; + +// 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 = { + "user_identifier": "user_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/toolkits/box_api/remove_user_avatar_example_call_tool.py b/public/examples/integrations/toolkits/box_api/remove_user_avatar_example_call_tool.py new file mode 100644 index 000000000..aaaafa65e --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/remove_user_avatar_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 = "BoxApi.RemoveUserAvatar" + +auth_response = client.tools.authorize( + tool_name=TOOL_NAME, + user_id=TOOL_NAME +) + +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 = { + 'user_identifier': 'user_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/toolkits/box_api/remove_user_email_alias_example_call_tool.js b/public/examples/integrations/toolkits/box_api/remove_user_email_alias_example_call_tool.js new file mode 100644 index 000000000..13b6004b0 --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/remove_user_email_alias_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 = "BoxApi.RemoveUserEmailAlias"; + +// 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 = { + "user_identifier": "user_987654321", + "email_alias_id": "alias_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/toolkits/box_api/remove_user_email_alias_example_call_tool.py b/public/examples/integrations/toolkits/box_api/remove_user_email_alias_example_call_tool.py new file mode 100644 index 000000000..45c55b2d7 --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/remove_user_email_alias_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 = "BoxApi.RemoveUserEmailAlias" + +auth_response = client.tools.authorize( + tool_name=TOOL_NAME, + user_id=TOOL_NAME +) + +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 = { + 'user_identifier': 'user_987654321', 'email_alias_id': 'alias_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/toolkits/box_api/remove_watermark_from_folder_example_call_tool.js b/public/examples/integrations/toolkits/box_api/remove_watermark_from_folder_example_call_tool.js new file mode 100644 index 000000000..2f7b8cfc5 --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/remove_watermark_from_folder_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 = "BoxApi.RemoveWatermarkFromFolder"; + +// 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 = { + "folder_identifier": "123" +}; + +const response = await client.tools.execute({ + tool_name: TOOL_NAME, + input: toolInput, + user_id: USER_ID, +}); + +console.log(JSON.stringify(response.output.value, null, 2)); diff --git a/public/examples/integrations/toolkits/box_api/remove_watermark_from_folder_example_call_tool.py b/public/examples/integrations/toolkits/box_api/remove_watermark_from_folder_example_call_tool.py new file mode 100644 index 000000000..4329bf5c1 --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/remove_watermark_from_folder_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 = "BoxApi.RemoveWatermarkFromFolder" + +auth_response = client.tools.authorize( + tool_name=TOOL_NAME, + user_id=TOOL_NAME +) + +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 = { + 'folder_identifier': '123' +} + +response = client.tools.execute( + tool_name=TOOL_NAME, + input=tool_input, + user_id=USER_ID, +) +print(json.dumps(response.output.value, indent=2)) diff --git a/public/examples/integrations/toolkits/box_api/resend_signature_request_email_example_call_tool.js b/public/examples/integrations/toolkits/box_api/resend_signature_request_email_example_call_tool.js new file mode 100644 index 000000000..fb95bb040 --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/resend_signature_request_email_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 = "BoxApi.ResendSignatureRequestEmail"; + +// 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 = { + "signature_request_id": "sr_8f3a2b1c" +}; + +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/toolkits/box_api/resend_signature_request_email_example_call_tool.py b/public/examples/integrations/toolkits/box_api/resend_signature_request_email_example_call_tool.py new file mode 100644 index 000000000..f598708d6 --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/resend_signature_request_email_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 = "BoxApi.ResendSignatureRequestEmail" + +auth_response = client.tools.authorize( + tool_name=TOOL_NAME, + user_id=TOOL_NAME +) + +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 = { + 'signature_request_id': 'sr_8f3a2b1c' +} + +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/toolkits/box_api/retrieve_box_hub_collaborations_example_call_tool.js b/public/examples/integrations/toolkits/box_api/retrieve_box_hub_collaborations_example_call_tool.js new file mode 100644 index 000000000..9fe4d09e2 --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/retrieve_box_hub_collaborations_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 = "BoxApi.RetrieveBoxHubCollaborations"; + +// 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 = { + "hub_identifier": "12345abcde_hub", + "pagination_marker": "marker_67890", + "max_items_per_page": 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/toolkits/box_api/retrieve_box_hub_collaborations_example_call_tool.py b/public/examples/integrations/toolkits/box_api/retrieve_box_hub_collaborations_example_call_tool.py new file mode 100644 index 000000000..024bf5fb8 --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/retrieve_box_hub_collaborations_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 = "BoxApi.RetrieveBoxHubCollaborations" + +auth_response = client.tools.authorize( + tool_name=TOOL_NAME, + user_id=TOOL_NAME +) + +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 = { + 'hub_identifier': '12345abcde_hub', 'pagination_marker': 'marker_67890', 'max_items_per_page': 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/toolkits/box_api/retrieve_box_hub_details_example_call_tool.js b/public/examples/integrations/toolkits/box_api/retrieve_box_hub_details_example_call_tool.js new file mode 100644 index 000000000..ae8f44a7e --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/retrieve_box_hub_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 = "BoxApi.RetrieveBoxHubDetails"; + +// 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 = { + "box_hub_identifier": "1234567890" +}; + +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/toolkits/box_api/retrieve_box_hub_details_example_call_tool.py b/public/examples/integrations/toolkits/box_api/retrieve_box_hub_details_example_call_tool.py new file mode 100644 index 000000000..51bf76d1f --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/retrieve_box_hub_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 = "BoxApi.RetrieveBoxHubDetails" + +auth_response = client.tools.authorize( + tool_name=TOOL_NAME, + user_id=TOOL_NAME +) + +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 = { + 'box_hub_identifier': '1234567890' +} + +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/toolkits/box_api/retrieve_box_hub_items_example_call_tool.js b/public/examples/integrations/toolkits/box_api/retrieve_box_hub_items_example_call_tool.js new file mode 100644 index 000000000..7de23ad86 --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/retrieve_box_hub_items_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 = "BoxApi.RetrieveBoxHubItems"; + +// 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 = { + "hub_identifier": "1234567890", + "pagination_start_marker": "mkr_0001", + "maximum_items_per_page": 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/toolkits/box_api/retrieve_box_hub_items_example_call_tool.py b/public/examples/integrations/toolkits/box_api/retrieve_box_hub_items_example_call_tool.py new file mode 100644 index 000000000..61bc67bc7 --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/retrieve_box_hub_items_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 = "BoxApi.RetrieveBoxHubItems" + +auth_response = client.tools.authorize( + tool_name=TOOL_NAME, + user_id=TOOL_NAME +) + +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 = { + 'hub_identifier': '1234567890', + 'pagination_start_marker': 'mkr_0001', + 'maximum_items_per_page': 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/toolkits/box_api/retrieve_collection_by_id_example_call_tool.js b/public/examples/integrations/toolkits/box_api/retrieve_collection_by_id_example_call_tool.js new file mode 100644 index 000000000..a4e26a4ae --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/retrieve_collection_by_id_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 = "BoxApi.RetrieveCollectionById"; + +// 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 = { + "collection_identifier": "col_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/toolkits/box_api/retrieve_collection_by_id_example_call_tool.py b/public/examples/integrations/toolkits/box_api/retrieve_collection_by_id_example_call_tool.py new file mode 100644 index 000000000..94454be7e --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/retrieve_collection_by_id_example_call_tool.py @@ -0,0 +1,29 @@ +import json +from arcadepy import Arcade + +client = Arcade() # Automatically finds the `ARCADE_API_KEY` env variable + +USER_ID = "{arcade_user_id}" +TOOL_NAME = "BoxApi.RetrieveCollectionById" + +auth_response = client.tools.authorize( + tool_name=TOOL_NAME, + user_id=TOOL_NAME +) + +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 = { + 'collection_identifier': 'col_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/toolkits/box_api/retrieve_collection_contents_example_call_tool.js b/public/examples/integrations/toolkits/box_api/retrieve_collection_contents_example_call_tool.js new file mode 100644 index 000000000..8789c7625 --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/retrieve_collection_contents_example_call_tool.js @@ -0,0 +1,39 @@ +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 = "BoxApi.RetrieveCollectionContents"; + +// 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 = { + "collection_id": "col_98765", + "attributes_to_include": [ + "name", + "size", + "modified_at", + "type" + ], + "response_offset": 0, + "max_items_per_page": 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/toolkits/box_api/retrieve_collection_contents_example_call_tool.py b/public/examples/integrations/toolkits/box_api/retrieve_collection_contents_example_call_tool.py new file mode 100644 index 000000000..b7ee7078b --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/retrieve_collection_contents_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 = "BoxApi.RetrieveCollectionContents" + +auth_response = client.tools.authorize( + tool_name=TOOL_NAME, + user_id=TOOL_NAME +) + +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 = { + 'collection_id': 'col_98765', + 'attributes_to_include': ['name', 'size', 'modified_at', 'type'], + 'response_offset': 0, + 'max_items_per_page': 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/toolkits/box_api/retrieve_enterprise_archives_example_call_tool.js b/public/examples/integrations/toolkits/box_api/retrieve_enterprise_archives_example_call_tool.js new file mode 100644 index 000000000..b3627b95f --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/retrieve_enterprise_archives_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 = "BoxApi.RetrieveEnterpriseArchives"; + +// 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 = { + "max_items_per_page": 50, + "pagination_start_marker": "marker_2025_09_29_start" +}; + +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/toolkits/box_api/retrieve_enterprise_archives_example_call_tool.py b/public/examples/integrations/toolkits/box_api/retrieve_enterprise_archives_example_call_tool.py new file mode 100644 index 000000000..7cc6c079f --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/retrieve_enterprise_archives_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 = "BoxApi.RetrieveEnterpriseArchives" + +auth_response = client.tools.authorize( + tool_name=TOOL_NAME, + user_id=TOOL_NAME +) + +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 = { + 'max_items_per_page': 50, 'pagination_start_marker': 'marker_2025_09_29_start' +} + +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/toolkits/box_api/retrieve_enterprise_groups_example_call_tool.js b/public/examples/integrations/toolkits/box_api/retrieve_enterprise_groups_example_call_tool.js new file mode 100644 index 000000000..2492516d5 --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/retrieve_enterprise_groups_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 = "BoxApi.RetrieveEnterpriseGroups"; + +// 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 = { + "group_name_starts_with": "Dev", + "included_attributes": [ + "id", + "name", + "member_count" + ], + "max_items_per_page": 50, + "starting_item_offset": 0 +}; + +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/toolkits/box_api/retrieve_enterprise_groups_example_call_tool.py b/public/examples/integrations/toolkits/box_api/retrieve_enterprise_groups_example_call_tool.py new file mode 100644 index 000000000..686b09941 --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/retrieve_enterprise_groups_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 = "BoxApi.RetrieveEnterpriseGroups" + +auth_response = client.tools.authorize( + tool_name=TOOL_NAME, + user_id=TOOL_NAME +) + +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 = { + 'group_name_starts_with': 'Dev', + 'included_attributes': ['id', 'name', 'member_count'], + 'max_items_per_page': 50, + 'starting_item_offset': 0 +} + +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/toolkits/box_api/retrieve_enterprise_metadata_templates_example_call_tool.js b/public/examples/integrations/toolkits/box_api/retrieve_enterprise_metadata_templates_example_call_tool.js new file mode 100644 index 000000000..6e0d0b20c --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/retrieve_enterprise_metadata_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 = "BoxApi.RetrieveEnterpriseMetadataTemplates"; + +// 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 = { + "pagination_start_marker": "marker_abc123", + "maximum_items_per_page": 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/toolkits/box_api/retrieve_enterprise_metadata_templates_example_call_tool.py b/public/examples/integrations/toolkits/box_api/retrieve_enterprise_metadata_templates_example_call_tool.py new file mode 100644 index 000000000..c154f020c --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/retrieve_enterprise_metadata_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 = "BoxApi.RetrieveEnterpriseMetadataTemplates" + +auth_response = client.tools.authorize( + tool_name=TOOL_NAME, + user_id=TOOL_NAME +) + +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 = { + 'pagination_start_marker': 'marker_abc123', 'maximum_items_per_page': 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/toolkits/box_api/retrieve_file_details_example_call_tool.js b/public/examples/integrations/toolkits/box_api/retrieve_file_details_example_call_tool.js new file mode 100644 index 000000000..4d29b9310 --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/retrieve_file_details_example_call_tool.js @@ -0,0 +1,39 @@ +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 = "BoxApi.RetrieveFileDetails"; + +// 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 = { + "file_identifier": "12345", + "included_file_attributes": [ + "name", + "size", + "metadata.enterpriseProperties" + ], + "etag_conditional_retrieval": "\"0a1b2c3d4e5f\"", + "shared_link_with_optional_password": "shared_link=https://example.app.box.com/s/abcd1234&shared_link_password=pa$$w0rd", + "file_representations_request": "[jpg?dimensions=128x128][pdf?locale=en_US]" +}; + +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/toolkits/box_api/retrieve_file_details_example_call_tool.py b/public/examples/integrations/toolkits/box_api/retrieve_file_details_example_call_tool.py new file mode 100644 index 000000000..65754d87f --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/retrieve_file_details_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 = "BoxApi.RetrieveFileDetails" + +auth_response = client.tools.authorize( + tool_name=TOOL_NAME, + user_id=TOOL_NAME +) + +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 = { + 'file_identifier': '12345', + 'included_file_attributes': ['name', 'size', 'metadata.enterpriseProperties'], + 'etag_conditional_retrieval': '"0a1b2c3d4e5f"', + 'shared_link_with_optional_password': 'shared_link=https://example.app.box.com/s/abcd1234&shared_link_password=pa$$w0rd', + 'file_representations_request': '[jpg?dimensions=128x128][pdf?locale=en_US]' +} + +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/toolkits/box_api/retrieve_file_metadata_example_call_tool.js b/public/examples/integrations/toolkits/box_api/retrieve_file_metadata_example_call_tool.js new file mode 100644 index 000000000..22f8b1ed1 --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/retrieve_file_metadata_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 = "BoxApi.RetrieveFileMetadata"; + +// 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 = { + "file_identifier": "123" +}; + +const response = await client.tools.execute({ + tool_name: TOOL_NAME, + input: toolInput, + user_id: USER_ID, +}); + +console.log(JSON.stringify(response.output.value, null, 2)); diff --git a/public/examples/integrations/toolkits/box_api/retrieve_file_metadata_example_call_tool.py b/public/examples/integrations/toolkits/box_api/retrieve_file_metadata_example_call_tool.py new file mode 100644 index 000000000..011289c6b --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/retrieve_file_metadata_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 = "BoxApi.RetrieveFileMetadata" + +auth_response = client.tools.authorize( + tool_name=TOOL_NAME, + user_id=TOOL_NAME +) + +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 = { + 'file_identifier': '123' +} + +response = client.tools.execute( + tool_name=TOOL_NAME, + input=tool_input, + user_id=USER_ID, +) +print(json.dumps(response.output.value, indent=2)) diff --git a/public/examples/integrations/toolkits/box_api/retrieve_file_request_info_example_call_tool.js b/public/examples/integrations/toolkits/box_api/retrieve_file_request_info_example_call_tool.js new file mode 100644 index 000000000..a81bb006a --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/retrieve_file_request_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 = "BoxApi.RetrieveFileRequestInfo"; + +// 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 = { + "file_request_unique_id": "fr_9a8b7c6d@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/toolkits/box_api/retrieve_file_request_info_example_call_tool.py b/public/examples/integrations/toolkits/box_api/retrieve_file_request_info_example_call_tool.py new file mode 100644 index 000000000..fc4163747 --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/retrieve_file_request_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 = "BoxApi.RetrieveFileRequestInfo" + +auth_response = client.tools.authorize( + tool_name=TOOL_NAME, + user_id=TOOL_NAME +) + +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 = { + 'file_request_unique_id': 'fr_9a8b7c6d@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/toolkits/box_api/retrieve_file_template_metadata_example_call_tool.js b/public/examples/integrations/toolkits/box_api/retrieve_file_template_metadata_example_call_tool.js new file mode 100644 index 000000000..843827cd1 --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/retrieve_file_template_metadata_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 = "BoxApi.RetrieveFileTemplateMetadata"; + +// 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 = { + "file_identifier": "1234567890", + "metadata_scope": "enterprise", + "metadata_template_name": "DocumentClassification" +}; + +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/toolkits/box_api/retrieve_file_template_metadata_example_call_tool.py b/public/examples/integrations/toolkits/box_api/retrieve_file_template_metadata_example_call_tool.py new file mode 100644 index 000000000..68b7bc960 --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/retrieve_file_template_metadata_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 = "BoxApi.RetrieveFileTemplateMetadata" + +auth_response = client.tools.authorize( + tool_name=TOOL_NAME, + user_id=TOOL_NAME +) + +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 = { + 'file_identifier': '1234567890', + 'metadata_scope': 'enterprise', + 'metadata_template_name': 'DocumentClassification' +} + +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/toolkits/box_api/retrieve_file_thumbnail_example_call_tool.js b/public/examples/integrations/toolkits/box_api/retrieve_file_thumbnail_example_call_tool.js new file mode 100644 index 000000000..a2db5ec83 --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/retrieve_file_thumbnail_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 = "BoxApi.RetrieveFileThumbnail"; + +// 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 = { + "file_identifier": "1234567890", + "thumbnail_file_format": "png", + "minimum_thumbnail_width": 64, + "minimum_thumbnail_height": 64, + "maximum_thumbnail_width": 128, + "maximum_thumbnail_height": 128 +}; + +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/toolkits/box_api/retrieve_file_thumbnail_example_call_tool.py b/public/examples/integrations/toolkits/box_api/retrieve_file_thumbnail_example_call_tool.py new file mode 100644 index 000000000..163e525c4 --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/retrieve_file_thumbnail_example_call_tool.py @@ -0,0 +1,34 @@ +import json +from arcadepy import Arcade + +client = Arcade() # Automatically finds the `ARCADE_API_KEY` env variable + +USER_ID = "{arcade_user_id}" +TOOL_NAME = "BoxApi.RetrieveFileThumbnail" + +auth_response = client.tools.authorize( + tool_name=TOOL_NAME, + user_id=TOOL_NAME +) + +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 = { + 'file_identifier': '1234567890', + 'thumbnail_file_format': 'png', + 'minimum_thumbnail_width': 64, + 'minimum_thumbnail_height': 64, + 'maximum_thumbnail_width': 128, + 'maximum_thumbnail_height': 128 +} + +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/toolkits/box_api/retrieve_file_version_example_call_tool.js b/public/examples/integrations/toolkits/box_api/retrieve_file_version_example_call_tool.js new file mode 100644 index 000000000..fbce68d05 --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/retrieve_file_version_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 = "BoxApi.RetrieveFileVersion"; + +// 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 = { + "unique_file_identifier": "123456789", + "file_version_identifier": "v987654321", + "include_additional_attributes": [ + "size", + "modified_at", + "sha1" + ] +}; + +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/toolkits/box_api/retrieve_file_version_example_call_tool.py b/public/examples/integrations/toolkits/box_api/retrieve_file_version_example_call_tool.py new file mode 100644 index 000000000..fa111a1b9 --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/retrieve_file_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 = "BoxApi.RetrieveFileVersion" + +auth_response = client.tools.authorize( + tool_name=TOOL_NAME, + user_id=TOOL_NAME +) + +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 = { + 'unique_file_identifier': '123456789', + 'file_version_identifier': 'v987654321', + 'include_additional_attributes': ['size', 'modified_at', 'sha1'] +} + +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/toolkits/box_api/retrieve_file_version_legal_holds_example_call_tool.js b/public/examples/integrations/toolkits/box_api/retrieve_file_version_legal_holds_example_call_tool.js new file mode 100644 index 000000000..a538202a8 --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/retrieve_file_version_legal_holds_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 = "BoxApi.RetrieveFileVersionLegalHolds"; + +// 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 = { + "file_version_legal_hold_id": "lvh_9f3a2b1c" +}; + +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/toolkits/box_api/retrieve_file_version_legal_holds_example_call_tool.py b/public/examples/integrations/toolkits/box_api/retrieve_file_version_legal_holds_example_call_tool.py new file mode 100644 index 000000000..b3fc992b3 --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/retrieve_file_version_legal_holds_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 = "BoxApi.RetrieveFileVersionLegalHolds" + +auth_response = client.tools.authorize( + tool_name=TOOL_NAME, + user_id=TOOL_NAME +) + +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 = { + 'file_version_legal_hold_id': 'lvh_9f3a2b1c' +} + +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/toolkits/box_api/retrieve_folder_items_example_call_tool.js b/public/examples/integrations/toolkits/box_api/retrieve_folder_items_example_call_tool.js new file mode 100644 index 000000000..1e52402a8 --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/retrieve_folder_items_example_call_tool.js @@ -0,0 +1,39 @@ +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 = "BoxApi.RetrieveFolderItems"; + +// 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 = { + "folder_identifier": "1234567890", + "included_attributes": [ + "size", + "metadata.customer.plan" + ], + "max_items_per_page": 100, + "sort_attribute": "name", + "sort_direction": "ASC", + "use_marker_based_pagination": 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/toolkits/box_api/retrieve_folder_items_example_call_tool.py b/public/examples/integrations/toolkits/box_api/retrieve_folder_items_example_call_tool.py new file mode 100644 index 000000000..0b046815d --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/retrieve_folder_items_example_call_tool.py @@ -0,0 +1,34 @@ +import json +from arcadepy import Arcade + +client = Arcade() # Automatically finds the `ARCADE_API_KEY` env variable + +USER_ID = "{arcade_user_id}" +TOOL_NAME = "BoxApi.RetrieveFolderItems" + +auth_response = client.tools.authorize( + tool_name=TOOL_NAME, + user_id=TOOL_NAME +) + +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 = { + 'folder_identifier': '1234567890', + 'included_attributes': ['size', 'metadata.customer.plan'], + 'max_items_per_page': 100, + 'sort_attribute': 'name', + 'sort_direction': 'ASC', + 'use_marker_based_pagination': 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/toolkits/box_api/retrieve_folder_lock_details_example_call_tool.js b/public/examples/integrations/toolkits/box_api/retrieve_folder_lock_details_example_call_tool.js new file mode 100644 index 000000000..43d811b33 --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/retrieve_folder_lock_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 = "BoxApi.RetrieveFolderLockDetails"; + +// 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 = { + "folder_identifier": "123456789" +}; + +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/toolkits/box_api/retrieve_folder_lock_details_example_call_tool.py b/public/examples/integrations/toolkits/box_api/retrieve_folder_lock_details_example_call_tool.py new file mode 100644 index 000000000..fbb9c9b42 --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/retrieve_folder_lock_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 = "BoxApi.RetrieveFolderLockDetails" + +auth_response = client.tools.authorize( + tool_name=TOOL_NAME, + user_id=TOOL_NAME +) + +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 = { + 'folder_identifier': '123456789' +} + +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/toolkits/box_api/retrieve_folder_metadata_example_call_tool.js b/public/examples/integrations/toolkits/box_api/retrieve_folder_metadata_example_call_tool.js new file mode 100644 index 000000000..081e301f4 --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/retrieve_folder_metadata_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 = "BoxApi.RetrieveFolderMetadata"; + +// 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 = { + "folder_identifier": "1234567890" +}; + +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/toolkits/box_api/retrieve_folder_metadata_example_call_tool.py b/public/examples/integrations/toolkits/box_api/retrieve_folder_metadata_example_call_tool.py new file mode 100644 index 000000000..69ea90292 --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/retrieve_folder_metadata_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 = "BoxApi.RetrieveFolderMetadata" + +auth_response = client.tools.authorize( + tool_name=TOOL_NAME, + user_id=TOOL_NAME +) + +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 = { + 'folder_identifier': '1234567890' +} + +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/toolkits/box_api/retrieve_global_metadata_templates_example_call_tool.js b/public/examples/integrations/toolkits/box_api/retrieve_global_metadata_templates_example_call_tool.js new file mode 100644 index 000000000..32017a2ea --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/retrieve_global_metadata_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 = "BoxApi.RetrieveGlobalMetadataTemplates"; + +// 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 = { + "pagination_start_marker": "marker_0", + "max_items_per_page": 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/toolkits/box_api/retrieve_global_metadata_templates_example_call_tool.py b/public/examples/integrations/toolkits/box_api/retrieve_global_metadata_templates_example_call_tool.py new file mode 100644 index 000000000..01b655498 --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/retrieve_global_metadata_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 = "BoxApi.RetrieveGlobalMetadataTemplates" + +auth_response = client.tools.authorize( + tool_name=TOOL_NAME, + user_id=TOOL_NAME +) + +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 = { + 'pagination_start_marker': 'marker_0', 'max_items_per_page': 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/toolkits/box_api/retrieve_group_info_example_call_tool.js b/public/examples/integrations/toolkits/box_api/retrieve_group_info_example_call_tool.js new file mode 100644 index 000000000..24bbcd5ac --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/retrieve_group_info_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 = "BoxApi.RetrieveGroupInfo"; + +// 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 = { + "group_id": "12345", + "include_additional_fields": [ + "members", + "roles", + "created_at" + ] +}; + +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/toolkits/box_api/retrieve_group_info_example_call_tool.py b/public/examples/integrations/toolkits/box_api/retrieve_group_info_example_call_tool.py new file mode 100644 index 000000000..bf642d4f8 --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/retrieve_group_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 = "BoxApi.RetrieveGroupInfo" + +auth_response = client.tools.authorize( + tool_name=TOOL_NAME, + user_id=TOOL_NAME +) + +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 = { + 'group_id': '12345', 'include_additional_fields': ['members', 'roles', 'created_at'] +} + +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/toolkits/box_api/retrieve_group_membership_example_call_tool.js b/public/examples/integrations/toolkits/box_api/retrieve_group_membership_example_call_tool.js new file mode 100644 index 000000000..f98b3fae1 --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/retrieve_group_membership_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 = "BoxApi.RetrieveGroupMembership"; + +// 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 = { + "group_membership_id": "gm_8a7f2b3c", + "include_fields_list": [ + "role", + "joined_at", + "permissions" + ] +}; + +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/toolkits/box_api/retrieve_group_membership_example_call_tool.py b/public/examples/integrations/toolkits/box_api/retrieve_group_membership_example_call_tool.py new file mode 100644 index 000000000..bd516b4df --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/retrieve_group_membership_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 = "BoxApi.RetrieveGroupMembership" + +auth_response = client.tools.authorize( + tool_name=TOOL_NAME, + user_id=TOOL_NAME +) + +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 = { + 'group_membership_id': 'gm_8a7f2b3c', 'include_fields_list': ['role', 'joined_at', 'permissions'] +} + +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/toolkits/box_api/retrieve_group_memberships_example_call_tool.js b/public/examples/integrations/toolkits/box_api/retrieve_group_memberships_example_call_tool.js new file mode 100644 index 000000000..b86732ae1 --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/retrieve_group_memberships_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 = "BoxApi.RetrieveGroupMemberships"; + +// 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 = { + "group_identifier": "group-abc123", + "max_items_per_page": 50, + "response_offset": 0 +}; + +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/toolkits/box_api/retrieve_group_memberships_example_call_tool.py b/public/examples/integrations/toolkits/box_api/retrieve_group_memberships_example_call_tool.py new file mode 100644 index 000000000..2d27a3538 --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/retrieve_group_memberships_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 = "BoxApi.RetrieveGroupMemberships" + +auth_response = client.tools.authorize( + tool_name=TOOL_NAME, + user_id=TOOL_NAME +) + +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 = { + 'group_identifier': 'group-abc123', 'max_items_per_page': 50, 'response_offset': 0 +} + +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/toolkits/box_api/retrieve_legal_hold_policies_example_call_tool.js b/public/examples/integrations/toolkits/box_api/retrieve_legal_hold_policies_example_call_tool.js new file mode 100644 index 000000000..7cc6d0813 --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/retrieve_legal_hold_policies_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 = "BoxApi.RetrieveLegalHoldPolicies"; + +// 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 = { + "policy_name_prefix": "Audit", + "response_attributes": [ + "id", + "name", + "status" + ], + "pagination_marker": "marker123", + "maximum_items_per_page": 25 +}; + +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/toolkits/box_api/retrieve_legal_hold_policies_example_call_tool.py b/public/examples/integrations/toolkits/box_api/retrieve_legal_hold_policies_example_call_tool.py new file mode 100644 index 000000000..f60de6a12 --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/retrieve_legal_hold_policies_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 = "BoxApi.RetrieveLegalHoldPolicies" + +auth_response = client.tools.authorize( + tool_name=TOOL_NAME, + user_id=TOOL_NAME +) + +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 = { + 'policy_name_prefix': 'Audit', + 'response_attributes': ['id', 'name', 'status'], + 'pagination_marker': 'marker123', + 'maximum_items_per_page': 25 +} + +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/toolkits/box_api/retrieve_legal_hold_policy_assignment_example_call_tool.js b/public/examples/integrations/toolkits/box_api/retrieve_legal_hold_policy_assignment_example_call_tool.js new file mode 100644 index 000000000..52c2b11c0 --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/retrieve_legal_hold_policy_assignment_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 = "BoxApi.RetrieveLegalHoldPolicyAssignment"; + +// 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 = { + "legal_hold_policy_assignment_id": "lhpa_1234567890" +}; + +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/toolkits/box_api/retrieve_legal_hold_policy_assignment_example_call_tool.py b/public/examples/integrations/toolkits/box_api/retrieve_legal_hold_policy_assignment_example_call_tool.py new file mode 100644 index 000000000..a50f4c9ff --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/retrieve_legal_hold_policy_assignment_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 = "BoxApi.RetrieveLegalHoldPolicyAssignment" + +auth_response = client.tools.authorize( + tool_name=TOOL_NAME, + user_id=TOOL_NAME +) + +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 = { + 'legal_hold_policy_assignment_id': 'lhpa_1234567890' +} + +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/toolkits/box_api/retrieve_legal_hold_policy_example_call_tool.js b/public/examples/integrations/toolkits/box_api/retrieve_legal_hold_policy_example_call_tool.js new file mode 100644 index 000000000..db03f271e --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/retrieve_legal_hold_policy_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 = "BoxApi.RetrieveLegalHoldPolicy"; + +// 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 = { + "legal_hold_policy_id": "lhp_12345abcde" +}; + +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/toolkits/box_api/retrieve_legal_hold_policy_example_call_tool.py b/public/examples/integrations/toolkits/box_api/retrieve_legal_hold_policy_example_call_tool.py new file mode 100644 index 000000000..283d70c64 --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/retrieve_legal_hold_policy_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 = "BoxApi.RetrieveLegalHoldPolicy" + +auth_response = client.tools.authorize( + tool_name=TOOL_NAME, + user_id=TOOL_NAME +) + +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 = { + 'legal_hold_policy_id': 'lhp_12345abcde' +} + +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/toolkits/box_api/retrieve_metadata_cascade_policy_example_call_tool.js b/public/examples/integrations/toolkits/box_api/retrieve_metadata_cascade_policy_example_call_tool.js new file mode 100644 index 000000000..b0a1839f0 --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/retrieve_metadata_cascade_policy_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 = "BoxApi.RetrieveMetadataCascadePolicy"; + +// 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 = { + "metadata_cascade_policy_id": "1234567890" +}; + +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/toolkits/box_api/retrieve_metadata_cascade_policy_example_call_tool.py b/public/examples/integrations/toolkits/box_api/retrieve_metadata_cascade_policy_example_call_tool.py new file mode 100644 index 000000000..59a28ccd2 --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/retrieve_metadata_cascade_policy_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 = "BoxApi.RetrieveMetadataCascadePolicy" + +auth_response = client.tools.authorize( + tool_name=TOOL_NAME, + user_id=TOOL_NAME +) + +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 = { + 'metadata_cascade_policy_id': '1234567890' +} + +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/toolkits/box_api/retrieve_metadata_template_example_call_tool.js b/public/examples/integrations/toolkits/box_api/retrieve_metadata_template_example_call_tool.js new file mode 100644 index 000000000..b41b1cd0a --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/retrieve_metadata_template_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 = "BoxApi.RetrieveMetadataTemplate"; + +// 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 = { + "metadata_template_scope": "enterprise", + "metadata_template_name": "project_details" +}; + +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/toolkits/box_api/retrieve_metadata_template_example_call_tool.py b/public/examples/integrations/toolkits/box_api/retrieve_metadata_template_example_call_tool.py new file mode 100644 index 000000000..b0ccf692c --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/retrieve_metadata_template_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 = "BoxApi.RetrieveMetadataTemplate" + +auth_response = client.tools.authorize( + tool_name=TOOL_NAME, + user_id=TOOL_NAME +) + +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 = { + 'metadata_template_scope': 'enterprise', 'metadata_template_name': 'project_details' +} + +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/toolkits/box_api/retrieve_retention_policy_assignment_example_call_tool.js b/public/examples/integrations/toolkits/box_api/retrieve_retention_policy_assignment_example_call_tool.js new file mode 100644 index 000000000..240a6146f --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/retrieve_retention_policy_assignment_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 = "BoxApi.RetrieveRetentionPolicyAssignment"; + +// 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 = { + "retention_policy_assignment_id": "1234567890", + "include_fields_in_response": [ + "assigned_to", + "policy_id", + "created_at" + ] +}; + +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/toolkits/box_api/retrieve_retention_policy_assignment_example_call_tool.py b/public/examples/integrations/toolkits/box_api/retrieve_retention_policy_assignment_example_call_tool.py new file mode 100644 index 000000000..59071a503 --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/retrieve_retention_policy_assignment_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 = "BoxApi.RetrieveRetentionPolicyAssignment" + +auth_response = client.tools.authorize( + tool_name=TOOL_NAME, + user_id=TOOL_NAME +) + +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 = { + 'retention_policy_assignment_id': '1234567890', + 'include_fields_in_response': ['assigned_to', 'policy_id', 'created_at'] +} + +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/toolkits/box_api/retrieve_shared_file_info_example_call_tool.js b/public/examples/integrations/toolkits/box_api/retrieve_shared_file_info_example_call_tool.js new file mode 100644 index 000000000..dbd64b2b6 --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/retrieve_shared_file_info_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 = "BoxApi.RetrieveSharedFileInfo"; + +// 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 = { + "shared_link_credentials": "shared_link=https://example.com/s/abc123&shared_link_password=secret", + "include_attributes_in_response": [ + "sha256", + "file_version" + ], + "etag_for_change_detection": "W/\"e3b0c442\"" +}; + +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/toolkits/box_api/retrieve_shared_file_info_example_call_tool.py b/public/examples/integrations/toolkits/box_api/retrieve_shared_file_info_example_call_tool.py new file mode 100644 index 000000000..d33856c1e --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/retrieve_shared_file_info_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 = "BoxApi.RetrieveSharedFileInfo" + +auth_response = client.tools.authorize( + tool_name=TOOL_NAME, + user_id=TOOL_NAME +) + +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 = { + 'shared_link_credentials': 'shared_link=https://example.com/s/abc123&shared_link_password=secret', + 'include_attributes_in_response': ['sha256', 'file_version'], + 'etag_for_change_detection': 'W/"e3b0c442"' +} + +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/toolkits/box_api/retrieve_shared_web_link_example_call_tool.js b/public/examples/integrations/toolkits/box_api/retrieve_shared_web_link_example_call_tool.js new file mode 100644 index 000000000..5007aaab1 --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/retrieve_shared_web_link_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 = "BoxApi.RetrieveSharedWebLink"; + +// 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 = { + "shared_link_header": "shared_link=https://example.com/s/abc123&shared_link_password=passw0rd", + "include_attributes_in_response": [ + "id", + "name", + "url", + "modified_at" + ], + "etag_if_updated_only": "\"d41d8cd98f00b204e9800998ecf8427e\"" +}; + +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/toolkits/box_api/retrieve_shared_web_link_example_call_tool.py b/public/examples/integrations/toolkits/box_api/retrieve_shared_web_link_example_call_tool.py new file mode 100644 index 000000000..64731d378 --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/retrieve_shared_web_link_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 = "BoxApi.RetrieveSharedWebLink" + +auth_response = client.tools.authorize( + tool_name=TOOL_NAME, + user_id=TOOL_NAME +) + +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 = { + 'shared_link_header': 'shared_link=https://example.com/s/abc123&shared_link_password=passw0rd', + 'include_attributes_in_response': ['id', 'name', 'url', 'modified_at'], + 'etag_if_updated_only': '"d41d8cd98f00b204e9800998ecf8427e"' +} + +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/toolkits/box_api/retrieve_shield_list_by_id_example_call_tool.js b/public/examples/integrations/toolkits/box_api/retrieve_shield_list_by_id_example_call_tool.js new file mode 100644 index 000000000..54e7e4be6 --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/retrieve_shield_list_by_id_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 = "BoxApi.RetrieveShieldListById"; + +// 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 = { + "shield_list_identifier": "shield-list-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/toolkits/box_api/retrieve_shield_list_by_id_example_call_tool.py b/public/examples/integrations/toolkits/box_api/retrieve_shield_list_by_id_example_call_tool.py new file mode 100644 index 000000000..fc2814cdf --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/retrieve_shield_list_by_id_example_call_tool.py @@ -0,0 +1,29 @@ +import json +from arcadepy import Arcade + +client = Arcade() # Automatically finds the `ARCADE_API_KEY` env variable + +USER_ID = "{arcade_user_id}" +TOOL_NAME = "BoxApi.RetrieveShieldListById" + +auth_response = client.tools.authorize( + tool_name=TOOL_NAME, + user_id=TOOL_NAME +) + +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 = { + 'shield_list_identifier': 'shield-list-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/toolkits/box_api/retrieve_sign_request_by_id_example_call_tool.js b/public/examples/integrations/toolkits/box_api/retrieve_sign_request_by_id_example_call_tool.js new file mode 100644 index 000000000..710125665 --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/retrieve_sign_request_by_id_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 = "BoxApi.RetrieveSignRequestById"; + +// 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 = { + "signature_request_id": "sr_12345abcde" +}; + +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/toolkits/box_api/retrieve_sign_request_by_id_example_call_tool.py b/public/examples/integrations/toolkits/box_api/retrieve_sign_request_by_id_example_call_tool.py new file mode 100644 index 000000000..68077e0ff --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/retrieve_sign_request_by_id_example_call_tool.py @@ -0,0 +1,29 @@ +import json +from arcadepy import Arcade + +client = Arcade() # Automatically finds the `ARCADE_API_KEY` env variable + +USER_ID = "{arcade_user_id}" +TOOL_NAME = "BoxApi.RetrieveSignRequestById" + +auth_response = client.tools.authorize( + tool_name=TOOL_NAME, + user_id=TOOL_NAME +) + +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 = { + 'signature_request_id': 'sr_12345abcde' +} + +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/toolkits/box_api/retrieve_task_assignment_info_example_call_tool.js b/public/examples/integrations/toolkits/box_api/retrieve_task_assignment_info_example_call_tool.js new file mode 100644 index 000000000..582eece7a --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/retrieve_task_assignment_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 = "BoxApi.RetrieveTaskAssignmentInfo"; + +// 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 = { + "task_assignment_id": "ta_8a3f2b1c" +}; + +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/toolkits/box_api/retrieve_task_assignment_info_example_call_tool.py b/public/examples/integrations/toolkits/box_api/retrieve_task_assignment_info_example_call_tool.py new file mode 100644 index 000000000..bfc0bf9b2 --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/retrieve_task_assignment_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 = "BoxApi.RetrieveTaskAssignmentInfo" + +auth_response = client.tools.authorize( + tool_name=TOOL_NAME, + user_id=TOOL_NAME +) + +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 = { + 'task_assignment_id': 'ta_8a3f2b1c' +} + +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/toolkits/box_api/retrieve_task_information_example_call_tool.js b/public/examples/integrations/toolkits/box_api/retrieve_task_information_example_call_tool.js new file mode 100644 index 000000000..e38019f22 --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/retrieve_task_information_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 = "BoxApi.RetrieveTaskInformation"; + +// 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 = { + "task_id": "task_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/toolkits/box_api/retrieve_task_information_example_call_tool.py b/public/examples/integrations/toolkits/box_api/retrieve_task_information_example_call_tool.py new file mode 100644 index 000000000..edf8f2d55 --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/retrieve_task_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 = "BoxApi.RetrieveTaskInformation" + +auth_response = client.tools.authorize( + tool_name=TOOL_NAME, + user_id=TOOL_NAME +) + +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 = { + 'task_id': 'task_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/toolkits/box_api/retrieve_trashed_file_example_call_tool.js b/public/examples/integrations/toolkits/box_api/retrieve_trashed_file_example_call_tool.js new file mode 100644 index 000000000..83d62d724 --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/retrieve_trashed_file_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 = "BoxApi.RetrieveTrashedFile"; + +// 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 = { + "file_identifier": "12345abcdef", + "include_attributes_in_response": [ + "name", + "size", + "created_at" + ] +}; + +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/toolkits/box_api/retrieve_trashed_file_example_call_tool.py b/public/examples/integrations/toolkits/box_api/retrieve_trashed_file_example_call_tool.py new file mode 100644 index 000000000..526ec392d --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/retrieve_trashed_file_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 = "BoxApi.RetrieveTrashedFile" + +auth_response = client.tools.authorize( + tool_name=TOOL_NAME, + user_id=TOOL_NAME +) + +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 = { + 'file_identifier': '12345abcdef', 'include_attributes_in_response': ['name', 'size', 'created_at'] +} + +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/toolkits/box_api/retrieve_trashed_folder_example_call_tool.js b/public/examples/integrations/toolkits/box_api/retrieve_trashed_folder_example_call_tool.js new file mode 100644 index 000000000..8b0e4e10a --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/retrieve_trashed_folder_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 = "BoxApi.RetrieveTrashedFolder"; + +// 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 = { + "folder_identifier": "12345_trash", + "include_attributes_in_response": [ + "deleted_by", + "deleted_at", + "original_parent_id" + ] +}; + +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/toolkits/box_api/retrieve_trashed_folder_example_call_tool.py b/public/examples/integrations/toolkits/box_api/retrieve_trashed_folder_example_call_tool.py new file mode 100644 index 000000000..bb4d48137 --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/retrieve_trashed_folder_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 = "BoxApi.RetrieveTrashedFolder" + +auth_response = client.tools.authorize( + tool_name=TOOL_NAME, + user_id=TOOL_NAME +) + +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 = { + 'folder_identifier': '12345_trash', + 'include_attributes_in_response': ['deleted_by', 'deleted_at', 'original_parent_id'] +} + +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/toolkits/box_api/retrieve_trashed_items_example_call_tool.js b/public/examples/integrations/toolkits/box_api/retrieve_trashed_items_example_call_tool.js new file mode 100644 index 000000000..a5c0b4d9f --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/retrieve_trashed_items_example_call_tool.js @@ -0,0 +1,41 @@ +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 = "BoxApi.RetrieveTrashedItems"; + +// 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_attributes": [ + "owner", + "created_at", + "custom:project_id" + ], + "maximum_items_per_page": 50, + "pagination_offset": 0, + "pagination_marker": "mkr_9f8a7b", + "sort_direction": "DESC", + "secondary_sort_attribute": "date", + "use_marker_based_pagination": 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/toolkits/box_api/retrieve_trashed_items_example_call_tool.py b/public/examples/integrations/toolkits/box_api/retrieve_trashed_items_example_call_tool.py new file mode 100644 index 000000000..d6d9e41d0 --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/retrieve_trashed_items_example_call_tool.py @@ -0,0 +1,35 @@ +import json +from arcadepy import Arcade + +client = Arcade() # Automatically finds the `ARCADE_API_KEY` env variable + +USER_ID = "{arcade_user_id}" +TOOL_NAME = "BoxApi.RetrieveTrashedItems" + +auth_response = client.tools.authorize( + tool_name=TOOL_NAME, + user_id=TOOL_NAME +) + +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_attributes': ['owner', 'created_at', 'custom:project_id'], + 'maximum_items_per_page': 50, + 'pagination_offset': 0, + 'pagination_marker': 'mkr_9f8a7b', + 'sort_direction': 'DESC', + 'secondary_sort_attribute': 'date', + 'use_marker_based_pagination': 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/toolkits/box_api/retrieve_trashed_web_link_example_call_tool.js b/public/examples/integrations/toolkits/box_api/retrieve_trashed_web_link_example_call_tool.js new file mode 100644 index 000000000..6a0929c03 --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/retrieve_trashed_web_link_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 = "BoxApi.RetrieveTrashedWebLink"; + +// 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 = { + "web_link_id": "1234567890", + "include_fields_in_response": [ + "created_by", + "url", + "created_at" + ] +}; + +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/toolkits/box_api/retrieve_trashed_web_link_example_call_tool.py b/public/examples/integrations/toolkits/box_api/retrieve_trashed_web_link_example_call_tool.py new file mode 100644 index 000000000..d92c16985 --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/retrieve_trashed_web_link_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 = "BoxApi.RetrieveTrashedWebLink" + +auth_response = client.tools.authorize( + tool_name=TOOL_NAME, + user_id=TOOL_NAME +) + +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 = { + 'web_link_id': '1234567890', 'include_fields_in_response': ['created_by', 'url', 'created_at'] +} + +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/toolkits/box_api/retrieve_user_collections_example_call_tool.js b/public/examples/integrations/toolkits/box_api/retrieve_user_collections_example_call_tool.js new file mode 100644 index 000000000..ab0ae5cf1 --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/retrieve_user_collections_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 = "BoxApi.RetrieveUserCollections"; + +// 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 = { + "requested_fields": [ + "id", + "title", + "item_count" + ], + "pagination_offset": 0, + "maximum_items_per_page": 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/toolkits/box_api/retrieve_user_collections_example_call_tool.py b/public/examples/integrations/toolkits/box_api/retrieve_user_collections_example_call_tool.py new file mode 100644 index 000000000..436edba92 --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/retrieve_user_collections_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 = "BoxApi.RetrieveUserCollections" + +auth_response = client.tools.authorize( + tool_name=TOOL_NAME, + user_id=TOOL_NAME +) + +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 = { + 'requested_fields': ['id', 'title', 'item_count'], + 'pagination_offset': 0, + 'maximum_items_per_page': 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/toolkits/box_api/retrieve_web_link_info_example_call_tool.js b/public/examples/integrations/toolkits/box_api/retrieve_web_link_info_example_call_tool.js new file mode 100644 index 000000000..e35d2246d --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/retrieve_web_link_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 = "BoxApi.RetrieveWebLinkInfo"; + +// 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 = { + "web_link_id": "1234567890" +}; + +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/toolkits/box_api/retrieve_web_link_info_example_call_tool.py b/public/examples/integrations/toolkits/box_api/retrieve_web_link_info_example_call_tool.py new file mode 100644 index 000000000..f016bafc0 --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/retrieve_web_link_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 = "BoxApi.RetrieveWebLinkInfo" + +auth_response = client.tools.authorize( + tool_name=TOOL_NAME, + user_id=TOOL_NAME +) + +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 = { + 'web_link_id': '1234567890' +} + +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/toolkits/box_api/unmark_box_doc_template_example_call_tool.js b/public/examples/integrations/toolkits/box_api/unmark_box_doc_template_example_call_tool.js new file mode 100644 index 000000000..e91b91da4 --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/unmark_box_doc_template_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 = "BoxApi.UnmarkBoxDocTemplate"; + +// 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 = { + "file_id_to_unmark": "1234567890" +}; + +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/toolkits/box_api/unmark_box_doc_template_example_call_tool.py b/public/examples/integrations/toolkits/box_api/unmark_box_doc_template_example_call_tool.py new file mode 100644 index 000000000..4c8b9ab6d --- /dev/null +++ b/public/examples/integrations/toolkits/box_api/unmark_box_doc_template_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 = "BoxApi.UnmarkBoxDocTemplate" + +auth_response = client.tools.authorize( + tool_name=TOOL_NAME, + user_id=TOOL_NAME +) + +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 = { + 'file_id_to_unmark': '1234567890' +} + +response = client.tools.execute( + tool_name=TOOL_NAME, + input=tool_input, + user_id=USER_ID, +) +print(json.dumps(response.output.value, indent=2)) From e8781ed48f66c5b9cd24f8ae0773c7f62bcad33a Mon Sep 17 00:00:00 2001 From: Renato Byrro Date: Wed, 1 Oct 2025 21:57:19 -0300 Subject: [PATCH 2/3] merge main --- .github/PULL_REQUEST_TEMPLATE.md | 5 - .../community_contributed_toolkit.md | 16 - .github/workflows/translate-docs.yml | 298 ++ .i18n-cache/hashes.json | 13 +- AUTHORING.md | 2 +- _dictionaries/en.ts | 20 + _dictionaries/es.ts | 22 +- _dictionaries/get-dictionary-client.ts | 19 + _dictionaries/pt-BR.ts | 20 + agents/changelog/agents/changelog.ts | 10 +- app/_components/back-button.tsx | 33 + .../toolkits => }/coming-soon-context.tsx | 0 app/_components/translation-banner.tsx | 72 + app/_layouts/shared-layout.tsx | 7 +- app/en/_meta.tsx | 13 +- app/en/home/_meta.tsx | 43 +- app/en/home/agentic-development/page.mdx | 29 + app/en/home/api-keys/page.mdx | 3 +- app/en/home/arcade-cli/page.mdx | 21 +- app/en/home/auth-providers/_meta.ts | 8 - app/en/home/auth-providers/_meta.tsx | 15 + app/en/home/auth-providers/asana/page.mdx | 33 +- app/en/home/auth-providers/atlassian/page.mdx | 13 +- app/en/home/auth-providers/clickup/page.mdx | 17 +- app/en/home/auth-providers/discord/page.mdx | 13 +- app/en/home/auth-providers/dropbox/page.mdx | 13 +- app/en/home/auth-providers/github/page.mdx | 19 +- app/en/home/auth-providers/google/page.mdx | 23 +- app/en/home/auth-providers/hubspot/page.mdx | 31 +- app/en/home/auth-providers/linear/page.mdx | 15 +- app/en/home/auth-providers/linkedin/page.mdx | 13 +- app/en/home/auth-providers/microsoft/page.mdx | 31 +- app/en/home/auth-providers/notion/page.mdx | 15 +- app/en/home/auth-providers/oauth2/page.mdx | 124 +- app/en/home/auth-providers/page.mdx | 2 +- app/en/home/auth-providers/reddit/page.mdx | 13 +- .../home/auth-providers/salesforce/page.mdx | 180 +- app/en/home/auth-providers/slack/page.mdx | 25 +- app/en/home/auth-providers/spotify/page.mdx | 13 +- app/en/home/auth-providers/twitch/page.mdx | 13 +- app/en/home/auth-providers/x/page.mdx | 19 +- app/en/home/auth-providers/zendesk/page.mdx | 54 +- app/en/home/auth-providers/zoom/page.mdx | 13 +- app/en/home/auth/auth-tool-calling/page.mdx | 18 +- .../call-third-party-apis-directly/page.mdx | 50 +- app/en/home/auth/how-arcade-helps.mdx | 19 +- app/en/home/auth/how-arcade-helps/page.mdx | 22 +- app/en/home/build-tools/_meta.tsx | 2 +- .../page.mdx | 95 +- .../create-a-tool-with-secrets/page.mdx | 4 +- .../build-tools/handle-tool-errors/page.mdx | 2 +- app/en/home/changelog/page.mdx | 315 +- app/en/home/crewai/_meta.ts | 4 - app/en/home/crewai/_meta.tsx | 18 + app/en/home/crewai/custom-auth-flow/page.mdx | 2 +- app/en/home/crewai/use-arcade-tools/page.mdx | 2 +- .../create-an-evaluation-suite/page.mdx | 20 +- .../evaluate-tools/run-evaluations/page.mdx | 6 +- app/en/home/faq/page.mdx | 43 +- app/en/home/glossary/page.mdx | 71 +- app/en/home/google-adk/overview/page.mdx | 17 +- .../home/google-adk/use-arcade-tools/page.mdx | 8 +- app/en/home/hybrid-deployment/_meta.tsx | 15 + .../hybrid-deployment/hybrid-worker/page.mdx | 16 +- app/{_components => en/home}/landing-page.tsx | 42 +- .../langchain/auth-langchain-tools/page.mdx | 4 +- .../home/langchain/use-arcade-tools/page.mdx | 10 +- .../langchain/user-auth-interrupts/page.mdx | 10 +- .../configuration-templates/page.mdx | 37 +- .../configuring-arcade-deploy/page.mdx | 6 +- .../configure/engine/page.mdx | 28 +- .../home/local-deployment/install/_meta.tsx | 2 +- .../local-deployment/install/docker/page.mdx | 3 - .../local-deployment/install/local/page.mdx | 14 +- .../{toolkits => mcp-servers}/page.mdx | 23 +- app/en/home/mastra/_meta.ts | 5 - app/en/home/mastra/_meta.tsx | 21 + app/en/home/mastra/overview/page.mdx | 6 +- app/en/home/mastra/use-arcade-tools/page.mdx | 4 +- app/en/home/mcp-clients/_meta.tsx | 4 + .../claude-desktop}/page.mdx | 5 +- .../visual-studio-code}/page.mdx | 20 +- app/en/home/mcp-desktop-clients/_meta.tsx | 4 - app/en/home/mcp-overview/page.mdx | 79 - app/en/home/migrate-to-v2/page.mdx | 44 - app/en/home/oai-agents/overview/page.mdx | 29 +- .../home/oai-agents/use-arcade-tools/page.mdx | 16 +- .../oai-agents/user-auth-interrupts/page.mdx | 12 +- app/en/home/page.mdx | 2 +- app/en/home/quickstart/page.mdx | 24 +- app/en/home/registry-early-access/page.mdx | 4 +- app/en/home/serve-tools/_meta.tsx | 2 - .../home/serve-tools/arcade-deploy/page.mdx | 12 +- .../home/serve-tools/docker-worker/page.mdx | 85 - app/en/home/serve-tools/modal-worker/page.mdx | 85 - .../use-tools/get-tool-definitions/page.mdx | 16 +- app/en/home/use-tools/tools-overview/page.mdx | 10 +- app/en/home/use-tools/types-of-tools/page.mdx | 18 +- .../home/vercelai/using-arcade-tools/page.mdx | 75 +- app/en/{toolkits => mcp-servers}/_meta.tsx | 11 +- .../components}/coming-soon-modal.tsx | 2 +- .../mcp-servers/components}/tool-card.tsx | 8 +- .../components}/toolkits-config.ts | 210 +- .../mcp-servers/components}/toolkits.tsx | 32 +- .../mcp-servers/contribute-a-server/page.mdx | 20 + app/en/mcp-servers/customer-support/_meta.tsx | 15 + .../customer-support/zendesk/_meta.tsx | 0 .../customer-support/zendesk/page.mdx | 78 +- .../zendesk/reference/page.mdx | 2 +- .../databases/_meta.ts | 0 app/en/mcp-servers/databases/_meta.tsx | 21 + .../databases/clickhouse/page.mdx | 32 +- .../databases/mongodb/page.mdx | 36 +- .../databases/postgres/clickhouse.mdx | 103 +- .../databases/postgres/mongodb.mdx | 122 +- .../databases/postgres/page.mdx | 32 +- .../development/_meta.tsx | 0 .../development/e2b/page.mdx | 16 +- .../development/firecrawl/_meta.tsx | 0 .../development/firecrawl/page.mdx | 35 +- .../development/firecrawl/reference/page.mdx | 0 .../development/github/_meta.tsx | 0 .../development/github/page.mdx | 105 +- .../development/github/reference/page.mdx | 0 app/en/mcp-servers/entertainment/_meta.tsx | 21 + .../entertainment/imgflip/page.mdx | 18 +- .../entertainment/spotify/imgflip.mdx | 31 +- .../entertainment/spotify/page.mdx | 58 +- .../entertainment/twitch/page.mdx | 2 +- app/en/mcp-servers/page.mdx | 9 + app/en/mcp-servers/payments/_meta.tsx | 15 + .../payments/stripe/page.mdx | 66 +- app/en/mcp-servers/productivity/_meta.tsx | 66 + .../productivity/asana/_meta.tsx | 0 .../productivity/asana/page.mdx | 93 +- .../productivity/asana/reference/page.mdx | 2 +- .../productivity/clickup/_meta.tsx | 15 + .../productivity/clickup/page.mdx | 117 +- .../productivity/clickup/reference/page.mdx | 2 +- .../productivity/closeio/page.mdx | 0 .../productivity/confluence/page.mdx | 56 +- .../productivity/dropbox/_meta.tsx | 0 .../productivity/dropbox/page.mdx | 23 +- .../productivity/dropbox/reference/page.mdx | 0 .../mcp-servers/productivity/gmail/_meta.tsx | 15 + .../productivity/gmail/page.mdx | 70 +- .../productivity/gmail/reference/page.mdx | 2 +- .../productivity/google-calendar/_meta.tsx | 0 .../productivity/google-calendar/page.mdx | 49 +- .../google-calendar/reference/page.mdx | 2 +- .../productivity/google-contacts/page.mdx | 48 +- .../productivity/google-docs/_meta.tsx | 0 .../productivity/google-docs/page.mdx | 123 +- .../google-docs/reference/page.mdx | 2 +- .../productivity/google-drive/_meta.tsx | 0 .../productivity/google-drive/page.mdx | 73 +- .../google-drive/reference/page.mdx | 2 +- .../productivity/google-sheets/_meta.tsx | 0 .../productivity/google-sheets/page.mdx | 45 +- .../google-sheets/reference/page.mdx | 2 +- .../productivity/google-slides/page.mdx | 40 +- .../productivity/jira/_meta.tsx | 0 .../jira/environment-variables/page.mdx | 2 +- .../productivity/jira/page.mdx | 361 ++- .../productivity/jira/reference/page.mdx | 2 +- .../productivity/linear/page.mdx | 16 +- .../productivity/notion/page.mdx | 68 +- .../productivity/obsidian/page.mdx | 3 + .../productivity/outlook-calendar/page.mdx | 44 +- .../productivity/outlook-mail/_meta.tsx | 0 .../productivity/outlook-mail/page.mdx | 50 +- .../outlook-mail/reference/page.mdx | 2 +- .../productivity/sharepoint/page.mdx | 180 +- app/en/mcp-servers/sales/_meta.tsx | 18 + .../sales/hubspot/_meta.tsx | 0 .../sales/hubspot/page.mdx | 159 +- .../sales/hubspot/reference/page.mdx | 2 +- .../sales/salesforce/page.mdx | 36 +- .../_meta.js => mcp-servers/search/_meta.tsx} | 10 +- .../search/google_finance/page.mdx | 14 +- .../search/google_flights/page.mdx | 8 +- .../search/google_hotels/page.mdx | 8 +- .../search/google_jobs/page.mdx | 10 +- .../search/google_maps/page.mdx | 14 +- .../search/google_news/page.mdx | 10 +- .../search/google_search/page.mdx | 10 +- .../search/google_shopping/page.mdx | 10 +- .../search/walmart/page.mdx | 14 +- .../search/youtube/page.mdx | 14 +- .../social-communication/_meta.tsx | 42 + .../social-communication/discord/page.mdx | 7 +- .../social-communication/linkedin/page.mdx | 14 +- .../microsoft-teams/_meta.tsx | 0 .../microsoft-teams/page.mdx | 244 +- .../microsoft-teams/reference/page.mdx | 2 +- .../social-communication/reddit/page.mdx | 60 +- .../social-communication/slack-api/page.mdx | 300 +- .../social-communication/slack/_meta.tsx | 0 .../slack/environment-variables/page.mdx | 0 .../slack/install/page.mdx | 6 +- .../slack/install/slack-auth-link.tsx | 0 .../social-communication/slack/page.mdx | 117 +- .../slack/reference/page.mdx | 2 +- .../social-communication/teams/_meta.tsx | 15 + .../teams/reference/page.mdx | 2 +- .../social-communication/twilio/page.mdx | 4 +- .../twilio/reference/page.mdx | 0 .../social-communication/x/page.mdx | 34 +- .../social-communication/zoom/_meta.tsx | 0 .../zoom/install/page.mdx | 9 +- .../zoom/install/zoom-auth-link.tsx | 0 .../social-communication/zoom/page.mdx | 10 +- .../en/mcp-servers/toolkits-config.ts | 0 .../community-toolkit-template/page.mdx | 3 - app/en/toolkits/contribute-a-toolkit/page.mdx | 18 - app/en/toolkits/page.mdx | 12 - app/en/toolkits/productivity/clickup/_meta.js | 7 - app/en/toolkits/productivity/gmail/_meta.js | 7 - .../toolkits/productivity/obsidian/page.mdx | 3 - .../social-communication/teams/_meta.js | 5 - .../social-communication/teams/_meta.tsx | 5 - app/not-found.tsx | 128 + .../code/guides/agentauth/auth_with_google.js | 2 +- .../code/guides/agentauth/auth_with_google.py | 2 +- middleware.ts | 99 +- package.json | 21 +- pnpm-lock.yaml | 962 +++--- .../get_project_by_id_example_call_tool.js | 0 .../get_project_by_id_example_call_tool.py | 0 .../list_projects_example_call_tool.js | 0 .../list_projects_example_call_tool.py | 0 .../tags/create_tag_example_call_tool.js | 0 .../tags/create_tag_example_call_tool.py | 0 .../asana/tags/list_tags_example_call_tool.js | 0 .../asana/tags/list_tags_example_call_tool.py | 0 .../attach_file_to_task_example_call_tool.js | 0 .../attach_file_to_task_example_call_tool.py | 0 .../tasks/create_task_example_call_tool.js | 0 .../tasks/create_task_example_call_tool.py | 0 ..._subtasks_from_a_task_example_call_tool.js | 0 ..._subtasks_from_a_task_example_call_tool.py | 0 .../tasks/get_task_by_id_example_call_tool.js | 0 .../tasks/get_task_by_id_example_call_tool.py | 0 .../get_tasks_without_id_example_call_tool.js | 0 .../get_tasks_without_id_example_call_tool.py | 0 ...ask_as_completed_example_call_tool copy.py | 0 ...ark_task_as_completed_example_call_tool.js | 0 .../tasks/update_task_example_call_tool.js | 0 .../tasks/update_task_example_call_tool.py | 0 .../teams/get_team_by_id_example_call_tool.js | 0 .../teams/get_team_by_id_example_call_tool.py | 0 ...t_user_is_a_member_of_example_call_tool.js | 0 ...t_user_is_a_member_of_example_call_tool.py | 0 .../users/get_user_by_id_example_call_tool.js | 0 .../users/get_user_by_id_example_call_tool.py | 0 .../users/list_users_example_call_tool.js | 0 .../users/list_users_example_call_tool.py | 0 .../discover_databases_example_call_tool.js | 0 .../discover_databases_example_call_tool.py | 0 .../discover_schemas_example_call_tool.js | 0 .../discover_schemas_example_call_tool.py | 0 .../discover_tables_example_call_tool.js | 0 .../discover_tables_example_call_tool.py | 0 .../execute_select_query_example_call_tool.js | 0 .../execute_select_query_example_call_tool.py | 0 .../get_table_schema_example_call_tool.js | 0 .../get_table_schema_example_call_tool.py | 0 .../create_comment_example_call_tool.js | 0 .../create_comment_example_call_tool.py | 0 .../create_comment_reply_example_call_tool.js | 0 .../create_comment_reply_example_call_tool.py | 0 .../create_task_comment_example_call_tool.js | 0 .../create_task_comment_example_call_tool.py | 0 ...te_task_comment_reply_example_call_tool.js | 0 ...te_task_comment_reply_example_call_tool.py | 0 .../clickup/create_task_example_call_tool.js | 0 .../clickup/create_task_example_call_tool.py | 0 ...earch_folders_by_name_example_call_tool.js | 0 ...earch_folders_by_name_example_call_tool.py | 0 ..._search_lists_by_name_example_call_tool.js | 0 ..._search_lists_by_name_example_call_tool.py | 0 ...earch_members_by_name_example_call_tool.js | 0 ...earch_members_by_name_example_call_tool.py | 0 ..._search_tasks_by_name_example_call_tool.js | 0 ..._search_tasks_by_name_example_call_tool.py | 0 .../get_comment_replies_example_call_tool.js | 0 .../get_comment_replies_example_call_tool.py | 0 ...get_folders_for_space_example_call_tool.js | 0 ...get_folders_for_space_example_call_tool.py | 0 .../get_lists_for_folder_example_call_tool.js | 0 .../get_lists_for_folder_example_call_tool.py | 0 .../get_lists_for_space_example_call_tool.js | 0 .../get_lists_for_space_example_call_tool.py | 0 ...members_for_workspace_example_call_tool.js | 0 ...members_for_workspace_example_call_tool.py | 0 .../clickup/get_spaces_example_call_tool.js | 0 .../clickup/get_spaces_example_call_tool.py | 0 ...get_statuses_for_list_example_call_tool.js | 0 ...get_statuses_for_list_example_call_tool.py | 0 .../get_system_guidance_example_call_tool.js | 0 .../get_system_guidance_example_call_tool.py | 0 .../get_task_by_id_example_call_tool.js | 0 .../get_task_by_id_example_call_tool.py | 0 ..._task_comment_replies_example_call_tool.js | 0 ..._task_comment_replies_example_call_tool.py | 0 .../get_task_comments_example_call_tool.js | 0 .../get_task_comments_example_call_tool.py | 0 ...et_tasks_by_assignees_example_call_tool.js | 0 ...et_tasks_by_assignees_example_call_tool.py | 0 .../get_tasks_by_scope_example_call_tool.js | 0 .../get_tasks_by_scope_example_call_tool.py | 0 ...et_workspace_insights_example_call_tool.js | 0 ...et_workspace_insights_example_call_tool.py | 0 .../update_comment_example_call_tool.js | 0 .../update_comment_example_call_tool.py | 0 ...update_task_assignees_example_call_tool.js | 0 ...update_task_assignees_example_call_tool.py | 0 .../update_task_comment_example_call_tool.js | 0 .../update_task_comment_example_call_tool.py | 0 .../clickup/update_task_example_call_tool.js | 0 .../clickup/update_task_example_call_tool.py | 0 .../clickup/who_am_i_example_call_tool.js | 0 .../clickup/who_am_i_example_call_tool.py | 0 .../clickup/who_i_am_example_call_tool.js | 0 .../clickup/who_i_am_example_call_tool.py | 0 .../create_page_example_call_tool.js | 0 .../create_page_example_call_tool.py | 0 ..._attachments_for_page_example_call_tool.js | 0 ..._attachments_for_page_example_call_tool.py | 0 .../confluence/get_page_example_call_tool.js | 0 .../confluence/get_page_example_call_tool.py | 0 .../get_pages_by_id_example_call_tool.js | 0 .../get_pages_by_id_example_call_tool.py | 0 .../confluence/get_space_example_call_tool.js | 0 .../confluence/get_space_example_call_tool.py | 0 .../get_space_hierarchy_example_call_tool.js | 0 .../get_space_hierarchy_example_call_tool.py | 0 .../list_attachments_example_call_tool.js | 0 .../list_attachments_example_call_tool.py | 0 .../list_pages_example_call_tool.js | 0 .../list_pages_example_call_tool.py | 0 .../list_spaces_example_call_tool.js | 0 .../list_spaces_example_call_tool.py | 0 .../rename_page_example_call_tool.js | 0 .../rename_page_example_call_tool.py | 0 .../search_content_example_call_tool.js | 0 .../search_content_example_call_tool.py | 0 .../update_page_content_example_call_tool.js | 0 .../update_page_content_example_call_tool.py | 0 .../download_file_example_call_tool.js | 0 .../download_file_example_call_tool.py | 0 .../list_items_in_folder_example_call_tool.js | 0 .../list_items_in_folder_example_call_tool.py | 0 ...rch_files_and_folders_example_call_tool.js | 0 ...rch_files_and_folders_example_call_tool.py | 0 ...atic_matplotlib_chart_example_call_tool.js | 0 ...atic_matplotlib_chart_example_call_tool.py | 0 .../e2b/run_code_example_call_tool.js | 0 .../e2b/run_code_example_call_tool.py | 0 .../cancel_crawl_example_call_tool.js | 0 .../cancel_crawl_example_call_tool.py | 0 .../crawl_website_example_call_tool.js | 0 .../crawl_website_example_call_tool.py | 0 .../get_crawl_data_example_call_tool.js | 0 .../get_crawl_data_example_call_tool.py | 0 .../get_crawl_status_example_call_tool.js | 0 .../get_crawl_status_example_call_tool.py | 0 .../map_website_example_call_tool.js | 0 .../map_website_example_call_tool.py | 0 .../firecrawl/scrape_url_example_call_tool.js | 0 .../firecrawl/scrape_url_example_call_tool.py | 0 .../count_stargazers_example_call_tool.js | 0 .../count_stargazers_example_call_tool.py | 0 .../create_issue_comment_example_call_tool.js | 0 .../create_issue_comment_example_call_tool.py | 0 .../github/create_issue_example_call_tool.js | 0 .../github/create_issue_example_call_tool.py | 0 ...ly_for_review_comment_example_call_tool.js | 0 ...ly_for_review_comment_example_call_tool.py | 0 ...create_review_comment_example_call_tool.js | 0 ...create_review_comment_example_call_tool.py | 0 .../get_pull_request_example_call_tool.js | 0 .../get_pull_request_example_call_tool.py | 0 .../get_repository_example_call_tool.js | 0 .../get_repository_example_call_tool.py | 0 ...list_org_repositories_example_call_tool.js | 0 ...list_org_repositories_example_call_tool.py | 0 ..._pull_request_commits_example_call_tool.js | 0 ..._pull_request_commits_example_call_tool.py | 0 .../list_pull_requests_example_call_tool.js | 0 .../list_pull_requests_example_call_tool.py | 0 ...repository_activities_example_call_tool.js | 0 ...repository_activities_example_call_tool.py | 0 ...ments_in_a_repository_example_call_tool.js | 0 ...ments_in_a_repository_example_call_tool.py | 0 ...ments_on_pull_request_example_call_tool.js | 0 ...ments_on_pull_request_example_call_tool.py | 0 .../list_stargazers_example_call_tool.js | 0 .../list_stargazers_example_call_tool.py | 0 .../github/set_starred_example_call_tool.js | 0 .../github/set_starred_example_call_tool.py | 0 .../update_pull_request_example_call_tool.js | 0 .../update_pull_request_example_call_tool.py | 0 .../gmail/who_am_i_example_call_tool.js | 0 .../gmail/who_am_i_example_call_tool.py | 0 .../create_contact_example_call_tool.js | 0 .../create_contact_example_call_tool.py | 0 ...rch_contacts_by_email_example_call_tool.js | 0 ...rch_contacts_by_email_example_call_tool.py | 0 ...arch_contacts_by_name_example_call_tool.js | 0 ...arch_contacts_by_name_example_call_tool.py | 0 .../comment_on_document_example_call_tool.js | 0 .../comment_on_document_example_call_tool.py | 0 ...create_blank_document_example_call_tool.js | 0 ...create_blank_document_example_call_tool.py | 0 ...te_document_from_text_example_call_tool.js | 0 ...te_document_from_text_example_call_tool.py | 0 .../docs/edit_document_example_call_tool.js | 0 .../docs/edit_document_example_call_tool.py | 0 ...et_document_as_doc_md_example_call_tool.js | 0 ...et_document_as_doc_md_example_call_tool.py | 0 .../get_document_by_id_example_call_tool.js | 0 .../get_document_by_id_example_call_tool.py | 0 ...xt_at_end_of_document_example_call_tool.js | 0 ...xt_at_end_of_document_example_call_tool.py | 0 ...ist_document_comments_example_call_tool.js | 0 ...ist_document_comments_example_call_tool.py | 0 ...nd_retrieve_documents_example_call_tool.js | 0 ...nd_retrieve_documents_example_call_tool.py | 0 .../search_documents_example_call_tool.js | 0 .../search_documents_example_call_tool.py | 0 .../delete_draft_email_example_call_tool.js | 0 .../delete_draft_email_example_call_tool.py | 0 .../gmail/get_thread_example_call_tool.js | 0 .../gmail/get_thread_example_call_tool.py | 0 .../list_draft_emails_example_call_tool.js | 0 .../list_draft_emails_example_call_tool.py | 0 ...list_emails_by_header_example_call_tool.js | 0 ...list_emails_by_header_example_call_tool.py | 0 .../gmail/list_emails_example_call_tool.js | 0 .../gmail/list_emails_example_call_tool.py | 0 .../gmail/list_threads_example_call_tool.js | 0 .../gmail/list_threads_example_call_tool.py | 0 .../gmail/search_threads_example_call_tool.js | 0 .../gmail/search_threads_example_call_tool.py | 0 .../send_draft_email_example_call_tool.js | 0 .../send_draft_email_example_call_tool.py | 0 .../gmail/send_email_example_call_tool.js | 0 .../gmail/send_email_example_call_tool.py | 0 .../gmail/trash_email_example_call_tool.js | 0 .../gmail/trash_email_example_call_tool.py | 0 .../update_draft_email_example_call_tool.js | 0 .../update_draft_email_example_call_tool.py | 0 .../write_draft_email_example_call_tool.js | 0 .../write_draft_email_example_call_tool.py | 0 ...mment_on_presentation_example_call_tool.js | 0 ...mment_on_presentation_example_call_tool.py | 0 .../create_presentation_example_call_tool.js | 0 .../create_presentation_example_call_tool.py | 0 .../slides/create_slide_example_call_tool.js | 0 .../slides/create_slide_example_call_tool.py | 0 ...oogle_file_picker_url_example_call_tool.js | 0 ...oogle_file_picker_url_example_call_tool.py | 0 ...sentation_as_markdown_example_call_tool.js | 0 ...sentation_as_markdown_example_call_tool.py | 0 ...presentation_comments_example_call_tool.js | 0 ...presentation_comments_example_call_tool.py | 0 .../search_presentations_example_call_tool.js | 0 .../search_presentations_example_call_tool.py | 0 .../slides/who_am_i_example_call_tool.js | 0 .../slides/who_am_i_example_call_tool.py | 0 .../create_event_example_call_tool.js | 0 .../create_event_example_call_tool.py | 0 .../delete_event_example_call_tool.js | 0 .../delete_event_example_call_tool.py | 0 ...when_everyone_is_free_example_call_tool.js | 0 ...when_everyone_is_free_example_call_tool.py | 0 .../list_calendars_example_call_tool.js | 0 .../list_calendars_example_call_tool.py | 0 .../list_events_example_call_tool.js | 0 .../list_events_example_call_tool.py | 0 .../update_event_example_call_tool.js | 0 .../update_event_example_call_tool.py | 0 .../who_am_i_example_call_tool.js | 0 .../who_am_i_example_call_tool.py | 0 .../who_am_i_example_call_tool.js | 0 .../who_am_i_example_call_tool.py | 0 ...oogle_file_picker_url_example_call_tool.js | 0 ...oogle_file_picker_url_example_call_tool.py | 0 .../google_docs/who_am_i_example_call_tool.js | 0 .../google_docs/who_am_i_example_call_tool.py | 0 ...oogle_file_picker_url_example_call_tool.js | 0 ...oogle_file_picker_url_example_call_tool.py | 0 ...t_file_tree_structure_example_call_tool.js | 0 ...t_file_tree_structure_example_call_tool.py | 0 .../search_files_example_call_tool.js | 0 .../search_files_example_call_tool.py | 0 .../who_am_i_example_call_tool.js | 0 .../who_am_i_example_call_tool.py | 0 .../add_note_to_cell_example_call_tool.js | 0 .../add_note_to_cell_example_call_tool.py | 0 .../create_spreadsheet_example_call_tool.js | 0 .../create_spreadsheet_example_call_tool.py | 0 ...oogle_file_picker_url_example_call_tool.js | 0 ...oogle_file_picker_url_example_call_tool.py | 0 .../get_spreadsheet_example_call_tool.js | 0 .../get_spreadsheet_example_call_tool.py | 0 ..._spreadsheet_metadata_example_call_tool.js | 0 ..._spreadsheet_metadata_example_call_tool.py | 0 .../search_spreadsheets_example_call_tool.js | 0 .../search_spreadsheets_example_call_tool.py | 0 .../update_cells_example_call_tool.js | 0 .../update_cells_example_call_tool.py | 0 .../who_am_i_example_call_tool.js | 0 .../who_am_i_example_call_tool.py | 0 .../write_to_cell_example_call_tool.js | 0 .../write_to_cell_example_call_tool.py | 0 ...iate_activity_to_deal_example_call_tool.js | 0 ...iate_activity_to_deal_example_call_tool.py | 0 ...ciate_contact_to_deal_example_call_tool.js | 0 ...ciate_contact_to_deal_example_call_tool.py | 0 .../create_call_activity_example_call_tool.js | 0 .../create_call_activity_example_call_tool.py | 0 ...ommunication_activity_example_call_tool.js | 0 ...ommunication_activity_example_call_tool.py | 0 .../create_company_example_call_tool.js | 0 .../create_company_example_call_tool.py | 0 .../create_contact_example_call_tool.js | 0 .../create_contact_example_call_tool.py | 0 .../hubspot/create_deal_example_call_tool.js | 0 .../hubspot/create_deal_example_call_tool.py | 0 ...create_email_activity_example_call_tool.js | 0 ...create_email_activity_example_call_tool.py | 0 ...eate_meeting_activity_example_call_tool.js | 0 ...eate_meeting_activity_example_call_tool.py | 0 .../create_note_activity_example_call_tool.js | 0 .../create_note_activity_example_call_tool.py | 0 .../get_all_users_example_call_tool.js | 0 .../get_all_users_example_call_tool.py | 0 ...ilable_industry_types_example_call_tool.js | 0 ...ilable_industry_types_example_call_tool.py | 0 ...call_data_by_keywords_example_call_tool.js | 0 ...call_data_by_keywords_example_call_tool.py | 0 ...tion_data_by_keywords_example_call_tool.js | 0 ...tion_data_by_keywords_example_call_tool.py | 0 ...pany_data_by_keywords_example_call_tool.js | 0 ...pany_data_by_keywords_example_call_tool.py | 0 ...tact_data_by_keywords_example_call_tool.js | 0 ...tact_data_by_keywords_example_call_tool.py | 0 .../get_deal_by_id_example_call_tool.js | 0 .../get_deal_by_id_example_call_tool.py | 0 ...deal_data_by_keywords_example_call_tool.js | 0 ...deal_data_by_keywords_example_call_tool.py | 0 ..._deal_pipeline_stages_example_call_tool.js | 0 ..._deal_pipeline_stages_example_call_tool.py | 0 .../get_deal_pipelines_example_call_tool.js | 0 .../get_deal_pipelines_example_call_tool.py | 0 ...mail_data_by_keywords_example_call_tool.js | 0 ...mail_data_by_keywords_example_call_tool.py | 0 ...ting_data_by_keywords_example_call_tool.js | 0 ...ting_data_by_keywords_example_call_tool.py | 0 ...note_data_by_keywords_example_call_tool.js | 0 ...note_data_by_keywords_example_call_tool.py | 0 ...task_data_by_keywords_example_call_tool.js | 0 ...task_data_by_keywords_example_call_tool.py | 0 .../get_user_by_id_example_call_tool.js | 0 .../get_user_by_id_example_call_tool.py | 0 .../list_companies_example_call_tool.js | 0 .../list_companies_example_call_tool.py | 0 .../list_contacts_example_call_tool.js | 0 .../list_contacts_example_call_tool.py | 0 .../hubspot/list_deals_example_call_tool.js | 0 .../hubspot/list_deals_example_call_tool.py | 0 ...t_enviroment_guidance_example_call_tool.js | 0 ...t_enviroment_guidance_example_call_tool.py | 0 ...pdate_deal_close_date_example_call_tool.js | 0 ...pdate_deal_close_date_example_call_tool.py | 0 .../update_deal_stage_example_call_tool.js | 0 .../update_deal_stage_example_call_tool.py | 0 .../hubspot/who_am_i_example_call_tool.js | 0 .../hubspot/who_am_i_example_call_tool.py | 0 .../imgflip/create_meme_example_call_tool.js | 0 .../imgflip/create_meme_example_call_tool.py | 0 .../get_popular_memes_example_call_tool.js | 0 .../get_popular_memes_example_call_tool.py | 0 .../imgflip/search_memes_example_call_tool.js | 0 .../imgflip/search_memes_example_call_tool.py | 0 .../add_comment_to_issue_example_call_tool.js | 2 +- .../add_comment_to_issue_example_call_tool.py | 2 +- .../add_issues_to_sprint_example_call_tool.js | 0 .../add_issues_to_sprint_example_call_tool.py | 0 .../add_labels_to_issue_example_call_tool.js | 2 +- .../add_labels_to_issue_example_call_tool.py | 2 +- .../attach_file_to_issue_example_call_tool.js | 2 +- .../attach_file_to_issue_example_call_tool.py | 2 +- .../jira/create_issue_example_call_tool.js | 2 +- .../jira/create_issue_example_call_tool.py | 2 +- .../download_attachment_example_call_tool.js | 2 +- .../download_attachment_example_call_tool.py | 2 +- ...t_attachment_metadata_example_call_tool.js | 2 +- ...t_attachment_metadata_example_call_tool.py | 2 +- ...able_atlassian_clouds_example_call_tool.js | 0 ...able_atlassian_clouds_example_call_tool.py | 0 ..._board_backlog_issues_example_call_tool.js | 0 ..._board_backlog_issues_example_call_tool.py | 0 .../jira/get_boards_example_call_tool.js | 0 .../jira/get_boards_example_call_tool.py | 0 .../get_comment_by_id_example_call_tool.js | 2 +- .../get_comment_by_id_example_call_tool.py | 2 +- .../jira/get_issue_by_id_example_call_tool.js | 2 +- .../jira/get_issue_by_id_example_call_tool.py | 2 +- .../get_issue_comments_example_call_tool.js | 2 +- .../get_issue_comments_example_call_tool.py | 2 +- .../get_issue_type_by_id_example_call_tool.js | 2 +- .../get_issue_type_by_id_example_call_tool.py | 2 +- ...get_issues_without_id_example_call_tool.js | 2 +- ...get_issues_without_id_example_call_tool.py | 2 +- .../get_priority_by_id_example_call_tool.js | 2 +- .../get_priority_by_id_example_call_tool.py | 2 +- .../get_project_by_id_example_call_tool.js | 2 +- .../get_project_by_id_example_call_tool.py | 2 +- .../get_sprint_issues_example_call_tool.js | 0 .../get_sprint_issues_example_call_tool.py | 0 .../get_transition_by_id_example_call_tool.js | 2 +- .../get_transition_by_id_example_call_tool.py | 2 +- ...sition_by_status_name_example_call_tool.js | 2 +- ...sition_by_status_name_example_call_tool.py | 2 +- ...s_available_for_issue_example_call_tool.js | 2 +- ...s_available_for_issue_example_call_tool.py | 2 +- .../jira/get_user_by_id_example_call_tool.js | 2 +- .../jira/get_user_by_id_example_call_tool.py | 2 +- .../get_users_without_id_example_call_tool.js | 2 +- .../get_users_without_id_example_call_tool.py | 2 +- ..._attachments_metadata_example_call_tool.js | 2 +- ..._attachments_metadata_example_call_tool.py | 2 +- ...ssue_types_by_project_example_call_tool.js | 2 +- ...ssue_types_by_project_example_call_tool.py | 2 +- .../jira/list_issues_example_call_tool.js | 2 +- .../jira/list_issues_example_call_tool.py | 2 +- .../jira/list_labels_example_call_tool.js | 2 +- .../jira/list_labels_example_call_tool.py | 2 +- ...ith_a_priority_scheme_example_call_tool.js | 2 +- ...ith_a_priority_scheme_example_call_tool.py | 2 +- ...vailable_to_a_project_example_call_tool.js | 2 +- ...vailable_to_a_project_example_call_tool.py | 2 +- ...available_to_an_issue_example_call_tool.js | 2 +- ...available_to_an_issue_example_call_tool.py | 2 +- ...list_priority_schemes_example_call_tool.js | 2 +- ...list_priority_schemes_example_call_tool.py | 2 +- ...ith_a_priority_scheme_example_call_tool.js | 2 +- ...ith_a_priority_scheme_example_call_tool.py | 2 +- .../jira/list_projects_example_call_tool.js | 2 +- .../jira/list_projects_example_call_tool.py | 2 +- ...st_sprints_for_boards_example_call_tool.js | 0 ...st_sprints_for_boards_example_call_tool.py | 0 .../jira/list_users_example_call_tool.js | 2 +- .../jira/list_users_example_call_tool.py | 2 +- ...rom_sprint_to_backlog_example_call_tool.js | 0 ...rom_sprint_to_backlog_example_call_tool.py | 0 ...ove_labels_from_issue_example_call_tool.js | 2 +- ...ove_labels_from_issue_example_call_tool.py | 2 +- ...earch_issues_with_jql_example_call_tool.js | 2 +- ...earch_issues_with_jql_example_call_tool.py | 2 +- ...ch_issues_without_jql_example_call_tool.js | 2 +- ...ch_issues_without_jql_example_call_tool.py | 2 +- .../jira/search_projects_example_call_tool.js | 2 +- .../jira/search_projects_example_call_tool.py | 2 +- ...n_issue_to_new_status_example_call_tool.js | 2 +- ...n_issue_to_new_status_example_call_tool.py | 2 +- .../jira/update_issue_example_call_tool.js | 2 +- .../jira/update_issue_example_call_tool.py | 2 +- .../jira/who_am_i_example_call_tool.js | 0 .../jira/who_am_i_example_call_tool.py | 0 .../linear/get_issue_example_call_tool.js | 0 .../linear/get_issue_example_call_tool.py | 0 .../linear/get_teams_example_call_tool.js | 0 .../linear/get_teams_example_call_tool.py | 0 .../create_text_post_example_call_tool.js | 0 .../create_text_post_example_call_tool.py | 0 .../create_event_example_call_tool.js | 0 .../create_event_example_call_tool.py | 0 .../get_event_example_call_tool.js | 0 .../get_event_example_call_tool.py | 0 ..._events_in_time_range_example_call_tool.js | 0 ..._events_in_time_range_example_call_tool.py | 0 ...create_and_send_email_example_call_tool.js | 0 ...create_and_send_email_example_call_tool.py | 0 .../create_draft_email_example_call_tool.js | 0 .../create_draft_email_example_call_tool.py | 0 ...st_emails_by_property_example_call_tool.js | 0 ...st_emails_by_property_example_call_tool.py | 0 .../list_emails_example_call_tool.js | 0 .../list_emails_example_call_tool.py | 0 ...list_emails_in_folder_example_call_tool.js | 0 ...list_emails_in_folder_example_call_tool.py | 0 .../reply_to_email_example_call_tool.js | 0 .../reply_to_email_example_call_tool.py | 0 .../send_draft_email_example_call_tool.js | 0 .../send_draft_email_example_call_tool.py | 0 .../update_draft_email_example_call_tool.js | 0 .../update_draft_email_example_call_tool.py | 0 .../create_chat_example_call_tool.js | 0 .../create_chat_example_call_tool.py | 0 ...annel_message_replies_example_call_tool.js | 0 ...annel_message_replies_example_call_tool.py | 0 .../get_channel_messages_example_call_tool.js | 0 .../get_channel_messages_example_call_tool.py | 0 .../get_channel_metadata_example_call_tool.js | 0 .../get_channel_metadata_example_call_tool.py | 0 ...et_chat_message_by_id_example_call_tool.js | 0 ...et_chat_message_by_id_example_call_tool.py | 0 .../get_chat_messages_example_call_tool.js | 0 .../get_chat_messages_example_call_tool.py | 0 .../get_chat_metadata_example_call_tool.js | 0 .../get_chat_metadata_example_call_tool.py | 0 .../get_signed_in_user_example_call_tool.js | 0 .../get_signed_in_user_example_call_tool.py | 0 .../get_team_example_call_tool.js | 0 .../get_team_example_call_tool.py | 0 .../list_channels_example_call_tool.js | 0 .../list_channels_example_call_tool.py | 0 .../list_chats_example_call_tool.js | 0 .../list_chats_example_call_tool.py | 0 .../list_team_members_example_call_tool.js | 0 .../list_team_members_example_call_tool.py | 0 .../list_teams_example_call_tool.js | 0 .../list_teams_example_call_tool.py | 0 .../list_users_example_call_tool.js | 0 .../list_users_example_call_tool.py | 0 ...ly_to_channel_message_example_call_tool.js | 0 ...ly_to_channel_message_example_call_tool.py | 0 ...reply_to_chat_message_example_call_tool.js | 0 ...reply_to_chat_message_example_call_tool.py | 0 .../search_channels_example_call_tool.js | 0 .../search_channels_example_call_tool.py | 0 .../search_messages_example_call_tool.js | 0 .../search_messages_example_call_tool.py | 0 .../search_people_example_call_tool.js | 0 .../search_people_example_call_tool.py | 0 .../search_team_members_example_call_tool.js | 0 .../search_team_members_example_call_tool.py | 0 .../search_teams_example_call_tool.js | 0 .../search_teams_example_call_tool.py | 0 .../search_users_example_call_tool.js | 0 .../search_users_example_call_tool.py | 0 ...nd_message_to_channel_example_call_tool.js | 0 ...nd_message_to_channel_example_call_tool.py | 0 .../send_message_to_chat_example_call_tool.js | 0 .../send_message_to_chat_example_call_tool.py | 0 .../who_am_i_example_call_tool.js | 0 .../who_am_i_example_call_tool.py | 0 .../aggregate_documents_example_call_tool.js | 0 .../aggregate_documents_example_call_tool.py | 0 .../count_documents_example_call_tool.js | 0 .../count_documents_example_call_tool.py | 0 .../discover_collections_example_call_tool.js | 0 .../discover_collections_example_call_tool.py | 0 .../discover_databases_example_call_tool.js | 0 .../discover_databases_example_call_tool.py | 0 .../find_documents_example_call_tool.js | 0 .../find_documents_example_call_tool.py | 0 ...get_collection_schema_example_call_tool.js | 0 ...get_collection_schema_example_call_tool.py | 0 .../notion/append_content_to_end_of_page.js | 0 .../notion/append_content_to_end_of_page.py | 0 .../notion/create_page_example_call_tool.js | 0 .../notion/create_page_example_call_tool.py | 0 .../get_object_metadata_example_call_tool.js | 0 .../get_object_metadata_example_call_tool.py | 0 ...et_page_content_by_id_example_call_tool.js | 0 ...et_page_content_by_id_example_call_tool.py | 0 ...page_content_by_title_example_call_tool.js | 0 ...page_content_by_title_example_call_tool.py | 0 ...t_workspace_structure_example_call_tool.js | 0 ...t_workspace_structure_example_call_tool.py | 0 .../search_by_title_example_call_tool.js | 0 .../search_by_title_example_call_tool.py | 0 .../notion/who_am_i_example_call_tool.js | 0 .../notion/who_am_i_example_call_tool.py | 0 .../who_am_i_example_call_tool.js | 0 .../who_am_i_example_call_tool.py | 0 .../who_am_i_example_call_tool.js | 0 .../who_am_i_example_call_tool.py | 0 .../discover_schemas_example_call_tool.js | 0 .../discover_schemas_example_call_tool.py | 0 .../discover_tables_example_call_tool.js | 0 .../discover_tables_example_call_tool.py | 0 .../execute_select_query_example_call_tool.js | 0 .../execute_select_query_example_call_tool.py | 0 .../get_table_schema_example_call_tool.js | 0 .../get_table_schema_example_call_tool.py | 0 ...heck_subreddit_access_example_call_tool.js | 0 ...heck_subreddit_access_example_call_tool.py | 0 .../comment_on_post_example_call_tool.js | 0 .../comment_on_post_example_call_tool.py | 0 ...ent_of_multiple_posts_example_call_tool.js | 0 ...ent_of_multiple_posts_example_call_tool.py | 0 .../get_content_of_post_example_call_tool.js | 0 .../get_content_of_post_example_call_tool.py | 0 .../reddit/get_my_posts_example_call_tool.js | 0 .../reddit/get_my_posts_example_call_tool.py | 0 .../get_my_username_example_call_tool.js | 0 .../get_my_username_example_call_tool.py | 0 ...et_posts_in_subreddit_example_call_tool.js | 0 ...et_posts_in_subreddit_example_call_tool.py | 0 .../get_subreddit_rules_example_call_tool.js | 0 .../get_subreddit_rules_example_call_tool.py | 0 ...t_top_level_comments_example_call_tool.js} | 4 +- ...t_top_level_comments_example_call_tool.py} | 2 +- .../reply_to_comment_example_call_tool.js | 0 .../reply_to_comment_example_call_tool.py | 0 .../submit_text_post_example_call_tool.js | 0 .../submit_text_post_example_call_tool.py | 0 .../create_contact_example_call_tool.js | 0 .../create_contact_example_call_tool.py | 0 .../create_contact_example_llm_oai.js | 0 .../create_contact_example_llm_oai.py | 0 ...et_account_data_by_id_example_call_tool.js | 0 ...et_account_data_by_id_example_call_tool.py | 0 .../get_account_data_by_id_example_llm_oai.js | 0 .../get_account_data_by_id_example_llm_oai.py | 0 ...ount_data_by_keywords_example_call_tool.js | 0 ...ount_data_by_keywords_example_call_tool.py | 0 ...ccount_data_by_keywords_example_llm_oai.js | 0 ...ccount_data_by_keywords_example_llm_oai.py | 0 ...stock_historical_data_example_call_tool.js | 0 ...stock_historical_data_example_call_tool.py | 0 .../get_stock_summary_example_call_tool.js | 0 .../get_stock_summary_example_call_tool.py | 0 ...earch_one_way_flights_example_call_tool.js | 0 ...earch_one_way_flights_example_call_tool.py | 0 ...rch_roundtrip_flights_example_call_tool.js | 0 ...rch_roundtrip_flights_example_call_tool.py | 0 .../search_hotels_example_call_tool.js | 0 .../search_hotels_example_call_tool.py | 0 .../search_jobs_example_call_tool.js | 0 .../search_jobs_example_call_tool.py | 0 ...ons_between_addresses_example_call_tool.js | 0 ...ons_between_addresses_example_call_tool.py | 0 ...s_between_coordinates_example_call_tool.js | 0 ...s_between_coordinates_example_call_tool.py | 0 .../search_news_example_call_tool.js | 0 .../search_news_example_call_tool.py | 0 .../search_google_example_call_tool.js | 0 .../search_google_example_call_tool.py | 0 ...rch_shopping_products_example_call_tool.js | 0 ...rch_shopping_products_example_call_tool.py | 0 ...lmart_product_details_example_call_tool.js | 0 ...lmart_product_details_example_call_tool.py | 0 ...arch_walmart_products_example_call_tool.js | 0 ...arch_walmart_products_example_call_tool.py | 0 ...youtube_video_details_example_call_tool.js | 0 ...youtube_video_details_example_call_tool.py | 0 ...search_youtube_videos_example_call_tool.js | 0 ...search_youtube_videos_example_call_tool.py | 0 ...nload_file_from_drive_example_call_tool.js | 0 ...nload_file_from_drive_example_call_tool.py | 0 .../get_drives_from_site_example_call_tool.js | 0 .../get_drives_from_site_example_call_tool.py | 0 .../get_followed_sites_example_call_tool.js | 0 .../get_followed_sites_example_call_tool.py | 0 .../get_items_from_list_example_call_tool.js | 0 .../get_items_from_list_example_call_tool.py | 0 .../get_lists_from_site_example_call_tool.js | 0 .../get_lists_from_site_example_call_tool.py | 0 .../sharepoint/get_page_example_call_tool.js | 0 .../sharepoint/get_page_example_call_tool.py | 0 .../sharepoint/get_site_example_call_tool.js | 0 .../sharepoint/get_site_example_call_tool.py | 0 .../list_items_in_folder_example_call_tool.js | 0 .../list_items_in_folder_example_call_tool.py | 0 .../list_pages_example_call_tool.js | 0 .../list_pages_example_call_tool.py | 0 ...t_root_items_in_drive_example_call_tool.js | 0 ...t_root_items_in_drive_example_call_tool.py | 0 .../list_sites_example_call_tool.js | 0 .../list_sites_example_call_tool.py | 0 .../search_drive_items_example_call_tool.js | 0 .../search_drive_items_example_call_tool.py | 0 .../search_sites_example_call_tool.js | 0 .../search_sites_example_call_tool.py | 0 ...nnel_metadata_by_name_example_call_tool.js | 0 ...nnel_metadata_by_name_example_call_tool.py | 0 ...rsation_history_by_id_example_call_tool.js | 0 ...rsation_history_by_id_example_call_tool.py | 0 ...ation_history_by_name_example_call_tool.js | 0 ...ation_history_by_name_example_call_tool.py | 0 ...sation_metadata_by_id_example_call_tool.js | 0 ...sation_metadata_by_id_example_call_tool.py | 0 ...conversation_metadata_example_call_tool.js | 0 ...conversation_metadata_example_call_tool.py | 0 ..._metadata_by_username_example_call_tool.js | 0 ..._metadata_by_username_example_call_tool.py | 0 ...rs_in_channel_by_name_example_call_tool.js | 0 ...rs_in_channel_by_name_example_call_tool.py | 0 ...in_conversation_by_id_example_call_tool.js | 0 ...in_conversation_by_id_example_call_tool.py | 0 .../slack/get_messages_example_call_tool.js | 0 .../slack/get_messages_example_call_tool.py | 0 ...es_in_channel_by_name_example_call_tool.js | 0 ...es_in_channel_by_name_example_call_tool.py | 0 ...in_conversation_by_id_example_call_tool.js | 0 ...in_conversation_by_id_example_call_tool.py | 0 ...versation_by_username_example_call_tool.js | 0 ...versation_by_username_example_call_tool.py | 0 ...versation_by_username_example_call_tool.js | 0 ...versation_by_username_example_call_tool.py | 0 ...ersation_by_usernames_example_call_tool.js | 0 ...ersation_by_usernames_example_call_tool.py | 0 ...metadata_by_usernames_example_call_tool.js | 0 ...metadata_by_usernames_example_call_tool.py | 0 .../get_user_info_by_id_example_call_tool.js | 0 .../get_user_info_by_id_example_call_tool.py | 0 ...users_in_conversation_example_call_tool.js | 0 ...users_in_conversation_example_call_tool.py | 0 .../slack/get_users_info_example_call_tool.js | 0 .../slack/get_users_info_example_call_tool.py | 0 .../list_conversations_example_call_tool.js | 0 .../list_conversations_example_call_tool.py | 0 ...onversations_metadata_example_call_tool.js | 0 ...onversations_metadata_example_call_tool.py | 0 ...age_channels_metadata_example_call_tool.js | 0 ...age_channels_metadata_example_call_tool.py | 0 ...onversations_metadata_example_call_tool.js | 0 ...onversations_metadata_example_call_tool.py | 0 ...age_channels_metadata_example_call_tool.js | 0 ...age_channels_metadata_example_call_tool.py | 0 ...onversations_metadata_example_call_tool.js | 0 ...onversations_metadata_example_call_tool.py | 0 ...ate_channels_metadata_example_call_tool.js | 0 ...ate_channels_metadata_example_call_tool.py | 0 ...lic_channels_metadata_example_call_tool.js | 0 ...lic_channels_metadata_example_call_tool.py | 0 .../slack/list_users_example_call_tool.js | 0 .../slack/list_users_example_call_tool.py | 0 .../send_dm_to_user_example_call_tool.js | 0 .../send_dm_to_user_example_call_tool.py | 0 .../slack/send_message_example_call_tool.js | 0 .../slack/send_message_example_call_tool.py | 0 ...nd_message_to_channel_example_call_tool.js | 0 ...nd_message_to_channel_example_call_tool.py | 0 .../slack/who_am_i_example_call_tool.js | 0 .../slack/who_am_i_example_call_tool.py | 0 .../accept_slack_invite_example_call_tool.js | 0 .../accept_slack_invite_example_call_tool.py | 0 ...add_call_participants_example_call_tool.js | 0 ...add_call_participants_example_call_tool.py | 0 ...add_slack_emoji_alias_example_call_tool.js | 0 ...add_slack_emoji_alias_example_call_tool.py | 0 .../add_slack_reaction_example_call_tool.js | 0 .../add_slack_reaction_example_call_tool.py | 0 ...ck_channel_invitation_example_call_tool.js | 0 ...ck_channel_invitation_example_call_tool.py | 0 ...heck_api_calling_code_example_call_tool.js | 0 ...heck_api_calling_code_example_call_tool.py | 0 ...slack_discoverability_example_call_tool.js | 0 ...slack_discoverability_example_call_tool.py | 0 ...te_slack_conversation_example_call_tool.js | 0 ...te_slack_conversation_example_call_tool.py | 0 ...eate_slack_user_group_example_call_tool.js | 0 ...eate_slack_user_group_example_call_tool.py | 0 ...tom_unfurl_slack_urls_example_call_tool.js | 0 ...tom_unfurl_slack_urls_example_call_tool.py | 0 ...heduled_slack_message_example_call_tool.js | 0 ...heduled_slack_message_example_call_tool.py | 0 ...shared_invite_request_example_call_tool.js | 0 ...shared_invite_request_example_call_tool.py | 0 .../disable_user_group_example_call_tool.js | 0 .../disable_user_group_example_call_tool.py | 0 .../edit_slack_bookmark_example_call_tool.js | 0 .../edit_slack_bookmark_example_call_tool.py | 0 ...le_slack_file_sharing_example_call_tool.js | 0 ...le_slack_file_sharing_example_call_tool.py | 0 ...able_slack_user_group_example_call_tool.js | 0 ...able_slack_user_group_example_call_tool.py | 0 ...rkspace_settings_info_example_call_tool.js | 0 ...rkspace_settings_info_example_call_tool.py | 0 ...d_slack_user_by_email_example_call_tool.js | 0 ...d_slack_user_by_email_example_call_tool.py | 0 .../get_call_information_example_call_tool.js | 0 .../get_call_information_example_call_tool.py | 0 ...get_conversation_info_example_call_tool.js | 0 ...get_conversation_info_example_call_tool.py | 0 ...rrent_slack_team_info_example_call_tool.js | 0 ...rrent_slack_team_info_example_call_tool.py | 0 ...ernal_file_upload_url_example_call_tool.js | 0 ...ernal_file_upload_url_example_call_tool.py | 0 .../get_integration_logs_example_call_tool.js | 0 .../get_integration_logs_example_call_tool.py | 0 ...emote_file_info_slack_example_call_tool.js | 0 ...emote_file_info_slack_example_call_tool.py | 0 .../get_slack_bot_info_example_call_tool.js | 0 .../get_slack_bot_info_example_call_tool.py | 0 ..._conversation_members_example_call_tool.js | 0 ..._conversation_members_example_call_tool.py | 0 ...ack_message_permalink_example_call_tool.js | 0 ...ack_message_permalink_example_call_tool.py | 0 ...ack_remote_files_info_example_call_tool.js | 0 ...ack_remote_files_info_example_call_tool.py | 0 ...lack_team_preferences_example_call_tool.js | 0 ...lack_team_preferences_example_call_tool.py | 0 ...slack_thread_messages_example_call_tool.js | 0 ...slack_thread_messages_example_call_tool.py | 0 ...t_slack_user_presence_example_call_tool.js | 0 ...t_slack_user_presence_example_call_tool.py | 0 ...et_slack_user_profile_example_call_tool.js | 0 ...et_slack_user_profile_example_call_tool.py | 0 ...m_billable_users_info_example_call_tool.js | 0 ...m_billable_users_info_example_call_tool.py | 0 .../get_team_profile_example_call_tool.js | 0 .../get_team_profile_example_call_tool.py | 0 .../get_user_identity_example_call_tool.js | 0 .../get_user_identity_example_call_tool.py | 0 ...user_to_slack_channel_example_call_tool.js | 0 ...user_to_slack_channel_example_call_tool.py | 0 ...in_slack_conversation_example_call_tool.js | 0 ...in_slack_conversation_example_call_tool.py | 0 ...e_slack_conversations_example_call_tool.js | 0 ...e_slack_conversations_example_call_tool.py | 0 ...space_invite_requests_example_call_tool.js | 0 ...space_invite_requests_example_call_tool.py | 0 ...hannels_for_usergroup_example_call_tool.js | 0 ...hannels_for_usergroup_example_call_tool.py | 0 ...custom_emoji_for_team_example_call_tool.js | 0 ...custom_emoji_for_team_example_call_tool.py | 0 ...slack_invite_requests_example_call_tool.js | 0 ...slack_invite_requests_example_call_tool.py | 0 ...ing_workspace_invites_example_call_tool.js | 0 ...ing_workspace_invites_example_call_tool.py | 0 .../list_pinned_items_example_call_tool.js | 0 .../list_pinned_items_example_call_tool.py | 0 ...st_scheduled_messages_example_call_tool.js | 0 ...st_scheduled_messages_example_call_tool.py | 0 ...hared_channel_invites_example_call_tool.js | 0 ...hared_channel_invites_example_call_tool.py | 0 .../list_slack_channels_example_call_tool.js | 0 .../list_slack_channels_example_call_tool.py | 0 ...ack_enterprise_emojis_example_call_tool.js | 0 ...ack_enterprise_emojis_example_call_tool.py | 0 ...list_slack_team_users_example_call_tool.js | 0 ...list_slack_team_users_example_call_tool.py | 0 ...ist_slack_user_groups_example_call_tool.js | 0 ...ist_slack_user_groups_example_call_tool.py | 0 ...lack_workspace_owners_example_call_tool.js | 0 ...lack_workspace_owners_example_call_tool.py | 0 ...t_teams_in_enterprise_example_call_tool.js | 0 ...t_teams_in_enterprise_example_call_tool.py | 0 .../list_workspace_users_example_call_tool.js | 0 .../list_workspace_users_example_call_tool.py | 0 ...me_slack_conversation_example_call_tool.js | 0 ...me_slack_conversation_example_call_tool.py | 0 ...item_to_slack_channel_example_call_tool.js | 0 ...item_to_slack_channel_example_call_tool.py | 0 .../register_slack_call_example_call_tool.js | 0 .../register_slack_call_example_call_tool.py | 0 ...ove_call_participants_example_call_tool.js | 0 ...ove_call_participants_example_call_tool.py | 0 ...ve_reaction_from_item_example_call_tool.js | 0 ...ve_reaction_from_item_example_call_tool.py | 0 ...remove_slack_bookmark_example_call_tool.js | 0 ...remove_slack_bookmark_example_call_tool.py | 0 .../rename_slack_emoji_example_call_tool.js | 0 .../rename_slack_emoji_example_call_tool.py | 0 .../revoke_slack_token_example_call_tool.js | 0 .../revoke_slack_token_example_call_tool.py | 0 ...chedule_slack_message_example_call_tool.js | 0 ...chedule_slack_message_example_call_tool.py | 0 ...search_files_in_slack_example_call_tool.js | 0 ...search_files_in_slack_example_call_tool.py | 0 ...search_slack_messages_example_call_tool.js | 0 ...search_slack_messages_example_call_tool.py | 0 ...hemeral_message_slack_example_call_tool.js | 0 ...hemeral_message_slack_example_call_tool.py | 0 .../send_slack_message_example_call_tool.js | 0 .../send_slack_message_example_call_tool.py | 0 ...k_channel_read_cursor_example_call_tool.js | 0 ...k_channel_read_cursor_example_call_tool.py | 0 ...t_slack_profile_photo_example_call_tool.js | 0 ...t_slack_profile_photo_example_call_tool.py | 0 ..._slack_workspace_name_example_call_tool.js | 0 ..._slack_workspace_name_example_call_tool.py | 0 ...workspace_description_example_call_tool.js | 0 ...workspace_description_example_call_tool.py | 0 ...emote_file_in_channel_example_call_tool.js | 0 ...emote_file_in_channel_example_call_tool.py | 0 ...date_slack_user_group_example_call_tool.js | 0 ...date_slack_user_group_example_call_tool.py | 0 ...slack_usergroup_users_example_call_tool.js | 0 ...slack_usergroup_users_example_call_tool.py | 0 ...ust_playback_position_example_call_tool.js | 0 ...ust_playback_position_example_call_tool.py | 0 ...get_available_devices_example_call_tool.js | 0 ...get_available_devices_example_call_tool.py | 0 ...get_currently_playing_example_call_tool.js | 0 ...get_currently_playing_example_call_tool.py | 0 .../get_playback_state_example_call_tool.js | 0 .../get_playback_state_example_call_tool.py | 0 .../get_track_from_id_example_call_tool.js | 0 .../get_track_from_id_example_call_tool.py | 0 .../pause_playback_example_call_tool.js | 0 .../pause_playback_example_call_tool.py | 0 .../play_artist_by_name_example_call_tool.js | 0 .../play_artist_by_name_example_call_tool.py | 0 .../play_track_by_name_example_call_tool.js | 0 .../play_track_by_name_example_call_tool.py | 0 .../resume_playback_example_call_tool.js | 0 .../resume_playback_example_call_tool.py | 0 .../spotify/search_example_call_tool.js | 0 .../spotify/search_example_call_tool.py | 0 .../skip_to_next_track_example_call_tool.js | 0 .../skip_to_next_track_example_call_tool.py | 0 ...kip_to_previous_track_example_call_tool.js | 0 ...kip_to_previous_track_example_call_tool.py | 0 ...tracks_playback_by_id_example_call_tool.js | 0 ...tracks_playback_by_id_example_call_tool.py | 0 ...illing_portal_session_example_call_tool.js | 0 ...illing_portal_session_example_call_tool.py | 0 .../create_customer_example_call_tool.js | 0 .../create_customer_example_call_tool.py | 0 .../create_invoice_example_call_tool.js | 0 .../create_invoice_example_call_tool.py | 0 .../create_invoice_item_example_call_tool.js | 0 .../create_invoice_item_example_call_tool.py | 0 .../create_payment_link_example_call_tool.js | 0 .../create_payment_link_example_call_tool.py | 0 .../stripe/create_price_example_call_tool.js | 0 .../stripe/create_price_example_call_tool.py | 0 .../create_product_example_call_tool.js | 0 .../create_product_example_call_tool.py | 0 .../stripe/create_refund_example_call_tool.js | 0 .../stripe/create_refund_example_call_tool.py | 0 .../finalize_invoice_example_call_tool.js | 0 .../finalize_invoice_example_call_tool.py | 0 .../list_customers_example_call_tool.js | 0 .../list_customers_example_call_tool.py | 0 .../stripe/list_invoices_example_call_tool.js | 0 .../stripe/list_invoices_example_call_tool.py | 0 .../list_payment_intents_example_call_tool.js | 0 .../list_payment_intents_example_call_tool.py | 0 .../stripe/list_prices_example_call_tool.js | 0 .../stripe/list_prices_example_call_tool.py | 0 .../stripe/list_products_example_call_tool.js | 0 .../stripe/list_products_example_call_tool.py | 0 .../retrieve_balance_example_call_tool.js | 0 .../retrieve_balance_example_call_tool.py | 0 .../x/delete_tweet_by_id_example_call_tool.js | 0 .../x/delete_tweet_by_id_example_call_tool.py | 0 ...ngle_user_by_username_example_call_tool.js | 0 ...ngle_user_by_username_example_call_tool.py | 0 .../x/lookup_tweet_by_id_example_call_tool.js | 0 .../x/lookup_tweet_by_id_example_call_tool.py | 0 .../x/post_tweet_example_call_tool.js | 0 .../x/post_tweet_example_call_tool.py | 0 .../x/reply_to_tweet_example_call_tool.js | 0 .../x/reply_to_tweet_example_call_tool.py | 0 ...nt_tweets_by_keywords_example_call_tool.js | 0 ...nt_tweets_by_keywords_example_call_tool.py | 0 ...nt_tweets_by_username_example_call_tool.js | 0 ...nt_tweets_by_username_example_call_tool.py | 0 .../add_ticket_comment_example_call_tool.js | 0 .../add_ticket_comment_example_call_tool.py | 0 .../get_ticket_comments_example_call_tool.js | 0 .../get_ticket_comments_example_call_tool.py | 0 .../zendesk/list_tickets_example_call_tool.js | 0 .../zendesk/list_tickets_example_call_tool.py | 0 .../mark_ticket_solved_example_call_tool.js | 0 .../mark_ticket_solved_example_call_tool.py | 0 .../search_articles_example_call_tool.js | 0 .../search_articles_example_call_tool.py | 0 .../zendesk/who_am_i_example_call_tool.js | 0 .../zendesk/who_am_i_example_call_tool.py | 0 .../agentic-development/cursor-llms-txt.png | Bin 0 -> 248662 bytes public/llms-full.txt | 2696 ++++++++--------- public/llms.txt | 152 +- scripts/i18n-sync.ts | 596 ---- scripts/i18n-sync/index.ts | 178 ++ scripts/i18n-sync/prompts.ts | 144 + scripts/i18n-sync/translate.ts | 264 ++ scripts/i18n-sync/types.ts | 32 + scripts/i18n-sync/utils.ts | 116 + 1180 files changed, 6889 insertions(+), 5460 deletions(-) delete mode 100644 .github/PULL_REQUEST_TEMPLATE.md delete mode 100644 .github/PULL_REQUEST_TEMPLATE/community_contributed_toolkit.md create mode 100644 .github/workflows/translate-docs.yml create mode 100644 _dictionaries/get-dictionary-client.ts create mode 100644 app/_components/back-button.tsx rename app/_components/{custom/toolkits => }/coming-soon-context.tsx (100%) create mode 100644 app/_components/translation-banner.tsx create mode 100644 app/en/home/agentic-development/page.mdx delete mode 100644 app/en/home/auth-providers/_meta.ts create mode 100644 app/en/home/auth-providers/_meta.tsx rename app/en/home/build-tools/{create-a-toolkit => create-a-mcp-server}/page.mdx (72%) delete mode 100644 app/en/home/crewai/_meta.ts create mode 100644 app/en/home/crewai/_meta.tsx create mode 100644 app/en/home/hybrid-deployment/_meta.tsx rename app/{_components => en/home}/landing-page.tsx (92%) rename app/en/home/local-deployment/install/{toolkits => mcp-servers}/page.mdx (80%) delete mode 100644 app/en/home/mastra/_meta.ts create mode 100644 app/en/home/mastra/_meta.tsx create mode 100644 app/en/home/mcp-clients/_meta.tsx rename app/en/home/{mcp-desktop-clients/use-arcade-with-claude-desktop => mcp-clients/claude-desktop}/page.mdx (93%) rename app/en/home/{mcp-desktop-clients/use-arcade-in-visual-studio-code => mcp-clients/visual-studio-code}/page.mdx (66%) delete mode 100644 app/en/home/mcp-desktop-clients/_meta.tsx delete mode 100644 app/en/home/mcp-overview/page.mdx delete mode 100644 app/en/home/migrate-to-v2/page.mdx delete mode 100644 app/en/home/serve-tools/docker-worker/page.mdx delete mode 100644 app/en/home/serve-tools/modal-worker/page.mdx rename app/en/{toolkits => mcp-servers}/_meta.tsx (82%) rename app/{_components/custom/toolkits => en/mcp-servers/components}/coming-soon-modal.tsx (98%) rename app/{_components/custom/toolkits => en/mcp-servers/components}/tool-card.tsx (97%) rename app/{_components/custom/toolkits => en/mcp-servers/components}/toolkits-config.ts (80%) rename app/{_components/custom/toolkits => en/mcp-servers/components}/toolkits.tsx (91%) create mode 100644 app/en/mcp-servers/contribute-a-server/page.mdx create mode 100644 app/en/mcp-servers/customer-support/_meta.tsx rename app/en/{toolkits => mcp-servers}/customer-support/zendesk/_meta.tsx (100%) rename app/en/{toolkits => mcp-servers}/customer-support/zendesk/page.mdx (66%) rename app/en/{toolkits => mcp-servers}/customer-support/zendesk/reference/page.mdx (94%) rename app/en/{toolkits => mcp-servers}/databases/_meta.ts (100%) create mode 100644 app/en/mcp-servers/databases/_meta.tsx rename app/en/{toolkits => mcp-servers}/databases/clickhouse/page.mdx (77%) rename app/en/{toolkits => mcp-servers}/databases/mongodb/page.mdx (79%) rename app/en/{toolkits => mcp-servers}/databases/postgres/clickhouse.mdx (58%) rename app/en/{toolkits => mcp-servers}/databases/postgres/mongodb.mdx (60%) rename app/en/{toolkits => mcp-servers}/databases/postgres/page.mdx (75%) rename app/en/{toolkits => mcp-servers}/development/_meta.tsx (100%) rename app/en/{toolkits => mcp-servers}/development/e2b/page.mdx (75%) rename app/en/{toolkits => mcp-servers}/development/firecrawl/_meta.tsx (100%) rename app/en/{toolkits => mcp-servers}/development/firecrawl/page.mdx (78%) rename app/en/{toolkits => mcp-servers}/development/firecrawl/reference/page.mdx (100%) rename app/en/{toolkits => mcp-servers}/development/github/_meta.tsx (100%) rename app/en/{toolkits => mcp-servers}/development/github/page.mdx (74%) rename app/en/{toolkits => mcp-servers}/development/github/reference/page.mdx (100%) create mode 100644 app/en/mcp-servers/entertainment/_meta.tsx rename app/en/{toolkits => mcp-servers}/entertainment/imgflip/page.mdx (81%) rename app/en/{toolkits => mcp-servers}/entertainment/spotify/imgflip.mdx (78%) rename app/en/{toolkits => mcp-servers}/entertainment/spotify/page.mdx (77%) rename app/en/{toolkits => mcp-servers}/entertainment/twitch/page.mdx (99%) create mode 100644 app/en/mcp-servers/page.mdx create mode 100644 app/en/mcp-servers/payments/_meta.tsx rename app/en/{toolkits => mcp-servers}/payments/stripe/page.mdx (73%) create mode 100644 app/en/mcp-servers/productivity/_meta.tsx rename app/en/{toolkits => mcp-servers}/productivity/asana/_meta.tsx (100%) rename app/en/{toolkits => mcp-servers}/productivity/asana/page.mdx (79%) rename app/en/{toolkits => mcp-servers}/productivity/asana/reference/page.mdx (98%) create mode 100644 app/en/mcp-servers/productivity/clickup/_meta.tsx rename app/en/{toolkits => mcp-servers}/productivity/clickup/page.mdx (79%) rename app/en/{toolkits => mcp-servers}/productivity/clickup/reference/page.mdx (98%) rename app/en/{toolkits => mcp-servers}/productivity/closeio/page.mdx (100%) rename app/en/{toolkits => mcp-servers}/productivity/confluence/page.mdx (82%) rename app/en/{toolkits => mcp-servers}/productivity/dropbox/_meta.tsx (100%) rename app/en/{toolkits => mcp-servers}/productivity/dropbox/page.mdx (73%) rename app/en/{toolkits => mcp-servers}/productivity/dropbox/reference/page.mdx (100%) create mode 100644 app/en/mcp-servers/productivity/gmail/_meta.tsx rename app/en/{toolkits => mcp-servers}/productivity/gmail/page.mdx (76%) rename app/en/{toolkits => mcp-servers}/productivity/gmail/reference/page.mdx (96%) rename app/en/{toolkits => mcp-servers}/productivity/google-calendar/_meta.tsx (100%) rename app/en/{toolkits => mcp-servers}/productivity/google-calendar/page.mdx (78%) rename app/en/{toolkits => mcp-servers}/productivity/google-calendar/reference/page.mdx (93%) rename app/en/{toolkits => mcp-servers}/productivity/google-contacts/page.mdx (65%) rename app/en/{toolkits => mcp-servers}/productivity/google-docs/_meta.tsx (100%) rename app/en/{toolkits => mcp-servers}/productivity/google-docs/page.mdx (75%) rename app/en/{toolkits => mcp-servers}/productivity/google-docs/reference/page.mdx (97%) rename app/en/{toolkits => mcp-servers}/productivity/google-drive/_meta.tsx (100%) rename app/en/{toolkits => mcp-servers}/productivity/google-drive/page.mdx (58%) rename app/en/{toolkits => mcp-servers}/productivity/google-drive/reference/page.mdx (98%) rename app/en/{toolkits => mcp-servers}/productivity/google-sheets/_meta.tsx (100%) rename app/en/{toolkits => mcp-servers}/productivity/google-sheets/page.mdx (80%) rename app/en/{toolkits => mcp-servers}/productivity/google-sheets/reference/page.mdx (97%) rename app/en/{toolkits => mcp-servers}/productivity/google-slides/page.mdx (78%) rename app/en/{toolkits => mcp-servers}/productivity/jira/_meta.tsx (100%) rename app/en/{toolkits => mcp-servers}/productivity/jira/environment-variables/page.mdx (85%) rename app/en/{toolkits => mcp-servers}/productivity/jira/page.mdx (76%) rename app/en/{toolkits => mcp-servers}/productivity/jira/reference/page.mdx (97%) rename app/en/{toolkits => mcp-servers}/productivity/linear/page.mdx (77%) rename app/en/{toolkits => mcp-servers}/productivity/notion/page.mdx (71%) create mode 100644 app/en/mcp-servers/productivity/obsidian/page.mdx rename app/en/{toolkits => mcp-servers}/productivity/outlook-calendar/page.mdx (72%) rename app/en/{toolkits => mcp-servers}/productivity/outlook-mail/_meta.tsx (100%) rename app/en/{toolkits => mcp-servers}/productivity/outlook-mail/page.mdx (80%) rename app/en/{toolkits => mcp-servers}/productivity/outlook-mail/reference/page.mdx (97%) rename app/en/{toolkits => mcp-servers}/productivity/sharepoint/page.mdx (57%) create mode 100644 app/en/mcp-servers/sales/_meta.tsx rename app/en/{toolkits => mcp-servers}/sales/hubspot/_meta.tsx (100%) rename app/en/{toolkits => mcp-servers}/sales/hubspot/page.mdx (76%) rename app/en/{toolkits => mcp-servers}/sales/hubspot/reference/page.mdx (98%) rename app/en/{toolkits => mcp-servers}/sales/salesforce/page.mdx (71%) rename app/en/{toolkits/search/_meta.js => mcp-servers/search/_meta.tsx} (80%) rename app/en/{toolkits => mcp-servers}/search/google_finance/page.mdx (81%) rename app/en/{toolkits => mcp-servers}/search/google_flights/page.mdx (87%) rename app/en/{toolkits => mcp-servers}/search/google_hotels/page.mdx (85%) rename app/en/{toolkits => mcp-servers}/search/google_jobs/page.mdx (88%) rename app/en/{toolkits => mcp-servers}/search/google_maps/page.mdx (94%) rename app/en/{toolkits => mcp-servers}/search/google_news/page.mdx (95%) rename app/en/{toolkits => mcp-servers}/search/google_search/page.mdx (77%) rename app/en/{toolkits => mcp-servers}/search/google_shopping/page.mdx (94%) rename app/en/{toolkits => mcp-servers}/search/walmart/page.mdx (82%) rename app/en/{toolkits => mcp-servers}/search/youtube/page.mdx (93%) create mode 100644 app/en/mcp-servers/social-communication/_meta.tsx rename app/en/{toolkits => mcp-servers}/social-communication/discord/page.mdx (97%) rename app/en/{toolkits => mcp-servers}/social-communication/linkedin/page.mdx (71%) rename app/en/{toolkits => mcp-servers}/social-communication/microsoft-teams/_meta.tsx (100%) rename app/en/{toolkits => mcp-servers}/social-communication/microsoft-teams/page.mdx (64%) rename app/en/{toolkits => mcp-servers}/social-communication/microsoft-teams/reference/page.mdx (95%) rename app/en/{toolkits => mcp-servers}/social-communication/reddit/page.mdx (74%) rename app/en/{toolkits => mcp-servers}/social-communication/slack-api/page.mdx (82%) rename app/en/{toolkits => mcp-servers}/social-communication/slack/_meta.tsx (100%) rename app/en/{toolkits => mcp-servers}/social-communication/slack/environment-variables/page.mdx (100%) rename app/en/{toolkits => mcp-servers}/social-communication/slack/install/page.mdx (92%) rename app/en/{toolkits => mcp-servers}/social-communication/slack/install/slack-auth-link.tsx (100%) rename app/en/{toolkits => mcp-servers}/social-communication/slack/page.mdx (81%) rename app/en/{toolkits => mcp-servers}/social-communication/slack/reference/page.mdx (94%) create mode 100644 app/en/mcp-servers/social-communication/teams/_meta.tsx rename app/en/{toolkits => mcp-servers}/social-communication/teams/reference/page.mdx (97%) rename app/en/{toolkits => mcp-servers}/social-communication/twilio/page.mdx (92%) rename app/en/{toolkits => mcp-servers}/social-communication/twilio/reference/page.mdx (100%) rename app/en/{toolkits => mcp-servers}/social-communication/x/page.mdx (73%) rename app/en/{toolkits => mcp-servers}/social-communication/zoom/_meta.tsx (100%) rename app/en/{toolkits => mcp-servers}/social-communication/zoom/install/page.mdx (94%) rename app/en/{toolkits => mcp-servers}/social-communication/zoom/install/zoom-auth-link.tsx (100%) rename app/en/{toolkits => mcp-servers}/social-communication/zoom/page.mdx (84%) rename public/examples/integrations/toolkits/linear/get_teams_example_call_tool.js => app/en/mcp-servers/toolkits-config.ts (100%) delete mode 100644 app/en/toolkits/community-toolkit-template/page.mdx delete mode 100644 app/en/toolkits/contribute-a-toolkit/page.mdx delete mode 100644 app/en/toolkits/page.mdx delete mode 100644 app/en/toolkits/productivity/clickup/_meta.js delete mode 100644 app/en/toolkits/productivity/gmail/_meta.js delete mode 100644 app/en/toolkits/productivity/obsidian/page.mdx delete mode 100644 app/en/toolkits/social-communication/teams/_meta.js delete mode 100644 app/en/toolkits/social-communication/teams/_meta.tsx create mode 100644 app/not-found.tsx rename public/examples/integrations/{toolkits => mcp-servers}/asana/projects/get_project_by_id_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/asana/projects/get_project_by_id_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/asana/projects/list_projects_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/asana/projects/list_projects_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/asana/tags/create_tag_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/asana/tags/create_tag_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/asana/tags/list_tags_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/asana/tags/list_tags_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/asana/tasks/attach_file_to_task_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/asana/tasks/attach_file_to_task_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/asana/tasks/create_task_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/asana/tasks/create_task_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/asana/tasks/get_subtasks_from_a_task_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/asana/tasks/get_subtasks_from_a_task_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/asana/tasks/get_task_by_id_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/asana/tasks/get_task_by_id_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/asana/tasks/get_tasks_without_id_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/asana/tasks/get_tasks_without_id_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/asana/tasks/mark_task_as_completed_example_call_tool copy.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/asana/tasks/mark_task_as_completed_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/asana/tasks/update_task_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/asana/tasks/update_task_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/asana/teams/get_team_by_id_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/asana/teams/get_team_by_id_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/asana/teams/list_teams_the_current_user_is_a_member_of_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/asana/teams/list_teams_the_current_user_is_a_member_of_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/asana/users/get_user_by_id_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/asana/users/get_user_by_id_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/asana/users/list_users_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/asana/users/list_users_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/clickhouse/discover_databases_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/clickhouse/discover_databases_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/clickhouse/discover_schemas_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/clickhouse/discover_schemas_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/clickhouse/discover_tables_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/clickhouse/discover_tables_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/clickhouse/execute_select_query_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/clickhouse/execute_select_query_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/clickhouse/get_table_schema_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/clickhouse/get_table_schema_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/clickup/create_comment_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/clickup/create_comment_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/clickup/create_comment_reply_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/clickup/create_comment_reply_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/clickup/create_task_comment_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/clickup/create_task_comment_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/clickup/create_task_comment_reply_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/clickup/create_task_comment_reply_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/clickup/create_task_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/clickup/create_task_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/clickup/fuzzy_search_folders_by_name_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/clickup/fuzzy_search_folders_by_name_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/clickup/fuzzy_search_lists_by_name_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/clickup/fuzzy_search_lists_by_name_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/clickup/fuzzy_search_members_by_name_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/clickup/fuzzy_search_members_by_name_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/clickup/fuzzy_search_tasks_by_name_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/clickup/fuzzy_search_tasks_by_name_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/clickup/get_comment_replies_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/clickup/get_comment_replies_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/clickup/get_folders_for_space_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/clickup/get_folders_for_space_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/clickup/get_lists_for_folder_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/clickup/get_lists_for_folder_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/clickup/get_lists_for_space_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/clickup/get_lists_for_space_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/clickup/get_members_for_workspace_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/clickup/get_members_for_workspace_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/clickup/get_spaces_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/clickup/get_spaces_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/clickup/get_statuses_for_list_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/clickup/get_statuses_for_list_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/clickup/get_system_guidance_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/clickup/get_system_guidance_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/clickup/get_task_by_id_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/clickup/get_task_by_id_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/clickup/get_task_comment_replies_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/clickup/get_task_comment_replies_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/clickup/get_task_comments_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/clickup/get_task_comments_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/clickup/get_tasks_by_assignees_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/clickup/get_tasks_by_assignees_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/clickup/get_tasks_by_scope_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/clickup/get_tasks_by_scope_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/clickup/get_workspace_insights_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/clickup/get_workspace_insights_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/clickup/update_comment_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/clickup/update_comment_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/clickup/update_task_assignees_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/clickup/update_task_assignees_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/clickup/update_task_comment_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/clickup/update_task_comment_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/clickup/update_task_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/clickup/update_task_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/clickup/who_am_i_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/clickup/who_am_i_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/clickup/who_i_am_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/clickup/who_i_am_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/confluence/create_page_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/confluence/create_page_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/confluence/get_attachments_for_page_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/confluence/get_attachments_for_page_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/confluence/get_page_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/confluence/get_page_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/confluence/get_pages_by_id_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/confluence/get_pages_by_id_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/confluence/get_space_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/confluence/get_space_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/confluence/get_space_hierarchy_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/confluence/get_space_hierarchy_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/confluence/list_attachments_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/confluence/list_attachments_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/confluence/list_pages_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/confluence/list_pages_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/confluence/list_spaces_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/confluence/list_spaces_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/confluence/rename_page_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/confluence/rename_page_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/confluence/search_content_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/confluence/search_content_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/confluence/update_page_content_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/confluence/update_page_content_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/dropbox/download_file_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/dropbox/download_file_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/dropbox/list_items_in_folder_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/dropbox/list_items_in_folder_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/dropbox/search_files_and_folders_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/dropbox/search_files_and_folders_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/e2b/create_static_matplotlib_chart_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/e2b/create_static_matplotlib_chart_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/e2b/run_code_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/e2b/run_code_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/firecrawl/cancel_crawl_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/firecrawl/cancel_crawl_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/firecrawl/crawl_website_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/firecrawl/crawl_website_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/firecrawl/get_crawl_data_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/firecrawl/get_crawl_data_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/firecrawl/get_crawl_status_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/firecrawl/get_crawl_status_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/firecrawl/map_website_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/firecrawl/map_website_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/firecrawl/scrape_url_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/firecrawl/scrape_url_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/github/count_stargazers_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/github/count_stargazers_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/github/create_issue_comment_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/github/create_issue_comment_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/github/create_issue_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/github/create_issue_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/github/create_reply_for_review_comment_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/github/create_reply_for_review_comment_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/github/create_review_comment_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/github/create_review_comment_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/github/get_pull_request_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/github/get_pull_request_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/github/get_repository_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/github/get_repository_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/github/list_org_repositories_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/github/list_org_repositories_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/github/list_pull_request_commits_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/github/list_pull_request_commits_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/github/list_pull_requests_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/github/list_pull_requests_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/github/list_repository_activities_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/github/list_repository_activities_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/github/list_review_comments_in_a_repository_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/github/list_review_comments_in_a_repository_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/github/list_review_comments_on_pull_request_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/github/list_review_comments_on_pull_request_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/github/list_stargazers_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/github/list_stargazers_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/github/set_starred_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/github/set_starred_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/github/update_pull_request_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/github/update_pull_request_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/gmail/who_am_i_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/gmail/who_am_i_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/google/contacts/create_contact_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/google/contacts/create_contact_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/google/contacts/search_contacts_by_email_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/google/contacts/search_contacts_by_email_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/google/contacts/search_contacts_by_name_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/google/contacts/search_contacts_by_name_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/google/docs/comment_on_document_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/google/docs/comment_on_document_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/google/docs/create_blank_document_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/google/docs/create_blank_document_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/google/docs/create_document_from_text_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/google/docs/create_document_from_text_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/google/docs/edit_document_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/google/docs/edit_document_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/google/docs/get_document_as_doc_md_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/google/docs/get_document_as_doc_md_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/google/docs/get_document_by_id_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/google/docs/get_document_by_id_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/google/docs/insert_text_at_end_of_document_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/google/docs/insert_text_at_end_of_document_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/google/docs/list_document_comments_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/google/docs/list_document_comments_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/google/docs/search_and_retrieve_documents_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/google/docs/search_and_retrieve_documents_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/google/docs/search_documents_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/google/docs/search_documents_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/google/gmail/delete_draft_email_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/google/gmail/delete_draft_email_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/google/gmail/get_thread_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/google/gmail/get_thread_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/google/gmail/list_draft_emails_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/google/gmail/list_draft_emails_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/google/gmail/list_emails_by_header_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/google/gmail/list_emails_by_header_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/google/gmail/list_emails_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/google/gmail/list_emails_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/google/gmail/list_threads_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/google/gmail/list_threads_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/google/gmail/search_threads_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/google/gmail/search_threads_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/google/gmail/send_draft_email_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/google/gmail/send_draft_email_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/google/gmail/send_email_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/google/gmail/send_email_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/google/gmail/trash_email_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/google/gmail/trash_email_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/google/gmail/update_draft_email_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/google/gmail/update_draft_email_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/google/gmail/write_draft_email_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/google/gmail/write_draft_email_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/google/slides/comment_on_presentation_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/google/slides/comment_on_presentation_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/google/slides/create_presentation_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/google/slides/create_presentation_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/google/slides/create_slide_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/google/slides/create_slide_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/google/slides/generate_google_file_picker_url_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/google/slides/generate_google_file_picker_url_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/google/slides/get_presentation_as_markdown_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/google/slides/get_presentation_as_markdown_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/google/slides/list_presentation_comments_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/google/slides/list_presentation_comments_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/google/slides/search_presentations_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/google/slides/search_presentations_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/google/slides/who_am_i_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/google/slides/who_am_i_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/google_calendar/create_event_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/google_calendar/create_event_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/google_calendar/delete_event_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/google_calendar/delete_event_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/google_calendar/find_time_slots_when_everyone_is_free_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/google_calendar/find_time_slots_when_everyone_is_free_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/google_calendar/list_calendars_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/google_calendar/list_calendars_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/google_calendar/list_events_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/google_calendar/list_events_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/google_calendar/update_event_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/google_calendar/update_event_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/google_calendar/who_am_i_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/google_calendar/who_am_i_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/google_contacts/who_am_i_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/google_contacts/who_am_i_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/google_docs/generate_google_file_picker_url_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/google_docs/generate_google_file_picker_url_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/google_docs/who_am_i_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/google_docs/who_am_i_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/google_drive/generate_google_file_picker_url_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/google_drive/generate_google_file_picker_url_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/google_drive/get_file_tree_structure_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/google_drive/get_file_tree_structure_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/google_drive/search_files_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/google_drive/search_files_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/google_drive/who_am_i_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/google_drive/who_am_i_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/google_sheets/add_note_to_cell_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/google_sheets/add_note_to_cell_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/google_sheets/create_spreadsheet_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/google_sheets/create_spreadsheet_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/google_sheets/generate_google_file_picker_url_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/google_sheets/generate_google_file_picker_url_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/google_sheets/get_spreadsheet_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/google_sheets/get_spreadsheet_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/google_sheets/get_spreadsheet_metadata_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/google_sheets/get_spreadsheet_metadata_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/google_sheets/search_spreadsheets_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/google_sheets/search_spreadsheets_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/google_sheets/update_cells_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/google_sheets/update_cells_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/google_sheets/who_am_i_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/google_sheets/who_am_i_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/google_sheets/write_to_cell_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/google_sheets/write_to_cell_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/hubspot/associate_activity_to_deal_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/hubspot/associate_activity_to_deal_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/hubspot/associate_contact_to_deal_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/hubspot/associate_contact_to_deal_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/hubspot/create_call_activity_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/hubspot/create_call_activity_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/hubspot/create_communication_activity_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/hubspot/create_communication_activity_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/hubspot/create_company_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/hubspot/create_company_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/hubspot/create_contact_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/hubspot/create_contact_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/hubspot/create_deal_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/hubspot/create_deal_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/hubspot/create_email_activity_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/hubspot/create_email_activity_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/hubspot/create_meeting_activity_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/hubspot/create_meeting_activity_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/hubspot/create_note_activity_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/hubspot/create_note_activity_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/hubspot/get_all_users_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/hubspot/get_all_users_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/hubspot/get_available_industry_types_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/hubspot/get_available_industry_types_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/hubspot/get_call_data_by_keywords_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/hubspot/get_call_data_by_keywords_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/hubspot/get_communication_data_by_keywords_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/hubspot/get_communication_data_by_keywords_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/hubspot/get_company_data_by_keywords_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/hubspot/get_company_data_by_keywords_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/hubspot/get_contact_data_by_keywords_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/hubspot/get_contact_data_by_keywords_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/hubspot/get_deal_by_id_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/hubspot/get_deal_by_id_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/hubspot/get_deal_data_by_keywords_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/hubspot/get_deal_data_by_keywords_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/hubspot/get_deal_pipeline_stages_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/hubspot/get_deal_pipeline_stages_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/hubspot/get_deal_pipelines_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/hubspot/get_deal_pipelines_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/hubspot/get_email_data_by_keywords_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/hubspot/get_email_data_by_keywords_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/hubspot/get_meeting_data_by_keywords_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/hubspot/get_meeting_data_by_keywords_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/hubspot/get_note_data_by_keywords_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/hubspot/get_note_data_by_keywords_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/hubspot/get_task_data_by_keywords_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/hubspot/get_task_data_by_keywords_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/hubspot/get_user_by_id_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/hubspot/get_user_by_id_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/hubspot/list_companies_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/hubspot/list_companies_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/hubspot/list_contacts_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/hubspot/list_contacts_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/hubspot/list_deals_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/hubspot/list_deals_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/hubspot/toolkit_enviroment_guidance_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/hubspot/toolkit_enviroment_guidance_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/hubspot/update_deal_close_date_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/hubspot/update_deal_close_date_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/hubspot/update_deal_stage_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/hubspot/update_deal_stage_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/hubspot/who_am_i_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/hubspot/who_am_i_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/imgflip/create_meme_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/imgflip/create_meme_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/imgflip/get_popular_memes_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/imgflip/get_popular_memes_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/imgflip/search_memes_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/imgflip/search_memes_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/jira/add_comment_to_issue_example_call_tool.js (92%) rename public/examples/integrations/{toolkits => mcp-servers}/jira/add_comment_to_issue_example_call_tool.py (91%) rename public/examples/integrations/{toolkits => mcp-servers}/jira/add_issues_to_sprint_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/jira/add_issues_to_sprint_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/jira/add_labels_to_issue_example_call_tool.js (91%) rename public/examples/integrations/{toolkits => mcp-servers}/jira/add_labels_to_issue_example_call_tool.py (90%) rename public/examples/integrations/{toolkits => mcp-servers}/jira/attach_file_to_issue_example_call_tool.js (91%) rename public/examples/integrations/{toolkits => mcp-servers}/jira/attach_file_to_issue_example_call_tool.py (90%) rename public/examples/integrations/{toolkits => mcp-servers}/jira/create_issue_example_call_tool.js (92%) rename public/examples/integrations/{toolkits => mcp-servers}/jira/create_issue_example_call_tool.py (92%) rename public/examples/integrations/{toolkits => mcp-servers}/jira/download_attachment_example_call_tool.js (91%) rename public/examples/integrations/{toolkits => mcp-servers}/jira/download_attachment_example_call_tool.py (90%) rename public/examples/integrations/{toolkits => mcp-servers}/jira/get_attachment_metadata_example_call_tool.js (91%) rename public/examples/integrations/{toolkits => mcp-servers}/jira/get_attachment_metadata_example_call_tool.py (90%) rename public/examples/integrations/{toolkits => mcp-servers}/jira/get_available_atlassian_clouds_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/jira/get_available_atlassian_clouds_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/jira/get_board_backlog_issues_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/jira/get_board_backlog_issues_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/jira/get_boards_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/jira/get_boards_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/jira/get_comment_by_id_example_call_tool.js (91%) rename public/examples/integrations/{toolkits => mcp-servers}/jira/get_comment_by_id_example_call_tool.py (90%) rename public/examples/integrations/{toolkits => mcp-servers}/jira/get_issue_by_id_example_call_tool.js (91%) rename public/examples/integrations/{toolkits => mcp-servers}/jira/get_issue_by_id_example_call_tool.py (90%) rename public/examples/integrations/{toolkits => mcp-servers}/jira/get_issue_comments_example_call_tool.js (91%) rename public/examples/integrations/{toolkits => mcp-servers}/jira/get_issue_comments_example_call_tool.py (90%) rename public/examples/integrations/{toolkits => mcp-servers}/jira/get_issue_type_by_id_example_call_tool.js (91%) rename public/examples/integrations/{toolkits => mcp-servers}/jira/get_issue_type_by_id_example_call_tool.py (90%) rename public/examples/integrations/{toolkits => mcp-servers}/jira/get_issues_without_id_example_call_tool.js (92%) rename public/examples/integrations/{toolkits => mcp-servers}/jira/get_issues_without_id_example_call_tool.py (91%) rename public/examples/integrations/{toolkits => mcp-servers}/jira/get_priority_by_id_example_call_tool.js (91%) rename public/examples/integrations/{toolkits => mcp-servers}/jira/get_priority_by_id_example_call_tool.py (90%) rename public/examples/integrations/{toolkits => mcp-servers}/jira/get_project_by_id_example_call_tool.js (91%) rename public/examples/integrations/{toolkits => mcp-servers}/jira/get_project_by_id_example_call_tool.py (90%) rename public/examples/integrations/{toolkits => mcp-servers}/jira/get_sprint_issues_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/jira/get_sprint_issues_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/jira/get_transition_by_id_example_call_tool.js (91%) rename public/examples/integrations/{toolkits => mcp-servers}/jira/get_transition_by_id_example_call_tool.py (90%) rename public/examples/integrations/{toolkits => mcp-servers}/jira/get_transition_by_status_name_example_call_tool.js (91%) rename public/examples/integrations/{toolkits => mcp-servers}/jira/get_transition_by_status_name_example_call_tool.py (90%) rename public/examples/integrations/{toolkits => mcp-servers}/jira/get_transitions_available_for_issue_example_call_tool.js (91%) rename public/examples/integrations/{toolkits => mcp-servers}/jira/get_transitions_available_for_issue_example_call_tool.py (90%) rename public/examples/integrations/{toolkits => mcp-servers}/jira/get_user_by_id_example_call_tool.js (91%) rename public/examples/integrations/{toolkits => mcp-servers}/jira/get_user_by_id_example_call_tool.py (90%) rename public/examples/integrations/{toolkits => mcp-servers}/jira/get_users_without_id_example_call_tool.js (91%) rename public/examples/integrations/{toolkits => mcp-servers}/jira/get_users_without_id_example_call_tool.py (90%) rename public/examples/integrations/{toolkits => mcp-servers}/jira/list_issue_attachments_metadata_example_call_tool.js (91%) rename public/examples/integrations/{toolkits => mcp-servers}/jira/list_issue_attachments_metadata_example_call_tool.py (90%) rename public/examples/integrations/{toolkits => mcp-servers}/jira/list_issue_types_by_project_example_call_tool.js (91%) rename public/examples/integrations/{toolkits => mcp-servers}/jira/list_issue_types_by_project_example_call_tool.py (90%) rename public/examples/integrations/{toolkits => mcp-servers}/jira/list_issues_example_call_tool.js (91%) rename public/examples/integrations/{toolkits => mcp-servers}/jira/list_issues_example_call_tool.py (90%) rename public/examples/integrations/{toolkits => mcp-servers}/jira/list_labels_example_call_tool.js (91%) rename public/examples/integrations/{toolkits => mcp-servers}/jira/list_labels_example_call_tool.py (90%) rename public/examples/integrations/{toolkits => mcp-servers}/jira/list_priorities_associated_with_a_priority_scheme_example_call_tool.js (91%) rename public/examples/integrations/{toolkits => mcp-servers}/jira/list_priorities_associated_with_a_priority_scheme_example_call_tool.py (90%) rename public/examples/integrations/{toolkits => mcp-servers}/jira/list_priorities_available_to_a_project_example_call_tool.js (91%) rename public/examples/integrations/{toolkits => mcp-servers}/jira/list_priorities_available_to_a_project_example_call_tool.py (90%) rename public/examples/integrations/{toolkits => mcp-servers}/jira/list_priorities_available_to_an_issue_example_call_tool.js (91%) rename public/examples/integrations/{toolkits => mcp-servers}/jira/list_priorities_available_to_an_issue_example_call_tool.py (90%) rename public/examples/integrations/{toolkits => mcp-servers}/jira/list_priority_schemes_example_call_tool.js (91%) rename public/examples/integrations/{toolkits => mcp-servers}/jira/list_priority_schemes_example_call_tool.py (90%) rename public/examples/integrations/{toolkits => mcp-servers}/jira/list_projects_associated_with_a_priority_scheme_example_call_tool.js (91%) rename public/examples/integrations/{toolkits => mcp-servers}/jira/list_projects_associated_with_a_priority_scheme_example_call_tool.py (90%) rename public/examples/integrations/{toolkits => mcp-servers}/jira/list_projects_example_call_tool.js (91%) rename public/examples/integrations/{toolkits => mcp-servers}/jira/list_projects_example_call_tool.py (90%) rename public/examples/integrations/{toolkits => mcp-servers}/jira/list_sprints_for_boards_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/jira/list_sprints_for_boards_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/jira/list_users_example_call_tool.js (91%) rename public/examples/integrations/{toolkits => mcp-servers}/jira/list_users_example_call_tool.py (90%) rename public/examples/integrations/{toolkits => mcp-servers}/jira/move_issues_from_sprint_to_backlog_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/jira/move_issues_from_sprint_to_backlog_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/jira/remove_labels_from_issue_example_call_tool.js (91%) rename public/examples/integrations/{toolkits => mcp-servers}/jira/remove_labels_from_issue_example_call_tool.py (90%) rename public/examples/integrations/{toolkits => mcp-servers}/jira/search_issues_with_jql_example_call_tool.js (91%) rename public/examples/integrations/{toolkits => mcp-servers}/jira/search_issues_with_jql_example_call_tool.py (90%) rename public/examples/integrations/{toolkits => mcp-servers}/jira/search_issues_without_jql_example_call_tool.js (92%) rename public/examples/integrations/{toolkits => mcp-servers}/jira/search_issues_without_jql_example_call_tool.py (92%) rename public/examples/integrations/{toolkits => mcp-servers}/jira/search_projects_example_call_tool.js (91%) rename public/examples/integrations/{toolkits => mcp-servers}/jira/search_projects_example_call_tool.py (90%) rename public/examples/integrations/{toolkits => mcp-servers}/jira/transition_issue_to_new_status_example_call_tool.js (91%) rename public/examples/integrations/{toolkits => mcp-servers}/jira/transition_issue_to_new_status_example_call_tool.py (90%) rename public/examples/integrations/{toolkits => mcp-servers}/jira/update_issue_example_call_tool.js (91%) rename public/examples/integrations/{toolkits => mcp-servers}/jira/update_issue_example_call_tool.py (90%) rename public/examples/integrations/{toolkits => mcp-servers}/jira/who_am_i_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/jira/who_am_i_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/linear/get_issue_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/linear/get_issue_example_call_tool.py (100%) create mode 100644 public/examples/integrations/mcp-servers/linear/get_teams_example_call_tool.js rename public/examples/integrations/{toolkits => mcp-servers}/linear/get_teams_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/linkedin/create_text_post_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/linkedin/create_text_post_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/microsoft/outlook_calendar/create_event_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/microsoft/outlook_calendar/create_event_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/microsoft/outlook_calendar/get_event_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/microsoft/outlook_calendar/get_event_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/microsoft/outlook_calendar/list_events_in_time_range_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/microsoft/outlook_calendar/list_events_in_time_range_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/microsoft/outlook_mail/create_and_send_email_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/microsoft/outlook_mail/create_and_send_email_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/microsoft/outlook_mail/create_draft_email_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/microsoft/outlook_mail/create_draft_email_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/microsoft/outlook_mail/list_emails_by_property_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/microsoft/outlook_mail/list_emails_by_property_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/microsoft/outlook_mail/list_emails_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/microsoft/outlook_mail/list_emails_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/microsoft/outlook_mail/list_emails_in_folder_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/microsoft/outlook_mail/list_emails_in_folder_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/microsoft/outlook_mail/reply_to_email_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/microsoft/outlook_mail/reply_to_email_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/microsoft/outlook_mail/send_draft_email_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/microsoft/outlook_mail/send_draft_email_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/microsoft/outlook_mail/update_draft_email_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/microsoft/outlook_mail/update_draft_email_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/microsoft_teams/create_chat_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/microsoft_teams/create_chat_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/microsoft_teams/get_channel_message_replies_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/microsoft_teams/get_channel_message_replies_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/microsoft_teams/get_channel_messages_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/microsoft_teams/get_channel_messages_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/microsoft_teams/get_channel_metadata_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/microsoft_teams/get_channel_metadata_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/microsoft_teams/get_chat_message_by_id_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/microsoft_teams/get_chat_message_by_id_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/microsoft_teams/get_chat_messages_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/microsoft_teams/get_chat_messages_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/microsoft_teams/get_chat_metadata_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/microsoft_teams/get_chat_metadata_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/microsoft_teams/get_signed_in_user_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/microsoft_teams/get_signed_in_user_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/microsoft_teams/get_team_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/microsoft_teams/get_team_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/microsoft_teams/list_channels_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/microsoft_teams/list_channels_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/microsoft_teams/list_chats_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/microsoft_teams/list_chats_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/microsoft_teams/list_team_members_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/microsoft_teams/list_team_members_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/microsoft_teams/list_teams_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/microsoft_teams/list_teams_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/microsoft_teams/list_users_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/microsoft_teams/list_users_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/microsoft_teams/reply_to_channel_message_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/microsoft_teams/reply_to_channel_message_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/microsoft_teams/reply_to_chat_message_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/microsoft_teams/reply_to_chat_message_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/microsoft_teams/search_channels_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/microsoft_teams/search_channels_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/microsoft_teams/search_messages_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/microsoft_teams/search_messages_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/microsoft_teams/search_people_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/microsoft_teams/search_people_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/microsoft_teams/search_team_members_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/microsoft_teams/search_team_members_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/microsoft_teams/search_teams_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/microsoft_teams/search_teams_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/microsoft_teams/search_users_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/microsoft_teams/search_users_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/microsoft_teams/send_message_to_channel_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/microsoft_teams/send_message_to_channel_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/microsoft_teams/send_message_to_chat_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/microsoft_teams/send_message_to_chat_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/microsoft_teams/who_am_i_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/microsoft_teams/who_am_i_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/mongodb/aggregate_documents_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/mongodb/aggregate_documents_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/mongodb/count_documents_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/mongodb/count_documents_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/mongodb/discover_collections_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/mongodb/discover_collections_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/mongodb/discover_databases_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/mongodb/discover_databases_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/mongodb/find_documents_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/mongodb/find_documents_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/mongodb/get_collection_schema_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/mongodb/get_collection_schema_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/notion/append_content_to_end_of_page.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/notion/append_content_to_end_of_page.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/notion/create_page_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/notion/create_page_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/notion/get_object_metadata_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/notion/get_object_metadata_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/notion/get_page_content_by_id_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/notion/get_page_content_by_id_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/notion/get_page_content_by_title_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/notion/get_page_content_by_title_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/notion/get_workspace_structure_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/notion/get_workspace_structure_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/notion/search_by_title_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/notion/search_by_title_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/notion/who_am_i_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/notion/who_am_i_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/outlook_calendar/who_am_i_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/outlook_calendar/who_am_i_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/outlook_mail/who_am_i_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/outlook_mail/who_am_i_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/postgres/discover_schemas_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/postgres/discover_schemas_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/postgres/discover_tables_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/postgres/discover_tables_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/postgres/execute_select_query_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/postgres/execute_select_query_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/postgres/get_table_schema_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/postgres/get_table_schema_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/reddit/check_subreddit_access_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/reddit/check_subreddit_access_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/reddit/comment_on_post_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/reddit/comment_on_post_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/reddit/get_content_of_multiple_posts_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/reddit/get_content_of_multiple_posts_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/reddit/get_content_of_post_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/reddit/get_content_of_post_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/reddit/get_my_posts_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/reddit/get_my_posts_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/reddit/get_my_username_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/reddit/get_my_username_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/reddit/get_posts_in_subreddit_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/reddit/get_posts_in_subreddit_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/reddit/get_subreddit_rules_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/reddit/get_subreddit_rules_example_call_tool.py (100%) rename public/examples/integrations/{toolkits/reddit/get_top_level_comments_of_post_example_call_tool.js => mcp-servers/reddit/get_top_level_comments_example_call_tool.js} (89%) rename public/examples/integrations/{toolkits/reddit/get_top_level_comments_of_post_example_call_tool.py => mcp-servers/reddit/get_top_level_comments_example_call_tool.py} (93%) rename public/examples/integrations/{toolkits => mcp-servers}/reddit/reply_to_comment_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/reddit/reply_to_comment_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/reddit/submit_text_post_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/reddit/submit_text_post_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/salesforce/create_contact_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/salesforce/create_contact_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/salesforce/create_contact_example_llm_oai.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/salesforce/create_contact_example_llm_oai.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/salesforce/get_account_data_by_id_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/salesforce/get_account_data_by_id_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/salesforce/get_account_data_by_id_example_llm_oai.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/salesforce/get_account_data_by_id_example_llm_oai.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/salesforce/get_account_data_by_keywords_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/salesforce/get_account_data_by_keywords_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/salesforce/get_account_data_by_keywords_example_llm_oai.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/salesforce/get_account_data_by_keywords_example_llm_oai.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/search/google_finance/get_stock_historical_data_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/search/google_finance/get_stock_historical_data_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/search/google_finance/get_stock_summary_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/search/google_finance/get_stock_summary_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/search/google_flights/search_one_way_flights_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/search/google_flights/search_one_way_flights_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/search/google_flights/search_roundtrip_flights_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/search/google_flights/search_roundtrip_flights_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/search/google_hotels/search_hotels_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/search/google_hotels/search_hotels_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/search/google_jobs/search_jobs_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/search/google_jobs/search_jobs_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/search/google_maps/get_directions_between_addresses_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/search/google_maps/get_directions_between_addresses_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/search/google_maps/get_directions_between_coordinates_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/search/google_maps/get_directions_between_coordinates_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/search/google_news/search_news_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/search/google_news/search_news_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/search/google_search/search_google_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/search/google_search/search_google_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/search/google_shopping/search_shopping_products_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/search/google_shopping/search_shopping_products_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/search/walmart/get_walmart_product_details_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/search/walmart/get_walmart_product_details_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/search/walmart/search_walmart_products_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/search/walmart/search_walmart_products_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/search/youtube/get_youtube_video_details_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/search/youtube/get_youtube_video_details_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/search/youtube/search_youtube_videos_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/search/youtube/search_youtube_videos_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/sharepoint/download_file_from_drive_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/sharepoint/download_file_from_drive_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/sharepoint/get_drives_from_site_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/sharepoint/get_drives_from_site_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/sharepoint/get_followed_sites_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/sharepoint/get_followed_sites_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/sharepoint/get_items_from_list_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/sharepoint/get_items_from_list_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/sharepoint/get_lists_from_site_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/sharepoint/get_lists_from_site_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/sharepoint/get_page_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/sharepoint/get_page_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/sharepoint/get_site_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/sharepoint/get_site_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/sharepoint/list_items_in_folder_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/sharepoint/list_items_in_folder_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/sharepoint/list_pages_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/sharepoint/list_pages_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/sharepoint/list_root_items_in_drive_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/sharepoint/list_root_items_in_drive_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/sharepoint/list_sites_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/sharepoint/list_sites_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/sharepoint/search_drive_items_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/sharepoint/search_drive_items_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/sharepoint/search_sites_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/sharepoint/search_sites_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/slack/get_channel_metadata_by_name_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/slack/get_channel_metadata_by_name_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/slack/get_conversation_history_by_id_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/slack/get_conversation_history_by_id_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/slack/get_conversation_history_by_name_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/slack/get_conversation_history_by_name_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/slack/get_conversation_metadata_by_id_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/slack/get_conversation_metadata_by_id_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/slack/get_conversation_metadata_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/slack/get_conversation_metadata_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/slack/get_direct_message_conversation_metadata_by_username_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/slack/get_direct_message_conversation_metadata_by_username_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/slack/get_members_in_channel_by_name_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/slack/get_members_in_channel_by_name_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/slack/get_members_in_conversation_by_id_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/slack/get_members_in_conversation_by_id_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/slack/get_messages_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/slack/get_messages_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/slack/get_messages_in_channel_by_name_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/slack/get_messages_in_channel_by_name_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/slack/get_messages_in_conversation_by_id_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/slack/get_messages_in_conversation_by_id_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/slack/get_messages_in_direct_message_conversation_by_username_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/slack/get_messages_in_direct_message_conversation_by_username_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/slack/get_messages_in_multi_person_dm_conversation_by_username_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/slack/get_messages_in_multi_person_dm_conversation_by_username_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/slack/get_messages_in_multi_person_dm_conversation_by_usernames_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/slack/get_messages_in_multi_person_dm_conversation_by_usernames_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/slack/get_multi_person_dm_conversation_metadata_by_usernames_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/slack/get_multi_person_dm_conversation_metadata_by_usernames_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/slack/get_user_info_by_id_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/slack/get_user_info_by_id_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/slack/get_users_in_conversation_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/slack/get_users_in_conversation_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/slack/get_users_info_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/slack/get_users_info_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/slack/list_conversations_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/slack/list_conversations_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/slack/list_conversations_metadata_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/slack/list_conversations_metadata_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/slack/list_direct_message_channels_metadata_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/slack/list_direct_message_channels_metadata_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/slack/list_direct_message_conversations_metadata_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/slack/list_direct_message_conversations_metadata_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/slack/list_group_direct_message_channels_metadata_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/slack/list_group_direct_message_channels_metadata_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/slack/list_group_direct_message_conversations_metadata_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/slack/list_group_direct_message_conversations_metadata_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/slack/list_private_channels_metadata_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/slack/list_private_channels_metadata_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/slack/list_public_channels_metadata_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/slack/list_public_channels_metadata_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/slack/list_users_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/slack/list_users_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/slack/send_dm_to_user_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/slack/send_dm_to_user_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/slack/send_message_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/slack/send_message_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/slack/send_message_to_channel_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/slack/send_message_to_channel_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/slack/who_am_i_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/slack/who_am_i_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/slack_api/accept_slack_invite_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/slack_api/accept_slack_invite_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/slack_api/add_call_participants_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/slack_api/add_call_participants_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/slack_api/add_slack_emoji_alias_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/slack_api/add_slack_emoji_alias_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/slack_api/add_slack_reaction_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/slack_api/add_slack_reaction_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/slack_api/approve_slack_channel_invitation_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/slack_api/approve_slack_channel_invitation_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/slack_api/check_api_calling_code_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/slack_api/check_api_calling_code_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/slack_api/check_slack_discoverability_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/slack_api/check_slack_discoverability_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/slack_api/create_slack_conversation_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/slack_api/create_slack_conversation_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/slack_api/create_slack_user_group_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/slack_api/create_slack_user_group_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/slack_api/custom_unfurl_slack_urls_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/slack_api/custom_unfurl_slack_urls_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/slack_api/delete_scheduled_slack_message_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/slack_api/delete_scheduled_slack_message_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/slack_api/deny_shared_invite_request_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/slack_api/deny_shared_invite_request_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/slack_api/disable_user_group_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/slack_api/disable_user_group_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/slack_api/edit_slack_bookmark_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/slack_api/edit_slack_bookmark_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/slack_api/enable_slack_file_sharing_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/slack_api/enable_slack_file_sharing_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/slack_api/enable_slack_user_group_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/slack_api/enable_slack_user_group_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/slack_api/fetch_workspace_settings_info_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/slack_api/fetch_workspace_settings_info_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/slack_api/find_slack_user_by_email_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/slack_api/find_slack_user_by_email_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/slack_api/get_call_information_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/slack_api/get_call_information_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/slack_api/get_conversation_info_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/slack_api/get_conversation_info_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/slack_api/get_current_slack_team_info_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/slack_api/get_current_slack_team_info_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/slack_api/get_external_file_upload_url_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/slack_api/get_external_file_upload_url_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/slack_api/get_integration_logs_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/slack_api/get_integration_logs_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/slack_api/get_remote_file_info_slack_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/slack_api/get_remote_file_info_slack_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/slack_api/get_slack_bot_info_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/slack_api/get_slack_bot_info_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/slack_api/get_slack_conversation_members_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/slack_api/get_slack_conversation_members_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/slack_api/get_slack_message_permalink_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/slack_api/get_slack_message_permalink_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/slack_api/get_slack_remote_files_info_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/slack_api/get_slack_remote_files_info_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/slack_api/get_slack_team_preferences_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/slack_api/get_slack_team_preferences_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/slack_api/get_slack_thread_messages_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/slack_api/get_slack_thread_messages_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/slack_api/get_slack_user_presence_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/slack_api/get_slack_user_presence_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/slack_api/get_slack_user_profile_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/slack_api/get_slack_user_profile_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/slack_api/get_team_billable_users_info_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/slack_api/get_team_billable_users_info_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/slack_api/get_team_profile_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/slack_api/get_team_profile_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/slack_api/get_user_identity_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/slack_api/get_user_identity_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/slack_api/invite_user_to_slack_channel_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/slack_api/invite_user_to_slack_channel_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/slack_api/join_slack_conversation_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/slack_api/join_slack_conversation_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/slack_api/list_accessible_slack_conversations_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/slack_api/list_accessible_slack_conversations_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/slack_api/list_approved_workspace_invite_requests_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/slack_api/list_approved_workspace_invite_requests_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/slack_api/list_channels_for_usergroup_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/slack_api/list_channels_for_usergroup_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/slack_api/list_custom_emoji_for_team_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/slack_api/list_custom_emoji_for_team_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/slack_api/list_denied_slack_invite_requests_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/slack_api/list_denied_slack_invite_requests_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/slack_api/list_pending_workspace_invites_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/slack_api/list_pending_workspace_invites_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/slack_api/list_pinned_items_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/slack_api/list_pinned_items_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/slack_api/list_scheduled_messages_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/slack_api/list_scheduled_messages_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/slack_api/list_shared_channel_invites_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/slack_api/list_shared_channel_invites_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/slack_api/list_slack_channels_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/slack_api/list_slack_channels_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/slack_api/list_slack_enterprise_emojis_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/slack_api/list_slack_enterprise_emojis_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/slack_api/list_slack_team_users_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/slack_api/list_slack_team_users_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/slack_api/list_slack_user_groups_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/slack_api/list_slack_user_groups_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/slack_api/list_slack_workspace_owners_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/slack_api/list_slack_workspace_owners_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/slack_api/list_teams_in_enterprise_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/slack_api/list_teams_in_enterprise_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/slack_api/list_workspace_users_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/slack_api/list_workspace_users_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/slack_api/open_or_resume_slack_conversation_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/slack_api/open_or_resume_slack_conversation_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/slack_api/pin_item_to_slack_channel_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/slack_api/pin_item_to_slack_channel_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/slack_api/register_slack_call_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/slack_api/register_slack_call_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/slack_api/remove_call_participants_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/slack_api/remove_call_participants_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/slack_api/remove_reaction_from_item_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/slack_api/remove_reaction_from_item_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/slack_api/remove_slack_bookmark_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/slack_api/remove_slack_bookmark_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/slack_api/rename_slack_emoji_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/slack_api/rename_slack_emoji_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/slack_api/revoke_slack_token_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/slack_api/revoke_slack_token_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/slack_api/schedule_slack_message_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/slack_api/schedule_slack_message_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/slack_api/search_files_in_slack_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/slack_api/search_files_in_slack_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/slack_api/search_slack_messages_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/slack_api/search_slack_messages_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/slack_api/send_ephemeral_message_slack_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/slack_api/send_ephemeral_message_slack_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/slack_api/send_slack_message_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/slack_api/send_slack_message_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/slack_api/set_slack_channel_read_cursor_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/slack_api/set_slack_channel_read_cursor_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/slack_api/set_slack_profile_photo_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/slack_api/set_slack_profile_photo_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/slack_api/set_slack_workspace_name_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/slack_api/set_slack_workspace_name_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/slack_api/set_workspace_description_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/slack_api/set_workspace_description_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/slack_api/share_remote_file_in_channel_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/slack_api/share_remote_file_in_channel_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/slack_api/update_slack_user_group_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/slack_api/update_slack_user_group_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/slack_api/update_slack_usergroup_users_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/slack_api/update_slack_usergroup_users_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/spotify/adjust_playback_position_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/spotify/adjust_playback_position_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/spotify/get_available_devices_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/spotify/get_available_devices_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/spotify/get_currently_playing_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/spotify/get_currently_playing_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/spotify/get_playback_state_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/spotify/get_playback_state_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/spotify/get_track_from_id_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/spotify/get_track_from_id_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/spotify/pause_playback_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/spotify/pause_playback_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/spotify/play_artist_by_name_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/spotify/play_artist_by_name_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/spotify/play_track_by_name_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/spotify/play_track_by_name_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/spotify/resume_playback_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/spotify/resume_playback_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/spotify/search_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/spotify/search_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/spotify/skip_to_next_track_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/spotify/skip_to_next_track_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/spotify/skip_to_previous_track_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/spotify/skip_to_previous_track_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/spotify/start_tracks_playback_by_id_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/spotify/start_tracks_playback_by_id_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/stripe/create_billing_portal_session_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/stripe/create_billing_portal_session_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/stripe/create_customer_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/stripe/create_customer_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/stripe/create_invoice_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/stripe/create_invoice_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/stripe/create_invoice_item_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/stripe/create_invoice_item_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/stripe/create_payment_link_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/stripe/create_payment_link_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/stripe/create_price_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/stripe/create_price_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/stripe/create_product_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/stripe/create_product_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/stripe/create_refund_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/stripe/create_refund_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/stripe/finalize_invoice_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/stripe/finalize_invoice_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/stripe/list_customers_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/stripe/list_customers_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/stripe/list_invoices_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/stripe/list_invoices_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/stripe/list_payment_intents_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/stripe/list_payment_intents_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/stripe/list_prices_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/stripe/list_prices_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/stripe/list_products_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/stripe/list_products_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/stripe/retrieve_balance_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/stripe/retrieve_balance_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/x/delete_tweet_by_id_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/x/delete_tweet_by_id_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/x/lookup_single_user_by_username_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/x/lookup_single_user_by_username_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/x/lookup_tweet_by_id_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/x/lookup_tweet_by_id_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/x/post_tweet_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/x/post_tweet_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/x/reply_to_tweet_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/x/reply_to_tweet_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/x/search_recent_tweets_by_keywords_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/x/search_recent_tweets_by_keywords_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/x/search_recent_tweets_by_username_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/x/search_recent_tweets_by_username_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/zendesk/add_ticket_comment_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/zendesk/add_ticket_comment_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/zendesk/get_ticket_comments_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/zendesk/get_ticket_comments_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/zendesk/list_tickets_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/zendesk/list_tickets_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/zendesk/mark_ticket_solved_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/zendesk/mark_ticket_solved_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/zendesk/search_articles_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/zendesk/search_articles_example_call_tool.py (100%) rename public/examples/integrations/{toolkits => mcp-servers}/zendesk/who_am_i_example_call_tool.js (100%) rename public/examples/integrations/{toolkits => mcp-servers}/zendesk/who_am_i_example_call_tool.py (100%) create mode 100644 public/images/agentic-development/cursor-llms-txt.png delete mode 100644 scripts/i18n-sync.ts create mode 100644 scripts/i18n-sync/index.ts create mode 100644 scripts/i18n-sync/prompts.ts create mode 100644 scripts/i18n-sync/translate.ts create mode 100644 scripts/i18n-sync/types.ts create mode 100644 scripts/i18n-sync/utils.ts diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md deleted file mode 100644 index 18772d67d..000000000 --- a/.github/PULL_REQUEST_TEMPLATE.md +++ /dev/null @@ -1,5 +0,0 @@ - diff --git a/.github/PULL_REQUEST_TEMPLATE/community_contributed_toolkit.md b/.github/PULL_REQUEST_TEMPLATE/community_contributed_toolkit.md deleted file mode 100644 index ff69bda75..000000000 --- a/.github/PULL_REQUEST_TEMPLATE/community_contributed_toolkit.md +++ /dev/null @@ -1,16 +0,0 @@ -## Add community toolkit "your-toolkit-name" - -## Toolkit Checklist - -- [ ] The toolkit is published to PyPI -- [ ] The toolkit source code is hosted in a publicly accessible repository on a supported version control platform (e.g., GitHub, GitLab, etc.) -- [ ] The toolkit is licensed under an open source license - -## PR Checklist - -- [ ] I have determined the appropriate category for the toolkit, e.g., `productivity`, `social-communication`, `entertainment`, `development`, etc. -- [ ] I create a new file located at `pages/toolkits//my-toolkit-name.mdx` that uses the [Community Toolkit Template](https://github.com/ArcadeAI/docs/blob/main/pages/toolkits/community-toolkit-template.mdx) -- [ ] I have added the toolkit to the `pages/toolkits//_meta.ts` file -- [ ] I have added the toolkit to the `src/components/custom/Toolkits/toolkits-config.ts` file. For the toolkit's image, - - [ ] I am using the default image `public/images/icons/community-contributed.png` OR - - [ ] I am using an image that is smaller than 5 KB that I have added at `public/images/icons/.png` diff --git a/.github/workflows/translate-docs.yml b/.github/workflows/translate-docs.yml new file mode 100644 index 000000000..88eb4bb45 --- /dev/null +++ b/.github/workflows/translate-docs.yml @@ -0,0 +1,298 @@ +name: πŸ“– Translate Documentation + +on: + workflow_dispatch: + inputs: + target_locale: + description: "Target locale to translate" + required: false + default: "all" + type: choice + options: + - "all" + - "es" + - "pt-BR" + + force_translate: + description: "Force translate all files (ignore cache)" + required: false + default: false + type: boolean + + cleanup_deleted: + description: "Delete translated files when English originals are removed" + required: false + default: true + type: boolean + + dry_run: + description: "Dry run (don't write files or update cache)" + required: false + default: false + type: boolean + + single_file: + description: "Single file to translate (relative to app/en, e.g. 'home/page.mdx')" + required: false + default: "" + type: string + + concurrency: + description: "Number of files to translate in parallel (1-10)" + required: false + default: 3 + type: number + +jobs: + translate: + runs-on: ubuntu-latest + + steps: + - name: πŸ›’ Checkout repository + uses: actions/checkout@v4 + with: + fetch-depth: 0 + token: ${{ secrets.GITHUB_TOKEN }} + + - name: πŸ“¦ Setup Node.js + uses: actions/setup-node@v4 + with: + node-version: "20" + cache: "pnpm" + + - name: πŸ“₯ Install pnpm + uses: pnpm/action-setup@v4 + with: + version: 9 + + - name: πŸ“š Install dependencies + run: pnpm install --frozen-lockfile + + - name: 🧹 Clean up deleted files + if: inputs.cleanup_deleted + run: | + echo "πŸ” Checking for deleted English files..." + pnpm dlx tsx scripts/i18n-sync/index.ts --cleanup + env: + OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }} + + - name: 🌍 Run translation + run: | + echo "πŸš€ Starting translation process..." + + # Build the command with dynamic inputs + CMD="pnpm dlx tsx scripts/i18n-sync/index.ts" + + # Add target locale if not 'all' + if [ "${{ inputs.target_locale }}" != "all" ]; then + CMD="$CMD --locale ${{ inputs.target_locale }}" + fi + + # Add force flag if enabled + if [ "${{ inputs.force_translate }}" = "true" ]; then + CMD="$CMD --force" + fi + + # Add dry-run flag if enabled + if [ "${{ inputs.dry_run }}" = "true" ]; then + CMD="$CMD --dry-run" + fi + + # Add single file if specified + if [ -n "${{ inputs.single_file }}" ]; then + CMD="$CMD --file '${{ inputs.single_file }}'" + fi + + # Add concurrency + CMD="$CMD --concurrency ${{ inputs.concurrency }}" + + echo "πŸ’» Executing: $CMD" + eval $CMD + env: + OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }} + OPENAI_MODEL: ${{ secrets.OPENAI_MODEL || 'gpt-4o-mini' }} + + - name: πŸ“Š Check translation status + id: check_changes + run: | + if git diff --quiet && git diff --cached --quiet; then + echo "No changes detected" + echo "has_changes=false" >> $GITHUB_OUTPUT + else + echo "Changes detected" + echo "has_changes=true" >> $GITHUB_OUTPUT + + # Count changed files + CHANGED_FILES=$(git diff --name-only | wc -l) + STAGED_FILES=$(git diff --cached --name-only | wc -l) + TOTAL_CHANGES=$((CHANGED_FILES + STAGED_FILES)) + + echo "changed_files=$TOTAL_CHANGES" >> $GITHUB_OUTPUT + + # Get list of changed locales + CHANGED_LOCALES=$(git diff --name-only | grep -E '^app/(es|pt-BR)/' | cut -d'/' -f2 | sort -u | tr '\n' ',' | sed 's/,$//') + if [ -z "$CHANGED_LOCALES" ]; then + CHANGED_LOCALES=$(git diff --cached --name-only | grep -E '^app/(es|pt-BR)/' | cut -d'/' -f2 | sort -u | tr '\n' ',' | sed 's/,$//') + fi + echo "changed_locales=$CHANGED_LOCALES" >> $GITHUB_OUTPUT + fi + + - name: 🏷️ Generate branch name + if: steps.check_changes.outputs.has_changes == 'true' + id: branch_name + run: | + TIMESTAMP=$(date +%Y%m%d-%H%M%S) + if [ "${{ inputs.target_locale }}" != "all" ]; then + BRANCH_NAME="translations/${{ inputs.target_locale }}-$TIMESTAMP" + else + BRANCH_NAME="translations/all-locales-$TIMESTAMP" + fi + echo "branch_name=$BRANCH_NAME" >> $GITHUB_OUTPUT + + - name: 🌿 Create and switch to new branch + if: steps.check_changes.outputs.has_changes == 'true' + run: | + git config user.name "github-actions[bot]" + git config user.email "github-actions[bot]@users.noreply.github.com" + git checkout -b ${{ steps.branch_name.outputs.branch_name }} + + - name: πŸ“ Commit changes + if: steps.check_changes.outputs.has_changes == 'true' + run: | + git add . + + # Create detailed commit message + COMMIT_MSG="🌍 Update translations" + + if [ "${{ inputs.target_locale }}" != "all" ]; then + COMMIT_MSG="$COMMIT_MSG for ${{ inputs.target_locale }}" + fi + + COMMIT_MSG="$COMMIT_MSG (${{ steps.check_changes.outputs.changed_files }} files)" + + if [ "${{ inputs.force_translate }}" = "true" ]; then + COMMIT_MSG="$COMMIT_MSG [forced]" + fi + + if [ "${{ inputs.cleanup_deleted }}" = "true" ]; then + COMMIT_MSG="$COMMIT_MSG [with cleanup]" + fi + + if [ "${{ inputs.dry_run }}" = "true" ]; then + COMMIT_MSG="$COMMIT_MSG [dry-run]" + fi + + # Add configuration details to commit body + COMMIT_BODY="Translation Configuration: + - Target Locale: ${{ inputs.target_locale }} + - Force Translate: ${{ inputs.force_translate }} + - Cleanup Deleted: ${{ inputs.cleanup_deleted }} + - Dry Run: ${{ inputs.dry_run }} + - Single File: ${{ inputs.single_file || 'none' }} + - Concurrency: ${{ inputs.concurrency }} + - Changed Locales: ${{ steps.check_changes.outputs.changed_locales }} + + Generated by GitHub Actions workflow" + + git commit -m "$COMMIT_MSG" -m "$COMMIT_BODY" + + - name: πŸ“€ Push branch + if: steps.check_changes.outputs.has_changes == 'true' + run: | + git push origin ${{ steps.branch_name.outputs.branch_name }} + + - name: πŸ”§ Create Pull Request + if: steps.check_changes.outputs.has_changes == 'true' + uses: actions/github-script@v7 + with: + script: | + const { data: pr } = await github.rest.pulls.create({ + owner: context.repo.owner, + repo: context.repo.repo, + title: `🌍 Translation Update: ${{ inputs.target_locale }} (${{ steps.check_changes.outputs.changed_files }} files)`, + head: '${{ steps.branch_name.outputs.branch_name }}', + base: 'main', + body: `## πŸ“– Automated Translation Update + + This PR contains automated translations generated by the GitHub Actions workflow. + + ### πŸ“Š Translation Summary + - **Target Locale**: ${{ inputs.target_locale }} + - **Files Changed**: ${{ steps.check_changes.outputs.changed_files }} + - **Locales Updated**: ${{ steps.check_changes.outputs.changed_locales }} + + ### βš™οΈ Configuration Used + - **Force Translate**: ${{ inputs.force_translate }} + - **Cleanup Deleted Files**: ${{ inputs.cleanup_deleted }} + - **Dry Run**: ${{ inputs.dry_run }} + - **Single File**: ${{ inputs.single_file || 'None (all files)' }} + - **Concurrency**: ${{ inputs.concurrency }} + - **Model**: gpt-4o-mini + + ### πŸ” Review Guidelines + Please review the translations for: + - [ ] Accuracy and context preservation + - [ ] Proper handling of technical terms + - [ ] UI/Dashboard elements remain in English + - [ ] Code blocks and inline code unchanged + - [ ] Markdown formatting preserved + - [ ] Brand names (Arcade, Arcade Engine, Control Plane) kept in English + + ### πŸš€ Auto-generated + This PR was automatically created by the \`translate-docs.yml\` GitHub Action. + + **Triggered by**: @${{ github.actor }} + **Workflow Run**: [${{ github.run_id }}](${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }})`, + draft: false + }); + + // Add labels + await github.rest.issues.addLabels({ + owner: context.repo.owner, + repo: context.repo.repo, + issue_number: pr.number, + labels: ['🌍 translation', 'πŸ€– automated', 'documentation'] + }); + + // Add specific locale label if not 'all' + if ('${{ inputs.target_locale }}' !== 'all') { + await github.rest.issues.addLabels({ + owner: context.repo.owner, + repo: context.repo.repo, + issue_number: pr.number, + labels: [`locale:${{ inputs.target_locale }}`] + }); + } + + console.log(`Created PR #${pr.number}: ${pr.html_url}`); + + - name: πŸ“„ Summary + if: always() + run: | + echo "## 🌍 Translation Workflow Summary" >> $GITHUB_STEP_SUMMARY + echo "" >> $GITHUB_STEP_SUMMARY + + if [ "${{ steps.check_changes.outputs.has_changes }}" = "true" ]; then + echo "βœ… **Translation completed successfully!**" >> $GITHUB_STEP_SUMMARY + echo "" >> $GITHUB_STEP_SUMMARY + echo "- **Files changed**: ${{ steps.check_changes.outputs.changed_files }}" >> $GITHUB_STEP_SUMMARY + echo "- **Target locale**: ${{ inputs.target_locale }}" >> $GITHUB_STEP_SUMMARY + echo "- **Branch created**: \`${{ steps.branch_name.outputs.branch_name }}\`" >> $GITHUB_STEP_SUMMARY + echo "- **Changed locales**: ${{ steps.check_changes.outputs.changed_locales }}" >> $GITHUB_STEP_SUMMARY + echo "" >> $GITHUB_STEP_SUMMARY + echo "A Pull Request has been created for review." >> $GITHUB_STEP_SUMMARY + else + echo "ℹ️ **No changes detected**" >> $GITHUB_STEP_SUMMARY + echo "" >> $GITHUB_STEP_SUMMARY + echo "All translations are up to date. No PR was created." >> $GITHUB_STEP_SUMMARY + fi + + echo "" >> $GITHUB_STEP_SUMMARY + echo "### Configuration Used" >> $GITHUB_STEP_SUMMARY + echo "- Target Locale: ${{ inputs.target_locale }}" >> $GITHUB_STEP_SUMMARY + echo "- Force Translate: ${{ inputs.force_translate }}" >> $GITHUB_STEP_SUMMARY + echo "- Cleanup Deleted: ${{ inputs.cleanup_deleted }}" >> $GITHUB_STEP_SUMMARY + echo "- Dry Run: ${{ inputs.dry_run }}" >> $GITHUB_STEP_SUMMARY + echo "- Single File: ${{ inputs.single_file || 'None' }}" >> $GITHUB_STEP_SUMMARY + echo "- Concurrency: ${{ inputs.concurrency }}" >> $GITHUB_STEP_SUMMARY + echo "- Model: gpt-4o-mini" >> $GITHUB_STEP_SUMMARY diff --git a/.i18n-cache/hashes.json b/.i18n-cache/hashes.json index 8d024ed05..7c49a0425 100644 --- a/.i18n-cache/hashes.json +++ b/.i18n-cache/hashes.json @@ -1,10 +1,11 @@ { - "es": { - "_meta.ts": "bfff435958824a340b2f6f78af9edaa62bab68b2e0db4c7980c37fb29a170a1f", - "page.mdx": "9489dd67ec525393d4cb3864edb26db843f20c57544b812b8b98637706cea666" + "_metadata": { + "version": "1.0.0", + "created": "2025-09-30T08:04:53.155Z", + "updated": "2025-09-30T14:53:21.378Z" }, - "pt-BR": { - "_meta.ts": "bfff435958824a340b2f6f78af9edaa62bab68b2e0db4c7980c37fb29a170a1f", - "page.mdx": "9489dd67ec525393d4cb3864edb26db843f20c57544b812b8b98637706cea666" + "data": { + "es": {}, + "pt-BR": {} } } diff --git a/AUTHORING.md b/AUTHORING.md index f2ff651f6..d4704bab1 100644 --- a/AUTHORING.md +++ b/AUTHORING.md @@ -25,4 +25,4 @@ These are the guidelines for writing documentation for Arcade, to help keep the - **Arcade**: Always refer to the product as "Arcade" in both titles and body text. Do not abbreviate or shorten the product name. Do not append "AI" to the product name. - **Engine**: Refer to "the Arcade Engine" when the deployment option is irrelevant. Otherwise, refer to "the Arcade Cloud Engine" or "a self-hosted Arcade Engine." -- **Toolkits**: Toolkits are collections of tools, either built by Arcade or a third party developer. For toolkits built by Arcade, refer to "the Arcade [Toolkit name] toolkit." For example, "the Arcade GitHub toolkit." +- **MCP Servers**: MCP-Servers are collections of tools, either built by Arcade or a third party developer. For MCP Servers built by Arcade, refer to "the Arcade [Toolkit name] toolkit." For example, "the Arcade GitHub toolkit." diff --git a/_dictionaries/en.ts b/_dictionaries/en.ts index 8d52ff9d3..f3a42b96d 100644 --- a/_dictionaries/en.ts +++ b/_dictionaries/en.ts @@ -11,4 +11,24 @@ export default { poweredBy: "Powered by", editPage: "Edit this page on GitHub β†’", by: "by", + banner: { + aiTranslation: + "πŸ€– This translation is in progress and was generated by AI. If you find something incorrect or want to help improve it, please", + contributeLink: "contribute on GitHub", + thanks: "Thank you for your help!", + }, + notFoundPage: { + title: "Page not found", + description: "This page doesn't exist or may have moved.", + notAvailablePrefix: "Not available in", + tryEnglish: "Try English version", + translationHint: "This page may not be translated yet.", + viewOriginalEnglish: "View the original in English", + goHome: "Go to homepage", + goBack: "Go back", + needHelp: "Need help? Try these popular pages:", + quickstart: "Quickstart", + toolkits: "Toolkits", + createToolkit: "Create a toolkit", + }, }; diff --git a/_dictionaries/es.ts b/_dictionaries/es.ts index fd58e5ac5..6fa402376 100644 --- a/_dictionaries/es.ts +++ b/_dictionaries/es.ts @@ -9,8 +9,28 @@ export default { backToTop: "Desplazarse hacia arriba", }, lastUpdated: "Última actualizaciΓ³n el", - notFound: "Esta pagina no se pudo encontrar", + notFound: "Esta pΓ‘gina no se pudo encontrar", poweredBy: "Desarrollado por", editPage: "Edite esta pΓ‘gina en GitHub β†’", by: "por", + banner: { + aiTranslation: + "πŸ€– Esta traducciΓ³n estΓ‘ en progreso y fue generada por IA. Si encuentras algo incorrecto o quieres ayudar a mejorarla, por favor", + contributeLink: "contribuye en GitHub", + thanks: "Β‘Gracias por tu ayuda!", + }, + notFoundPage: { + title: "PΓ‘gina no encontrada", + description: "Esta pΓ‘gina no existe o puede haber sido movida.", + notAvailablePrefix: "No disponible en", + tryEnglish: "Probar versiΓ³n en inglΓ©s", + translationHint: "Es posible que esta pΓ‘gina aΓΊn no estΓ© traducida.", + viewOriginalEnglish: "Ver el original en inglΓ©s", + goHome: "Ir a la pΓ‘gina principal", + goBack: "Volver", + needHelp: "ΒΏNecesitas ayuda? Prueba estas pΓ‘ginas populares:", + quickstart: "Inicio rΓ‘pido", + toolkits: "Toolkits", + createToolkit: "Crear un toolkit", + }, } satisfies Dictionary; diff --git a/_dictionaries/get-dictionary-client.ts b/_dictionaries/get-dictionary-client.ts new file mode 100644 index 000000000..15b5bd1f9 --- /dev/null +++ b/_dictionaries/get-dictionary-client.ts @@ -0,0 +1,19 @@ +import type { Dictionaries, Dictionary, Locale } from "./i18n-config"; + +// Client-safe dictionary loader (without server-only restriction) +const dictionaries: Dictionaries = { + en: () => import("./en"), + es: () => import("./es"), + "pt-BR": () => import("./pt-BR"), +}; + +export async function getDictionaryClient(locale: string): Promise { + const localeKey: Locale = (Object.keys(dictionaries) as Locale[]).includes( + locale as Locale + ) + ? (locale as Locale) + : "en"; + const { default: dictionary } = await dictionaries[localeKey](); + + return dictionary; +} diff --git a/_dictionaries/pt-BR.ts b/_dictionaries/pt-BR.ts index 8aa3126d8..ebb4b27a8 100644 --- a/_dictionaries/pt-BR.ts +++ b/_dictionaries/pt-BR.ts @@ -13,4 +13,24 @@ export default { poweredBy: "Desenvolvido por", editPage: "Edite esta pΓ‘gina no GitHub β†’", by: "por", + banner: { + aiTranslation: + "πŸ€– Esta traduΓ§Γ£o estΓ‘ em andamento e foi gerada por IA. Se vocΓͺ encontrar algo incorreto ou quiser ajudar a melhorΓ‘-la, por favor", + contributeLink: "contribua no GitHub", + thanks: "Obrigado pela sua ajuda!", + }, + notFoundPage: { + title: "PΓ‘gina nΓ£o encontrada", + description: "Esta pΓ‘gina nΓ£o existe ou pode ter sido movida.", + notAvailablePrefix: "NΓ£o disponΓ­vel em", + tryEnglish: "Tentar versΓ£o em inglΓͺs", + translationHint: "Esta pΓ‘gina pode ainda nΓ£o estar traduzida.", + viewOriginalEnglish: "Ver o original em inglΓͺs", + goHome: "Ir para a pΓ‘gina inicial", + goBack: "Voltar", + needHelp: "Precisa de ajuda? Experimente estas pΓ‘ginas populares:", + quickstart: "InΓ­cio rΓ‘pido", + toolkits: "Toolkits", + createToolkit: "Criar um toolkit", + }, } satisfies Dictionary; diff --git a/agents/changelog/agents/changelog.ts b/agents/changelog/agents/changelog.ts index ed59d6f31..dac5e07b3 100644 --- a/agents/changelog/agents/changelog.ts +++ b/agents/changelog/agents/changelog.ts @@ -1,9 +1,9 @@ -import { WrappedAgent } from "../classes/wrappedAgent"; +import { WrappedAgent } from "../classes/wrapped-agent"; import type { Config } from "../classes/config"; import type { Logger } from "../classes/logger"; -import { getNewCommitsTool } from "../tools/getNewCommitsAndPRs"; -import { readFileTool } from "../tools/readFile"; -import { writeFileTool } from "../tools/writeFile"; +import { getNewCommitsTool } from "../tools/get-new-commits-and-prs"; +import { readFileTool } from "../tools/read-file"; +import { writeFileTool } from "../tools/write-file"; export class ChangelogAgent extends WrappedAgent { constructor(config: Config, logger: Logger) { @@ -14,7 +14,7 @@ Your goal is to load all the new git commits and pull requests from provided Git There are 5 possible categories of changes: - Frameworks -- Toolkits +- MCP Servers - CLI and TDK - Platform and Engine - Misc diff --git a/app/_components/back-button.tsx b/app/_components/back-button.tsx new file mode 100644 index 000000000..17252269b --- /dev/null +++ b/app/_components/back-button.tsx @@ -0,0 +1,33 @@ +"use client"; +import { Button } from "@arcadeai/design-system"; +import { ArrowLeft } from "lucide-react"; +import { useEffect, useState } from "react"; + +type BackButtonProps = { + goBackText: string; +}; + +export function BackButton({ goBackText }: BackButtonProps) { + const [canGoBack, setCanGoBack] = useState(false); + + useEffect(() => { + const hasHistory = !!window.history.state?.idx || !!document.referrer; + setCanGoBack(hasHistory); + }, []); + + if (!canGoBack) { + return null; + } + + return ( + + ); +} diff --git a/app/_components/custom/toolkits/coming-soon-context.tsx b/app/_components/coming-soon-context.tsx similarity index 100% rename from app/_components/custom/toolkits/coming-soon-context.tsx rename to app/_components/coming-soon-context.tsx diff --git a/app/_components/translation-banner.tsx b/app/_components/translation-banner.tsx new file mode 100644 index 000000000..4dcdb884f --- /dev/null +++ b/app/_components/translation-banner.tsx @@ -0,0 +1,72 @@ +"use client"; + +import { cn } from "@arcadeai/design-system/lib/utils"; +import Link from "next/link"; +import { usePathname } from "next/navigation"; +import { Banner } from "nextra/components"; + +type TranslationBannerProps = { + dictionary: { + banner: { + aiTranslation: string; + contributeLink: string; + thanks: string; + }; + }; + locale: string; +}; + +/** + * Constructs the GitHub edit URL for the current page + * Example: /es/home/auth -> https://github.com/ArcadeAI/docs/blob/main/app/es/home/auth/page.mdx + */ +function constructGithubUrl(pathname: string, locale: string): string { + const baseUrl = "https://github.com/ArcadeAI/docs/blob/main/app"; + + // Remove leading slash if present + const cleanPath = pathname.startsWith("/") ? pathname.slice(1) : pathname; + + // If the path doesn't start with the locale, add it + const pathWithLocale = cleanPath.startsWith(`${locale}/`) + ? cleanPath + : `${locale}/${cleanPath}`; + + // Construct the full GitHub URL pointing to the page.mdx file + return `${baseUrl}/${pathWithLocale}/page.mdx`; +} + +export function TranslationBanner({ + dictionary, + locale, +}: TranslationBannerProps) { + const pathname = usePathname(); + const githubUrl = constructGithubUrl(pathname || "/", locale); + + return ( + +
+ {dictionary.banner.aiTranslation} + + {dictionary.banner.contributeLink} + + . {dictionary.banner.thanks} +
+
+ ); +} diff --git a/app/_layouts/shared-layout.tsx b/app/_layouts/shared-layout.tsx index c55b2cd44..2f97a54d5 100644 --- a/app/_layouts/shared-layout.tsx +++ b/app/_layouts/shared-layout.tsx @@ -4,6 +4,7 @@ import CustomLayout from "@/app/_components/custom-layout"; import { Footer } from "@/app/_components/footer"; import { Logo } from "@/app/_components/logo"; import NavBarButton from "@/app/_components/nav-bar-button"; +import { TranslationBanner } from "@/app/_components/translation-banner"; import "@/app/globals.css"; import { Discord, Github } from "@arcadeai/design-system"; import { GoogleTagManager } from "@next/third-parties/google"; @@ -91,13 +92,17 @@ export default async function SharedLayout({ lightness: 50, }} > - + {/* Performance optimizations for external resources */} + {/* Translation banner for non-English locales */} + {lang !== "en" && ( + + )} - - Toolkits - - ), - href: "/toolkits", - }, - reference: { - title: ( - - - API Reference - - ), - href: "https://reference.arcade.dev/", - }, "contact-us": { title: ( @@ -70,9 +52,12 @@ export const meta: MetaRecord = { "serve-tools": { title: "Serve tools", }, - "-- Agent Frameworks": { + "-- Agent Frameworks and MCP": { type: "separator", - title: "Agent Frameworks", + title: "Agent Frameworks and MCP", + }, + "mcp-clients": { + title: "MCP Clients", }, langchain: { title: "LangChain", @@ -92,16 +77,6 @@ export const meta: MetaRecord = { vercelai: { title: "Vercel AI", }, - "-- MCP": { - type: "separator", - title: "MCP", - }, - "mcp-overview": { - title: "MCP Overview", - }, - "mcp-desktop-clients": { - title: "IDEs and desktop clients", - }, "-- Core Concepts": { type: "separator", title: "Core Concepts", @@ -144,6 +119,9 @@ export const meta: MetaRecord = { faq: { title: "FAQ", }, + "agentic-development": { + title: "Agentic Development", + }, changelog: { title: "Changelog", }, @@ -154,9 +132,6 @@ export const meta: MetaRecord = { "registry-early-access": { title: "Registry Early Access", }, - "migrate-to-v2": { - display: "hidden", - }, }; export default meta; diff --git a/app/en/home/agentic-development/page.mdx b/app/en/home/agentic-development/page.mdx new file mode 100644 index 000000000..d569ccc30 --- /dev/null +++ b/app/en/home/agentic-development/page.mdx @@ -0,0 +1,29 @@ +--- +title: "Agentic Development" +description: "Learn how to speed up your development with agents in your IDEs" +--- + +# Agentic Development + +Give your AI IDE access to Arcade.dev's documentation using our llms.txt files (short [llms.txt](https://docs.arcade.dev/llms.txt), [llms-full.txt](https://docs.arcade.dev/llms-full.txt)), or use [context7](https://context7.com/arcadeai/docs). This allows Claude Code, Cursor, and other AI IDEs to access the documentation and help you write code. + +## LLMs.txt + +LLMs.txt is a file format that allows you to give your AI IDE access to Arcade.dev's documentation in a format that can be easily parsed by the LLM. All you need to do is paste in the conent of the file into your IDE's settings, or reference the docs, e.g. via [Cursor's `@docs` annotation](https://cursor.com/docs/context/symbols#docs). + +Our LLMs.txt files are available in two versions: + +- [`https://docs.arcade.dev/llms.txt`](https://docs.arcade.dev/llms.txt) - a short version of the documentation index +- [`https://docs.arcade.dev/llms-full.txt`](https://docs.arcade.dev/llms-full.txt) - a full version of the documentation + +![LLMs.txt example](/images/agentic-development/cursor-llms-txt.png) + +Learn more about the LLMs.txt file format [here](https://llmstxt.org/). + +## Context7 + +Context7 is an MCP server designed to provide Large Language Models (LLMs) and AI code editors with up-to-date, version-specific documentation and code examples. It helps prevent AI models from "hallucinating" or providing outdated code by fetching accurate information directly from its knowledge base and injecting it into the LLM's prompt, ensuring more reliable and accurate coding assistance + +To use Context7, you first need to add the [Context7 MCP server](https://github.com/upstash/context7) to your editor, and then select the [`arcadeai/docs` project](https://context7.com/arcadeai/docs). + +Learn more about Context7 [here](https://context7.com/). diff --git a/app/en/home/api-keys/page.mdx b/app/en/home/api-keys/page.mdx index bf1c132f8..70ebedece 100644 --- a/app/en/home/api-keys/page.mdx +++ b/app/en/home/api-keys/page.mdx @@ -56,6 +56,7 @@ Visit the [API Keys page](https://api.arcade.dev/dashboard/api-keys) in Arcade D ### Install and login 1. Install the Arcade CLI: + @@ -100,4 +101,4 @@ The CLI will automatically: Once you have your API key, you can: - [Start using tools](/home/quickstart) -- [Create custom tools](/home/build-tools/create-a-toolkit) +- [Create custom tools](/home/build-tools/create-a-mcp-server) diff --git a/app/en/home/arcade-cli/page.mdx b/app/en/home/arcade-cli/page.mdx index 5f8bb3e65..ffe867b23 100644 --- a/app/en/home/arcade-cli/page.mdx +++ b/app/en/home/arcade-cli/page.mdx @@ -9,7 +9,7 @@ import { Tabs } from "nextra/components"; The Arcade CLI is a command-line tool that allows you to manage your Arcade deployments, generate, test, and manage your toolkits, and more. -This same package contains the SDK that you will use to [build your own toolkits](/home/build-tools/create-a-toolkit). +This same package contains the SDK that you will use to [build your own toolkits](/home/build-tools/create-a-mcp-server). ## Installation @@ -22,7 +22,8 @@ Like all python packages, the Arcade CLI needs to be installed within the python uv venv --seed source .venv/bin/activate -``` + +```` ```bash @@ -30,7 +31,8 @@ source .venv/bin/activate conda create --name arcade conda activate arcade -``` +```` + ```bash @@ -41,17 +43,10 @@ source .venv/bin/activate Now that your python virtual environment is activated, you can install the Arcade CLI with the following command: + - -```bash -uv pip install arcade-ai -``` - - -```bash -pip install arcade-ai -``` - + ```bash uv pip install arcade-ai ``` + ```bash pip install arcade-ai ``` ## Usage diff --git a/app/en/home/auth-providers/_meta.ts b/app/en/home/auth-providers/_meta.ts deleted file mode 100644 index b240cfc67..000000000 --- a/app/en/home/auth-providers/_meta.ts +++ /dev/null @@ -1,8 +0,0 @@ -export default { - "*": { - theme: { - breadcrumb: true, - }, - }, - index: "Overview", -}; diff --git a/app/en/home/auth-providers/_meta.tsx b/app/en/home/auth-providers/_meta.tsx new file mode 100644 index 000000000..23f84d2a9 --- /dev/null +++ b/app/en/home/auth-providers/_meta.tsx @@ -0,0 +1,15 @@ +import type { MetaRecord } from "nextra"; + +const meta: MetaRecord = { + "*": { + theme: { + breadcrumb: true, + toc: true, + }, + }, + index: { + title: "Overview", + }, +}; + +export default meta; diff --git a/app/en/home/auth-providers/asana/page.mdx b/app/en/home/auth-providers/asana/page.mdx index 2dd91f5bf..857535536 100644 --- a/app/en/home/auth-providers/asana/page.mdx +++ b/app/en/home/auth-providers/asana/page.mdx @@ -6,7 +6,7 @@ The Asana auth provider enables tools and agents to call Asana APIs on behalf of Want to quickly get started with Asana services in your agent or AI app? The - pre-built [Arcade Asana toolkit](/toolkits/productivity/asana) is what you + pre-built [Arcade Asana MCP Server](/mcp-servers/productivity/asana) is what you want! @@ -16,7 +16,7 @@ This page describes how to use and configure Asana auth with Arcade. This auth provider is used by: -- The [Arcade Asana toolkit](/toolkits/productivity/asana), which provides pre-built tools for interacting with Asana +- The [Arcade Asana MCP Server](/mcp-servers/productivity/asana), which provides pre-built tools for interacting with Asana - Your [app code](#using-asana-auth-in-app-code) that needs to call Asana APIs - Or, your [custom tools](#using-asana-auth-in-custom-tools) that need to call Asana APIs @@ -24,12 +24,16 @@ This auth provider is used by: Arcade offers a default Asana auth provider that you can use in the Arcade Cloud Platform. In this case, your users will see `Arcade` as the name of the application that's requesting permission. -If you choose to use Arcade's Asana auth, you don't need to configure anything. Follow the [Asana toolkit examples](/toolkits/productivity/asana) to get started calling Asana tools. +If you choose to use Arcade's Asana auth, you don't need to configure anything. Follow the [Asana MCP Server examples](/mcp-servers/productivity/asana) to get started calling Asana tools. ## Use Your Own Asana App Credentials - When using your own app credentials, make sure you configure your project to use a [custom user verifier](/home/auth/secure-auth-production#build-a-custom-user-verifier). Without this, your end-users will not be able to use your app or agent in production. + When using your own app credentials, make sure you configure your project to + use a [custom user + verifier](/home/auth/secure-auth-production#build-a-custom-user-verifier). + Without this, your end-users will not be able to use your app or agent in + production. In a production environment, you will most likely want to use your own Asana app credentials. This way, your users will see your application's name requesting permission. @@ -58,7 +62,8 @@ When creating your app, use the following settings: introduced](https://forum.asana.com/t/new-oauth-permission-scopes/1048556) granular permission scopes. This feature is still in preview and the scopes available at the moment do not include all endpoints/actions that the Asana - Toolkit needs. For those reasons, Arcade uses the "Full Permissions" scope. + MCP Servers needs. For those reasons, Arcade uses the "Full Permissions" + scope. ## Configuring your own Asana Auth Provider in Arcade @@ -109,8 +114,9 @@ When you use tools that require Asana auth using your Arcade account credentials ### Configure Asana Auth Using the Engine Configuration YAML - Refer to [Engine configuration](/home/local-deployment/configure/engine) for more information - on how to set environment variables and configure the Arcade Engine. + Refer to [Engine configuration](/home/local-deployment/configure/engine) for + more information on how to set environment variables and configure the Arcade + Engine. @@ -136,7 +142,8 @@ ASANA_CLIENT_SECRET="" To locate the `engine.yaml` file in your OS after installing the Arcade Engine, check the [Engine configuration - file](/home/local-deployment/configure/overview#engine-configuration-file) documentation. + file](/home/local-deployment/configure/overview#engine-configuration-file) + documentation. Edit the `engine.yaml` file and add an Asana item to the `auth.providers` section: @@ -161,11 +168,11 @@ If the Arcade Engine is already running, you will need to restart it for the cha -## Using the Arcade Asana Toolkit +## Using the Arcade Asana MCP Servers -The [Arcade Asana toolkit](/toolkits/productivity/asana) provides tools to interact with various Asana objects, such as tasks, projects, teams, and users. +The [Arcade Asana MCP Server](/mcp-servers/productivity/asana) provides tools to interact with various Asana objects, such as tasks, projects, teams, and users. -Refer to the [toolkit documentation and examples](/toolkits/productivity/asana) to learn how to use the toolkit to build agents and AI apps that interact with Asana services. +Refer to the [MCP Server documentation and examples](/mcp-servers/productivity/asana) to learn how to use the MCP Server to build agents and AI apps that interact with Asana services. ## Using Asana auth in app code @@ -248,9 +255,9 @@ You can use the auth token to call the [Get multiple tasks endpoint](https://dev ## Using Asana auth in custom tools -You can use the pre-built [Arcade Asana toolkit](/toolkits/productivity/asana) to quickly build agents and AI apps that interact with Asana. +You can use the pre-built [Arcade Asana MCP Server](/mcp-servers/productivity/asana) to quickly build agents and AI apps that interact with Asana. -If the pre-built tools in the Asana toolkit don't meet your needs, you can author your own [custom tools](/home/build-tools/create-a-toolkit) that interact with Asana API. +If the pre-built tools in the Asana MCP Server don't meet your needs, you can author your own [custom tools](/home/build-tools/create-a-mcp-server) that interact with Asana API. Use the `Asana()` auth class to specify that a tool requires authorization with Asana. The authentication token needed to call the Asana API is available in the tool context through the `context.get_auth_token_or_empty()` method. diff --git a/app/en/home/auth-providers/atlassian/page.mdx b/app/en/home/auth-providers/atlassian/page.mdx index 2ec6328ee..6b3578657 100644 --- a/app/en/home/auth-providers/atlassian/page.mdx +++ b/app/en/home/auth-providers/atlassian/page.mdx @@ -22,7 +22,11 @@ This auth provider is used by: ## Configuring Atlassian auth - When using your own app credentials, make sure you configure your project to use a [custom user verifier](/home/auth/secure-auth-production#build-a-custom-user-verifier). Without this, your end-users will not be able to use your app or agent in production. + When using your own app credentials, make sure you configure your project to + use a [custom user + verifier](/home/auth/secure-auth-production#build-a-custom-user-verifier). + Without this, your end-users will not be able to use your app or agent in + production. In a production environment, you will most likely want to use your own Atlassian app credentials. This way, your users will see your application's name requesting permission. @@ -102,8 +106,9 @@ ATLASSIAN_CLIENT_ID="" ``` - See [Engine configuration](/home/local-deployment/configure/engine) for more information on how - to set environment variables and configure the Arcade Engine. + See [Engine configuration](/home/local-deployment/configure/engine) for more + information on how to set environment variables and configure the Arcade + Engine. ### Edit the Engine configuration @@ -194,7 +199,7 @@ const token = authResponse.context.token; ## Using Atlassian auth in custom tools -You can author your own [custom tools](/home/build-tools/create-a-toolkit) that interact with the Atlassian API. +You can author your own [custom tools](/home/build-tools/create-a-mcp-server) that interact with the Atlassian API. Use the `Atlassian()` auth class to specify that a tool requires authorization with Atlassian. The `context.authorization.token` field will be automatically populated with the user's Atlassian token: diff --git a/app/en/home/auth-providers/clickup/page.mdx b/app/en/home/auth-providers/clickup/page.mdx index 489a051cf..21851def0 100644 --- a/app/en/home/auth-providers/clickup/page.mdx +++ b/app/en/home/auth-providers/clickup/page.mdx @@ -14,10 +14,16 @@ This auth provider is used by: - Or, your [custom tools](#using-clickup-auth-in-custom-tools) that need to call ClickUp APIs ## Configuring ClickUp auth + - When using your own app credentials, make sure you configure your project to use a [custom user verifier](/home/auth/secure-auth-production#build-a-custom-user-verifier). Without this, your end-users will not be able to use your app or agent in production. + When using your own app credentials, make sure you configure your project to + use a [custom user + verifier](/home/auth/secure-auth-production#build-a-custom-user-verifier). + Without this, your end-users will not be able to use your app or agent in + production. -In a production environment, you will most likely want to use your own ClickUp app credentials. This way, your users will see your application's name requesting permission. +In a production environment, you will most likely want to use your own ClickUp app +credentials. This way, your users will see your application's name requesting permission. You can use your own ClickUp credentials in both the Arcade Cloud Platform or in a [self-hosted Arcade Engine](/home/local-deployment/install/local) instance. @@ -98,8 +104,9 @@ CLICKUP_CLIENT_SECRET="" ``` - See [Engine configuration](/home/local-deployment/configure/engine) for more information on how - to set environment variables and configure the Arcade Engine. + See [Engine configuration](/home/local-deployment/configure/engine) for more + information on how to set environment variables and configure the Arcade + Engine. ### Edit the Engine configuration @@ -182,7 +189,7 @@ const { token } = auth.context; ## Using ClickUp auth in custom tools -You can author your own [custom tools](/home/build-tools/create-a-toolkit) that interact with the ClickUp API. +You can author your own [custom tools](/home/build-tools/create-a-mcp-server) that interact with the ClickUp API. Use the `ClickUp()` auth class to specify that a tool requires authorization with ClickUp. The `context.authorization.token` field will be automatically populated with the user's ClickUp token: diff --git a/app/en/home/auth-providers/discord/page.mdx b/app/en/home/auth-providers/discord/page.mdx index 005bb615a..9ca55ffcd 100644 --- a/app/en/home/auth-providers/discord/page.mdx +++ b/app/en/home/auth-providers/discord/page.mdx @@ -22,7 +22,11 @@ This auth provider is used by: ## Configuring Discord auth - When using your own app credentials, make sure you configure your project to use a [custom user verifier](/home/auth/secure-auth-production#build-a-custom-user-verifier). Without this, your end-users will not be able to use your app or agent in production. + When using your own app credentials, make sure you configure your project to + use a [custom user + verifier](/home/auth/secure-auth-production#build-a-custom-user-verifier). + Without this, your end-users will not be able to use your app or agent in + production. In a production environment, you will most likely want to use your own Discord app credentials. This way, your users will see your application's name requesting permission. @@ -105,8 +109,9 @@ DISCORD_CLIENT_ID="" ``` - See [Engine configuration](/home/local-deployment/configure/engine) for more information on how - to set environment variables and configure the Arcade Engine. + See [Engine configuration](/home/local-deployment/configure/engine) for more + information on how to set environment variables and configure the Arcade + Engine. ### Edit the Engine configuration @@ -198,7 +203,7 @@ const token = authResponse.context.token; ## Using Discord auth in custom tools -You can author your own [custom tools](/home/build-tools/create-a-toolkit) that interact with the Discord API. +You can author your own [custom tools](/home/build-tools/create-a-mcp-server) that interact with the Discord API. Use the `Discord()` auth class to specify that a tool requires authorization with Discord. The `context.authorization.token` field will be automatically populated with the user's Discord token: diff --git a/app/en/home/auth-providers/dropbox/page.mdx b/app/en/home/auth-providers/dropbox/page.mdx index b7a054c8c..17fa933ca 100644 --- a/app/en/home/auth-providers/dropbox/page.mdx +++ b/app/en/home/auth-providers/dropbox/page.mdx @@ -22,7 +22,11 @@ This auth provider is used by: ## Configuring Dropbox auth - When using your own app credentials, make sure you configure your project to use a [custom user verifier](/home/auth/secure-auth-production#build-a-custom-user-verifier). Without this, your end-users will not be able to use your app or agent in production. + When using your own app credentials, make sure you configure your project to + use a [custom user + verifier](/home/auth/secure-auth-production#build-a-custom-user-verifier). + Without this, your end-users will not be able to use your app or agent in + production. In a production environment, you will most likely want to use your own Dropbox app credentials. This way, your users will see your application's name requesting permission. @@ -111,8 +115,9 @@ DROPBOX_CLIENT_ID="" ``` - See [Engine configuration](/home/local-deployment/configure/engine) for more information on how - to set environment variables and configure the Arcade Engine. + See [Engine configuration](/home/local-deployment/configure/engine) for more + information on how to set environment variables and configure the Arcade + Engine. ### Edit the Engine configuration @@ -204,7 +209,7 @@ const token = authResponse.context.token; ## Using Dropbox auth in custom tools -You can author your own [custom tools](/home/build-tools/create-a-toolkit) that interact with the Dropbox API. +You can author your own [custom tools](/home/build-tools/create-a-mcp-server) that interact with the Dropbox API. Use the `Dropbox()` auth class to specify that a tool requires authorization with Dropbox. The `context.authorization.token` field will be automatically populated with the user's Dropbox token: diff --git a/app/en/home/auth-providers/github/page.mdx b/app/en/home/auth-providers/github/page.mdx index 0efb12bb6..043de0a02 100644 --- a/app/en/home/auth-providers/github/page.mdx +++ b/app/en/home/auth-providers/github/page.mdx @@ -6,7 +6,7 @@ The GitHub auth provider enables tools and agents to call [GitHub APIs](https:// Want to quickly get started with GitHub in your agent or AI app? The pre-built - [Arcade GitHub toolkit](/toolkits/development/github) is what you want! + [Arcade GitHub MCP Server](/mcp-servers/development/github) is what you want! ### What's documented here @@ -15,14 +15,18 @@ This page describes how to use and configure GitHub auth with Arcade. This auth provider is used by: -- The [Arcade GitHub toolkit](/toolkits/development/github), which provides pre-built tools for interacting with GitHub +- The [Arcade GitHub MCP Server](/mcp-servers/development/github), which provides pre-built tools for interacting with GitHub - Your [app code](#using-github-auth-in-app-code) that needs to call the GitHub API - Or, your [custom tools](#using-github-auth-in-custom-tools) that need to call the GitHub API ## Configuring GitHub auth - When using your own app credentials, make sure you configure your project to use a [custom user verifier](/home/auth/secure-auth-production#build-a-custom-user-verifier). Without this, your end-users will not be able to use your app or agent in production. + When using your own app credentials, make sure you configure your project to + use a [custom user + verifier](/home/auth/secure-auth-production#build-a-custom-user-verifier). + Without this, your end-users will not be able to use your app or agent in + production. In a production environment, you will most likely want to use your own GitHub app credentials. This way, your users will see your application's name requesting permission. @@ -116,8 +120,9 @@ GITHUB_CLIENT_SECRET="" ``` - See [Engine configuration](/home/local-deployment/configure/engine) for more information on how - to set environment variables and configure the Arcade Engine. + See [Engine configuration](/home/local-deployment/configure/engine) for more + information on how to set environment variables and configure the Arcade + Engine. ### Edit the Engine configuration @@ -266,9 +271,9 @@ console.log(data.stargazers_count); ## Using GitHub auth in custom tools -You can use the pre-built [Arcade GitHub toolkit](/toolkits/development/github) to quickly build agents and AI apps that interact with GitHub. +You can use the pre-built [Arcade GitHub MCP Server](/mcp-servers/development/github) to quickly build agents and AI apps that interact with GitHub. -If the pre-built tools in the GitHub toolkit don't meet your needs, you can author your own [custom tools](/home/build-tools/create-a-toolkit) that interact with the GitHub API. +If the pre-built tools in the GitHub MCP Server don't meet your needs, you can author your own [custom tools](/home/build-tools/create-a-mcp-server) that interact with the GitHub API. Use the `GitHub()` auth class to specify that a tool requires authorization with GitHub. The `context.authorization.token` field will be automatically populated with the user's GitHub token: diff --git a/app/en/home/auth-providers/google/page.mdx b/app/en/home/auth-providers/google/page.mdx index ace1b14a8..1643b7637 100644 --- a/app/en/home/auth-providers/google/page.mdx +++ b/app/en/home/auth-providers/google/page.mdx @@ -6,8 +6,8 @@ The Google auth provider enables tools and agents to call Google/Google Workspac Want to quickly get started with Google services in your agent or AI app? The - pre-built [Arcade Gmail toolkit](/toolkits/productivity/gmail) is what - you want! + pre-built [Arcade Gmail MCP Server](/mcp-servers/productivity/gmail) is what you + want! ### What's documented here @@ -16,14 +16,18 @@ This page describes how to use and configure Google auth with Arcade. This auth provider is used by: -- The [Arcade Gmail toolkit](/toolkits/productivity/gmail), which provides pre-built tools for interacting with Google services +- The [Arcade Gmail MCP Server](/mcp-servers/productivity/gmail), which provides pre-built tools for interacting with Google services - Your [app code](#using-google-auth-in-app-code) that needs to call Google APIs - Or, your [custom tools](#using-google-auth-in-custom-tools) that need to call Google APIs ## Configuring Google auth - When using your own app credentials, make sure you configure your project to use a [custom user verifier](/home/auth/secure-auth-production#build-a-custom-user-verifier). Without this, your end-users will not be able to use your app or agent in production. + When using your own app credentials, make sure you configure your project to + use a [custom user + verifier](/home/auth/secure-auth-production#build-a-custom-user-verifier). + Without this, your end-users will not be able to use your app or agent in + production. In a production environment, you will most likely want to use your own Google app credentials. This way, your users will see your application's name requesting permission. @@ -110,8 +114,9 @@ GOOGLE_CLIENT_SECRET="" ``` - See [Engine configuration](/home/local-deployment/configure/engine) for more information on how - to set environment variables and configure the Arcade Engine. + See [Engine configuration](/home/local-deployment/configure/engine) for more + information on how to set environment variables and configure the Arcade + Engine. ### Edit the Engine configuration @@ -243,7 +248,7 @@ const response = await fetch( headers: { Authorization: `Bearer ${token}`, }, - }, + } ); if (!response.ok) { @@ -263,9 +268,9 @@ console.log(emailMessages); ## Using Google auth in custom tools -You can use the pre-built Arcade Google toolkits, like [Arcade Gmail toolkit](/toolkits/productivity/gmail), to quickly build agents and AI apps that interact with Google services like Gmail, Calendar, Drive, and more. +You can use the pre-built Arcade Google MCP Servers, like [Arcade Gmail MCP Server](/mcp-servers/productivity/gmail), to quickly build agents and AI apps that interact with Google services like Gmail, Calendar, Drive, and more. -If the pre-built tools in the Google toolkits don't meet your needs, you can author your own [custom tools](/home/build-tools/create-a-toolkit) that interact with Google APIs. +If the pre-built tools in the Google MCP Servers don't meet your needs, you can author your own [custom tools](/home/build-tools/create-a-mcp-server) that interact with Google APIs. Use the `Google()` auth class to specify that a tool requires authorization with Google. The `context.authorization.token` field will be automatically populated with the user's Google token: diff --git a/app/en/home/auth-providers/hubspot/page.mdx b/app/en/home/auth-providers/hubspot/page.mdx index 6ea341891..88c3ea27a 100644 --- a/app/en/home/auth-providers/hubspot/page.mdx +++ b/app/en/home/auth-providers/hubspot/page.mdx @@ -6,7 +6,8 @@ The Hubspot auth provider enables tools and agents to call Hubspot APIs on behal Want to quickly get started with Hubspot services in your agent or AI app? The - pre-built [Arcade Hubspot toolkit](/toolkits/sales/hubspot) is what you want! + pre-built [Arcade Hubspot MCP Server](/mcp-servers/sales/hubspot) is what you + want! ## What's documented here @@ -15,7 +16,7 @@ This page describes how to use and configure Hubspot auth with Arcade. This auth provider is used by: -- The [Arcade Hubspot toolkit](/toolkits/sales/hubspot), which provides pre-built tools for interacting with Hubspot +- The [Arcade Hubspot MCP Server](/mcp-servers/sales/hubspot), which provides pre-built tools for interacting with Hubspot - Your [app code](#using-hubspot-auth-in-app-code) that needs to call Hubspot APIs - Or, your [custom tools](#using-hubspot-auth-in-custom-tools) that need to call Hubspot APIs @@ -23,12 +24,16 @@ This auth provider is used by: Arcade offers a default Hubspot auth provider that you can use in the Arcade Cloud Platform. In this case, your users will see `Arcade` as the name of the application that's requesting permission. -If you choose to use Arcade's Hubspot auth, you don't need to configure anything. Follow the [Hubspot toolkit examples](/toolkits/sales/hubspot) to get started calling Hubspot tools. +If you choose to use Arcade's Hubspot auth, you don't need to configure anything. Follow the [Hubspot MCP Server examples](/mcp-servers/sales/hubspot) to get started calling Hubspot tools. ## Use Your Own Hubspot App Credentials - When using your own app credentials, make sure you configure your project to use a [custom user verifier](/home/auth/secure-auth-production#build-a-custom-user-verifier). Without this, your end-users will not be able to use your app or agent in production. + When using your own app credentials, make sure you configure your project to + use a [custom user + verifier](/home/auth/secure-auth-production#build-a-custom-user-verifier). + Without this, your end-users will not be able to use your app or agent in + production. In a production environment, you will most likely want to use your own Hubspot app credentials. This way, your users will see your application's name requesting permission. @@ -62,7 +67,7 @@ Create the app and take note of the **Client ID** and **Client Secret**. You don scopes](https://developers.hubspot.com/docs/guides/apps/authentication/scopes) necessary for the actions your tools need to perform. All extra scopes must be added to the app as `Conditionally Required` or `Optional`, never as - `Required`, otherwise the Arcade Hubspot toolkit will not work. Read more + `Required`, otherwise the Arcade Hubspot MCP Server will not work. Read more about [Hubspot scope types](https://developers.hubspot.com/changelog/advanced-auth-and-scope-settings-for-public-apps). @@ -115,8 +120,9 @@ When you use tools that require Hubspot auth using your Arcade account credentia ### Configure Hubspot Auth Using the Engine Configuration YAML - Refer to [Engine configuration](/home/local-deployment/configure/engine) for more information - on how to set environment variables and configure the Arcade Engine. + Refer to [Engine configuration](/home/local-deployment/configure/engine) for + more information on how to set environment variables and configure the Arcade + Engine. @@ -142,7 +148,8 @@ HUBSPOT_CLIENT_SECRET="" To locate the `engine.yaml` file in your OS after installing the Arcade Engine, check the [Engine configuration - file](/home/local-deployment/configure/overview#engine-configuration-file) documentation. + file](/home/local-deployment/configure/overview#engine-configuration-file) + documentation. Edit the `engine.yaml` file and add a Hubspot item to the `auth.providers` section: @@ -167,11 +174,11 @@ If the Arcade Engine is already running, you will need to restart it for the cha -## Using the Arcade Hubspot Toolkit +## Using the Arcade Hubspot MCP Servers -The [Arcade Hubspot toolkit](/toolkits/sales/hubspot) provides tools to interact with various Hubspot objects, such as companies, contacts, deals, and email messages. +The [Arcade Hubspot MCP Server](/mcp-servers/sales/hubspot) provides tools to interact with various Hubspot objects, such as companies, contacts, deals, and email messages. -Refer to the [toolkit documentation and examples](/toolkits/sales/hubspot) to learn how to use the toolkit to build agents and AI apps that interact with Hubspot services. +Refer to the [MCP Server documentation and examples](/mcp-servers/sales/hubspot) to learn how to use the MCP Server to build agents and AI apps that interact with Hubspot services. ## Using Hubspot auth in app code @@ -250,7 +257,7 @@ The scopes supported by the Arcade Hubspot auth provider are the ones [listed ab ## Using Hubspot auth in custom tools -You can author your own [custom tools](/home/build-tools/create-a-toolkit) that interact with the Hubspot API. +You can author your own [custom tools](/home/build-tools/create-a-mcp-server) that interact with the Hubspot API. Use the `Hubspot()` auth class to specify that a tool requires authorization with Hubspot. The authentication token needed to call the Hubspot API is available in the tool context through the `context.get_auth_token_or_empty()` method. diff --git a/app/en/home/auth-providers/linear/page.mdx b/app/en/home/auth-providers/linear/page.mdx index 6f72453ce..0ac3a45f0 100644 --- a/app/en/home/auth-providers/linear/page.mdx +++ b/app/en/home/auth-providers/linear/page.mdx @@ -16,7 +16,11 @@ This auth provider is used by: ## Configuring Linear auth - When using your own app credentials, make sure you configure your project to use a [custom user verifier](/home/auth/secure-auth-production#build-a-custom-user-verifier). Without this, your end-users will not be able to use your app or agent in production. + When using your own app credentials, make sure you configure your project to + use a [custom user + verifier](/home/auth/secure-auth-production#build-a-custom-user-verifier). + Without this, your end-users will not be able to use your app or agent in + production. In a production environment, you will most likely want to use your own Linear app credentials. This way, your users will see your application's name requesting permission. @@ -102,8 +106,9 @@ LINEAR_CLIENT_SECRET="" ``` - See [Engine configuration](/home/local-deployment/configure/engine) for more information on how - to set environment variables and configure the Arcade Engine. + See [Engine configuration](/home/local-deployment/configure/engine) for more + information on how to set environment variables and configure the Arcade + Engine. ### Edit the Engine configuration @@ -197,9 +202,9 @@ const token = authResponse.context.token; ## Using Linear auth in custom tools -You can use the pre-built [Arcade Linear toolkit](/toolkits/productivity/linear) to quickly build agents and AI apps that interact with Linear. +You can use the pre-built [Arcade Linear MCP Server](/mcp-servers/productivity/linear) to quickly build agents and AI apps that interact with Linear. -If the pre-built tools in the Linear toolkit don't meet your needs, you can author your own [custom tools](/home/build-tools/create-a-toolkit) that interact with the Linear API. +If the pre-built tools in the Linear MCP Server don't meet your needs, you can author your own [custom tools](/home/build-tools/create-a-mcp-server) that interact with the Linear API. Use the `Linear()` auth class to specify that a tool requires authorization with Linear. The `context.authorization.token` field will be automatically populated with the user's Linear token: diff --git a/app/en/home/auth-providers/linkedin/page.mdx b/app/en/home/auth-providers/linkedin/page.mdx index cd396ee9c..9f9c765ad 100644 --- a/app/en/home/auth-providers/linkedin/page.mdx +++ b/app/en/home/auth-providers/linkedin/page.mdx @@ -16,7 +16,11 @@ This auth provider is used by: ## Configuring LinkedIn auth - When using your own app credentials, make sure you configure your project to use a [custom user verifier](/home/auth/secure-auth-production#build-a-custom-user-verifier). Without this, your end-users will not be able to use your app or agent in production. + When using your own app credentials, make sure you configure your project to + use a [custom user + verifier](/home/auth/secure-auth-production#build-a-custom-user-verifier). + Without this, your end-users will not be able to use your app or agent in + production. In a production environment, you will most likely want to use your own LinkedIn app credentials. This way, your users will see your application's name requesting permission. @@ -101,8 +105,9 @@ LINKEDIN_CLIENT_SECRET="" ``` - See [Engine configuration](/home/local-deployment/configure/engine) for more information on how - to set environment variables and configure the Arcade Engine. + See [Engine configuration](/home/local-deployment/configure/engine) for more + information on how to set environment variables and configure the Arcade + Engine. ### Edit the Engine configuration @@ -293,7 +298,7 @@ console.log(data); ## Using LinkedIn auth in custom tools -You can author your own [custom tools](/home/build-tools/create-a-toolkit) that interact with LinkedIn APIs. +You can author your own [custom tools](/home/build-tools/create-a-mcp-server) that interact with LinkedIn APIs. Use the `LinkedIn()` auth class to specify that a tool requires authorization with LinkedIn. The `context.authorization.token` field will be automatically populated with the user's LinkedIn token: diff --git a/app/en/home/auth-providers/microsoft/page.mdx b/app/en/home/auth-providers/microsoft/page.mdx index d3babfdc9..c018340ca 100644 --- a/app/en/home/auth-providers/microsoft/page.mdx +++ b/app/en/home/auth-providers/microsoft/page.mdx @@ -22,7 +22,11 @@ This auth provider is used by: ## Configuring Microsoft auth - When using your own app credentials, make sure you configure your project to use a [custom user verifier](/home/auth/secure-auth-production#build-a-custom-user-verifier). Without this, your end-users will not be able to use your app or agent in production. + When using your own app credentials, make sure you configure your project to + use a [custom user + verifier](/home/auth/secure-auth-production#build-a-custom-user-verifier). + Without this, your end-users will not be able to use your app or agent in + production. In a production environment, you will most likely want to use your own Microsoft app credentials. This way, your users will see your application's name requesting permission. @@ -34,22 +38,22 @@ Before showing how to configure your Microsoft app credentials, let's go through ### Create a Microsoft app - Follow Microsoft's guide to [registering an app with the Microsoft identity platform](https://learn.microsoft.com/en-us/entra/identity-platform/quickstart-register-app) -- Choose the permissions (scopes) you need for your app. Refer to the [section below](#arcade-microsoft-toolkits-scopes) for a list of scopes needed by the Arcade Microsoft Toolkits, in case you intend to use them. +- Choose the permissions (scopes) you need for your app. Refer to the [section below](#arcade-microsoft-MCP Servers-scopes) for a list of scopes needed by the Arcade Microsoft MCP Servers, in case you intend to use them. - Set the redirect URL to the redirect URL generated by Arcade (see below) - Copy the client ID and client secret to use below Next, add the Microsoft app to your Arcade Engine configuration. You can do this in the Arcade Dashboard, or by editing the `engine.yaml` file directly (for a self-hosted instance). -### Arcade Microsoft Toolkits Scopes +### Arcade Microsoft MCP Servers Scopes -Below is the list of scopes required by the Arcade Microsoft Toolkits: +Below is the list of scopes required by the Arcade Microsoft MCP Servers: -| Toolkit | Required Permissions | -|---------|---------------------| -| [Outlook Calendar](/toolkits/productivity/outlook-calendar) | `Calendars.ReadBasic`
`Calendars.ReadWrite`
`MailboxSettings.Read` | -| [Outlook Mail](/toolkits/productivity/outlook-mail) | `Mail.Read`
`Mail.ReadWrite`
`Mail.Send` | -| [Teams](/toolkits/social-communication/microsoft-teams) | `Channel.ReadBasic.All`
`ChannelMessage.Read.All`
`ChannelMessage.Send`
`Chat.Create`
`Chat.Read`
`ChatMessage.Read`
`ChatMessage.Send`
`People.Read`
`Team.ReadBasic.All`
`TeamMember.Read.All`
`User.Read` | -| [SharePoint](/toolkits/productivity/sharepoint) | `Sites.Read.All` | +| MCP Server | Required Permissions | +| -------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| [Outlook Calendar](/mcp-servers/productivity/outlook-calendar) | `Calendars.ReadBasic`
`Calendars.ReadWrite`
`MailboxSettings.Read` | +| [Outlook Mail](/mcp-servers/productivity/outlook-mail) | `Mail.Read`
`Mail.ReadWrite`
`Mail.Send` | +| [Teams](/mcp-servers/social-communication/microsoft-teams) | `Channel.ReadBasic.All`
`ChannelMessage.Read.All`
`ChannelMessage.Send`
`Chat.Create`
`Chat.Read`
`ChatMessage.Read`
`ChatMessage.Send`
`People.Read`
`Team.ReadBasic.All`
`TeamMember.Read.All`
`User.Read` | +| [SharePoint](/mcp-servers/productivity/sharepoint) | `Sites.Read.All` | ## Configuring your own Microsoft Auth Provider in Arcade @@ -117,8 +121,9 @@ MICROSOFT_CLIENT_SECRET="" ``` - See [Engine configuration](/home/local-deployment/configure/engine) for more information on how - to set environment variables and configure the Arcade Engine. + See [Engine configuration](/home/local-deployment/configure/engine) for more + information on how to set environment variables and configure the Arcade + Engine. ### Edit the Engine configuration @@ -210,7 +215,7 @@ const token = authResponse.context.token; ## Using Microsoft auth in custom tools -You can author your own [custom tools](/home/build-tools/create-a-toolkit) that interact with Microsoft Graph APIs. +You can author your own [custom tools](/home/build-tools/create-a-mcp-server) that interact with Microsoft Graph APIs. Use the `Microsoft()` auth class to specify that a tool requires authorization with Microsoft. The `context.authorization.token` field will be automatically populated with the user's Microsoft token: diff --git a/app/en/home/auth-providers/notion/page.mdx b/app/en/home/auth-providers/notion/page.mdx index cab216d1c..d8bf04900 100644 --- a/app/en/home/auth-providers/notion/page.mdx +++ b/app/en/home/auth-providers/notion/page.mdx @@ -16,7 +16,11 @@ This auth provider is used by: ## Configuring Notion auth - When using your own app credentials, make sure you configure your project to use a [custom user verifier](/home/auth/secure-auth-production#build-a-custom-user-verifier). Without this, your end-users will not be able to use your app or agent in production. + When using your own app credentials, make sure you configure your project to + use a [custom user + verifier](/home/auth/secure-auth-production#build-a-custom-user-verifier). + Without this, your end-users will not be able to use your app or agent in + production. In a production environment, you will most likely want to use your own Notion app credentials. This way, your users will see your application's name requesting permission. @@ -99,8 +103,9 @@ NOTION_CLIENT_SECRET="" ``` - See [Engine configuration](/home/local-deployment/configure/engine) for more information on how - to set environment variables and configure the Arcade Engine. + See [Engine configuration](/home/local-deployment/configure/engine) for more + information on how to set environment variables and configure the Arcade + Engine. ### Edit the Engine configuration @@ -189,9 +194,9 @@ const token = authResponse.context.token; ## Using Notion auth in custom tools -You can use the pre-built [Arcade Notion toolkit](/toolkits/productivity/notion) to quickly build agents and AI apps that interact with Notion. +You can use the pre-built [Arcade Notion MCP Server](/mcp-servers/productivity/notion) to quickly build agents and AI apps that interact with Notion. -If the pre-built tools in the Notion toolkit don't meet your needs, you can author your own [custom tools](/home/build-tools/create-a-toolkit) that interact with the Notion API. +If the pre-built tools in the Notion MCP Server don't meet your needs, you can author your own [custom tools](/home/build-tools/create-a-mcp-server) that interact with the Notion API. Use the `Notion()` auth class to specify that a tool requires authorization with Notion. The `context.authorization.token` field will be automatically populated with the user's Notion token: diff --git a/app/en/home/auth-providers/oauth2/page.mdx b/app/en/home/auth-providers/oauth2/page.mdx index 77fa87b71..0e74e7e0c 100644 --- a/app/en/home/auth-providers/oauth2/page.mdx +++ b/app/en/home/auth-providers/oauth2/page.mdx @@ -32,13 +32,20 @@ The only supported OAuth 2.0 flow is the authorization code grant flow (with or How you configure the OAuth 2.0 provider depends on whether you use the Arcade Cloud Engine or a [self-hosted Engine](/home/local-deployment/install/overview). If you use the Cloud Engine, you must configure your provider in the Dashboard. -When configuring your app in the OAuth 2.0 enabled service, you must use the redirect URL generated by Arcade (see below) as the redirect URL (sometimes called the redirect URI or callback URL). + When configuring your app in the OAuth 2.0 enabled service, you must use the + redirect URL generated by Arcade (see below) as the redirect URL (sometimes + called the redirect URI or callback URL). ### Using the Arcade Dashboard - When using the Arcade Cloud Platform, the Dashboard is available at [`https://api.arcade.dev/dashboard`](https://api.arcade.dev/dashboard). If you are [self-hosting Arcade](/home/local-deployment/install/overview), by default the Dashboard is available at [`http://localhost:9099/dashboard`](http://localhost:9099/dashboard). Adjust the host and port, if necessary, to match your environment. + When using the Arcade Cloud Platform, the Dashboard is available at + [`https://api.arcade.dev/dashboard`](https://api.arcade.dev/dashboard). If you + are [self-hosting Arcade](/home/local-deployment/install/overview), by default + the Dashboard is available at + [`http://localhost:9099/dashboard`](http://localhost:9099/dashboard). Adjust + the host and port, if necessary, to match your environment. 1. Navigate to the OAuth section of the Arcade Dashboard and click **Add OAuth Provider**. @@ -53,7 +60,8 @@ When you use tools that require OAuth 2.0 authorization using your Arcade accoun ### Using the `engine.yaml` configuration file -This method is only available when you are [self-hosting the engine](/home/local-deployment/install/overview) + This method is only available when you are [self-hosting the + engine](/home/local-deployment/install/overview) @@ -75,14 +83,18 @@ HOOLI_CLIENT_SECRET="" ``` - See [configuration](/home/local-deployment/configure/engine) for more information on how to set - environment variables and configure the Arcade Engine. + See [configuration](/home/local-deployment/configure/engine) for more + information on how to set environment variables and configure the Arcade + Engine. ### Edit the Engine configuration - To locate the `engine.yaml` file in your OS after installing the Arcade Engine, check the [Engine configuration file](/home/local-deployment/configure/overview#engine-configuration-file) documentation. + To locate the `engine.yaml` file in your OS after installing the Arcade + Engine, check the [Engine configuration + file](/home/local-deployment/configure/overview#engine-configuration-file) + documentation. Edit the `engine.yaml` file and add a new item to the `auth.providers` section: @@ -154,24 +166,24 @@ For most providers, `oauth2.authorize_request` will look like: ```yaml authorize_request: - endpoint: 'https://example.com/oauth2/authorize' + endpoint: "https://example.com/oauth2/authorize" params: response_type: code - client_id: '{{client_id}}' - redirect_uri: '{{redirect_uri}}' - scope: '{{scopes}} {{existing_scopes}}' + client_id: "{{client_id}}" + redirect_uri: "{{redirect_uri}}" + scope: "{{scopes}} {{existing_scopes}}" ``` Some providers support additional parameters in the authorization request. These can be added to `params` as well. For example: ```yaml authorize_request: - endpoint: 'https://example.com/oauth2/authorize' + endpoint: "https://example.com/oauth2/authorize" params: response_type: code - client_id: '{{client_id}}' - redirect_uri: '{{redirect_uri}}' - scope: '{{scopes}} {{existing_scopes}}' + client_id: "{{client_id}}" + redirect_uri: "{{redirect_uri}}" + scope: "{{scopes}} {{existing_scopes}}" prompt: consent access_type: offline ``` @@ -200,12 +212,12 @@ For most providers, `oauth2.token_request.params` will look like: ```yaml token_request: - endpoint: 'https://example.com/oauth2/token' + endpoint: "https://example.com/oauth2/token" params: grant_type: authorization_code - redirect_uri: '{{redirect_uri}}' - client_id: '{{client_id}}' - client_secret: '{{client_secret}}' # Omit if using PKCE + redirect_uri: "{{redirect_uri}}" + client_id: "{{client_id}}" + client_secret: "{{client_secret}}" # Omit if using PKCE ``` - `response_content_type` _(optional, default `application/json`)_: The expected content type of the response. Supported values are `application/json` and `application/x-www-form-urlencoded`. @@ -229,11 +241,11 @@ For most providers, `oauth2.refresh_request.params` will look like: ```yaml refresh_request: - endpoint: 'https://example.com/oauth2/token' + endpoint: "https://example.com/oauth2/token" params: grant_type: refresh_token - client_id: '{{client_id}}' - client_secret: '{{client_secret}}' + client_id: "{{client_id}}" + client_secret: "{{client_secret}}" ``` - `response_content_type` _(optional, default `application/json`)_: The expected content type of the response. Supported values are `application/json` and `application/x-www-form-urlencoded`. @@ -269,16 +281,16 @@ auth: oauth2: token_introspection_request: enabled: true - endpoint: 'https://example.oauth.com/services/oauth2/introspect' + endpoint: "https://example.oauth.com/services/oauth2/introspect" method: POST params: - token: '{{access_token}}' - auth_method: 'client_secret_basic' + token: "{{access_token}}" + auth_method: "client_secret_basic" request_content_type: application/x-www-form-urlencoded response_content_type: application/json response_map: - expires_in: '$.exp' - scope: '$.scope' + expires_in: "$.exp" + scope: "$.scope" expiration_format: absolute_unix_timestamp triggers: on_token_grant: true @@ -434,68 +446,68 @@ auth: client_secret: ${env:HOOLI_CLIENT_SECRET} oauth2: # For a custom OAuth 2.0 provider, specify the full OAuth configuration: - scope_delimiter: ' ' + scope_delimiter: " " pkce: # Optional enabled: true code_challenge_method: S256 authorize_request: - endpoint: 'https://example.com/oauth/authorize' + endpoint: "https://example.com/oauth/authorize" params: response_type: code - client_id: '{{client_id}}' - redirect_uri: '{{redirect_uri}}' - scope: '{{scopes}} {{existing_scopes}}' + client_id: "{{client_id}}" + redirect_uri: "{{redirect_uri}}" + scope: "{{scopes}} {{existing_scopes}}" token_request: - endpoint: 'https://example.com/oauth/token' + endpoint: "https://example.com/oauth/token" auth_method: client_secret_basic # Optional params: grant_type: authorization_code - client_id: '{{client_id}}' - client_secret: '{{client_secret}}' - redirect_uri: '{{redirect_uri}}' + client_id: "{{client_id}}" + client_secret: "{{client_secret}}" + redirect_uri: "{{redirect_uri}}" response_content_type: application/json # Optional response_map: # Optional - access_token: '$.access_token' - refresh_token: '$.refresh_token' - expires_in: '$.expires_in' - scope: '$.scope' - token_type: '$.token_type' + access_token: "$.access_token" + refresh_token: "$.refresh_token" + expires_in: "$.expires_in" + scope: "$.scope" + token_type: "$.token_type" refresh_request: # Optional - endpoint: 'https://example.com/oauth/token' + endpoint: "https://example.com/oauth/token" auth_method: client_secret_basic # Optional params: grant_type: refresh_token - client_id: '{{client_id}}' - client_secret: '{{client_secret}}' - refresh_token: '{{refresh_token}}' + client_id: "{{client_id}}" + client_secret: "{{client_secret}}" + refresh_token: "{{refresh_token}}" response_content_type: application/json # Optional response_map: # Optional - access_token: '$.access_token' - refresh_token: '$.refresh_token' - expires_in: '$.expires_in' - scope: '$.scope' - token_type: '$.token_type' + access_token: "$.access_token" + refresh_token: "$.refresh_token" + expires_in: "$.expires_in" + scope: "$.scope" + token_type: "$.token_type" token_introspection_request: # Optional - endpoint: 'https://example.com/oauth/introspect' + endpoint: "https://example.com/oauth/introspect" method: POST params: - token: '{{access_token}}' + token: "{{access_token}}" auth_method: client_secret_basic # Optional request_content_type: application/x-www-form-urlencoded # Optional response_content_type: application/json # Optional response_map: # Optional - expires_in: '$.data.expires_in' - scope: '$.data.scope' + expires_in: "$.data.expires_in" + scope: "$.data.scope" expiration_format: relative_seconds # or absolute_unix_timestamp triggers: on_token_grant: true on_token_refresh: true user_info_request: # Optional - endpoint: 'https://example.com/oauth/userinfo' + endpoint: "https://example.com/oauth/userinfo" auth_method: bearer_access_token response_content_type: application/json response_map: - custom_property: '$.data.custom_property' + custom_property: "$.data.custom_property" triggers: on_token_grant: true on_token_refresh: true @@ -573,7 +585,7 @@ const token = authResponse.context.token; ## Using OAuth 2.0 in custom tools -You can author your own [custom tools](/home/build-tools/create-a-toolkit) that interact with any OAuth 2.0-compatible APIs. +You can author your own [custom tools](/home/build-tools/create-a-mcp-server) that interact with any OAuth 2.0-compatible APIs. Use the `OAuth2()` auth class to specify that a tool requires OAuth 2.0 authorization. In your tool function, `context.authorization` will be automatically populated with the following properties: diff --git a/app/en/home/auth-providers/page.mdx b/app/en/home/auth-providers/page.mdx index 0268d135a..f0b870a9b 100644 --- a/app/en/home/auth-providers/page.mdx +++ b/app/en/home/auth-providers/page.mdx @@ -179,4 +179,4 @@ async def list_emails( This is similar to the pattern used in the generic OAuth2 provider, but instead of using the `OAuth2` class, you use the `Google` class and specify the `id` of the auth provider you want to use. -See the docs about [Authoring Tools](/home/build-tools/create-a-toolkit) for more information on how to create and serve a toolkit. +See the docs about [Authoring Tools](/home/build-tools/create-a-mcp-server) for more information on how to create and serve a MCP Server. diff --git a/app/en/home/auth-providers/reddit/page.mdx b/app/en/home/auth-providers/reddit/page.mdx index 5ae0b075d..9bacaf802 100644 --- a/app/en/home/auth-providers/reddit/page.mdx +++ b/app/en/home/auth-providers/reddit/page.mdx @@ -22,7 +22,11 @@ This auth provider is used by: ## Configuring Reddit auth - When using your own app credentials, make sure you configure your project to use a [custom user verifier](/home/auth/secure-auth-production#build-a-custom-user-verifier). Without this, your end-users will not be able to use your app or agent in production. + When using your own app credentials, make sure you configure your project to + use a [custom user + verifier](/home/auth/secure-auth-production#build-a-custom-user-verifier). + Without this, your end-users will not be able to use your app or agent in + production. In a production environment, you will most likely want to use your own Reddit app credentials. This way, your users will see your application's name requesting permission. @@ -110,8 +114,9 @@ REDDIT_CLIENT_ID="" ``` - See [Engine configuration](/home/local-deployment/configure/engine) for more information on how - to set environment variables and configure the Arcade Engine. + See [Engine configuration](/home/local-deployment/configure/engine) for more + information on how to set environment variables and configure the Arcade + Engine. ### Edit the Engine configuration @@ -203,7 +208,7 @@ const token = authResponse.context.token; ## Using Reddit auth in custom tools -You can author your own [custom tools](/home/build-tools/create-a-toolkit) that interact with the Reddit API. +You can author your own [custom tools](/home/build-tools/create-a-mcp-server) that interact with the Reddit API. Use the `Reddit()` auth class to specify that a tool requires authorization with Reddit. The `context.authorization.token` field will be automatically populated with the user's Reddit token: diff --git a/app/en/home/auth-providers/salesforce/page.mdx b/app/en/home/auth-providers/salesforce/page.mdx index 3dd62a101..2e28f321c 100644 --- a/app/en/home/auth-providers/salesforce/page.mdx +++ b/app/en/home/auth-providers/salesforce/page.mdx @@ -5,7 +5,13 @@ import { SignupLink } from "@/app/_components/analytics"; # Salesforce - At this time, Arcade does not offer a default Salesforce Auth Provider and cannot support Salesforce auth in the Arcade Cloud Platform. To use Salesforce auth, the [Salesforce toolkit](/toolkits/sales/salesforce), or to develop your [custom Salesforce tools](/home/build-tools/create-a-toolkit), you must [self-host the Arcade Engine](/home/local-deployment/install/local) and create a custom Auth Provider with your own Salesforce OAuth 2.0 credentials as described below. + At this time, Arcade does not offer a default Salesforce Auth Provider and + cannot support Salesforce auth in the Arcade Cloud Platform. To use Salesforce + auth, the [Salesforce MCP Server](/mcp-servers/sales/salesforce), or to develop + your [custom Salesforce tools](/home/build-tools/create-a-mcp-server), you + must [self-host the Arcade Engine](/home/local-deployment/install/local) and + create a custom Auth Provider with your own Salesforce OAuth 2.0 credentials + as described below. The Salesforce auth provider enables tools and agents to call Salesforce APIs on behalf of a user. Behind the scenes, the Arcade Engine and the Salesforce auth provider seamlessly manage Salesforce OAuth 2.0 authorization for your users. @@ -16,14 +22,18 @@ This page describes how to use and configure Salesforce auth with Arcade. This auth provider is used by: -- The [Arcade Salesforce toolkit](/toolkits/sales/salesforce), which provides pre-built tools for interacting with Salesforce services +- The [Arcade Salesforce MCP Server](/mcp-servers/sales/salesforce), which provides pre-built tools for interacting with Salesforce services - Your [app code](#calling-salesforce-apis-directly) that needs to call Salesforce APIs - Or, your [custom tools](#create-your-own-salesforce-tools) that need to call Salesforce APIs ## Create a Salesforce app - When using your own app credentials, make sure you configure your project to use a [custom user verifier](/home/auth/secure-auth-production#build-a-custom-user-verifier). Without this, your end-users will not be able to use your app or agent in production. + When using your own app credentials, make sure you configure your project to + use a [custom user + verifier](/home/auth/secure-auth-production#build-a-custom-user-verifier). + Without this, your end-users will not be able to use your app or agent in + production. Salesforce has two types of apps: **Connected App** and **Lightning App**. For this guide, we'll create a **Connected App**. Make sure to follow the instructions below while you [create your Connected App](https://help.salesforce.com/s/articleView?id=xcloud.connected_app_create.htm&type=5). @@ -80,12 +90,12 @@ export SALESFORCE_ORG_SUBDOMAIN={your-salesforce-subdomain} The Salesforce API requires the App developer to create [OAuth custom scopes](https://help.salesforce.com/s/articleView?id=xcloud.remoteaccess_oauth_customscopes.htm&type=5) defining granular permissions for their application users to authorize. -The custom scopes required by the [Arcade Salesforce toolkit](/toolkits/sales/salesforce) are listed below, along with their descriptions: +The custom scopes required by the [Arcade Salesforce MCP Server](/mcp-servers/sales/salesforce) are listed below, along with their descriptions: - The custom scopes listed below are only required if you are using the [Arcade Salesforce toolkit](/toolkits/sales/salesforce). + The custom scopes listed below are only required if you are using the [Arcade Salesforce MCP Server](/mcp-servers/sales/salesforce). -If you're creating your own [custom Salesforce tools](/home/build-tools/create-a-toolkit) or using Arcade to authorize users and call Salesforce APIs directly, you are free to define custom scope(s) that fit best your application use cases. Observe that you must have at least one custom scope assigned to your Salesforce app in order to use the Salesforce API. +If you're creating your own [custom Salesforce tools](/home/build-tools/create-a-mcp-server) or using Arcade to authorize users and call Salesforce APIs directly, you are free to define custom scope(s) that fit best your application use cases. Observe that you must have at least one custom scope assigned to your Salesforce app in order to use the Salesforce API. @@ -134,7 +144,7 @@ By default, the Arcade Dashboard will be available at http://localhost:9099/dash #### Enter the provider details -- Enter `salesforce` as the **ID** for your provider (the ID must be `salesforce` in order to use the [Arcade Salesforce toolkit](/toolkits/sales/salesforce)). +- Enter `salesforce` as the **ID** for your provider (the ID must be `salesforce` in order to use the [Arcade Salesforce MCP Server](/mcp-servers/sales/salesforce)). - Optionally enter a **Description**. - Enter your **Client ID** and **Client Secret** from your Salesforce app. - Note the **Redirect URL** generated by Arcade. This must be set as your Salesforce app's callback URL. @@ -228,7 +238,7 @@ Edit the `engine.yaml` file and add a Salesforce item to the `auth.providers` se The `id` must be set to `salesforce` in order to use the [Arcade Salesforce - toolkit](/toolkits/sales/salesforce). + MCP Server](/mcp-servers/sales/salesforce). @@ -247,38 +257,38 @@ auth: client_secret: ${env:SALESFORCE_CLIENT_SECRET} oauth2: authorize_request: - endpoint: 'https://salesforce-org-subdomain.my.salesforce.com/services/oauth2/authorize' + endpoint: "https://salesforce-org-subdomain.my.salesforce.com/services/oauth2/authorize" params: - client_id: '{{client_id}}' - redirect_uri: '{{redirect_uri}}' - scope: '{{scopes}}' + client_id: "{{client_id}}" + redirect_uri: "{{redirect_uri}}" + scope: "{{scopes}}" response_type: code token_request: - endpoint: 'https://salesforce-org-subdomain.my.salesforce.com/services/oauth2/token' + endpoint: "https://salesforce-org-subdomain.my.salesforce.com/services/oauth2/token" params: grant_type: authorization_code - client_id: '{{client_id}}' - client_secret: '{{client_secret}}' - redirect_uri: '{{redirect_uri}}' + client_id: "{{client_id}}" + client_secret: "{{client_secret}}" + redirect_uri: "{{redirect_uri}}" refresh_request: - endpoint: 'https://salesforce-org-subdomain.my.salesforce.com/services/oauth2/token' + endpoint: "https://salesforce-org-subdomain.my.salesforce.com/services/oauth2/token" params: grant_type: refresh_token - client_id: '{{client_id}}' - client_secret: '{{client_secret}}' - refresh_token: '{{refresh_token}}' + client_id: "{{client_id}}" + client_secret: "{{client_secret}}" + refresh_token: "{{refresh_token}}" token_introspection_request: enabled: false - endpoint: 'https://salesforce-org-subdomain.my.salesforce.com/services/oauth2/introspect' + endpoint: "https://salesforce-org-subdomain.my.salesforce.com/services/oauth2/introspect" method: POST params: - token: '{{access_token}}' - auth_method: 'client_secret_basic' + token: "{{access_token}}" + auth_method: "client_secret_basic" request_content_type: application/x-www-form-urlencoded response_content_type: application/json response_map: - expires_in: '$.exp' - scope: '$.scope' + expires_in: "$.exp" + scope: "$.scope" expiration_format: absolute_unix_timestamp triggers: on_token_grant: true @@ -308,11 +318,11 @@ If the Arcade Engine is already running, you will need to restart it for the cha -## Using the Arcade Salesforce Toolkit +## Using the Arcade Salesforce MCP Server -The [Arcade Salesforce toolkit](/toolkits/sales/salesforce) provides tools to interact with various Salesforce objects, such as accounts, contacts, leads, opportunities, notes, tasks, email messages, call logs, etc. +The [Arcade Salesforce MCP Server](/mcp-servers/sales/salesforce) provides tools to interact with various Salesforce objects, such as accounts, contacts, leads, opportunities, notes, tasks, email messages, call logs, etc. -Refer to the [toolkit documentation and examples](/toolkits/sales/salesforce) to learn how to use the toolkit to build agents and AI apps that interact with Salesforce services. +Refer to the [MCP Server documentation and examples](/mcp-servers/sales/salesforce) to learn how to use the MCP Server to build agents and AI apps that interact with Salesforce services. Check our introductory documentation to understand what are tools and how @@ -370,7 +380,7 @@ Here's a break down of each value: - **`salesforce_provider_id`**: the ID you entered when setting up the [Salesforce auth provider](#configuring-salesforce-auth); - **`salesforce_org_subdomain`**: your [Salesforce Org Subdomain](#get-your-salesforce-org-subdomain); - **`user_id`**: an internal identifier for your application user (it could be an email address, a username, UUID, etc); for demonstration purposes, in this example, enter your own email address; -- **`scopes`**: the list of scopes you want to request from the user; if you assigned the [custom scopes required by the Arcade Salesforce toolkit](#create-and-assign-custom-scopes-to-your-connected-app) use `["read_account"]` in this example. +- **`scopes`**: the list of scopes you want to request from the user; if you assigned the [custom scopes required by the Arcade Salesforce MCP Server](#create-and-assign-custom-scopes-to-your-connected-app) use `["read_account"]` in this example. ### Start the authorization process and wait for completion @@ -443,7 +453,7 @@ if not response.ok: import requests from arcadepy import Arcade -client = Arcade(base_url="http://localhost:9099") # Automatically finds the `ARCADE_API_KEY` env variable +client = Arcade(base_url="http://localhost:9099") # Automatically finds the `ARCADE_API_KEY` env variable salesforce_provider_id = "salesforce" salesforce_org_subdomain = "salesforce-org-subdomain" @@ -451,46 +461,50 @@ user_id = "{arcade_user_id}" scopes = ["read_account"] # Start the authorization process + auth_response = client.auth.start( - user_id=user_id, - provider=salesforce_provider_id, - scopes=scopes, +user_id=user_id, +provider=salesforce_provider_id, +scopes=scopes, ) if auth_response.status != "completed": - print("Please complete the authorization challenge in your browser:") - print(auth_response.url) +print("Please complete the authorization challenge in your browser:") +print(auth_response.url) # Wait for the authorization to complete + auth_response = client.auth.wait_for_completion(auth_response) token = auth_response.context.token if not token: - raise ValueError("No token found in auth response") +raise ValueError("No token found in auth response") # Use the Salesforce API + response = requests.post( - f"https://{salesforce_org_subdomain}.my.salesforce.com/services/data/v63.0/parameterizedSearch", - headers={"Authorization": f"Bearer {token}"}, - json={ - "q": "acme", - "sobjects": [ - {"name": "Account", "fields": ["Id", "Name", "Website", "Phone"]}, - ], - "in": "ALL", - "overallLimit": 10, - "offset": 0, - }, +f"https://{salesforce_org_subdomain}.my.salesforce.com/services/data/v63.0/parameterizedSearch", +headers={"Authorization": f"Bearer {token}"}, +json={ +"q": "acme", +"sobjects": [ +{"name": "Account", "fields": ["Id", "Name", "Website", "Phone"]}, +], +"in": "ALL", +"overallLimit": 10, +"offset": 0, +}, ) if not response.ok: - raise ValueError( - f"Failed to retrieve Salesforce data: {response.status_code} - {response.text}" - ) +raise ValueError( +f"Failed to retrieve Salesforce data: {response.status_code} - {response.text}" +) print(response.json()) -``` + +```` @@ -503,13 +517,15 @@ print(response.json()) ```javascript npm install @arcadeai/arcadejs -``` +```` ### Import necessary modules and instantiate the client Create a new script called `salesforce_example.js`. Import the necessary modules and instantiate the Arcade client: -Replace `http://localhost:9099` with the URL of your Arcade Engine. + + Replace `http://localhost:9099` with the URL of your Arcade Engine. + ```javascript import { Arcade } from "@arcadeai/arcadejs"; @@ -531,7 +547,7 @@ Here's a break down of each value: - **`salesforceProviderId`**: the ID you entered when setting up the [Salesforce auth provider](#configuring-salesforce-auth); - **`salesforceOrgSubdomain`**: your [Salesforce Org Subdomain](#get-your-salesforce-org-subdomain); - **`userId`**: an internal identifier for your application user (it could be an email address, a username, UUID, etc); for demonstration purposes, in this example, enter your own email address; -- **`scopes`**: the list of scopes you want to request from the user; if you assigned the [custom scopes required by the Arcade Salesforce toolkit](#create-and-assign-custom-scopes-to-your-connected-app) use `["read_account"]` in this example. +- **`scopes`**: the list of scopes you want to request from the user; if you assigned the [custom scopes required by the Arcade Salesforce MCP Server](#create-and-assign-custom-scopes-to-your-connected-app) use `["read_account"]` in this example. ### Start the authorization process and wait for completion @@ -622,55 +638,56 @@ const scopes = ["read_account"]; // Start the authorization process let authResponse = await client.auth.start(userId, { - provider: salesforceProviderId, - scopes: scopes, +provider: salesforceProviderId, +scopes: scopes, }); if (authResponse.status !== "completed") { - console.log("Please complete the authorization challenge in your browser:"); - console.log(authResponse.url); +console.log("Please complete the authorization challenge in your browser:"); +console.log(authResponse.url); } // Wait for the authorization to complete authResponse = await client.auth.waitForCompletion(authResponse); if (!authResponse.context.token) { - throw new Error("No token found in auth response"); +throw new Error("No token found in auth response"); } const token = authResponse.context.token; if (!token) { - throw new Error("No token found in auth response"); +throw new Error("No token found in auth response"); } // Use the Salesforce API const response = await fetch( - `https://${salesforceOrgSubdomain}.my.salesforce.com/services/data/v63.0/parameterizedSearch`, - { - headers: { - Authorization: `Bearer ${token}`, - }, - method: "POST", - body: JSON.stringify({ - q: "acme", - sobjects: [ - { name: "Account", fields: ["Id", "Name", "Website", "Phone"] }, - ], - in: "ALL", - overallLimit: 10, - offset: 0, - }), - }, +`https://${salesforceOrgSubdomain}.my.salesforce.com/services/data/v63.0/parameterizedSearch`, +{ +headers: { +Authorization: `Bearer ${token}`, +}, +method: "POST", +body: JSON.stringify({ +q: "acme", +sobjects: [ +{ name: "Account", fields: ["Id", "Name", "Website", "Phone"] }, +], +in: "ALL", +overallLimit: 10, +offset: 0, +}), +}, ); if (!response.ok) { - throw new Error( - `HTTP error! status: ${response.status} - ${await response.text()}`, - ); +throw new Error( +`HTTP error! status: ${response.status} - ${await response.text()}`, +); } console.log(await response.json()); + ``` @@ -681,6 +698,7 @@ console.log(await response.json()); ## Create your own Salesforce Tools -If the pre-built tools in the [Arcade Salesforce toolkit](/toolkits/sales/salesforce) don't meet your needs, you can create your own [custom tools](/home/build-tools/create-a-toolkit) that interact with the Salesforce APIs. +If the pre-built tools in the [Arcade Salesforce MCP Server](/mcp-servers/sales/salesforce) don't meet your needs, you can create your own [custom tools](/home/build-tools/create-a-mcp-server) that interact with the Salesforce APIs. -The code implemented in the Arcade Salesforce tools is the best guide for you to understand how to implement your own. Check the [Contact](https://github.com/ArcadeAI/arcade-ai/blob/main/toolkits/salesforce/arcade_salesforce/tools/crm/contact.py) and [Account](https://github.com/ArcadeAI/arcade-ai/blob/main/toolkits/salesforce/arcade_salesforce/tools/crm/account.py) tools in our public Github repository. +The code implemented in the Arcade Salesforce tools is the best guide for you to understand how to implement your own. Check the [Contact](https://github.com/ArcadeAI/arcade-ai/blob/main/mcp-servers/salesforce/arcade_salesforce/tools/crm/contact.py) and [Account](https://github.com/ArcadeAI/arcade-ai/blob/main/mcp-servers/salesforce/arcade_salesforce/tools/crm/account.py) tools in our public Github repository. +``` diff --git a/app/en/home/auth-providers/slack/page.mdx b/app/en/home/auth-providers/slack/page.mdx index fc6ee8dc9..39cf0bb5b 100644 --- a/app/en/home/auth-providers/slack/page.mdx +++ b/app/en/home/auth-providers/slack/page.mdx @@ -6,7 +6,8 @@ The Slack auth provider enables tools and agents to call [Slack APIs](https://ap Want to quickly get started with Slack in your agent or AI app? The pre-built - [Arcade Slack toolkit](/toolkits/social-communication/slack) is what you want! + [Arcade Slack MCP Server](/mcp-servers/social-communication/slack) is what you + want! ### What's documented here @@ -15,14 +16,18 @@ This page describes how to use and configure Slack auth with Arcade. This auth provider is used by: -- The [Arcade Slack toolkit](/toolkits/social-communication/slack), which provides pre-built tools for interacting with Slack +- The [Arcade Slack MCP Server](/mcp-servers/social-communication/slack), which provides pre-built tools for interacting with Slack - Your [app code](#using-slack-auth-in-app-code) that needs to call the Slack API - Or, your [custom tools](#using-slack-auth-in-custom-tools) that need to call the Slack API ## Configuring Slack auth - When using your own app credentials, make sure you configure your project to use a [custom user verifier](/home/auth/secure-auth-production#build-a-custom-user-verifier). Without this, your end-users will not be able to use your app or agent in production. + When using your own app credentials, make sure you configure your project to + use a [custom user + verifier](/home/auth/secure-auth-production#build-a-custom-user-verifier). + Without this, your end-users will not be able to use your app or agent in + production. In a production environment, you will most likely want to use your own Slack app credentials. This way, your users will see your application's name requesting permission. @@ -36,11 +41,12 @@ Before showing how to configure your Slack app credentials, let's go through the In May 29, 2025, [Slack announced](https://api.slack.com/changelog/2025-05-terms-rate-limit-update-and-faq) changes to their API rate-limits and terms of service for apps that are not approved for the Slack Marketplace. - The `conversations.history` and `conversations.replies` endpoints are now limited to 1 request/minute and up to 15 objects returned per request. This affects various tools in the [Arcade Slack toolkit](/toolkits/social-communication/slack). Additionally, the [API Terms of Service](https://slack.com/terms-of-service/api) now requires [Slack Marketplace](https://api.slack.com/slack-marketplace/using) approval for commercial distribution. +The `conversations.history` and `conversations.replies` endpoints are now limited to 1 request/minute and up to 15 objects returned per request. This affects various tools in the [Arcade Slack MCP Server](/mcp-servers/social-communication/slack). Additionally, the [API Terms of Service](https://slack.com/terms-of-service/api) now requires [Slack Marketplace](https://api.slack.com/slack-marketplace/using) approval for commercial distribution. + - Follow Slack's guide to [registering a Slack app](https://api.slack.com/quickstart) -- If you plan to use the [Arcade Slack toolkit](/toolkits/social-communication/slack), select the scopes below (include additional scopes for your application's authorization needs or custom tools, in any): +- If you plan to use the [Arcade Slack MCP Server](/mcp-servers/social-communication/slack), select the scopes below (include additional scopes for your application's authorization needs or custom tools, in any): - `channels:history` - `channels:read` - `chat:write` @@ -126,8 +132,9 @@ SLACK_CLIENT_SECRET="" ``` - See [Engine configuration](/home/local-deployment/configure/engine) for more information on how - to set environment variables and configure the Arcade Engine. + See [Engine configuration](/home/local-deployment/configure/engine) for more + information on how to set environment variables and configure the Arcade + Engine. ### Edit the Engine configuration @@ -224,9 +231,9 @@ const token = authResponse.context.token; ## Using Slack auth in custom tools -You can use the pre-built [Arcade Slack toolkit](/toolkits/social-communication/slack) to quickly build agents and AI apps that interact with Slack. +You can use the pre-built [Arcade Slack MCP Server](/mcp-servers/social-communication/slack) to quickly build agents and AI apps that interact with Slack. -If the pre-built tools in the Slack toolkit don't meet your needs, you can author your own [custom tools](/home/build-tools/create-a-toolkit) that interact with the Slack API. +If the pre-built tools in the Slack MCP Server don't meet your needs, you can author your own [custom tools](/home/build-tools/create-a-mcp-server) that interact with the Slack API. Use the `Slack()` auth class to specify that a tool requires authorization with Slack. The `context.authorization.token` field will be automatically populated with the user's Slack token: diff --git a/app/en/home/auth-providers/spotify/page.mdx b/app/en/home/auth-providers/spotify/page.mdx index 8806f2190..ba7247859 100644 --- a/app/en/home/auth-providers/spotify/page.mdx +++ b/app/en/home/auth-providers/spotify/page.mdx @@ -22,7 +22,11 @@ This auth provider is used by: ## Configuring Spotify auth - When using your own app credentials, make sure you configure your project to use a [custom user verifier](/home/auth/secure-auth-production#build-a-custom-user-verifier). Without this, your end-users will not be able to use your app or agent in production. + When using your own app credentials, make sure you configure your project to + use a [custom user + verifier](/home/auth/secure-auth-production#build-a-custom-user-verifier). + Without this, your end-users will not be able to use your app or agent in + production. In a production environment, you will most likely want to use your own Spotify app credentials. This way, your users will see your application's name requesting permission. @@ -106,8 +110,9 @@ SPOTIFY_CLIENT_SECRET="" ``` - See [Engine configuration](/home/local-deployment/configure/engine) for more information on how - to set environment variables and configure the Arcade Engine. + See [Engine configuration](/home/local-deployment/configure/engine) for more + information on how to set environment variables and configure the Arcade + Engine. ### Edit the Engine configuration @@ -199,7 +204,7 @@ const token = authResponse.context.token; ## Using Spotify auth in custom tools -You can author your own [custom tools](/home/build-tools/create-a-toolkit) that interact with the Spotify API. +You can author your own [custom tools](/home/build-tools/create-a-mcp-server) that interact with the Spotify API. Use the `Spotify()` auth class to specify that a tool requires authorization with Spotify. The `context.authorization.token` field will be automatically populated with the user's Spotify token: diff --git a/app/en/home/auth-providers/twitch/page.mdx b/app/en/home/auth-providers/twitch/page.mdx index 4a924e92d..df6ac8063 100644 --- a/app/en/home/auth-providers/twitch/page.mdx +++ b/app/en/home/auth-providers/twitch/page.mdx @@ -22,7 +22,11 @@ This auth provider is used by: ## Configuring Twitch auth - When using your own app credentials, make sure you configure your project to use a [custom user verifier](/home/auth/secure-auth-production#build-a-custom-user-verifier). Without this, your end-users will not be able to use your app or agent in production. + When using your own app credentials, make sure you configure your project to + use a [custom user + verifier](/home/auth/secure-auth-production#build-a-custom-user-verifier). + Without this, your end-users will not be able to use your app or agent in + production. In a production environment, you will most likely want to use your own Twitch app credentials. This way, your users will see your application's name requesting permission. @@ -113,8 +117,9 @@ TWITCH_CLIENT_ID="" ``` - See [Engine configuration](/home/local-deployment/configure/engine) for more information on how - to set environment variables and configure the Arcade Engine. + See [Engine configuration](/home/local-deployment/configure/engine) for more + information on how to set environment variables and configure the Arcade + Engine. ### Edit the Engine configuration @@ -206,7 +211,7 @@ const token = authResponse.context.token; ## Using Twitch auth in custom tools -You can author your own [custom tools](/home/build-tools/create-a-toolkit) that interact with the Twitch API. +You can author your own [custom tools](/home/build-tools/create-a-mcp-server) that interact with the Twitch API. Use the `Twitch()` auth class to specify that a tool requires authorization with Twitch. The `context.authorization.token` field will be automatically populated with the user's Twitch token: diff --git a/app/en/home/auth-providers/x/page.mdx b/app/en/home/auth-providers/x/page.mdx index cdd1b8efc..798cdc0b4 100644 --- a/app/en/home/auth-providers/x/page.mdx +++ b/app/en/home/auth-providers/x/page.mdx @@ -6,7 +6,7 @@ The X auth provider enables tools and agents to call the X (Twitter) API on beha Want to quickly get started with X services in your agent or AI app? The - pre-built [Arcade X toolkit](/toolkits/social-communication/x) is what you + pre-built [Arcade X MCP Server](/mcp-servers/social-communication/x) is what you want! @@ -16,14 +16,18 @@ This page describes how to use and configure X auth with Arcade. This auth provider is used by: -- The [Arcade X toolkit](/toolkits/social-communication/x), which provides pre-built tools for interacting with X +- The [Arcade X MCP Server](/mcp-servers/social-communication/x), which provides pre-built tools for interacting with X - Your [app code](#using-x-auth-in-app-code) that needs to call X APIs - Or, your [custom tools](#using-x-auth-in-custom-tools) that need to call X APIs ## Configuring X auth - When using your own app credentials, make sure you configure your project to use a [custom user verifier](/home/auth/secure-auth-production#build-a-custom-user-verifier). Without this, your end-users will not be able to use your app or agent in production. + When using your own app credentials, make sure you configure your project to + use a [custom user + verifier](/home/auth/secure-auth-production#build-a-custom-user-verifier). + Without this, your end-users will not be able to use your app or agent in + production. In a production environment, you will most likely want to use your own X app credentials. This way, your users will see your application's name requesting permission. @@ -107,8 +111,9 @@ X_CLIENT_SECRET="" ``` - See [Engine configuration](/home/local-deployment/configure/engine) for more information on how - to set environment variables and configure the Arcade Engine. + See [Engine configuration](/home/local-deployment/configure/engine) for more + information on how to set environment variables and configure the Arcade + Engine. ### Edit the Engine configuration @@ -202,9 +207,9 @@ const token = authResponse.context.token; ## Using X auth in custom tools -You can use the pre-built [Arcade X toolkit](/toolkits/social-communication/x) to quickly build agents and AI apps that interact with X. +You can use the pre-built [Arcade X MCP Server](/mcp-servers/social-communication/x) to quickly build agents and AI apps that interact with X. -If the pre-built tools in the X toolkit don't meet your needs, you can author your own [custom tools](/home/build-tools/create-a-toolkit) that interact with the X API. +If the pre-built tools in the X MCP Server don't meet your needs, you can author your own [custom tools](/home/build-tools/create-a-mcp-server) that interact with the X API. Use the `X()` auth class to specify that a tool requires authorization with X. The `context.authorization.token` field will be automatically populated with the user's X token: diff --git a/app/en/home/auth-providers/zendesk/page.mdx b/app/en/home/auth-providers/zendesk/page.mdx index e569c9d36..424b9a38e 100644 --- a/app/en/home/auth-providers/zendesk/page.mdx +++ b/app/en/home/auth-providers/zendesk/page.mdx @@ -17,14 +17,18 @@ This page describes how to use and configure Zendesk auth with Arcade. This auth provider is used by: -- The [Arcade Zendesk toolkit](/toolkits/customer-support/zendesk), which provides pre-built tools for interacting with Zendesk services +- The [Arcade Zendesk MCP Server](/mcp-servers/customer-support/zendesk), which provides pre-built tools for interacting with Zendesk services - Your [app code](#using-zendesk-auth-in-app-code) that needs to call Zendesk APIs - Or, your [custom tools](#using-zendesk-auth-in-custom-tools) that need to call Zendesk APIs ## Create a Zendesk app - When using your own app credentials, make sure you configure your project to use a [custom user verifier](/home/auth/secure-auth-production#build-a-custom-user-verifier). Without this, your end-users will not be able to use your app or agent in production. + When using your own app credentials, make sure you configure your project to + use a [custom user + verifier](/home/auth/secure-auth-production#build-a-custom-user-verifier). + Without this, your end-users will not be able to use your app or agent in + production. ### Additional guides @@ -40,9 +44,9 @@ The following three guides from Zendesk will be helpful additional information a 1. Create your Organization in the [Zendesk Marketplace portal](https://apps.zendesk.com/). 1. Create a Zendesk support account at https://www.zendesk.com/login . If you need a global OAuth client, then the subdomain MUST begin with "d3v-". You will need a global OAuth client if your app will use integrations/tools for multiple customers with their own Zendesk instances (multiple subdomains). 1. In [the Admin Center](https://support.zendesk.com/hc/en-us/articles/4581766374554#topic_hfg_dyz_1hb), click "Apps and integrations" in the sidebar, then select APIs > OAuth clients > Add OAuth client. - * Ensure your identifier is prefixed with "zdg-" if you will need a global OAuth client. - * Select "Public" for "Client kind". - * Use the redirect URL generated by Arcade (see below) as your "Redirect URL". + - Ensure your identifier is prefixed with "zdg-" if you will need a global OAuth client. + - Select "Public" for "Client kind". + - Use the redirect URL generated by Arcade (see below) as your "Redirect URL". 1. Copy and store your identifier for later. This will be your **Client ID**. 1. Copy and store your generated secret for later. This will be your **Client Secret**. 1. (Only for Global OAuth client) Request a global OAuth client. @@ -160,41 +164,41 @@ auth: type: oauth2 client_id: ${env:ZENDESK_CLIENT_ID} oauth2: - scope_delimiter: ' ' + scope_delimiter: " " pkce: enabled: true code_challenge_method: S256 authorize_request: - endpoint: 'https://.zendesk.com/oauth/authorizations/new' + endpoint: "https://.zendesk.com/oauth/authorizations/new" params: - client_id: '{{client_id}}' - redirect_uri: '{{redirect_uri}}' - scope: '{{scopes}} {{existing_scopes}}' + client_id: "{{client_id}}" + redirect_uri: "{{redirect_uri}}" + scope: "{{scopes}} {{existing_scopes}}" response_type: code token_request: - endpoint: 'https://.zendesk.com/oauth/tokens' + endpoint: "https://.zendesk.com/oauth/tokens" params: grant_type: authorization_code - client_id: '{{client_id}}' - redirect_uri: '{{redirect_uri}}' + client_id: "{{client_id}}" + redirect_uri: "{{redirect_uri}}" response_content_type: application/json response_map: - access_token: '$.access_token' - refresh_token: '$.refresh_token' - expires_in: '$.expires_in' - scope: '$.scope' + access_token: "$.access_token" + refresh_token: "$.refresh_token" + expires_in: "$.expires_in" + scope: "$.scope" refresh_request: - endpoint: 'https://.zendesk.com/oauth/tokens' + endpoint: "https://.zendesk.com/oauth/tokens" params: grant_type: refresh_token - refresh_token: '{{refresh_token}}' - client_id: '{{client_id}}' + refresh_token: "{{refresh_token}}" + client_id: "{{client_id}}" response_content_type: application/json response_map: - access_token: '$.access_token' - refresh_token: '$.refresh_token' - expires_in: '$.expires_in' - scope: '$.scope' + access_token: "$.access_token" + refresh_token: "$.refresh_token" + expires_in: "$.expires_in" + scope: "$.scope" ``` #### Restart the Arcade Engine @@ -275,7 +279,7 @@ const token = authResponse.context.token; ## Using Zendesk auth in custom tools -If the [Arcade Zendesk toolkit](/toolkits/customer-support/zendesk) does not meet your needs, you can author your own [custom tools](/home/build-tools/create-a-toolkit) that interact with Zendesk APIs. +If the [Arcade Zendesk MCP Server](/mcp-servers/customer-support/zendesk) does not meet your needs, you can author your own [custom tools](/home/build-tools/create-a-mcp-server) that interact with Zendesk APIs. Use the `OAuth2()` auth class to specify that a tool requires authorization with Zendesk. The `context.authorization.token` field will be automatically populated with the user's Zendesk token: diff --git a/app/en/home/auth-providers/zoom/page.mdx b/app/en/home/auth-providers/zoom/page.mdx index 50600eb6a..fb10bed14 100644 --- a/app/en/home/auth-providers/zoom/page.mdx +++ b/app/en/home/auth-providers/zoom/page.mdx @@ -22,7 +22,11 @@ This auth provider is used by: ## Configuring Zoom auth - When using your own app credentials, make sure you configure your project to use a [custom user verifier](/home/auth/secure-auth-production#build-a-custom-user-verifier). Without this, your end-users will not be able to use your app or agent in production. + When using your own app credentials, make sure you configure your project to + use a [custom user + verifier](/home/auth/secure-auth-production#build-a-custom-user-verifier). + Without this, your end-users will not be able to use your app or agent in + production. In a production environment, you will most likely want to use your own Zoom app credentials. This way, your users will see your application's name requesting permission. @@ -106,8 +110,9 @@ ZOOM_CLIENT_SECRET="" ``` - See [Engine configuration](/home/local-deployment/configure/engine) for more information on how - to set environment variables and configure the Arcade Engine. + See [Engine configuration](/home/local-deployment/configure/engine) for more + information on how to set environment variables and configure the Arcade + Engine. ### Edit the Engine configuration @@ -199,7 +204,7 @@ const token = authResponse.context.token; ## Using Zoom auth in custom tools -You can author your own [custom tools](/home/build-tools/create-a-toolkit) that interact with the Zoom API. +You can author your own [custom tools](/home/build-tools/create-a-mcp-server) that interact with the Zoom API. Use the `Zoom()` auth class to specify that a tool requires authorization with Zoom. The `context.authorization.token` field will be automatically populated with the user's Zoom token: diff --git a/app/en/home/auth/auth-tool-calling/page.mdx b/app/en/home/auth/auth-tool-calling/page.mdx index 245ac03b2..2143e4714 100644 --- a/app/en/home/auth/auth-tool-calling/page.mdx +++ b/app/en/home/auth/auth-tool-calling/page.mdx @@ -29,14 +29,15 @@ Import the Arcade client in a Python/Javascript script. The client automatically from arcadepy import Arcade client = Arcade() # Automatically finds the `ARCADE_API_KEY` env variable -``` + +```` ```js import Arcade from "@arcadeai/arcadejs"; const client = new Arcade(); // Automatically finds the `ARCADE_API_KEY` env variable -``` +```` @@ -74,14 +75,15 @@ const userId = "{arcade_user_id}"; // Request access to the user's Gmail account const authResponse = await client.tools.authorize({ - tool_name: "Gmail.ListEmails", - user_id: userId, +tool_name: "Gmail.ListEmails", +user_id: userId, }); if (authResponse.status !== "completed") { - console.log(`Click this link to authorize: ${authResponse.url}`); +console.log(`Click this link to authorize: ${authResponse.url}`); } -``` + +```` @@ -121,7 +123,7 @@ emails_response = client.tools.execute( user_id=USER_ID, ) print(emails_response) -``` +```` @@ -156,6 +158,6 @@ These APIs give you programmatic control over tool calling. ### Next steps -Arcade also allows you to [build your own tools](/home/build-tools/create-a-toolkit) to integrate any custom functionality or API to your Agent or AI workflows. +Arcade also allows you to [build your own tools](/home/build-tools/create-a-mcp-server) to integrate any custom functionality or API to your Agent or AI workflows. Your tools can use the [service providers supported by Arcade](/home/auth-providers) or you can integrate with any [OAuth2-compatible service](/home/auth-providers/oauth2). diff --git a/app/en/home/auth/call-third-party-apis-directly/page.mdx b/app/en/home/auth/call-third-party-apis-directly/page.mdx index 1d0d82171..fbc3d8c23 100644 --- a/app/en/home/auth/call-third-party-apis-directly/page.mdx +++ b/app/en/home/auth/call-third-party-apis-directly/page.mdx @@ -26,16 +26,8 @@ This can be useful when you need to manage authorization flows in your applicati ### Install required libraries - - ```bash - pip install arcadepy google-api-python-client google-auth-httplib2 google-auth-oauthlib - ``` - - - ```bash - npm install @arcadeai/arcadejs googleapis - ``` - + ```bash pip install arcadepy google-api-python-client google-auth-httplib2 google-auth-oauthlib ``` + ```bash npm install @arcadeai/arcadejs googleapis ``` ### Start coding @@ -91,12 +83,14 @@ Use `client.auth.start()` to initiate the authorization process: user_id = "{arcade_user_id}" # Start the authorization process + auth_response = client.auth.start( - user_id=user_id, - provider="google", - scopes=["https://www.googleapis.com/auth/gmail.readonly"], +user_id=user_id, +provider="google", +scopes=["https://www.googleapis.com/auth/gmail.readonly"], ) -``` + +```` ```javascript @@ -109,7 +103,7 @@ const user_id = "{arcade_user_id}"; let auth_response = await client.auth.start(user_id, "google", { scopes: ["https://www.googleapis.com/auth/gmail.readonly"], }); -``` +```` @@ -166,11 +160,12 @@ credentials = Credentials(auth_response.context.token) gmail = build("gmail", "v1", credentials=credentials) email_messages = ( - gmail.users().messages().list(userId="me").execute().get("messages", []) +gmail.users().messages().list(userId="me").execute().get("messages", []) ) print(email_messages) -``` + +```` ```javascript @@ -185,7 +180,7 @@ const response = await gmail.users.messages.list({ const email_messages = response.data.messages || []; console.log(email_messages); -``` +```` @@ -193,16 +188,8 @@ console.log(email_messages); ### Execute the code - - ```python - python3 direct_api_call.py - ``` - - - ```javascript - node direct_api_call.js - ``` - + ```python python3 direct_api_call.py ``` + ```javascript node direct_api_call.js ``` You should see an output similar to this:, which is a list of the email messages returned by the Gmail API: @@ -215,12 +202,7 @@ For each item in the list/array, you could use the [`users.messages.get`](https:
- - Consider using the [Arcade Gmail toolkit](/toolkits/productivity/gmail), which - simplifies the process for retrieving email messages even further! The pattern - described here is useful if you need to directly get a token to use with - Google in other parts of your codebase. - +Consider using the [Arcade Gmail MCP Server](/mcp-servers/productivity/gmail), which simplifies the process for retrieving email messages even further! The pattern described here is useful if you need to directly get a token to use with Google in other parts of your codebase. ### How it works diff --git a/app/en/home/auth/how-arcade-helps.mdx b/app/en/home/auth/how-arcade-helps.mdx index fc4971451..12ea2984f 100644 --- a/app/en/home/auth/how-arcade-helps.mdx +++ b/app/en/home/auth/how-arcade-helps.mdx @@ -2,6 +2,7 @@ title: "How Arcade helps" description: "Learn how Arcade helps with auth and tool calling" --- + import { Tabs } from "nextra/components"; # How Arcade helps with Agent Authorization @@ -28,7 +29,7 @@ With Arcade, developers can now create agents that can _act as the end users of ### Auth permissions and scopes -Each tool in Arcade's toolkits has a set of required permissions - or, more commonly referred to in OAuth2, **scopes**. For example, the [`Gmail.SendEmail`](/toolkits/productivity/gmail#gmailsendemail) tool requires the [`https://www.googleapis.com/auth/gmail.send`](https://developers.google.com/identity/protocols/oauth2/scopes#gmail) scope. +Each tool in Arcade's MCP Servers has a set of required permissions - or, more commonly referred to in OAuth2, **scopes**. For example, the [`Gmail.SendEmail`](/mcp-servers/productivity/gmail#gmailsendemail) tool requires the [`https://www.googleapis.com/auth/gmail.send`](https://developers.google.com/identity/protocols/oauth2/scopes#gmail) scope. A scope is what the user has authorized someone else (in this case, the AI agent) to do on their behalf. In any OAuth2-compatible service, each kind of action requires a different set of permissions. This gives the user fine-grained control over what data third-party services can access and what actions can be executed in their accounts. @@ -38,25 +39,26 @@ When a tool is called, the Arcade Engine will check if the user has granted the To learn how Arcade allows for actions (tools) to be authorized through OAuth2 and how to implement it, check out [Authorized Tool Calling](/home/auth/auth-tool-calling). - ### Tools that don't require authorization -Some tools, like [`GoogleSearch.Search`](/toolkits/search/google_search#googlesearchsearch), allow AI agents to retrieve information or perform actions without needing user-specific authorization. +Some tools, like [`GoogleSearch.Search`](/mcp-servers/search/google_search#googlesearchsearch), allow AI agents to retrieve information or perform actions without needing user-specific authorization. ```python from arcadepy import Arcade -client = Arcade(api_key="arcade_api_key") # or set the ARCADE_API_KEY env var +client = Arcade(api_key="arcade_api_key") # or set the ARCADE_API_KEY env var # Use the GoogleSearch.Searchtool to perform a web search + response = await client.tools.execute( - tool_name="GoogleSearch.Search", - input={"query": "Latest AI advancements"}, +tool_name="GoogleSearch.Search", +input={"query": "Latest AI advancements"}, ) print(response.output.value) -``` + +```` ```javascript @@ -70,6 +72,7 @@ const response = await client.tools.execute({ input: { query: "Latest AI advancements" }, }); console.log(response.output.value); -``` +```` + diff --git a/app/en/home/auth/how-arcade-helps/page.mdx b/app/en/home/auth/how-arcade-helps/page.mdx index 1cd3be8f1..d6d63cd69 100644 --- a/app/en/home/auth/how-arcade-helps/page.mdx +++ b/app/en/home/auth/how-arcade-helps/page.mdx @@ -2,6 +2,7 @@ title: "How Arcade helps" description: "Learn how Arcade helps with auth and tool calling" --- + import { Tabs } from "nextra/components"; # How Arcade helps with Agent Authorization @@ -28,7 +29,7 @@ With Arcade, developers can now create agents that can _act as the end users of ### Auth permissions and scopes -Each tool in Arcade's toolkits has a set of required permissions - or, more commonly referred to in OAuth2, **scopes**. For example, the [`Gmail.SendEmail`](/toolkits/productivity/gmail#gmailsendemail) tool requires the [`https://www.googleapis.com/auth/gmail.send`](https://developers.google.com/identity/protocols/oauth2/scopes#gmail) scope. +Each tool in Arcade's MCP Servers has a set of required permissions - or, more commonly referred to in OAuth2, **scopes**. For example, the [`Gmail.SendEmail`](/mcp-servers/productivity/gmail#gmailsendemail) tool requires the [`https://www.googleapis.com/auth/gmail.send`](https://developers.google.com/identity/protocols/oauth2/scopes#gmail) scope. A scope is what the user has authorized someone else (in this case, the AI agent) to do on their behalf. In any OAuth2-compatible service, each kind of action requires a different set of permissions. This gives the user fine-grained control over what data third-party services can access and what actions can be executed in their accounts. @@ -38,25 +39,26 @@ When a tool is called, the Arcade Engine will check if the user has granted the To learn how Arcade allows for actions (tools) to be authorized through OAuth2 and how to implement it, check out [Authorized Tool Calling](/home/auth/auth-tool-calling). - ### Tools that don't require authorization -Some tools, like [`GoogleSearch.Search`](/toolkits/search/google_search#googlesearchsearch), allow AI agents to retrieve information or perform actions without needing user-specific authorization. +Some tools, like [`GoogleSearch.Search`](/mcp-servers/search/google_search#googlesearchsearch), allow AI agents to retrieve information or perform actions without needing user-specific authorization. ```python from arcadepy import Arcade -client = Arcade(api_key="arcade_api_key") # or set the ARCADE_API_KEY env var +client = Arcade(api_key="arcade_api_key") # or set the ARCADE_API_KEY env var # Use the GoogleSearch.Searchtool to perform a web search + response = await client.tools.execute( - tool_name="GoogleSearch.Search", - input={"query": "Latest AI advancements"}, +tool_name="GoogleSearch.Search", +input={"query": "Latest AI advancements"}, ) print(response.output.value) -``` + +```` ```javascript @@ -70,9 +72,7 @@ const response = await client.tools.execute({ input: { query: "Latest AI advancements" }, }); console.log(response.output.value); -``` +```` + - - - diff --git a/app/en/home/build-tools/_meta.tsx b/app/en/home/build-tools/_meta.tsx index 652428e73..59934927e 100644 --- a/app/en/home/build-tools/_meta.tsx +++ b/app/en/home/build-tools/_meta.tsx @@ -1,5 +1,5 @@ export default { - "create-a-toolkit": "Create a toolkit", + "create-a-mcp-server": "Create a MCP Server", "tool-context": "Tool Context", "create-a-tool-with-auth": "Create a tool with auth", "create-a-tool-with-secrets": "Create a tool with secrets", diff --git a/app/en/home/build-tools/create-a-toolkit/page.mdx b/app/en/home/build-tools/create-a-mcp-server/page.mdx similarity index 72% rename from app/en/home/build-tools/create-a-toolkit/page.mdx rename to app/en/home/build-tools/create-a-mcp-server/page.mdx index c6a96799f..a1f22fa7d 100644 --- a/app/en/home/build-tools/create-a-toolkit/page.mdx +++ b/app/en/home/build-tools/create-a-mcp-server/page.mdx @@ -1,23 +1,32 @@ --- -title: "Creating a Toolkit" -description: "Learn how to create, test, deploy, and publish a custom toolkit for Arcade" +title: "Creating a MCP Server" +description: "Learn how to create, test, deploy, and publish a custom MCP Server for Arcade" --- import { Steps, Tabs, Callout } from "nextra/components"; -# Creating a Toolkit +# Creating a MCP Server
- This guide walks you through the complete process of creating a custom toolkit for Arcade - from initial setup to publishing on PyPI. You'll build a simple arithmetic toolkit with operations like addition, subtraction, and multiplication. When creating or extending an Arcade toolkit, we make it easy to develop the tool alongside your agent, providing a pleasant local development experience. As your agent will be loading its available tools from the Arcade Engine, you can mix existing tools and your locally developed tool by following this guide. You'll be running your local worker with the Arcade CLI and registering it with the Engine so that your agent can find and use your tool. + This guide walks you through the complete process of creating a custom MCP + Server for Arcade - from initial setup to publishing on PyPI. You'll build a + simple arithmetic MCP Server with operations like addition, subtraction, and + multiplication. When creating or extending an Arcade MCP Server, we make it + easy to develop the tool alongside your agent, providing a pleasant local + development experience. As your agent will be loading its available tools + from the Arcade Engine, you can mix existing tools and your locally + developed tool by following this guide. You'll be running your local worker + with the Arcade CLI and registering it with the Engine so that your agent + can find and use your tool.
+ className="aspect-video w-full max-w-[900px] rounded-xl shadow-2xl" + src="https://www.youtube.com/embed/q2V_P35KYCg?si=CYhKw-eYx1O98O9K" + title="Create a MCP Server" + allow="fullscreen; accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" + referrerPolicy="strict-origin-when-cross-origin" + >
## Prerequisites @@ -29,20 +38,21 @@ Before starting, make sure you have: -## Generate a toolkit template +## Generate a MCP Server template -Run the following command to start creating your toolkit: +Run the following command to start creating your MCP Server: ```bash uv tool run --from arcade-ai arcade new arithmetic ``` Enter the optional information when prompted: -- **Description**: Provide a brief explanation of what your toolkit will do + +- **Description**: Provide a brief explanation of what your MCP Server will do - **Author GitHub username and email**: Your contact information - **Generate test and evaluation directories**: Whether you want additional directories created for you -After completion, a directory with your toolkit name (arithmetic) will be created with the following structure: +After completion, a directory with your MCP Server name (arithmetic) will be created with the following structure: ``` arithmetic/ @@ -61,7 +71,7 @@ arithmetic/ └── Makefile # uv helper commands ``` -Navigate to your toolkit directory: +Navigate to your MCP Server directory: ```bash cd arithmetic @@ -70,6 +80,7 @@ cd arithmetic ## Set up the development environment An active virtual environment for your shell(s) is required to run the local development commands. + ```bash uv venv --seed -p 3.13 ``` @@ -80,9 +91,10 @@ Install dependencies and pre-commit hooks: make install ``` -This installs all dependencies specified in `pyproject.toml`, pre-commit hooks for code quality, and your toolkit in development mode. +This installs all dependencies specified in `pyproject.toml`, pre-commit hooks for code quality, and your MCP Server in development mode. The Makefile provides several helpful commands: + - `build` - Build wheel file using uv - `bump-version` - Bump the version in the pyproject.toml file by a patch version - `check` - Run code quality tools @@ -92,8 +104,8 @@ The Makefile provides several helpful commands: - `install-local` - Install Arcade components (CLI, TDK, etc.) from source in editable mode. Only use this when you are developing against the latest unreleased code from the [arcade-ai repo](https://github.com/ArcadeAI/arcade-ai) main branch instead of the published packages - `test` - Test the code with pytest - Activate the environment with: + ```bash source .venv/bin/activate ``` @@ -108,7 +120,7 @@ uv run Create a Python file for your tools in the `arcade_arithmetic/tools` directory. -The following example shows a simple math toolkit with three tools: `add`, `subtract`, and `multiply`: +The following example shows a simple math MCP Server with three tools: `add`, `subtract`, and `multiply`: ```python # arcade_arithmetic/tools/operations.py @@ -176,7 +188,7 @@ from arcade_arithmetic.tools import add, multiply, subtract __all__ = ["add", "multiply", "subtract"] ``` -## Test your toolkit +## Test your MCP Server Write tests for your tools in the `tests` directory: @@ -223,23 +235,23 @@ make coverage ## Verify local installation -Your toolkit should already be installed locally from the `make install` command. Verify it's properly registered: +Your MCP Server should already be installed locally from the `make install` command. Verify it's properly registered: ```bash arcade show --local ``` -You should see your toolkit listed in the output. +You should see your MCP Server listed in the output. ## Test your tools locally -Serve your toolkit locally with the Arcade CLI: +Serve your MCP Server locally with the Arcade CLI: ```bash arcade serve ``` -You can use the `--reload` flag to automatically reload the server when you make changes to your toolkit: +You can use the `--reload` flag to automatically reload the server when you make changes to your MCP Server: ```bash arcade serve --reload @@ -247,7 +259,7 @@ arcade serve --reload Visit http://localhost:8002/worker/health to see that your worker is running. -## Connect your toolkit to the Arcade Engine +## Connect your MCP Server to the Arcade Engine In another terminal, use a service like [ngrok](https://ngrok.com/docs/), [tailscale](https://tailscale.com/kb/1223/funnel), or [cloudflare](https://developers.cloudflare.com/cloudflare-one/connections/connect-networks/do-more-with-tunnels/local-management/create-local-tunnel/) to give your local worker a public URL. @@ -283,20 +295,20 @@ Then in your Arcade dashboard: 1. Navigate to the [Workers](https://api.arcade.dev/dashboard/workers) page. 1. Click **Add Worker**. 1. Fill in the form with the following values: - - **ID**: `my-arithmetic-worker` - - **Worker Type**: `Arcade` - - **URL**: your public URL from ngrok, tailscale, or cloudflare - - **Secret**: `dev` - - **Timeout** and **Retry**: can be left at default values + - **ID**: `my-arithmetic-worker` + - **Worker Type**: `Arcade` + - **URL**: your public URL from ngrok, tailscale, or cloudflare + - **Secret**: `dev` + - **Timeout** and **Retry**: can be left at default values 1. Click **Create**. Now, in the [Playground](https://api.arcade.dev/dashboard/playground), you can see your tools in action. -## Deploy your toolkit to the Arcade Engine +## Deploy your MCP Server to the Arcade Engine -Alternatively, you can deploy your toolkit to Arcade's cloud instead of tunneling to it locally. +Alternatively, you can deploy your MCP Server to Arcade's cloud instead of tunneling to it locally. -Find the `worker.toml` file in your toolkit's root directory (where you ran `uv tool run --from arcade-ai arcade new arithmetic`): +Find the `worker.toml` file in your MCP Server's root directory (where you ran `uv tool run --from arcade-ai arcade new arithmetic`): ```toml [[worker]] @@ -308,13 +320,15 @@ timeout = 30 retries = 3 secret = "" # This is randomly generated for you by `uv tool run --from arcade-ai arcade new arithmetic` [worker.local_source] -packages = ["./arithmetic"] # Path to your toolkit directory +packages = ["./arithmetic"] # Path to your MCP Server directory ``` + See [Configuring Arcade Deploy](/home/local-deployment/configure/configuring-arcade-deploy) for more configuration options. -From the root of your toolkit, deploy your toolkit to Arcade's cloud with: +From the root of your MCP Server, deploy your MCP Server to Arcade's cloud with: This may take a while your first time. + ```bash arcade deploy ``` @@ -335,12 +349,11 @@ make clean-build If you're updating an existing package, bump the version: - ```bash make bump-version ``` -Create a comprehensive README.md file that explains your toolkit's purpose, installation, and usage. +Create a comprehensive README.md file that explains your MCP Server's purpose, installation, and usage. Build your package: @@ -356,9 +369,9 @@ uv publish --token YOUR_PYPI_TOKEN_HERE -## Using your published toolkit +## Using your published MCP Server -Now that your toolkit is published, you can use it in any Arcade application: +Now that your MCP Server is published, you can use it in any Arcade application: ```python from arcadepy import Arcade @@ -378,9 +391,9 @@ response = client.tools.execute( print(response.output.value) ``` -## Ongoing toolkit maintenance +## Ongoing MCP Server maintenance -As you continue to develop your toolkit, use these Makefile commands to maintain it: +As you continue to develop your MCP Server, use these Makefile commands to maintain it: - `make check` - Run code quality checks before committing changes - `make test` - Run tests to ensure your changes don't break existing functionality @@ -391,7 +404,7 @@ As you continue to develop your toolkit, use these Makefile commands to maintain ## Next steps -- **Add more tools**: Expand your toolkit with more complex operations +- **Add more tools**: Expand your MCP Server with more complex operations - **Add authentication**: [Learn how to create tools with authentication](/home/build-tools/create-a-tool-with-auth) - **Add secrets**: [Learn how to create tools with secrets](/home/build-tools/create-a-tool-with-secrets) - **Evaluate your tools**: [Explore how to evaluate tool performance](/home/evaluate-tools/why-evaluate-tools) diff --git a/app/en/home/build-tools/create-a-tool-with-secrets/page.mdx b/app/en/home/build-tools/create-a-tool-with-secrets/page.mdx index f39fae35a..ef06d83c6 100644 --- a/app/en/home/build-tools/create-a-tool-with-secrets/page.mdx +++ b/app/en/home/build-tools/create-a-tool-with-secrets/page.mdx @@ -16,10 +16,9 @@ Secrets are sensitive strings like passwords, api-keys, or other tokens that gra ### Prerequisites - [Set up Arcade](/home/quickstart) -- [Create a toolkit](/home/build-tools/create-a-toolkit) +- [Create a MCP Server](/home/build-tools/create-a-mcp-server) - [Understand Tool Context](/home/build-tools/tool-context) - ### Set the secret in the Arcade Dashboard Go to the [Auth > Secrets section](https://api.arcade.dev/dashboard/auth/secrets) in the Arcade Dashboard. @@ -34,7 +33,6 @@ In the top-right corner, click the **+ Add Secret** button and enter: Click **Submit** to save the secret. - ### Define your tool and access the secret Use the `@tool` decorator to define the secret requirement. The `context` object has a `get_secret` method that you can use to access the secret value. diff --git a/app/en/home/build-tools/handle-tool-errors/page.mdx b/app/en/home/build-tools/handle-tool-errors/page.mdx index 7b98280f1..cffa3c8bb 100644 --- a/app/en/home/build-tools/handle-tool-errors/page.mdx +++ b/app/en/home/build-tools/handle-tool-errors/page.mdx @@ -19,7 +19,7 @@ Arcade uses a structured error hierarchy to categorize different types of errors ``` ToolkitError # (Abstract base class) -β”œβ”€β”€ ToolkitLoadError # Occurs during toolkit import +β”œβ”€β”€ ToolkitLoadError # Occurs during MCP Server import └── ToolError # (Abstract) β”œβ”€β”€ ToolDefinitionError # Detected when tool is added to catalog β”‚ β”œβ”€β”€ ToolInputSchemaError # Invalid input parameter types/annotations diff --git a/app/en/home/changelog/page.mdx b/app/en/home/changelog/page.mdx index 2ed1f2341..7ec61ef91 100644 --- a/app/en/home/changelog/page.mdx +++ b/app/en/home/changelog/page.mdx @@ -7,279 +7,326 @@ import { Callout } from "nextra/components"; # Changelog -*Here's what's new at Arcade.dev!* +_Here's what's new at Arcade.dev!_ -## For the week ending on 2025-09-26 +## 2025-09-26 **Toolkits** -* `[feature - πŸš€]` Introduce [Starter Tools](https://docs.arcade.dev/home/use-tools/types-of-tools), a new type of tool that mirrors the original HTTP API design of the upstream service. -* `[feature - πŸš€]` Release Slack started toolkit which contains support for most of the Slack API. -* `[feature - πŸš€]` Include advanced error handling in the following toolkits: Google, Microsoft, Slack, and Asana. Learn more about handling tool errors [here](https://docs.arcade.dev/home/build-tools/handle-tool-errorsk). -* `[bugfix - πŸ›]` [toolkits/MS Teams] Fix get_chat_metadata by chat's users -* `[feature - πŸš€]` [toolkits/confluence] Adding WhoAmI tools for Confluence + +- `[feature - πŸš€]` Introduce [Starter Tools](https://docs.arcade.dev/home/use-tools/types-of-tools), a new type of tool that mirrors the original HTTP API design of the upstream service. +- `[feature - πŸš€]` Release Slack started MCP Server which contains support for most of the Slack API. +- `[feature - πŸš€]` Include advanced error handling in the following MCP Servers: Google, Microsoft, Slack, and Asana. Learn more about handling tool errors [here](https://docs.arcade.dev/home/build-tools/handle-tool-errorsk). +- `[bugfix - πŸ›]` [MCP Servers/MS Teams] Fix get_chat_metadata by chat's users +- `[feature - πŸš€]` [MCP Servers/confluence] Adding WhoAmI tools for Confluence **CLI and TDK** -* `[bugfix - πŸ›]` Fix reference in `arcade docs` Python example template to USER_ID instead of TOOL_NAME + +- `[bugfix - πŸ›]` Fix reference in `arcade docs` Python example template to USER_ID instead of TOOL_NAME **Misc** -* `[documentation - πŸ“]` Documents API wrapper vs LLM-native toolkits; includes Slack API wrapper toolkit docs +- `[documentation - πŸ“]` Documents API wrapper vs LLM-native MCP Servers; includes Slack API wrapper MCP Server docs -## For the week ending on 2025-09-19 +## 2025-09-19 **Toolkits** -* `[feature - πŸš€]` [Toolkits/ClickUp] Removing no content additional messages in Evals -* `[feature - πŸš€]` [Toolkits/MongoDB] Add analytics MongoDB toolkit ([PR #548](https://github.com/ArcadeAI/arcade-ai/pull/548)) -* `[feature - πŸš€]` [toolkits/HubSpot] Adding HubSpot toolkit enhancements ([PR #441](https://github.com/ArcadeAI/docs/pull/441)) + +- `[feature - πŸš€]` [Toolkits/ClickUp] Removing no content additional messages in Evals +- `[feature - πŸš€]` [Toolkits/MongoDB] Add analytics MongoDB MCP Server ([PR #548](https://github.com/ArcadeAI/arcade-ai/pull/548)) +- `[feature - πŸš€]` [MCP Servers/HubSpot] Adding HubSpot MCP Server enhancements ([PR #441](https://github.com/ArcadeAI/docs/pull/441)) **CLI and TDK** -* `[maintenance - πŸ”§]` Update Mastra example toolkit project + +- `[maintenance - πŸ”§]` Update Mastra example MCP Server project **Misc** -* `[documentation - πŸ“]` Term consistency ([PR #445](https://github.com/ArcadeAI/docs/pull/445)) -* `[documentation - πŸ“]` Update Tool Error Handling ([PR #438](https://github.com/ArcadeAI/docs/pull/438)) -* `[maintenance - πŸ”§]` Update Mastra example docs to better match the example repo ([PR #444](https://github.com/ArcadeAI/docs/pull/444)) +- `[documentation - πŸ“]` Term consistency ([PR #445](https://github.com/ArcadeAI/docs/pull/445)) +- `[documentation - πŸ“]` Update Tool Error Handling ([PR #438](https://github.com/ArcadeAI/docs/pull/438)) +- `[maintenance - πŸ”§]` Update Mastra example docs to better match the example repo ([PR #444](https://github.com/ArcadeAI/docs/pull/444)) -## For the week ending on 2025-09-12 +## 2025-09-12 **CLI and TDK** -* `[feature - πŸš€]` Added support for multiple types of errors from tools, and updated client libraries to aid in disambiguating rate-limiting and other forms of upstream errors ([Docs](https://github.com/ArcadeAI/docs/pull/438/files)). Added in v1.10.0 in `aracde-js`, v1.8.0 in `aracde-py`, and v0.1.0-alpha.6 in `aracde-go`. -* `[maintenance - πŸ”§]`Update langchain version for Arcade integrations + +- `[feature - πŸš€]` Added support for multiple types of errors from tools, and updated client libraries to aid in disambiguating rate-limiting and other forms of upstream errors ([Docs](https://github.com/ArcadeAI/docs/pull/438/files)). Added in v1.10.0 in `aracde-js`, v1.8.0 in `aracde-py`, and v0.1.0-alpha.6 in `aracde-go`. +- `[maintenance - πŸ”§]`Update langchain version for Arcade integrations **Toolkits** -* `[feature - πŸš€]` Google Calendar improvements to video call scheduling ([Docs](https://github.com/ArcadeAI/docs/pull/436)) -* `[feature - πŸš€]` [toolkits/Jira] Added `WhoAmI` tool to Jira, Google, Clickup, Slack, and Zendesk toolkits ([Docs](https://github.com/ArcadeAI/docs/pull/426)) +- `[feature - πŸš€]` Google Calendar improvements to video call scheduling ([Docs](https://github.com/ArcadeAI/docs/pull/436)) +- `[feature - πŸš€]` [MCP Servers/Jira] Added `WhoAmI` tool to Jira, Google, Clickup, Slack, and Zendesk MCP Servers ([Docs](https://github.com/ArcadeAI/docs/pull/426)) **Platform and Engine** -* `[bugfix - πŸ›]` Engine: Fix rate limiting algorithm -* `[feature - πŸš€]` Engine: Improve Tool Error Handling + +- `[bugfix - πŸ›]` Engine: Fix rate limiting algorithm +- `[feature - πŸš€]` Engine: Improve Tool Error Handling **Misc** -* `[documentation - πŸ“]` Add a FAQ for requesting over-scoped permissions for Google Drive and similar tools ([docs PR #440](https://github.com/ArcadeAI/docs/pull/440)) +- `[documentation - πŸ“]` Add a FAQ for requesting over-scoped permissions for Google Drive and similar tools ([docs PR #440](https://github.com/ArcadeAI/docs/pull/440)) -## For the week ending on 2025-09-05 +## 2025-09-05 **Toolkits** -* `[feature - πŸš€]` Imgflip toolkit: tools for memes ([docs PR #424](https://github.com/ArcadeAI/docs/pull/424)) -* `[feature - πŸš€]` Edit Google Document Tool ([docs PR #427](https://github.com/ArcadeAI/docs/pull/427)) -* `[bugfix - πŸ›]` [Toolkits/clickup] fix fuzzy match search + +- `[feature - πŸš€]` Imgflip MCP Server: tools for memes ([docs PR #424](https://github.com/ArcadeAI/docs/pull/424)) +- `[feature - πŸš€]` Edit Google Document Tool ([docs PR #427](https://github.com/ArcadeAI/docs/pull/427)) +- `[bugfix - πŸ›]` [Toolkits/clickup] fix fuzzy match search **Platform and Engine** -* `[maintenance - πŸ”§]` Engine: updated stainless to generate SDK specs -* `[feature - πŸš€]` Dashboard: New sidebar and user-verification page & prepare for project-based resources + +- `[maintenance - πŸ”§]` Engine: updated stainless to generate SDK specs +- `[feature - πŸš€]` Dashboard: New sidebar and user-verification page & prepare for project-based resources **CLI and TDK** -* `[maintenance - πŸ”§]` upgraded langchain_arcade ([PR #546](https://github.com/ArcadeAI/arcade-ai/pull/546)) + +- `[maintenance - πŸ”§]` upgraded langchain_arcade ([PR #546](https://github.com/ArcadeAI/arcade-ai/pull/546)) **Misc** -* `[documentation - πŸ“]` Adding ClickUp documentation ([PR #413](https://github.com/ArcadeAI/docs/pull/413)) -* `[documentation - πŸ“]` updated instructions on GH OAuth customization ([PR #425](https://github.com/ArcadeAI/docs/pull/425)) +- `[documentation - πŸ“]` Adding ClickUp documentation ([PR #413](https://github.com/ArcadeAI/docs/pull/413)) +- `[documentation - πŸ“]` updated instructions on GH OAuth customization ([PR #425](https://github.com/ArcadeAI/docs/pull/425)) -## For the week ending on 2025-08-29 +## 2025-08-29 **Toolkits** -* `[feature - πŸš€]` Re-add GoogleNews toolkit + +- `[feature - πŸš€]` Re-add GoogleNews MCP Server **Platform and Engine** -* `[feature - πŸš€]` Dashboard: Update toolkit and tool selection UI in playground -* `[feature - πŸš€]` Dashboard: Add toolkits and OAuth providers from the design system -* `[feature - πŸš€]` Dashboard: Add optional request parameters when adding OAuth providers + +- `[feature - πŸš€]` Dashboard: Update MCP Server and tool selection UI in playground +- `[feature - πŸš€]` Dashboard: Add MCP Servers and OAuth providers from the design system +- `[feature - πŸš€]` Dashboard: Add optional request parameters when adding OAuth providers **CLI and TDK** -* `[feature - πŸš€]` Improve Typedict and Basemodel support ([PR #523](https://github.com/ArcadeAI/arcade-ai/pull/523)) + +- `[feature - πŸš€]` Improve Typedict and Basemodel support ([PR #523](https://github.com/ArcadeAI/arcade-ai/pull/523)) **Misc** -* `[documentation - πŸ“]` Add ClickUp auth provider documentation ([PR #404](https://github.com/ArcadeAI/docs/pull/404)) -* `[documentation - πŸ“]` Fix glossary: change 'Authentication Scope' to 'Authorization Scope' ([PR #419](https://github.com/ArcadeAI/docs/pull/419)) -* `[documentation - πŸ“]` Added missing parameter to the usage example templates ([PR #537](https://github.com/ArcadeAI/arcade-ai/pull/537)) +- `[documentation - πŸ“]` Add ClickUp auth provider documentation ([PR #404](https://github.com/ArcadeAI/docs/pull/404)) +- `[documentation - πŸ“]` Fix glossary: change 'Authentication Scope' to 'Authorization Scope' ([PR #419](https://github.com/ArcadeAI/docs/pull/419)) +- `[documentation - πŸ“]` Added missing parameter to the usage example templates ([PR #537](https://github.com/ArcadeAI/arcade-ai/pull/537)) -## For the week ending on 2025-08-22 +## 2025-08-22 - This week we released a new pricing model for Arcade which will be better for hobbyists and enterprises alike. Learn more here: [https://blog.arcade.dev/pricing-updates](https://blog.arcade.dev/pricing-updates) + This week we released a new pricing model for Arcade which will be better for + hobbyists and enterprises alike. Learn more here: + [https://blog.arcade.dev/pricing-updates](https://blog.arcade.dev/pricing-updates) **Toolkits** -* `[feature - πŸš€]` [X (Twitter)] Reply to Tweet ([PR #415](https://github.com/ArcadeAI/docs/pull/415)) -* `[feature - πŸš€]` [Jira Toolkit] Add "Add To Sprint" and "Remove from Sprint" tools ([PR #412](https://github.com/ArcadeAI/docs/pull/412)) -* `[bugfix - πŸ›]` [Google Drive, Docs, Sheets, Slides Toolkits] Remove file picker url from tool response + +- `[feature - πŸš€]` [X (Twitter)] Reply to Tweet ([PR #415](https://github.com/ArcadeAI/docs/pull/415)) +- `[feature - πŸš€]` [Jira Toolkit] Add "Add To Sprint" and "Remove from Sprint" tools ([PR #412](https://github.com/ArcadeAI/docs/pull/412)) +- `[bugfix - πŸ›]` [Google Drive, Docs, Sheets, Slides Toolkits] Remove file picker url from tool response **Platform and Engine** -* `[feature - πŸš€]` Arcade Cloud: New pricing model -* `[feature - πŸš€]` Authenticate communication between Engine and Coordinator via key exchange -* `[feature - πŸš€]` Engine: Add additional redis cert check options -## For the week ending on 2025-08-15 +- `[feature - πŸš€]` Arcade Cloud: New pricing model +- `[feature - πŸš€]` Authenticate communication between Engine and Coordinator via key exchange +- `[feature - πŸš€]` Engine: Add additional redis cert check options + +## 2025-08-15 - This week we enforced a new requirement for all OAuth providers: they must have a unique callback URL. This is a minor security change, but does require you to update your OAuth configuration. This can be updated from the dashboard. + This week we enforced a new requirement for all OAuth providers: they must + have a unique callback URL. This is a minor security change, but does require + you to update your OAuth configuration. This can be updated from the + dashboard. **Toolkits** -* `[feature - πŸš€]` Sharepoint Toolkit added ([docs](https://docs.arcade.dev/toolkits/productivity/sharepoint)) -* `[feature - πŸš€]` Google Slides Toolkit added -* `[feature - πŸš€]` Commenting on Google Docs added -* `[bugfix - πŸ›]` Improvements in Microsoft Teams message search tool for better agentic experience. Fix bug when no messages match the search query. -* `[bugfix - πŸ›]` Fix bugs in Google Workspace search tools + +- `[feature - πŸš€]` Sharepoint Toolkit added ([docs](https://docs.arcade.dev/mcp-servers/productivity/sharepoint)) +- `[feature - πŸš€]` Google Slides Toolkit added +- `[feature - πŸš€]` Commenting on Google Docs added +- `[bugfix - πŸ›]` Improvements in Microsoft Teams message search tool for better agentic experience. Fix bug when no messages match the search query. +- `[bugfix - πŸ›]` Fix bugs in Google Workspace search tools **Platform and Engine** -* `[feature - πŸš€]` Custom OAuth providers now require a unique callback URL -* `[bugfix - πŸ›]` Engine: Resolve dynamic provider IDs when checking auth status -* `[bugfix - πŸ›]` Engine: Refresh token when checking the status of a completed request -**Misc** -* `[documentation - πŸ“]` Document Microsoft scopes required by Arcade toolkits ([PR #409](https://github.com/ArcadeAI/docs/pull/409)) -* `[documentation - πŸ“]` Microsoft SharePoint toolkit documentation ([PR #400](https://github.com/ArcadeAI/docs/pull/400)) +- `[feature - πŸš€]` Custom OAuth providers now require a unique callback URL +- `[bugfix - πŸ›]` Engine: Resolve dynamic provider IDs when checking auth status +- `[bugfix - πŸ›]` Engine: Refresh token when checking the status of a completed request +**Misc** +- `[documentation - πŸ“]` Document Microsoft scopes required by Arcade MCP Servers ([PR #409](https://github.com/ArcadeAI/docs/pull/409)) +- `[documentation - πŸ“]` Microsoft SharePoint MCP Server documentation ([PR #400](https://github.com/ArcadeAI/docs/pull/400)) -## For the week ending on 2025-08-08 +## 2025-08-08 **Toolkits** -* `[feature - πŸš€]` Clickhouse Toolkit ([PR #527](https://github.com/ArcadeAI/arcade-ai/pull/527)) -* `[feature - πŸš€]` Add search to Google Drive -* `[bugfix - πŸ›]` Fix and docstring improvement in MS Teams toolkit + +- `[feature - πŸš€]` Clickhouse Toolkit ([PR #527](https://github.com/ArcadeAI/arcade-ai/pull/527)) +- `[feature - πŸš€]` Add search to Google Drive +- `[bugfix - πŸ›]` Fix and docstring improvement in MS Teams MCP Server **Platform and Engine** -* `[feature - πŸš€]` Add support for GPT-5 models -* `[feature - πŸš€]` Per-app redirect URI info +- `[feature - πŸš€]` Add support for GPT-5 models +- `[feature - πŸš€]` Per-app redirect URI info -## For the week ending on 2025-08-01 +## 2025-08-01 **Toolkits** -* `[feature - πŸš€]` Microsoft Teams toolkit added -* `[feature - πŸš€]` Jira Toolkit: Add List Sprints & Boards tools -* `[feature - πŸš€]` Google Sheets toolkit: Add pagination to GetSpreadsheet -* `[bugfix - πŸ›]` Jira toolkit: Return UI URL for items again -* `[feature - πŸš€]` Salesforce toolkit: Configure subdomain & max concurrency through secrets -* `[feature - πŸš€]` Confluence toolkit supports Atlassian multi-cloud + +- `[feature - πŸš€]` Microsoft Teams MCP Server added +- `[feature - πŸš€]` Jira Toolkit: Add List Sprints & Boards tools +- `[feature - πŸš€]` Google Sheets MCP Server: Add pagination to GetSpreadsheet +- `[bugfix - πŸ›]` Jira MCP Server: Return UI URL for items again +- `[feature - πŸš€]` Salesforce MCP Server: Configure subdomain & max concurrency through secrets +- `[feature - πŸš€]` Confluence MCP Server supports Atlassian multi-cloud **CLI and TDK** -* `[bugfix - πŸ›]` Fixes for the CLI docs generator ([PR #524](https://github.com/ArcadeAI/arcade-ai/pull/524)) -* `[feature - πŸš€]` CLI: Rename auto-docs command to 'docs' and other improvements ([PR #518](https://github.com/ArcadeAI/arcade-ai/pull/518)) -## For the week ending on 2025-07-25 +- `[bugfix - πŸ›]` Fixes for the CLI docs generator ([PR #524](https://github.com/ArcadeAI/arcade-ai/pull/524)) +- `[feature - πŸš€]` CLI: Rename auto-docs command to 'docs' and other improvements ([PR #518](https://github.com/ArcadeAI/arcade-ai/pull/518)) + +## 2025-07-25 - Most Arcade toolkits have been removed from the `github.com/ArcadeAI/arcade-ai` repository, and transitioned to closed-source. Toolkit source code remains available upon request for our paying customers. This enables us to iterate more quickly and provide a better experience for our customers. The previously open-sourced toolkits are still available in the public repository's git history. + Most Arcade MCP Servers have been removed from the + `github.com/ArcadeAI/arcade-ai` repository, and transitioned to closed-source. + Toolkit source code remains available upon request for our paying customers. + This enables us to iterate more quickly and provide a better experience for + our customers. The previously open-sourced MCP Servers are still available in the + public repository's git history. **Toolkits** -* `[feature - πŸš€]` Support for multiple Atlassian Clouds in the Jira Toolkit ([PR #506](https://github.com/ArcadeAI/arcade-ai/pull/506)) + +- `[feature - πŸš€]` Support for multiple Atlassian Clouds in the Jira Toolkit ([PR #506](https://github.com/ArcadeAI/arcade-ai/pull/506)) **CLI and TDK** -* `[bugfix - πŸ›]` Fix `arcade worker list` endpoints ([PR #504](https://github.com/ArcadeAI/arcade-ai/pull/504)) -* `[feature - πŸš€]` Support Tool Output in ValueSchema of ToolDefinition ([PR #487](https://github.com/ArcadeAI/arcade-ai/pull/487)) + +- `[bugfix - πŸ›]` Fix `arcade worker list` endpoints ([PR #504](https://github.com/ArcadeAI/arcade-ai/pull/504)) +- `[feature - πŸš€]` Support Tool Output in ValueSchema of ToolDefinition ([PR #487](https://github.com/ArcadeAI/arcade-ai/pull/487)) **Platform and Engine** -* `[feature - πŸš€]` Self-service plan selection for Arcade Cloud and payment is now available. -* `[bugfix - πŸ›]` Dashboard: Userinfo config must respect response_map property -* `[feature - πŸš€]` Dashboard: Add Tool Types in Metrics + +- `[feature - πŸš€]` Self-service plan selection for Arcade Cloud and payment is now available. +- `[bugfix - πŸ›]` Dashboard: Userinfo config must respect response_map property +- `[feature - πŸš€]` Dashboard: Add Tool Types in Metrics **Misc** -* `[documentation - πŸ“]` Update OAuth docs with user_info_request.response_map ([PR #360](https://github.com/ArcadeAI/docs/pull/360)) -* `[documentation - πŸ“]` Update Zendesk Custom OAuth ([PR #359](https://github.com/ArcadeAI/docs/pull/359)) -* `[documentation - πŸ“]` Add code samples & screenshots to user verification doc ([PR #363](https://github.com/ArcadeAI/docs/pull/363)) +- `[documentation - πŸ“]` Update OAuth docs with user_info_request.response_map ([PR #360](https://github.com/ArcadeAI/docs/pull/360)) +- `[documentation - πŸ“]` Update Zendesk Custom OAuth ([PR #359](https://github.com/ArcadeAI/docs/pull/359)) +- `[documentation - πŸ“]` Add code samples & screenshots to user verification doc ([PR #363](https://github.com/ArcadeAI/docs/pull/363)) -## For the week ending on 2025-07-18 +## 2025-07-18 Version 2.0.0 of the Arcade Engine was released this week. Upgrading to version 2.0.0 is recommended for all self-hosted developers, and includes an important security fix for [secure OAuth flows](/home/auth/secure-auth-production). After upgrading, all projects will default to using the Arcade user verifier. If desired, you can then implement a custom user verifier in your application/agent and make the switch via the Arcade Dashboard. - Self-hosed Arcade developers cannot be grandfathered into the old (insecure) behavior of skipping user verification once the Engine is upgraded to version 2.0.0 or higher. +Self-hosed Arcade developers cannot be grandfathered into the old (insecure) behavior of skipping user verification once the Engine is upgraded to version 2.0.0 or higher. + **Frameworks** **Toolkits** -* `[feature - πŸš€]` Add Linear Toolkit ([PR #465](https://github.com/ArcadeAI/arcade-ai/pull/465)) -* `[feature - πŸš€]` Add Zendesk Toolkit ([PR #458](https://github.com/ArcadeAI/arcade-ai/pull/458)) -* `[bugfix - πŸ›]` Fix bug in Slack user processing ([PR #488](https://github.com/ArcadeAI/arcade-ai/pull/488)) -* `[bugfix - πŸ›]` fix URL expansion in Twitter ([PR #500](https://github.com/ArcadeAI/arcade-ai/pull/500)) + +- `[feature - πŸš€]` Add Linear Toolkit ([PR #465](https://github.com/ArcadeAI/arcade-ai/pull/465)) +- `[feature - πŸš€]` Add Zendesk Toolkit ([PR #458](https://github.com/ArcadeAI/arcade-ai/pull/458)) +- `[bugfix - πŸ›]` Fix bug in Slack user processing ([PR #488](https://github.com/ArcadeAI/arcade-ai/pull/488)) +- `[bugfix - πŸ›]` fix URL expansion in Twitter ([PR #500](https://github.com/ArcadeAI/arcade-ai/pull/500)) **CLI and TDK** -* `[feature - πŸš€]` Toolkit docs generator command for Arcade CLI ([PR #414](https://github.com/ArcadeAI/arcade-ai/pull/414)) -* `[feature - πŸš€]` custom `callback_host` for arcade login ([PR #481](https://github.com/ArcadeAI/arcade-ai/pull/481)) + +- `[feature - πŸš€]` Toolkit docs generator command for Arcade CLI ([PR #414](https://github.com/ArcadeAI/arcade-ai/pull/414)) +- `[feature - πŸš€]` custom `callback_host` for arcade login ([PR #481](https://github.com/ArcadeAI/arcade-ai/pull/481)) **Platform and Engine** -* `[feature - πŸš€]` Dashboard: Add filter for user id and providers in Connected Accounts -* `[feature - πŸš€]` Add new endpoint for upcoming scheduled subs -* `[bugfix - πŸ›]` Engine OAuth hardening: secure defaults, config updates, validation, additional API flags, and route for user confirmation -* `[feature - πŸš€]` Dashboard: UI for security settings -* `[bugfix - πŸ›]` Engine: Correctly handle nils in auth provider responses -* `[bugfix - πŸ›]` Platform: Improved success & error pages for OAuth + +- `[feature - πŸš€]` Dashboard: Add filter for user id and providers in Connected Accounts +- `[feature - πŸš€]` Add new endpoint for upcoming scheduled subs +- `[bugfix - πŸ›]` Engine OAuth hardening: secure defaults, config updates, validation, additional API flags, and route for user confirmation +- `[feature - πŸš€]` Dashboard: UI for security settings +- `[bugfix - πŸ›]` Engine: Correctly handle nils in auth provider responses +- `[bugfix - πŸ›]` Platform: Improved success & error pages for OAuth **Misc** -* `[documentation - πŸ“]` replaced creating toolkit video with full tutorial ([PR #349](https://github.com/ArcadeAI/docs/pull/349)) -* `[documentation - πŸ“]` Add secure/brand auth in production doc ([PR #341](https://github.com/ArcadeAI/docs/pull/341)) +- `[documentation - πŸ“]` replaced creating MCP Server video with full tutorial ([PR #349](https://github.com/ArcadeAI/docs/pull/349)) +- `[documentation - πŸ“]` Add secure/brand auth in production doc ([PR #341](https://github.com/ArcadeAI/docs/pull/341)) -## For the week ending on 2025-07-11 +## 2025-07-11 **Frameworks** **Toolkits** -* `[feature - πŸš€]` Split previously combined Google, Microsoft, and other Toolkits into separate toolkits to aid in retrieval and maintenance ([PR #438](https://github.com/ArcadeAI/arcade-ai/pull/438)) -* `[feature - πŸš€]` Slack Toolkit: Major refactor and improvements ([PR #453](https://github.com/ArcadeAI/arcade-ai/pull/453)) + +- `[feature - πŸš€]` Split previously combined Google, Microsoft, and other Toolkits into separate MCP Servers to aid in retrieval and maintenance ([PR #438](https://github.com/ArcadeAI/arcade-ai/pull/438)) +- `[feature - πŸš€]` Slack Toolkit: Major refactor and improvements ([PR #453](https://github.com/ArcadeAI/arcade-ai/pull/453)) **CLI and TDK** -* `[feature - πŸš€]` `--debug` flag added for CLI commands ([PR #454](https://github.com/ArcadeAI/arcade-ai/pull/454)) + +- `[feature - πŸš€]` `--debug` flag added for CLI commands ([PR #454](https://github.com/ArcadeAI/arcade-ai/pull/454)) **Platform and Engine** -* `[bugfix - πŸ›]` Fix token refresh bug + +- `[bugfix - πŸ›]` Fix token refresh bug **Misc** -* `[documentation - πŸ“]` Document the OAuth scopes required by the Slack toolkit ([PR #344](https://github.com/ArcadeAI/docs/pull/344)) -## For the week ending on 2025-07-04 +- `[documentation - πŸ“]` Document the OAuth scopes required by the Slack MCP Server ([PR #344](https://github.com/ArcadeAI/docs/pull/344)) + +## 2025-07-04 **Toolkits** -* `[bugfix - πŸ›]` patching toolkit template generator for outside the main repo ([PR #460](https://github.com/ArcadeAI/arcade-ai/pull/460)) -* `[bugfix - πŸ›]` Filter out unneeded files/directories before deploying workers ([PR #464](https://github.com/ArcadeAI/arcade-ai/pull/464)) + +- `[bugfix - πŸ›]` patching MCP Server template generator for outside the main repo ([PR #460](https://github.com/ArcadeAI/arcade-ai/pull/460)) +- `[bugfix - πŸ›]` Filter out unneeded files/directories before deploying workers ([PR #464](https://github.com/ArcadeAI/arcade-ai/pull/464)) **Platform and Engine** -* `[feature - πŸš€]` Concurrent auth requests for the same user and same scopes use the same authentication flow and URLs. This means that your users only have to authenticate once if the agent chooses to use multiple tools at once with teh same scopes. -* `[bugfix - πŸ›]` Fix secret deletion + +- `[feature - πŸš€]` Concurrent auth requests for the same user and same scopes use the same authentication flow and URLs. This means that your users only have to authenticate once if the agent chooses to use multiple tools at once with teh same scopes. +- `[bugfix - πŸ›]` Fix secret deletion **Cloud** -* `[bugfix - πŸ›]` Update cross-origin-opener-policy header to allow Google Drive File Picker popup + +- `[bugfix - πŸ›]` Update cross-origin-opener-policy header to allow Google Drive File Picker popup **Platform and Engine** -* `[feature - πŸš€]` Dashboard: Allow editing the description of a secret -* `[feature - πŸš€]` Dashboard: Preserve tools when resetting parameters -## For the week ending on 2025-06-28 +- `[feature - πŸš€]` Dashboard: Allow editing the description of a secret +- `[feature - πŸš€]` Dashboard: Preserve tools when resetting parameters + +## 2025-06-28 **Toolkits** -* `[bugfix - πŸ›]` Jira toolkit: deduplicate cloud data in Atlassian's available-resources response ([PR #456](https://github.com/ArcadeAI/arcade-ai/pull/456)) -## For the week ending on 2025-06-20 +- `[bugfix - πŸ›]` Jira MCP Server: deduplicate cloud data in Atlassian's available-resources response ([PR #456](https://github.com/ArcadeAI/arcade-ai/pull/456)) + +## 2025-06-20 **Frameworks** -* `[feature - πŸš€]` Support for OpenAI Agent SDK in Typescript ([docs](https://docs.arcade.dev/home/oai-agents/overview) and [example](https://github.com/ArcadeAI/arcade-ai/tree/main/examples/openai-agents-ts)) + +- `[feature - πŸš€]` Support for OpenAI Agent SDK in Typescript ([docs](https://docs.arcade.dev/home/oai-agents/overview) and [example](https://github.com/ArcadeAI/arcade-ai/tree/main/examples/openai-agents-ts)) **Toolkits** -* `[feature - πŸš€]` Jira toolkit released ([docs](https://docs.arcade.dev/toolkits/productivity/jira)) + +- `[feature - πŸš€]` Jira MCP Server released ([docs](https://docs.arcade.dev/mcp-servers/productivity/jira)) **CLI and TDK** -* `[feature - πŸš€]` V2.0 of Python Tool Development Kit (TDK) ([migration guide](https://docs.arcade.dev/home/migrate-to-v2)) -* `[feature - πŸš€]` Admin API client support - * Requires v1.6.0 of `arcade-py`, or v1.8.0 of `arcade-js`, or v0.1.0-alpha.4 of `arcade-go` + +- `[feature - πŸš€]` V2.0 of Python Tool Development Kit (TDK) ([migration guide](https://docs.arcade.dev/home/migrate-to-v2)) +- `[feature - πŸš€]` Admin API client support + - Requires v1.6.0 of `arcade-py`, or v1.8.0 of `arcade-js`, or v0.1.0-alpha.4 of `arcade-go` **Platform and Engine** -* `[feature - πŸš€]` Admin APIs released for managing users, secrets, and tools ([API References](https://reference.arcade.dev/api-reference#tag/admin)) -* `[bugfix - πŸ›]` Unauthenticated MCP servers can be called anonymously -* `[feature - πŸš€]` End-user credentials and auth status can be fetched in batches ([docs](https://docs.arcade.dev/home/auth/tool-auth-status)) -**Misc** -* `[feature - πŸš€]` Launched Github Discussions for product feedback and support ([link](https://github.com/ArcadeAI/arcade-ai/discussions)) -* `[feature - πŸš€]` Launched status.arcade.dev for monitoring platform status ([link](https://status.arcade.dev)) +- `[feature - πŸš€]` Admin APIs released for managing users, secrets, and tools ([API References](https://reference.arcade.dev/api-reference#tag/admin)) +- `[bugfix - πŸ›]` Unauthenticated MCP servers can be called anonymously +- `[feature - πŸš€]` End-user credentials and auth status can be fetched in batches ([docs](https://docs.arcade.dev/home/auth/tool-auth-status)) +**Misc** +- `[feature - πŸš€]` Launched Github Discussions for product feedback and support ([link](https://github.com/ArcadeAI/arcade-ai/discussions)) +- `[feature - πŸš€]` Launched status.arcade.dev for monitoring platform status ([link](https://status.arcade.dev)) diff --git a/app/en/home/crewai/_meta.ts b/app/en/home/crewai/_meta.ts deleted file mode 100644 index 4b70ac22c..000000000 --- a/app/en/home/crewai/_meta.ts +++ /dev/null @@ -1,4 +0,0 @@ -export default { - "use-arcade-tools": "Using Arcade tools", - "custom-auth-flow": "Custom auth flow", -}; diff --git a/app/en/home/crewai/_meta.tsx b/app/en/home/crewai/_meta.tsx new file mode 100644 index 000000000..1bcb3d847 --- /dev/null +++ b/app/en/home/crewai/_meta.tsx @@ -0,0 +1,18 @@ +import type { MetaRecord } from "nextra"; + +const meta: MetaRecord = { + "*": { + theme: { + breadcrumb: true, + toc: true, + }, + }, + "use-arcade-tools": { + title: "Using Arcade tools", + }, + "custom-auth-flow": { + title: "Custom auth flow", + }, +}; + +export default meta; diff --git a/app/en/home/crewai/custom-auth-flow/page.mdx b/app/en/home/crewai/custom-auth-flow/page.mdx index 259392204..7f847a772 100644 --- a/app/en/home/crewai/custom-auth-flow/page.mdx +++ b/app/en/home/crewai/custom-auth-flow/page.mdx @@ -96,7 +96,7 @@ You can now provide the tool manager callback to the `ArcadeToolManager` upon in # Provide the tool manager callback to the ArcadeToolManager manager = ArcadeToolManager(executor=tool_manager_callback) -# Retrieve the provided tools and/or toolkits as CrewAI StructuredTools. +# Retrieve the provided tools and/or MCP Servers as CrewAI StructuredTools. tools = manager.get_tools(tools=["Gmail.ListEmails"], toolkits=["Slack"]) ``` diff --git a/app/en/home/crewai/use-arcade-tools/page.mdx b/app/en/home/crewai/use-arcade-tools/page.mdx index be9396dbf..555dc8e87 100644 --- a/app/en/home/crewai/use-arcade-tools/page.mdx +++ b/app/en/home/crewai/use-arcade-tools/page.mdx @@ -45,7 +45,7 @@ from crewai_arcade import ArcadeToolManager manager = ArcadeToolManager(default_user_id="{arcade_user_id}") """ -Retrieves the provided tools and/or toolkits as CrewAI StructuredTools. +Retrieves the provided tools and/or MCP Servers as CrewAI StructuredTools. """ tools = manager.get_tools(tools=["Gmail.ListEmails"], toolkits=["Slack"]) ``` diff --git a/app/en/home/evaluate-tools/create-an-evaluation-suite/page.mdx b/app/en/home/evaluate-tools/create-an-evaluation-suite/page.mdx index b83795a99..2f47817d3 100644 --- a/app/en/home/evaluate-tools/create-an-evaluation-suite/page.mdx +++ b/app/en/home/evaluate-tools/create-an-evaluation-suite/page.mdx @@ -15,28 +15,20 @@ import { Steps, Tabs, Callout } from "nextra/components"; ### Prerequisites -- [Build a custom tool](/home/build-tools/create-a-toolkit) +- [Build a custom tool](/home/build-tools/create-a-mcp-server) - Install the evaluation dependencies: - -```bash -uv pip install 'arcade-ai[evals]' -``` - - -```bash -pip install 'arcade-ai[evals]' -``` - + ```bash uv pip install 'arcade-ai[evals]' ``` + ```bash pip install 'arcade-ai[evals]' ``` ### Create an evaluation suite -Navigate to your toolkit's `evals` directory: +Navigate to your MCP Server's `evals` directory: ```bash -cd arcade_my_new_toolkit/evals +cd arcade_my_tools/evals ``` Create a new Python file for your evaluations, e.g., `eval_hello.py`. @@ -54,7 +46,7 @@ from arcade_evals import ( tool_eval, ) from arcade_tdk import ToolCatalog -from arcade_my_new_toolkit.tools.hello import hello +from arcade_my_tools.tools.hello import hello # Create a catalog of tools to include in the evaluation catalog = ToolCatalog() diff --git a/app/en/home/evaluate-tools/run-evaluations/page.mdx b/app/en/home/evaluate-tools/run-evaluations/page.mdx index 3bb856f33..b0e2fb95d 100644 --- a/app/en/home/evaluate-tools/run-evaluations/page.mdx +++ b/app/en/home/evaluate-tools/run-evaluations/page.mdx @@ -73,10 +73,10 @@ The `arcade evals` command supports several options to customize the evaluation #### Example Command -Running evaluations in the `toolkits/math/evals` directory, showing detailed results, using the `gpt-4o` model: +Running evaluations in the `arcade_my_tools/evals` directory, showing detailed results, using the `gpt-4o` model: ```bash -arcade evals toolkits/math/evals --details --models gpt-4o +arcade evals arcade_my_tools/evals --details --models gpt-4o ``` ### Execution Process @@ -166,6 +166,6 @@ arcade evals . --models gpt-4o,gpt-3.5 ## Conclusion -Running evaluations using the Arcade CLI provides a powerful and convenient way to assess the tool-calling capabilities of your language models. By leveraging the `arcade evals` command, you can efficiently execute your evaluation suites, analyze results, and iterate on your models and toolkits. +Running evaluations using the Arcade CLI provides a powerful and convenient way to assess the tool-calling capabilities of your language models. By leveraging the `arcade evals` command, you can efficiently execute your evaluation suites, analyze results, and iterate on your models and tools. Integrating this evaluation process into your development workflow helps ensure that your models interact with tools as expected, enhances reliability, and builds confidence in deploying actionable language models in production environments. diff --git a/app/en/home/faq/page.mdx b/app/en/home/faq/page.mdx index b83f900c6..e0818e24b 100644 --- a/app/en/home/faq/page.mdx +++ b/app/en/home/faq/page.mdx @@ -12,19 +12,27 @@ import { Tabs } from "nextra/components"; ## What if I need a Tool that Arcade doesn't have? -Arcade makes it easy to build your own tools! You can fork our existing tools, or build your own from scratch. Learn more about [building your own toolkit](/home/build-tools/create-a-toolkit). +Arcade makes it easy to build your own tools! You can fork our existing tools, or build your own from scratch. Learn more about [building your own MCP Server](/home/build-tools/create-a-mcp-server). ## How do I contribute back a Tool to the Registry? -We're always looking for new tools and toolkits! If you have a tool that you think would be useful to others, please let us know. You can contribute a tool by submitting a pull request to the [Arcade GitHub repository](https://github.com/ArcadeAI/arcade-ai). +We're always looking for new tools and MCP Servers! If you have a tool that you think would be useful to others, please let us know. You can contribute a tool by submitting a pull request to the [Arcade GitHub repository](https://github.com/ArcadeAI/arcade-ai). ## What is the difference between the Arcade CLI and the Arcade Clients? The [Arcade CLI](/home/arcade-cli) is a command line tool that makes it easy to build, test, and deploy your own tools to production. The [Arcade Client libraries](/home/arcade-clients) are what you will use within your own agents and applications to call the tools. -## How does Arcade.dev relate to the Model Context Protocol (MCP)? +## What is the difference between personal API keys and project API keys? -The Arcade.dev engine both speaks MCP and extends it with an authentication-first architecture. This means that you can use Arcade.dev to build tools that can be called by any LLM that supports MCP, while also providing a secure and easy way to authenticate users and manage access to those tools. Learn more about [Arcade.dev and MCP](/home/mcp-overview). +Arcade now uses **project API keys** as the standard way to authenticate with the platform. These keys are tied to a specific project and can be used by all team members with access to that project, making collaboration easier. + +**Personal API keys** were our original authentication method, where each key was tied to an individual developer account. We are deprecating personal API keys in favor of project API keys because: + +- **Better team collaboration**: Project API keys can be shared across your team, so everyone working on the same project can use the same key. +- **Clearer organization**: Keys are organized by project, making it easier to manage multiple projects and their respective resources and permissions. +- **Simplified key management**: Manage one key per project instead of individual keys for each team member. + +If you're still using a personal API key, we recommend migrating to a project API key. Learn more about [API keys](/home/api-keys) and how to create them. ## Auth FAQ @@ -59,8 +67,8 @@ tools = client.tools.list(toolkit="Gmail") scopes = set() for tool in tools: - if tool.requirements.authorization.oauth2.scopes: - scopes |= set(tool.requirements.authorization.oauth2.scopes) +if tool.requirements.authorization.oauth2.scopes: +scopes |= set(tool.requirements.authorization.oauth2.scopes) # start auth @@ -69,8 +77,8 @@ auth_response = client.auth.start(user_id=USER_ID, scopes=list(scopes), provider # show the url to the user if needed if auth_response.status != "complete": - print(f"Please click here to authorize: {auth_response.url}") # Wait for the authorization to complete - client.auth.wait_for_completion(auth_response) +print(f"Please click here to authorize: {auth_response.url}") # Wait for the authorization to complete +client.auth.wait_for_completion(auth_response) ```` @@ -121,14 +129,15 @@ client = Arcade() # Automatically finds the `ARCADE_API_KEY` env variable user_id = "{arcade_user_id}" auth_response = client.auth.start( - user_id=user_id, - provider="google", - scopes=[ - "https://www.googleapis.com/auth/drive.file", - "https://www.googleapis.com/auth/drive" - ] +user_id=user_id, +provider="google", +scopes=[ +"https://www.googleapis.com/auth/drive.file", +"https://www.googleapis.com/auth/drive" +] ) -``` + +```` ```javascript @@ -140,13 +149,13 @@ const user_id = "{arcade_user_id}"; const authResponse = await client.auth.start(user_id, "google", { scopes: ["https://www.googleapis.com/auth/drive.file", "https://www.googleapis.com/auth/drive"] }); -``` +```` + After authentication, call `GoogleDrive.SearchFiles` as usual and it will be able to search all files using the broader token permissions. - ## Your question is not here? Please go to the discussions page on GitHub. Someone else may have asked something similar already. If not, please start a new discussion and we'll get to it as soon as possible. diff --git a/app/en/home/glossary/page.mdx b/app/en/home/glossary/page.mdx index 5d396fc2e..0b5a6fcc1 100644 --- a/app/en/home/glossary/page.mdx +++ b/app/en/home/glossary/page.mdx @@ -5,30 +5,29 @@ description: "Glossary of terms used in the Arcade platform" # Arcade Glossary - ## Agents and Tools ```mermaid graph TD - A[Agent] --> B[Toolkit] + A[Agent] --> B[MCP Server] B --> C[Tool] ``` ### Agent -An 'agent' is the application you are building. It can be a chatbot, a web application, a mobile app, or any other type of application that happens to use an LLM as part of its functionality. Agents interact with the world by calling tools. Helping you build, test, authenticate, and deploy tools is what Arcade is all about. +An 'agent' is the application you are building. It can be a chatbot, a web application, a mobile app, or any other type of application that happens to use an LLM as part of its functionality. Agents interact with the world by calling tools. Helping you build, test, authenticate, and deploy tools is what Arcade is all about. -### Toolkit +### MCP Server -A 'toolkit' is a collection of tools that can be used by an agent, grouped logically together by a common theme or provider. Toolkits are the unit of deployment for tools within Arcade. +A 'MCP Server' is a collection of tools that can be used by an agent, grouped logically together by a common theme or provider, and the running remote process that serves and executes the tools. MCP Servers are the unit of deployment for tools within Arcade. ### Tool -A 'tool' is a function that can be called by an agent which performs some action - commonly via an API, filesystem, database, etc. Tools are written in Python and deployed by running a worker which contains the toolkit's code. Tools are defined by the `@tool()` decorator and will be passed `ToolContext` as the first argument. If a tool has dependencies that are not met (a secret is not provided, for example), the tool will fail to execute. +A 'tool' is a function that can be called by an agent which performs some action - commonly via an API, filesystem, database, etc. Tools are written in Python and deployed by running a worker which contains the MCP Server's code. Tools are defined by the `@tool()` decorator and will be passed `ToolContext` as the first argument. If a tool has dependencies that are not met (a secret is not provided, for example), the tool will fail to execute. -Tools are commonly referred to by a qualified name that includes their toolkit. For example, [Gmail.SendEmail](https://docs.arcade.dev/toolkits/productivity/gmail#gmailsendemail) +Tools are commonly referred to by a qualified name that includes their MCP Server. For example, [Gmail.SendEmail](https://docs.arcade.dev/mcp-servers/productivity/gmail#gmailsendemail) -*Learn more about [tools](/home/build-tools/create-a-toolkit).* +_Learn more about [tools](/home/build-tools/create-a-mcp-server)._ #### Optimized tools @@ -42,17 +41,15 @@ Understand why [LLMs usually perform poorly](/home/use-tools/types-of-tools#why- ### Tool Context -'Tool context' is an object that is passed to a tool as a parameter when the tool is executed. It contains information about the tool call, the user for which the tool is being called, and any secrets the tool requires to run. +'Tool context' is an object that is passed to a tool as a parameter when the tool is executed. It contains information about the tool call, the user for which the tool is being called, and any secrets the tool requires to run. -*Learn more about [tool context](/home/build-tools/tool-context).* +_Learn more about [tool context](/home/build-tools/tool-context)._ ### MCP (Model Context Protocol) MCP is an open standard protocol that enables LLMs to access and use tools and data sources. Arcade tools go further than MCP with enterprise-grade authentication, secure token management, and fine-grained permissions. This allows your tools to be accessible to any LLM that supports MCP, while maintaining security and user privacy. -Arcade Tools can be presented as an MCP server (via the Arcade Engine), allowing any LLM that supports MCP to access your tools. In the future, you will be able to add remote MCP servers to your project as additional workers, making their tools available to your agents. - -*Learn more about [MCP and Arcade](/home/mcp-overview).* +Arcade Tools can be presented as an MCP server (via the Arcade Engine), allowing any LLM that supports MCP to access your tools. In the future, you will be able to add remote MCP servers to your project as additional workers, making their tools available to your agents. ## The Arcade Platform @@ -71,15 +68,15 @@ The 'account' is you (or your teammates), the developer(s) who are using Arcade ### Tenant -A 'tenant' is a collection of projects with unified billing details. It is the top-level unit of organization in Arcade. You can be a member of one or more tenants, and each tenant can have multiple projects. +A 'tenant' is a collection of projects with unified billing details. It is the top-level unit of organization in Arcade. You can be a member of one or more tenants, and each tenant can have multiple projects. ### Project -A 'project' is a collection of agents and tools. It is smallest unit of organization and isolation in Arcade. You can have multiple projects, and each project can have multiple agents and tools. Accounts can be members of multiple projects, and each project will have different API keys. +A 'project' is a collection of agents and tools. It is smallest unit of organization and isolation in Arcade. You can have multiple projects, and each project can have multiple agents and tools. Accounts can be members of multiple projects, and each project will have different API keys. ### API Key -An 'API key' is a secret key that is used to authenticate requests to the Arcade API. It is used to identify the project that the request is for. API keys are project-specific. +An 'API key' is a secret key that is used to authenticate requests to the Arcade API. It is used to identify the project that the request is for. API keys are project-specific. ## Authentication and Billing @@ -91,49 +88,46 @@ graph TD ### User -A 'user' is your end-user, the person who is using your application or agent. Users are counted by the unique `user_id` properties sent when calling tools. `user_id` values are commonly email addresses, but can be any string or number. +A 'user' is your end-user, the person who is using your application or agent. Users are counted by the unique `user_id` properties sent when calling tools. `user_id` values are commonly email addresses, but can be any string or number. ### Monthly Active Users (MAU) -Monthly Active Users are the unique end-users (counted by `user_id`) who have executed a tool in your app/agent within the past month. If the same `user_id` calls a tool multiple times in the same month, or executes multiple tools, it is only counted once. +Monthly Active Users are the unique end-users (counted by `user_id`) who have executed a tool in your app/agent within the past month. If the same `user_id` calls a tool multiple times in the same month, or executes multiple tools, it is only counted once. ### User Challenges -User Challenges are the count of authorizations performed for any user (specified by `user_id` in Arcade's SDKs and APIs). Authorization challenges occur when a user needs a new permission or scope that they don't currently have, including previously-held scopes that were deleted or expired. The same user authenticating to multiple toolkits will have a User Challenge for each toolkit (e.g. once for Slack and once for Google). We also count the act of elevating permissions to a user who has already authenticated to a toolkit (e.g. adding a "write" scope when they previously only had a "read" scope). +User Challenges are the count of authorizations performed for any user (specified by `user_id` in Arcade's SDKs and APIs). Authorization challenges occur when a user needs a new permission or scope that they don't currently have, including previously-held scopes that were deleted or expired. The same user authenticating to multiple MCP Servers will have a User Challenge for each MCP Server (e.g. once for Slack and once for Google). We also count the act of elevating permissions to a user who has already authenticated to a MCP Server (e.g. adding a "write" scope when they previously only had a "read" scope). ### Auth Provider -An 'auth provider' is a service that your users sign in with to let the agent access their data or take actions on their behalf. This can be a hosted service like Google or Slack, or a custom OAuth provider. Multiple Toolkits may share the same auth provider (for example, Gmail and Google Drive both use Google's OAuth provider). Custom auth providers are defined in the Arcade Dashboard, or in your Engine YAML if you're self-hosting. +An 'auth provider' is a service that your users sign in with to let the agent access their data or take actions on their behalf. This can be a hosted service like Google or Slack, or a custom OAuth provider. Multiple MCP Servers may share the same auth provider (for example, Gmail and Google Drive both use Google's OAuth provider). Custom auth providers are defined in the Arcade Dashboard, or in your Engine YAML if you're self-hosting. -*Learn more about [auth providers](/home/auth-providers).* +_Learn more about [auth providers](/home/auth-providers)._ ### Authorization Scope -An 'authorization scope' is a permission that a user can grant to an agent. This is used to control what the agent can do with the user's data. Available authorization scopes are defined by the authentication provider, and each tool defines the scopes it requires. +An 'authorization scope' is a permission that a user can grant to an agent. This is used to control what the agent can do with the user's data. Available authorization scopes are defined by the authentication provider, and each tool defines the scopes it requires. Learn more about [authorized tool calling](/home/auth/auth-tool-calling). - ### Tool Executions A 'tool execution' is a single call to a tool to interact with a remote system or service. The tool execution itself may fail (e.g. the user does not have permission to call the tool), but as long as the execution was able to be routed to a worker, it will be counted. -*Learn more about [tool executions](/home/use-tools/tools-overview).* - +_Learn more about [tool executions](/home/use-tools/tools-overview)._ ### Standard and Pro Tool executions -Arcade tools are divided into 2 categories: Standard and Pro. While all tools have some cost for Arcade to run, Pro tools are significantly more costly - either due to infrastructure costs, the complexity of the tool, or a cost imposed by the provider of the tool. Pro tools cost more to execute and have different limits. +Arcade tools are divided into 2 categories: Standard and Pro. While all tools have some cost for Arcade to run, Pro tools are significantly more costly - either due to infrastructure costs, the complexity of the tool, or a cost imposed by the provider of the tool. Pro tools cost more to execute and have different limits. Learn more about tool pricing [here](https://www.arcade.dev/pricing). ### Bring Your Own Credentials (BYOC) -Bring Your Own Credentials (BYOC) is a feature that allows you to use your own credentials to certain pro tools. This changes the cost of the tool execution, as you will be charged directly by the provider of the tool, rather than relying on Arcade to pay the bill for you. +Bring Your Own Credentials (BYOC) is a feature that allows you to use your own credentials to certain pro tools. This changes the cost of the tool execution, as you will be charged directly by the provider of the tool, rather than relying on Arcade to pay the bill for you. To set your own credentials, set the requisite secret within the Arcade Dashboard, overwriting the default 'static' credentials. - ## Tool Execution and Tool Development ```mermaid @@ -145,33 +139,30 @@ graph TD ### Arcade Client -The 'Arcade client' is the SDK that you use to interact with the Arcade platform. It is how your agent lists and calls tools, tied back to your project via an API key. We offer clients for many popular languages and frameworks, including Python, JavaScript, and more. +The 'Arcade client' is the SDK that you use to interact with the Arcade platform. It is how your agent lists and calls tools, tied back to your project via an API key. We offer clients for many popular languages and frameworks, including Python, JavaScript, and more. -*Learn more about [the Arcade clients](/home/arcade-clients).* +_Learn more about [the Arcade clients](/home/arcade-clients)._ ### Arcade Engine -The Arcade Engine is the core of the Arcade platform. It is responsible for routing tool execution requests to the correct worker, managing the lifecycle of tool executions, and for enforcing security and authorization decisions. +The Arcade Engine is the core of the Arcade platform. It is responsible for routing tool execution requests to the correct worker, managing the lifecycle of tool executions, and for enforcing security and authorization decisions. -The Arcade Engine is also responsible for the OAuth flow for your agent's users. This includes granting and elevating permissions and keeping tokens fresh. +The Arcade Engine is also responsible for the OAuth flow for your agent's users. This includes granting and elevating permissions and keeping tokens fresh. ### Worker -A 'worker' is a process that runs all the tools with a toolkit. Workers are microservices that are called by the Arcade Engine to handle tool execution requests. Workers are either [deployed to Arcade's infrastructure](https://docs.arcade.dev/home/serve-tools/arcade-deploy) via `arcade deploy`, or run in your own infrastructure. +A 'worker' is a process that runs all the tools with a MCP Server. Workers are microservices that are called by the Arcade Engine to handle tool execution requests. Workers are either [deployed to Arcade's infrastructure](https://docs.arcade.dev/home/serve-tools/arcade-deploy) via `arcade deploy`, or run in your own infrastructure. -*Learn more about workers [here](/home/hybrid-deployment/hybrid-worker).* and [here](/home/serve-tools/docker-worker). +_Learn more about workers [here](/home/hybrid-deployment/hybrid-worker). ### TDK (Tool Development Kit) The Arcade TDK is a command-line application that helps you create, test, and deploy tools. -*Learn more about the TDK [here](/home/build-tools/create-a-toolkit).* +_Learn more about the TDK [here](/home/build-tools/create-a-mcp-server)._ ### Evaluations (Evals) -Evaluations are a way to test the LLMs' ability to select and call your tools. Arcade's eval suite can and should be run as part of the development process to ensure your tools are working as expected. - -*Learn more about evaluations [here](/home/evaluate-tools/why-evaluate-tools).* - - +Evaluations are a way to test the LLMs' ability to select and call your tools. Arcade's eval suite can and should be run as part of the development process to ensure your tools are working as expected. +_Learn more about evaluations [here](/home/evaluate-tools/why-evaluate-tools)._ diff --git a/app/en/home/google-adk/overview/page.mdx b/app/en/home/google-adk/overview/page.mdx index 29ca8d4db..c13cc7eaa 100644 --- a/app/en/home/google-adk/overview/page.mdx +++ b/app/en/home/google-adk/overview/page.mdx @@ -21,7 +21,7 @@ Make sure you have your Arcade API key ready. [Get an API key](/home/api-keys) i ## Key features - **Easy integration** with the Google ADK framework -- **Access to all Arcade toolkits** including Google, GitHub, LinkedIn, X, and more +- **Access to all Arcade MCP Servers** including Google, GitHub, LinkedIn, X, and more - **Create custom tools** with the Arcade Tool SDK - **Manage user authentication** for tools that require it - **Asynchronous support** compatible with Google's ADK framework @@ -123,24 +123,11 @@ for tool in google_tools: await client.auth.wait_for_completion(result) ``` - -## Available toolkits - -Arcade provides a variety of toolkits you can use with your agents: - -- **Google Suite**: Gmail, Calendar, Drive, Docs -- **Social Media**: LinkedIn, X -- **Development**: GitHub -- **Web**: Web search, content extraction -- **And more**: Weather, financial data, etc. - -For a full list of available toolkits, visit the [Arcade Toolkits](/toolkits) documentation. - ## Next steps Ready to start building with Arcade and OpenAI Agents? Check out these guides: - [Using Arcade tools](/home/google-adk/use-arcade-tools) - Learn the basics of using Arcade tools with Google ADK -- [Creating custom tools](/home/build-tools/create-a-toolkit) - Build your own tools with the Arcade Tool SDK +- [Creating custom tools](/home/build-tools/create-a-mcp-server) - Build your own tools with the Arcade Tool SDK Enjoy exploring Arcade and building powerful AI-enabled applications! diff --git a/app/en/home/google-adk/use-arcade-tools/page.mdx b/app/en/home/google-adk/use-arcade-tools/page.mdx index 991d27685..6bede0d04 100644 --- a/app/en/home/google-adk/use-arcade-tools/page.mdx +++ b/app/en/home/google-adk/use-arcade-tools/page.mdx @@ -37,7 +37,7 @@ export GOOGLE_GENAI_USE_VERTEXAI=FALSE ### Create and manage Arcade tools -Use the `get_arcade_tools` function to retrieve tools from specific toolkits: +Use the `get_arcade_tools` function to retrieve tools from specific MCP Servers: ```python from arcadepy import AsyncArcade @@ -46,10 +46,10 @@ from google_adk_arcade.tools import get_arcade_tools # Initialize the Arcade client client = AsyncArcade() -# Get all tools from the "Gmail" toolkit +# Get all tools from the "Gmail" MCP Server tools = await get_arcade_tools(client, toolkits=["gmail"]) -# You can request multiple toolkits at once +# You can request multiple MCP Servers at once tools = await get_arcade_tools(client, toolkits=["gmail", "github", "linkedin"]) # You can request specific tools @@ -214,7 +214,7 @@ if __name__ == '__main__': Now that you have integrated Arcade tools into your Google ADK application, you can: -- Experiment with different toolkits, such as "github" or "linkedin" +- Experiment with different MCP Servers, such as "Github" or "LinkedIn" - Customize the agent's instructions for specific tasks - Try out multi-agent systems using different Arcade tools - Build your own custom tools with the Arcade Tool SDK diff --git a/app/en/home/hybrid-deployment/_meta.tsx b/app/en/home/hybrid-deployment/_meta.tsx new file mode 100644 index 000000000..a07012946 --- /dev/null +++ b/app/en/home/hybrid-deployment/_meta.tsx @@ -0,0 +1,15 @@ +import type { MetaRecord } from "nextra"; + +const meta: MetaRecord = { + "*": { + theme: { + breadcrumb: true, + toc: true, + }, + }, + "hybrid-worker": { + title: "Hybrid Worker", + }, +}; + +export default meta; diff --git a/app/en/home/hybrid-deployment/hybrid-worker/page.mdx b/app/en/home/hybrid-deployment/hybrid-worker/page.mdx index 5e3180bb6..c36f7b6f6 100644 --- a/app/en/home/hybrid-deployment/hybrid-worker/page.mdx +++ b/app/en/home/hybrid-deployment/hybrid-worker/page.mdx @@ -29,15 +29,9 @@ The hybrid worker model uses a bidirectional connection between your local envir -### Setup your toolkits +### Setup your MCP Servers -Follow the [Creating a Toolkit](/home/build-tools/create-a-toolkit) guide to create your toolkits. - -Alternatively, you can install an Arcade Toolkit: - -```sh -pip install arcade-math -``` +Follow the [Creating a MCP Server](/home/build-tools/create-a-mcp-server) guide to create your MCP Server. ### Start your local worker @@ -94,10 +88,10 @@ tailscale funnel 8002 ### Test the connection to your worker -You can now test your worker by making requests through the Arcade API or using the Playground: +You can now test your worker by making requests through the Arcade API or using the Playground: 1. Go to the [Playground](https://api.arcade.dev/dashboard/playground) -1. Select a tool from your toolkit and execute it +1. Select a tool from your MCP Server and execute it 1. Verify that the response is correct and you see request logs in your worker @@ -118,6 +112,6 @@ You can now test your worker by making requests through the Arcade API or using ## Next steps -- [Create custom tools](/home/build-tools/create-a-toolkit) for your hybrid worker +- [Create custom tools](/home/build-tools/create-a-mcp-server) for your hybrid worker - [Set up authentication](/home/build-tools/create-a-tool-with-auth) for secure access to resources - [Configure secrets](/home/build-tools/create-a-tool-with-secrets) for your worker diff --git a/app/_components/landing-page.tsx b/app/en/home/landing-page.tsx similarity index 92% rename from app/_components/landing-page.tsx rename to app/en/home/landing-page.tsx index e49fa5824..1653956df 100644 --- a/app/_components/landing-page.tsx +++ b/app/en/home/landing-page.tsx @@ -18,8 +18,8 @@ import { motion } from "motion/react"; import Image from "next/image"; import Link from "next/link"; // import { ChallengeSolution } from "./ChallengeSolution"; -import { QuickStartCard } from "./quick-start-card"; -import { SampleAppCard } from "./sample-app-card"; +import { QuickStartCard } from "../../_components/quick-start-card"; +import { SampleAppCard } from "../../_components/sample-app-card"; // Constants for magic numbers const IMAGE_SCALE_FACTOR = 3; @@ -82,10 +82,11 @@ export function LandingPage() { >

Arcade enables your AI agent to securely take real-world actions - through user-specific permissions, pre-built toolkits for Gmail, - Slack, GitHub, and more. You can also build your own agentic tools - and MCP servers with our authoring and testing suite. Arcade is - your tool engine,{" "} + through user-specific permissions, pre-built MCP Servers for + Gmail, Slack, GitHub, and more. You can also build your own + agentic tools and MCP servers with our authoring and testing + suite. Arcade is your tool{" "} + engine,{" "} registry, and{" "} runtime.

@@ -118,7 +119,7 @@ export function LandingPage() { size="lg" variant="outline" > - + Build a tool @@ -134,23 +135,14 @@ export function LandingPage() { }} >
- Give your AI IDE access to Arcade.dev's documentation using our - llms.txt files ( - - short llms.txt - - ,{" "} - - llms-full.txt - - ), or use{" "} - + - context7 - - . + Learn how to give your coding agents access to Arcade.dev's + documentation +
@@ -189,7 +181,7 @@ export function LandingPage() { icon={Puzzle} title="Browse Integrations" description="Explore our library of integrations for popular services. Find the perfect integration for your needs." - href="/toolkits" + href="/mcp-servers" /> diff --git a/app/en/home/langchain/auth-langchain-tools/page.mdx b/app/en/home/langchain/auth-langchain-tools/page.mdx index 684dfee9d..5107888db 100644 --- a/app/en/home/langchain/auth-langchain-tools/page.mdx +++ b/app/en/home/langchain/auth-langchain-tools/page.mdx @@ -146,7 +146,7 @@ The `waitForCompletion` method will do nothing if the user has already authorize -### Use the token to initialize the Gmail toolkit +### Use the token to initialize the Gmail MCP Server @@ -219,4 +219,4 @@ for await (const event of events) { ### Next Steps -Now you're ready to explore more LangChain tools with Arcade. Try integrating additional toolkits and crafting more complex queries to enhance your AI workflows. +Now you're ready to explore more LangChain tools with Arcade. Try integrating additional MCP Servers and crafting more complex queries to enhance your AI workflows. diff --git a/app/en/home/langchain/use-arcade-tools/page.mdx b/app/en/home/langchain/use-arcade-tools/page.mdx index ca4a62ee6..1ff3964c9 100644 --- a/app/en/home/langchain/use-arcade-tools/page.mdx +++ b/app/en/home/langchain/use-arcade-tools/page.mdx @@ -60,18 +60,18 @@ OPENAI_API_KEY= -Use the ArcadeToolManager to retrieve specific tools or entire toolkits: +Use the ArcadeToolManager to retrieve specific tools or entire MCP Servers: ```python from langchain_arcade import ArcadeToolManager manager = ArcadeToolManager(api_key=arcade_api_key) -# Fetch the "ScrapeUrl" tool from the "Firecrawl" toolkit +# Fetch the "ScrapeUrl" tool from the "Firecrawl" MCP Server tools = manager.get_tools(tools=["Firecrawl.ScrapeUrl"]) print(manager.tools) -# Get all tools from the "Gmail" toolkit +# Get all tools from the "Gmail" MCP Server tools = manager.get_tools(toolkits=["Gmail"]) print(manager.tools) ``` @@ -86,7 +86,7 @@ import { tool } from "@langchain/core/tools"; // Initialize the Arcade client const arcade = new Arcade(); -// Get the Arcade tools, you can customize the toolkit (e.g. "github", "notion", "gmail", etc.) +// Get the Arcade tools, you can customize the MCP Server (e.g. "github", "notion", "gmail", etc.) const googleToolkit = await arcade.tools.list({ toolkit: "gmail", limit: 30 }); const arcadeTools = toZod({ tools: googleToolkit.items, @@ -236,7 +236,7 @@ try { Now that you have integrated Arcade tools into your LangGraph agent, you can: -- Experiment with different toolkits, such as "Math" or "Search." +- Experiment with different MCP Servers, such as "Math" or "Search." - Customize the agent's prompts for specific tasks. - Try out other language models and compare their performance. diff --git a/app/en/home/langchain/user-auth-interrupts/page.mdx b/app/en/home/langchain/user-auth-interrupts/page.mdx index ae48c9ae1..65a542b20 100644 --- a/app/en/home/langchain/user-auth-interrupts/page.mdx +++ b/app/en/home/langchain/user-auth-interrupts/page.mdx @@ -65,7 +65,7 @@ model_with_tools = model.bind_tools(tools) Here are the main code elements: - arcade_api_key is your Arcade key. -- tool_manager fetches your Arcade tools, for example the "Gmail" toolkit. +- tool_manager fetches your Arcade tools, for example the "Gmail" MCP Server. - tool_node encapsulates these tools for usage in LangGraph. - model_with_tools binds your tools to the "gpt-4o" language model, enabling tool calls. @@ -87,7 +87,7 @@ const arcade = new Arcade(); // Replace with your application's user ID (e.g. email address, UUID, etc.) const USER_ID = "{arcade_user_id}"; -// Initialize tools from Gmail toolkit +// Initialize tools from Gmail MCP Server const googleToolkit = await arcade.tools.list({ toolkit: "gmail", limit: 30 }); const arcadeTools = toZod({ tools: googleToolkit.items, @@ -117,7 +117,7 @@ const modelWithTools = model.bindTools(tools); Here are the main code elements: -- arcade.tools.list fetches your Arcade tools, for example the "Gmail" toolkit. +- arcade.tools.list fetches your Arcade tools, for example the "Gmail" MCP Server. - toZod converts Arcade tools to Zod schemas, which are required by LangGraph. - ToolNode encapsulates these tools for usage in LangGraph. - modelWithTools binds your tools to the "gpt-4o" language model, enabling tool calls. @@ -355,14 +355,14 @@ for await (const chunk of stream) { In this example: - The user prompts the agent to check emails. -- The message triggers a potential need for the "Gmail" tools. +- The message triggers a potential need for the "Gmail" MCP Server. - If authorization is required, the code prints a URL and waits until you permit the tool call.
## Next steps -- Experiment with more Arcade toolkits for expanded capabilities. +- Experiment with more Arcade MCP Servers for expanded capabilities. - Explore advanced authorization logic, such as multi-user or role-based checks. - Integrate additional nodes to handle more complex flows or multi-step tasks in your LangGraph. diff --git a/app/en/home/local-deployment/configure/configuration-templates/page.mdx b/app/en/home/local-deployment/configure/configuration-templates/page.mdx index bb0700636..c8647a9f8 100644 --- a/app/en/home/local-deployment/configure/configuration-templates/page.mdx +++ b/app/en/home/local-deployment/configure/configuration-templates/page.mdx @@ -3,10 +3,10 @@ title: "Configuration Templates" description: "Arcade Engine Configuration Templates" --- - # Engine Config Templates ### engine.yaml + ```yaml # yaml-language-server: $schema=https://raw.githubusercontent.com/ArcadeAI/schemas/main/engine/config/1.0/schema.json $schema: https://raw.githubusercontent.com/ArcadeAI/schemas/main/engine/config/1.0/schema.json @@ -15,12 +15,13 @@ api: development: ${env:API_DEVELOPMENT} host: ${env:ARCADE_API_HOST} port: ${env:ARCADE_API_PORT} - + # Optionally set public_host, in case the Arcade Engine is hosted in a container or behind a reverse proxy + #public_host: ${env:ARCADE_API_PUBLIC_HOST} auth: providers: - id: default-atlassian - description: 'The default Atlassian provider' + description: "The default Atlassian provider" enabled: false type: oauth2 provider_id: atlassian @@ -28,7 +29,7 @@ auth: client_secret: ${env:ATLASSIAN_CLIENT_SECRET} - id: default-discord - description: 'The default Discord provider' + description: "The default Discord provider" enabled: false type: oauth2 provider_id: discord @@ -36,7 +37,7 @@ auth: client_secret: ${env:DISCORD_CLIENT_SECRET} - id: default-dropbox - description: 'The default Dropbox provider' + description: "The default Dropbox provider" enabled: false type: oauth2 provider_id: dropbox @@ -44,7 +45,7 @@ auth: client_secret: ${env:DROPBOX_CLIENT_SECRET} - id: default-github - description: 'The default GitHub provider' + description: "The default GitHub provider" enabled: false type: oauth2 provider_id: github @@ -52,7 +53,7 @@ auth: client_secret: ${env:GITHUB_CLIENT_SECRET} - id: default-google - description: 'The default Google provider' + description: "The default Google provider" enabled: false type: oauth2 provider_id: google @@ -60,7 +61,7 @@ auth: client_secret: ${env:GOOGLE_CLIENT_SECRET} - id: default-linkedin - description: 'The default LinkedIn provider' + description: "The default LinkedIn provider" enabled: false type: oauth2 provider_id: linkedin @@ -68,7 +69,7 @@ auth: client_secret: ${env:LINKEDIN_CLIENT_SECRET} - id: default-microsoft - description: 'The default Microsoft provider' + description: "The default Microsoft provider" enabled: false type: oauth2 provider_id: microsoft @@ -76,7 +77,7 @@ auth: client_secret: ${env:MICROSOFT_CLIENT_SECRET} - id: default-reddit - description: 'The default Reddit provider' + description: "The default Reddit provider" enabled: false type: oauth2 provider_id: reddit @@ -84,7 +85,7 @@ auth: client_secret: ${env:REDDIT_CLIENT_SECRET} - id: default-slack - description: 'The default Slack provider' + description: "The default Slack provider" enabled: false type: oauth2 provider_id: slack @@ -92,7 +93,7 @@ auth: client_secret: ${env:SLACK_CLIENT_SECRET} - id: default-spotify - description: 'The default Spotify provider' + description: "The default Spotify provider" enabled: false type: oauth2 provider_id: spotify @@ -100,7 +101,7 @@ auth: client_secret: ${env:SPOTIFY_CLIENT_SECRET} - id: default-twitch - description: 'The default Twitch provider' + description: "The default Twitch provider" enabled: false type: oauth2 provider_id: twitch @@ -108,7 +109,7 @@ auth: client_secret: ${env:TWITCH_CLIENT_SECRET} - id: default-x - description: 'The default X provider' + description: "The default X provider" enabled: false type: oauth2 provider_id: x @@ -116,14 +117,13 @@ auth: client_secret: ${env:X_CLIENT_SECRET} - id: default-zoom - description: 'The default Zoom provider' + description: "The default Zoom provider" enabled: false type: oauth2 provider_id: zoom client_id: ${env:ZOOM_CLIENT_ID} client_secret: ${env:ZOOM_CLIENT_SECRET} - llm: models: - id: my-openai-model-provider @@ -143,14 +143,12 @@ llm: # base_url: 'https://api.groq.com/openai/v1' # api_key: ${env:GROQ_API_KEY} - security: root_keys: - id: key1 default: true value: ${env:ROOT_KEY_1} - storage: postgres: user: ${env:POSTGRES_USER} @@ -160,7 +158,6 @@ storage: db: ${env:POSTGRES_DB} sslmode: require - telemetry: environment: ${env:TELEMETRY_ENVIRONMENT} logging: @@ -168,7 +165,6 @@ telemetry: level: ${env:TELEMETRY_LOGGING_LEVEL} encoding: ${env:TELEMETRY_LOGGING_ENCODING} - tools: directors: - id: default @@ -185,6 +181,7 @@ tools: ``` ### engine.env + ```bash ### Engine configuration ### API_DEVELOPMENT=true diff --git a/app/en/home/local-deployment/configure/configuring-arcade-deploy/page.mdx b/app/en/home/local-deployment/configure/configuring-arcade-deploy/page.mdx index 60a435dae..760ebf2c6 100644 --- a/app/en/home/local-deployment/configure/configuring-arcade-deploy/page.mdx +++ b/app/en/home/local-deployment/configure/configuring-arcade-deploy/page.mdx @@ -21,7 +21,7 @@ The `arcade deploy` command deploys your worker to the cloud. The `worker.toml` file is used to configure your worker. Running `arcade deploy` will use the `worker.toml` file in the current directory or you can specify a different file with the `-d` flag. -Running the CLI command `arcade new` will automatically create an example `worker.toml` file for the created toolkit. +Running the CLI command `arcade new` will automatically create an example `worker.toml` file for the created MCP Server. ```bash # worker.toml @@ -47,10 +47,10 @@ retries = 3 secret = # (Optional) Localy packages to deploy with the worker. -# You can specify a list of directories that contain a toolkit. +# You can specify a list of directories that contain a MCP Server. # The directory must contain a pyproject.toml file or a setup.py file. [worker.local_source] -packages = [ "./my_toolkit1", "./my_toolkit2"] +packages = [ "./my_mcp_server1", "./my_mcp_server2"] # (Optional) Pypi packages to install for the worker. [worker.pypi_source] diff --git a/app/en/home/local-deployment/configure/engine/page.mdx b/app/en/home/local-deployment/configure/engine/page.mdx index 241c066c4..0e76ed355 100644 --- a/app/en/home/local-deployment/configure/engine/page.mdx +++ b/app/en/home/local-deployment/configure/engine/page.mdx @@ -80,11 +80,13 @@ topic: HTTP is the supported protocol for Arcade Engine's API. The following configuration options are available: - `api.development` _(optional, default: `false`)_ - Enable development mode, with more logging and simple [worker authentication](/home/local-deployment/configure/engine#http-worker-configuration) -- `api.http.host` _(default: `localhost`)_ - Address to which Arcade Engine binds its server (e.g., `localhost` or `0.0.0.0`) -- `api.http.read_timeout` _(optional, default: `30s`)_ - Timeout for reading data from clients -- `api.http.write_timeout` _(optional, default: `1m`)_ - Timeout for writing data to clients -- `api.http.idle_timeout` _(optional, default: `30s`)_ - Timeout for idle connections -- `api.http.max_request_body_size` _(optional, default: `4Mb`)_ - Maximum request body size +- `api.host` _(default: `localhost`)_ - Address to which Arcade Engine binds its server (e.g., `localhost` or `0.0.0.0`) +- `api.port` _(default: `9099`)_ - Port to which Arcade Engine binds its server (e.g., `9099` or `8080`) +- `api.public_host` _(optional)_ - External hostname of the API (e.g., `my-public-host.com`), if it differs from `api.host` (for example, when Arcade Engine is behind a reverse proxy) +- `api.read_timeout` _(optional, default: `30s`)_ - Timeout for reading data from clients +- `api.write_timeout` _(optional, default: `1m`)_ - Timeout for writing data to clients +- `api.idle_timeout` _(optional, default: `30s`)_ - Timeout for idle connections +- `api.max_request_body_size` _(optional, default: `4Mb`)_ - Maximum request body size A typical configuration for production looks like: @@ -95,6 +97,16 @@ api: port: 9099 ``` +When the Arcade Engine is hosted in a container or behind a reverse proxy, set `api.public_host` to the external hostname of the API: + +```yaml +api: + development: false + host: localhost + port: 9099 + public_host: my-public-host.com +``` + For local development, set `api.development = true`. In development mode, Arcade Engine does not require [worker authentication](/home/local-deployment/configure/engine#http-worker-configuration). ## Auth configuration @@ -144,8 +156,8 @@ Two cache implementations are available: cache: api_key_ttl: 10s redis: - addr: 'localhost:6379' - password: '' + addr: "localhost:6379" + password: "" db: 0 ``` @@ -263,7 +275,7 @@ tools: - id: local_worker enabled: true http: - uri: 'http://localhost:8002' + uri: "http://localhost:8002" timeout: 30 retry: 3 secret: ${env:ARCADE_WORKER_SECRET} diff --git a/app/en/home/local-deployment/install/_meta.tsx b/app/en/home/local-deployment/install/_meta.tsx index 12ce38655..8d84cf94a 100644 --- a/app/en/home/local-deployment/install/_meta.tsx +++ b/app/en/home/local-deployment/install/_meta.tsx @@ -2,5 +2,5 @@ export default { overview: "Overview", local: "Local", docker: "Docker", - toolkits: "Toolkits", + "mcp-servers": "MCP Servers", }; diff --git a/app/en/home/local-deployment/install/docker/page.mdx b/app/en/home/local-deployment/install/docker/page.mdx index 566dbac89..e116ce919 100644 --- a/app/en/home/local-deployment/install/docker/page.mdx +++ b/app/en/home/local-deployment/install/docker/page.mdx @@ -27,6 +27,3 @@ docker run -d -p 9099:9099 -v ./engine.yaml:/bin/engine.yaml ghcr.io/arcadeai/en where config.yaml is the path to the [configuration file](/home/local-deployment/configure/configuration-templates). -## Worker - -Arcade now provides a base Worker image that you can use to build your custom Worker image. Follow the [Build custom worker images with docker](/home/serve-tools/docker-worker) guide to create your own Worker image using Arcade's base Worker image. diff --git a/app/en/home/local-deployment/install/local/page.mdx b/app/en/home/local-deployment/install/local/page.mdx index 5ea4e1107..2064cbb9d 100644 --- a/app/en/home/local-deployment/install/local/page.mdx +++ b/app/en/home/local-deployment/install/local/page.mdx @@ -33,7 +33,7 @@ pip install arcade-ai arcade login ``` -For a simple example on using the Arcade CLI, see the [quickstart on building tools](/home/build-tools/create-a-toolkit) +For a simple example on using the Arcade CLI, see the [quickstart on building tools](/home/build-tools/create-a-mcp-server) ### Install the Engine @@ -64,7 +64,7 @@ This will install a template engine configuration. -### Install a toolkit +### Install a MCP Server In order to run the Arcade worker, you'll need to install at least one tool. For local development, you can just `pip install` a tool in the same environment as the client. @@ -72,9 +72,9 @@ In order to run the Arcade worker, you'll need to install at least one tool. For pip install arcade-math ``` -For more information on installing toolkits, see the [Toolkit Installation](/home/local-deployment/install/toolkits) page. +For more information on installing tools, see the [Toolkit Installation](/home/local-deployment/install/mcp-servers) page. -To see all available toolkits, view the [Toolkits Page](/toolkits). +To see all available tools, view the [MCP Servers Page](/mcp-servers). ### Set OpenAI API key @@ -128,7 +128,7 @@ You are now chatting with Arcade locally! ## Next Steps -- **Building Tools**: Learn how to build tools with your local Arcade Instance in the [Creating a Toolkit](/home/build-tools/create-a-toolkit) guide. +- **Building Tools**: Learn how to build tools with your local Arcade Instance in the [Creating a Toolkit](/home/build-tools/create-a-mcp-server) guide. - **Hosting With Docker**: Learn how to run the [Engine in Docker](/home/local-deployment/install/docker). ## Troubleshooting @@ -169,13 +169,13 @@ export PATH=$PATH:/path/to/your/binary
-### Toolkits Not Found +### MCP Servers Not Found ```bash No toolkits found in Python environment. Exiting... ``` -This means that there are no toolkits found in the same environment as the Arcade SDK. Ensure that you are installing the toolkit package in the same environment and see the [Toolkit Installation Guide](/home/local-deployment/install/toolkits) for more details. +This means that there are no MCP Servers found in the same environment as the Arcade SDK. Ensure that you are installing the MCP Server package in the same environment and see the [MCP Server Installation Guide](/home/local-deployment/install/mcp-servers) for more details.
diff --git a/app/en/home/local-deployment/install/toolkits/page.mdx b/app/en/home/local-deployment/install/mcp-servers/page.mdx similarity index 80% rename from app/en/home/local-deployment/install/toolkits/page.mdx rename to app/en/home/local-deployment/install/mcp-servers/page.mdx index 9d9bab385..96fe11e48 100644 --- a/app/en/home/local-deployment/install/toolkits/page.mdx +++ b/app/en/home/local-deployment/install/mcp-servers/page.mdx @@ -1,9 +1,9 @@ --- -title: "Toolkits" +title: "MCP Servers" description: "How to install Arcade Tools" --- -# Install a tool or toolkit +# Install a tool or MCP Server ## Running a Local worker @@ -13,20 +13,19 @@ To run a local worker without the arcade engine, you can run the following comma arcade serve ``` -This will check for any toolkits installed in the current python virtual environment and register them with the worker. +This will check for any MCP Servers installed in the current python virtual environment and register them with the worker. You can also pass in the `--host` and `--port` flags to specify the host and port to run the worker on. The default host is `127.0.0.1` and the default port is `8002`. - ## PyPI Installation -All Arcade toolkits are available on PyPI. To install a toolkit, run the following in the same python virtual environment as the arcade-ai package: +All Arcade MCP Servers are available on PyPI. To install a MCP Server, run the following in the same python virtual environment as the arcade-ai package: ```bash -pip install arcade-[toolkit_name] +pip install arcade-[mcp_server_name] ``` -For example, to install the math toolkit, run: +For example, to install the math MCP Server, run: ```bash pip install arcade-math @@ -50,11 +49,11 @@ which should return output similar to: These are all tools that are installed in the same python virtual environment as the arcade-ai package. -See our [Toolkits Overview page](/toolkits) for all available toolkits and individual installation instructions. +See our [MCP Servers Overview page](/mcp-servers) for all available MCP Servers and individual installation instructions. ## Local Package Installation -Locally built toolkits can also be installed with: +Locally built MCP Servers can also be installed with: ```python pip install . @@ -68,9 +67,9 @@ pip install in the same python virtual environment as the arcade-ai package. -## Hosted Toolkits +## Hosted MCP Servers -To add a toolkit to a hosted worker such as FastAPI, you can register them in the worker itself. This allows you to explicitly define which tools should be included on a particular worker. +To add a MCP Server to a hosted worker such as FastAPI, you can register them in the worker itself. This allows you to explicitly define which tools should be included on a particular worker. ```python import arcade_math @@ -110,4 +109,4 @@ arcade show -h -p ## Authenticated Tools -Some Toolkits may need authentication through an API key or OAuth, which can be configured in the Arcade Engine. To see the specific configuration requirements, you can checkout our [Auth Providers](/home/auth-providers). +Some MCP Servers may need authentication through an API key or OAuth, which can be configured in the Arcade Engine. To see the specific configuration requirements, you can checkout our [Auth Providers](/home/auth-providers). diff --git a/app/en/home/mastra/_meta.ts b/app/en/home/mastra/_meta.ts deleted file mode 100644 index cdb53979a..000000000 --- a/app/en/home/mastra/_meta.ts +++ /dev/null @@ -1,5 +0,0 @@ -export default { - overview: "Overview", - "use-arcade-tools": "Using Arcade tools", - "user-auth-interrupts": "Managing user authorization", -}; diff --git a/app/en/home/mastra/_meta.tsx b/app/en/home/mastra/_meta.tsx new file mode 100644 index 000000000..be1063c2d --- /dev/null +++ b/app/en/home/mastra/_meta.tsx @@ -0,0 +1,21 @@ +import type { MetaRecord } from "nextra"; + +const meta: MetaRecord = { + "*": { + theme: { + breadcrumb: true, + toc: true, + }, + }, + overview: { + title: "Overview", + }, + "use-arcade-tools": { + title: "Using Arcade tools", + }, + "user-auth-interrupts": { + title: "Managing user authorization", + }, +}; + +export default meta; diff --git a/app/en/home/mastra/overview/page.mdx b/app/en/home/mastra/overview/page.mdx index 9cc336c80..e61b3f3c5 100644 --- a/app/en/home/mastra/overview/page.mdx +++ b/app/en/home/mastra/overview/page.mdx @@ -11,7 +11,7 @@ import { Callout } from "nextra/components"; This integration enables you to: -- **Access a wide range of tools:** Use Arcade's [pre-built tools](/toolkits) for GitHub, Google Workspace, Slack, and more directly within your Mastra agent. +- **Access a wide range of tools:** Use Arcade's [pre-built tools](/mcp-servers) for GitHub, Google Workspace, Slack, and more directly within your Mastra agent. - **Simplify tool management:** Let Arcade handle the complexities of tool discovery, execution, and authentication. - **Build sophisticated agents:** Combine Mastra's agent framework (including memory, workflows, and RAG) with Arcade's powerful tool capabilities. @@ -23,7 +23,9 @@ The integration works through three key mechanisms: 2. **Schema Conversion:** Transform Arcade's tool definitions into Mastra-compatible Zod schemas with the `toZodToolSet` utility, enabling seamless integration between the two frameworks without manual schema mapping. 3. **Execution Delegation:** Seamlessly route tool calls from your Mastra agent through Arcade's API, which handles all the complexities of third-party service authentication and execution. -Before starting, obtain an [Arcade API key](/home/api-keys). + + Before starting, obtain an [Arcade API key](/home/api-keys). + ### Next Steps diff --git a/app/en/home/mastra/use-arcade-tools/page.mdx b/app/en/home/mastra/use-arcade-tools/page.mdx index 4d0b60eb9..1e7b0919f 100644 --- a/app/en/home/mastra/use-arcade-tools/page.mdx +++ b/app/en/home/mastra/use-arcade-tools/page.mdx @@ -84,8 +84,8 @@ import { // Initialize Arcade const arcade = new Arcade(); -// Get Gmail toolkit -// Toolkit names can be found in the Arcade dashboard via Tools > view > Toolkit or via the CLI `arcade workers list` +// Get Gmail MCP Server +// MCP Server names can be found in the Arcade dashboard via Tools > view > MCP Server or via the CLI `arcade workers list` const gmailToolkit = await arcade.tools.list({ toolkit: "Gmail", limit: 30 }); // Get Gmail tools diff --git a/app/en/home/mcp-clients/_meta.tsx b/app/en/home/mcp-clients/_meta.tsx new file mode 100644 index 000000000..0253e8756 --- /dev/null +++ b/app/en/home/mcp-clients/_meta.tsx @@ -0,0 +1,4 @@ +export default { + "claude-desktop": "Claude Desktop", + "visual-studio-code": "Visual Studio Code", +}; diff --git a/app/en/home/mcp-desktop-clients/use-arcade-with-claude-desktop/page.mdx b/app/en/home/mcp-clients/claude-desktop/page.mdx similarity index 93% rename from app/en/home/mcp-desktop-clients/use-arcade-with-claude-desktop/page.mdx rename to app/en/home/mcp-clients/claude-desktop/page.mdx index a7e099cb3..1fa46badf 100644 --- a/app/en/home/mcp-desktop-clients/use-arcade-with-claude-desktop/page.mdx +++ b/app/en/home/mcp-clients/claude-desktop/page.mdx @@ -19,8 +19,9 @@ In this guide, you'll learn how to connect Claude Desktop to a local Arcade serv pip install arcade-ai pip install arcade-google ``` + -See more of Arcade's [Toolkits](/toolkits) that can be installed. + See more of Arcade's [MCP Servers](/mcp-servers) that can be installed. ### Set up Claude Desktop @@ -48,6 +49,6 @@ Replace `YOUR_ARCADE_API_KEY_HERE` with your actual Arcade API key and `/path/to } ``` -5. Restart Claude Desktop. Upon restarting, you should have access to the Arcade toolkits you installed. +5. Restart Claude Desktop. Upon restarting, you should have access to the Arcade tools you installed. diff --git a/app/en/home/mcp-desktop-clients/use-arcade-in-visual-studio-code/page.mdx b/app/en/home/mcp-clients/visual-studio-code/page.mdx similarity index 66% rename from app/en/home/mcp-desktop-clients/use-arcade-in-visual-studio-code/page.mdx rename to app/en/home/mcp-clients/visual-studio-code/page.mdx index cd98d8974..0cf734e2c 100644 --- a/app/en/home/mcp-desktop-clients/use-arcade-in-visual-studio-code/page.mdx +++ b/app/en/home/mcp-clients/visual-studio-code/page.mdx @@ -5,12 +5,15 @@ import { Steps, Callout } from "nextra/components"; In this guide, you'll learn how to connect Visual Studio Code to Arcade.dev's MCP server. -As of version 1.100.0, Visual Studio Code does not yet support [MCP authorization](https://modelcontextprotocol.io/specification/draft/basic/authorization). Only tools that do not require auth, such as math and [search](/toolkits/search/google_search) tools, will work with Visual Studio Code. We're working to improve this - stay tuned! + As of version 1.100.0, Visual Studio Code does not yet support [MCP + authorization](https://modelcontextprotocol.io/specification/draft/basic/authorization). + Only tools that do not require auth, such as math and + [search](/mcp-servers/search/google_search) tools, will work with Visual + Studio Code. We're working to improve this - stay tuned! - ### Set up Visual Studio Code 1. Download and open [Visual Studio Code](https://code.visualstudio.com/download) (version 1.100.0 or higher) @@ -19,12 +22,15 @@ As of version 1.100.0, Visual Studio Code does not yet support [MCP authorizatio 1. Paste the following URL: `https://api.arcade.dev/v1/mcps/arcade-anon/mcp` - This URL is Arcade's public beta MCP server. We'd love to [hear your feedback](/home/contact-us)! - Coming soon: deploy a server with your own tools. + This URL is Arcade's public beta MCP server. We'd love to [hear your + feedback](/home/contact-us)! Coming soon: deploy a server with your own + tools. + 1. Give your MCP server a name, like `mcp-arcade-dev` Visual Studio Code will update your `settings.json` file with the following: + ```json "mcp": { "servers": { @@ -43,8 +49,10 @@ Visual Studio Code will update your `settings.json` file with the following: 1. Click to select the tools you want to use, and type your request in the chat pane!
- Visual Studio Code tools panel + Visual Studio Code tools panel
-
diff --git a/app/en/home/mcp-desktop-clients/_meta.tsx b/app/en/home/mcp-desktop-clients/_meta.tsx deleted file mode 100644 index c8932346f..000000000 --- a/app/en/home/mcp-desktop-clients/_meta.tsx +++ /dev/null @@ -1,4 +0,0 @@ -export default { - "use-arcade-with-claude-desktop": "Use Arcade with Claude Desktop", - "use-arcade-in-visual-studio-code": "Use Arcade in Visual Studio Code", -}; diff --git a/app/en/home/mcp-overview/page.mdx b/app/en/home/mcp-overview/page.mdx deleted file mode 100644 index 603877702..000000000 --- a/app/en/home/mcp-overview/page.mdx +++ /dev/null @@ -1,79 +0,0 @@ ---- -title: "MCP Overview" -description: "Model Context Protocol (MCP): The Arcade.dev Perspective" ---- -# Model Context Protocol (MCP): The Arcade.dev Perspective - -## What is MCP and Why Should Developers Care? - -Model Context Protocol represents a significant step toward standardizing how AI agents interact with tools and external systems. As the developer-first platform for authenticated tool-calling, Arcade.dev has been at the forefront of connecting AI models to real-world actions - which is why our perspective on MCP matters. - -For developers building AI applications that need to do more than just generate text, understanding the strengths and limitations of protocols like MCP is critical to making informed architecture decisions. - -## The Current State of Model Context Protocol - -MCP aims to standardize how AI models access and use applications to get data or use tools - a problem space Arcade.dev has been solving since day one. While the protocol rightly focuses on how applications provide context to LLMs, our hands-on experience building production agent systems reveals both opportunities and challenges. - -### Where MCP Gets It Right - -* **Standardization attempt**: Creating common patterns for tool definitions across different AI providers is a step in the right direction. It allows agent builders to switch between different LLM providers and optimize costs and performance for each component using an LLM. -* **Focus on function-calling**: Correctly identifies that giving AI models the ability to call functions is fundamental to realize the agent's full potential. The protocol got the difference between LLM resources and regular APIs right from the beginning. While traditional APIs are designed for developers to use, LLM-optimized tools require additional context to be used effectively by AI systems. The recognition of what we call [Machine Experience Engineering](https://blog.arcade.dev/the-birth-of-machine-experience-engineering) is something MCP designers also identified early on. -* **Community momentum**: Building adoption across multiple providers creates healthy ecosystem dynamics, giving all actors that adopt MCP the benefits of a robust, well-tested and growing ecosystem of LLM-ready resources, both local and remote. - -### Where MCP is Evolving - -* **Authentication gaps**: The protocol was initially designed for local resources only, and required considerable technical knowledge to integrate with clients like VSCode, Cursor, and Claude Desktop. 99% of MCP servers today are built for single-user use, even hosted ones. If you need to configure the MCP server with a PAT (personal access token) or an API key, it's not usable by a multi-user (B2B2C) or cloud-based agent. At a minimum, MCP servers need to support [HTTP](https://modelcontextprotocol.io/specification/2025-03-26/basic/transports#streamable-http), [MCP authorization](https://modelcontextprotocol.io/specification/draft/basic/authorization), and support multi-user authorization. Having a robust standard for tool calling without the same robustness for auth quickly began the adoption of ad-hoc solutions that were more or less insecure for remote tool calling, the #1 bottleneck in moving AI agents to production. Fortunately, active work is ongoing on the MCP community to adopt a solid auth component in the protocol. [Arcade.dev's own auth team actively contribute](https://www.youtube.com/watch?v=f1sLBGWnByc) to the specification in this crucial area. -* **Production readiness**: Enterprise-grade concerns like observability, security, and compliance need stronger representation. As the protocol evolves, we expect all of these aspects to be integrated into the protocol. -* **Developer experience**: Implementation complexity can create significant friction for teams without specialized AI expertise. MCP is a very new protocol undergoing rapid changes, so the DX is expected to be turbulent until the protocol matures. Arcade.dev supports this from day one while providing the best DX for building tools that can be served over MCP to any AI agent. - -## How Arcade.dev Complements and Extends MCP - -Rather than viewing MCP as either perfect or problematic, we see it as part of an evolving ecosystem. Arcade.dev bridges critical gaps in the protocol by providing: - -1. **Authentication-first architecture**: Secure, OAuth-based connections that let AI access tools as the end user - not as a "bot" -1. **Production infrastructure**: Monitoring, logging, and evaluation capabilities built for enterprise deployment. This also includes improvements to tool selection when many tools are enabled. -1. **Developer acceleration**: SDKs that dramatically reduce time-to-value when implementing tool-calling patterns -1. **Multi-model compatibility**: Works seamlessly with all major LLM providers, regardless of their MCP implementation status. You can start building your agents today, and switch to MCP seamlessly when your LLM provider supports it, or when the MCP SDK reaches enterprise level readiness - - - - - - - - -
MCP Auth DiagramMCP Auth Diagram
- -## Why This Matters for Your AI Applications - -AI that can't authenticate to access accounts or use data is fundamentally limited. This disconnect is why less than 30% of AI projects go to production. - -The biggest opportunity in AI today isn't better modelsβ€”it's enabling those models to take real actions. Developers need secure connections between AI and authenticated services, user data, and enterprise systems. - -By combining MCP's standardization efforts with Arcade.dev's authentication-first approach, developers can build AI applications that don't just suggest actionsβ€”they take them. - -## Our Commitment to the Protocol Ecosystem - -At Arcade.dev, we're active participants in the evolving tool-calling ecosystem. Our team contributes to open standards like MCP while building the production-grade infrastructure developers need today. - -As Sam Partee, our CTO, explains: "Protocols like MCP are important stepping stones toward more capable AI agents. Our focus is making sure developers can build with these patterns today, with authentication and security baked in from the start." - -## Frequently Asked MCP Questions - -### Is Arcade.dev an alternative to MCP? - -No. Arcade.dev complements protocol standards like MCP by providing the authentication layer, developer tooling, and production infrastructure needed to implement them successfully in real-world applications. Arcade’s Engine can be an MCP server with super-powers, and you can pull in upstream MCP servers as tools into Arcade. - -### Do I need to understand MCP to use Arcade.dev? - -Not at all. Arcade.dev provides intuitive SDKs that handle the complexities of tool-calling patterns, regardless of which underlying protocol standards are in use. - -### What models work with Arcade.dev's approach to MCP? - -Arcade.dev works with all major models including Claude, GPT-4, Llama, Mistral, and more - supporting both MCP-compatible and non-MCP implementations through our unified API. - -### How does Arcade.dev handle authentication within the MCP framework? - -Arcade.dev extends(*) basic MCP implementations with enterprise-grade OAuth flows, secure token management, and fine-grained permissions - solving the authentication gap that often blocks production deployment. - -(*) Arcade is currently compatible with the existing ratified MCP specifications, and is working to extend them for [tool authorization](https://github.com/modelcontextprotocol/modelcontextprotocol/pull/475). diff --git a/app/en/home/migrate-to-v2/page.mdx b/app/en/home/migrate-to-v2/page.mdx deleted file mode 100644 index 699b3b780..000000000 --- a/app/en/home/migrate-to-v2/page.mdx +++ /dev/null @@ -1,44 +0,0 @@ -# Migration Guide - -import { Callout } from "nextra/components"; - - - If your project does not have its dependency on `arcade-ai` pinned to the v1 major version, you must pin it to the v1 major version immediately to prevent potential breakages. - - -## Release Timeline -Version 2.0.0 of the Arcade CLI was released on **Tuesday, June 17th**. Make sure to pin your project's dependency on `arcade-ai` to the v1 major version before this date to avoid any disruptions. - -## Package Changes -With the release of version 2.0.0, the [arcade-ai PyPI package](https://pypi.org/project/arcade-ai/) has been divided into three distinct packages. Previously, `arcade-ai` was a monolithic package that included: -- Tool Development Kit (TDK) -- Core execution engine and catalog functionality -- FastAPI/MCP server/worker components -- CLI functionality -- Evaluation framework - -Now, the `arcade-ai` package serves as Arcade.dev's CLI, allowing you to create 'starter' toolkits, serve and deploy toolkits, chat, and more via the command line. Also, two new packages have been introduced: `arcade-serve` and `arcade-tdk`. This means faster build times, lighter dependencies, and better performance. - -## Package Overview -- **arcade-ai**: - - To get [the CLI](https://docs.arcade.dev/home/arcade-cli), install via: `pip install arcade-ai` - - To get [the evaluation framework](https://docs.arcade.dev/home/build-tools/evaluation-framework), install via: `pip install 'arcade-ai[evals]'` - - To get everything including the TDK and Serve, install via: `pip install 'arcade-ai[all]'` - -- **arcade-tdk**: - - If you're [writing your own](https://docs.arcade.dev/home/build-tools/create-a-toolkit) Arcade tools/toolkits. - - Install via: `pip install arcade-tdk` - -- **arcade-serve**: - - If you're [writing your own](https://docs.arcade.dev/home/serve-tools/modal-worker) custom worker. - - Install via: `pip install arcade-serve` - -## Code Migration Steps -Migrating from v1 to v2 is straightforward with a few find-and-replace actions: -1. Replace all occurrences of `arcade.sdk.eval` with `arcade_evals`. -2. Replace all remaining occurrences of `arcade.sdk` with `arcade_tdk`. -3. Replace all occurrences of `arcade.worker` with `arcade_serve`. -4. Remove your project's required dependency on `arcade-ai`. -5. Add `arcade_tdk>=2.0.0,<3.0.0` as a required dependency if you replaced `arcade.sdk` with `arcade_tdk` in step 2. -6. Add `arcade-ai[evals]>=2.0.0,<3.0.0` as an optional dev dependency if you use the evaluation framework or the CLI. -7. Add `arcade-serve>=2.0.0,<3.0.0` as an optional dev dependency if you use the `arcade serve` CLI command. diff --git a/app/en/home/oai-agents/overview/page.mdx b/app/en/home/oai-agents/overview/page.mdx index b73b3f8a4..27eaa1f72 100644 --- a/app/en/home/oai-agents/overview/page.mdx +++ b/app/en/home/oai-agents/overview/page.mdx @@ -2,8 +2,8 @@ title: "Arcade with OpenAI Agents overview" description: "Comprehensive guide to using Arcade with the OpenAI Agents library" --- -import { Steps, Tabs, Callout } from "nextra/components"; +import { Steps, Tabs, Callout } from "nextra/components"; # Arcade with OpenAI Agents @@ -34,11 +34,10 @@ npm install @openai/agents @arcadeai/arcadejs Make sure you have your Arcade API key ready. [Get an API key](/home/api-keys) if you don't already have one. - ## Key features - **Easy integration** with the OpenAI Agents framework -- **Access to all Arcade toolkits** including Google, GitHub, LinkedIn, X, and more +- **Access to all Arcade MCP Servers** including Google, GitHub, LinkedIn, X, and more - **Create custom tools** with the Arcade Tool SDK - **Manage user authentication** for tools that require it - **Asynchronous support** compatible with OpenAI's Agent framework @@ -60,7 +59,7 @@ async def main(): # Initialize the Arcade client client = AsyncArcade() - # Get tools from the "gmail" toolkit + # Get tools from the "gmail" MCP Server tools = await get_arcade_tools(client, toolkits=["gmail"]) # Create an agent with Gmail tools @@ -94,14 +93,14 @@ if __name__ == "__main__": Check out the complete working example in our [GitHub repository](https://github.com/ArcadeAI/arcade-ai/tree/main/examples/openai-agents-ts/src/index.ts). ```javascript -import Arcade from '@arcadeai/arcadejs'; +import Arcade from "@arcadeai/arcadejs"; import { executeOrAuthorizeZodTool, toZod } from "@arcadeai/arcadejs/lib"; -import { Agent, run, tool } from '@openai/agents'; +import { Agent, run, tool } from "@openai/agents"; // 1) Initialize Arcade client const client = new Arcade(); -// 2) Fetch Gmail toolkit from Arcade and prepare tools for OpenAI Agents +// 2) Fetch Gmail MCP Server from Arcade and prepare tools for OpenAI Agents const googleToolkit = await client.tools.list({ toolkit: "gmail", limit: 30 }); const tools = toZod({ tools: googleToolkit.items, @@ -110,12 +109,13 @@ const tools = toZod({ executeFactory: executeOrAuthorizeZodTool, }).map(tool); -// 3) Create a new agent with the Gmail toolkit +// 3) Create a new agent with the Gmail MCP Server const googleAgent = new Agent({ name: "Gmail agent", - instructions: "You are a helpful assistant that can assist with Google API calls.", + instructions: + "You are a helpful assistant that can assist with Google API calls.", model: "gpt-4o-mini", - tools + tools, }); // 4) Run the agent @@ -129,7 +129,6 @@ console.log(result.finalOutput); - ## Handling authorization @@ -162,9 +161,9 @@ Once you have authorized access, I can retrieve your latest emails. After visiting the URL and authorizing access, the user can run the agent again with the same `user_id`, and it will work without requiring re-authorization. -## Available toolkits +## Available MCP Servers -Arcade provides a variety of toolkits you can use with your agents: +Arcade provides a variety of MCP Servers you can use with your agents: - **Google Suite**: Gmail, Calendar, Drive, Docs - **Social Media**: LinkedIn, X @@ -172,7 +171,7 @@ Arcade provides a variety of toolkits you can use with your agents: - **Web**: Web search, content extraction - **And more**: Weather, financial data, etc. -For a full list of available toolkits, visit the [Arcade Toolkits](/toolkits) documentation. +For a full list of available MCP Servers, visit the [Arcade MCP Servers](/mcp-servers) documentation. ## Next steps @@ -180,6 +179,6 @@ Ready to start building with Arcade and OpenAI Agents? Check out these guides: - [Using Arcade tools](/home/oai-agents/use-arcade-tools) - Learn the basics of using Arcade tools with OpenAI Agents - [Managing user authorization](/home/oai-agents/user-auth-interrupts) - Handle tool authorization efficiently -- [Creating custom tools](/home/build-tools/create-a-toolkit) - Build your own tools with the Arcade Tool SDK +- [Creating custom tools](/home/build-tools/create-a-mcp-server) - Build your own tools with the Arcade Tool SDK Enjoy exploring Arcade and building powerful AI-enabled applications! diff --git a/app/en/home/oai-agents/use-arcade-tools/page.mdx b/app/en/home/oai-agents/use-arcade-tools/page.mdx index e15b0d4cf..0b098f28c 100644 --- a/app/en/home/oai-agents/use-arcade-tools/page.mdx +++ b/app/en/home/oai-agents/use-arcade-tools/page.mdx @@ -74,7 +74,7 @@ ARCADE_API_KEY=YOUR_ARCADE_API_KEY -Use the `get_arcade_tools` function to retrieve tools from specific toolkits: +Use the `get_arcade_tools` function to retrieve tools from specific MCP Servers: ```python from arcadepy import AsyncArcade @@ -83,10 +83,10 @@ from agents_arcade import get_arcade_tools # Initialize the Arcade client client = AsyncArcade() -# Get all tools from the "Gmail" toolkit +# Get all tools from the "Gmail" MCP Server tools = await get_arcade_tools(client, toolkits=["gmail"]) -# You can request multiple toolkits at once +# You can request multiple MCP Servers at once tools = await get_arcade_tools(client, toolkits=["gmail", "github", "linkedin"]) # You can request specific tools @@ -104,11 +104,11 @@ import { tool } from '@openai/agents'; const client = new Arcade(); -// Option 1: Get tools from a single toolkit +// Option 1: Get tools from a single MCP Server const googleTools = await client.tools.list({ toolkit: "gmail", limit: 30 }); const toolsFromGoogle = googleTools.items; -// Option 2: Get tools from multiple toolkits +// Option 2: Get tools from multiple MCP Servers const [google, github, linkedin] = await Promise.all([ client.tools.list({ toolkit: "gmail", limit: 30 }), client.tools.list({ toolkit: "github", limit: 30 }), @@ -300,7 +300,7 @@ import { Agent, run, tool } from '@openai/agents'; // 1) Initialize Arcade client const client = new Arcade(); -// 2) Fetch Gmail toolkit from Arcade and prepare tools for OpenAI Agents +// 2) Fetch Gmail MCP Server from Arcade and prepare tools for OpenAI Agents const googleToolkit = await client.tools.list({ toolkit: "gmail", limit: 30 }); const tools = toZod({ tools: googleToolkit.items, @@ -309,7 +309,7 @@ const tools = toZod({ executeFactory: executeOrAuthorizeZodTool, }).map(tool); -// 3) Create a new agent with the Gmail toolkit +// 3) Create a new agent with the Gmail MCP Server const googleAgent = new Agent({ name: "Gmail agent", instructions: "You are a helpful assistant that can assist with Google API calls.", @@ -338,7 +338,7 @@ console.log(result.finalOutput); Now that you have integrated Arcade tools into your OpenAI Agents application, you can: -- Experiment with different toolkits, such as "github" or "linkedin" +- Experiment with different MCP Servers, such as "Github" or "LinkedIn" - Customize the agent's instructions for specific tasks - Try out multi-agent systems using different Arcade tools - Build your own custom tools with the Arcade Tool SDK diff --git a/app/en/home/oai-agents/user-auth-interrupts/page.mdx b/app/en/home/oai-agents/user-auth-interrupts/page.mdx index f47c75e87..c3c149071 100644 --- a/app/en/home/oai-agents/user-auth-interrupts/page.mdx +++ b/app/en/home/oai-agents/user-auth-interrupts/page.mdx @@ -314,7 +314,7 @@ from agents_arcade.errors import AuthorizationError async def main(): client = AsyncArcade() - # Use the "github" toolkit for this example + # Use the "github" MCP Server for this example tools = await get_arcade_tools(client, toolkits=["github"]) github_agent = Agent( @@ -366,7 +366,7 @@ async function main() { // 1) Initialize Arcade client const client = new Arcade(); - // 2) Fetch Gmail toolkit from Arcade and prepare tools for OpenAI Agents + // 2) Fetch Gmail MCP Server from Arcade and prepare tools for OpenAI Agents const googleToolkit = await client.tools.list({ toolkit: "gmail", limit: 30 }); const tools = toZod({ tools: googleToolkit.items, @@ -374,7 +374,7 @@ async function main() { userId: "", // Replace this with your application's user ID (e.g. email address, UUID, etc.) }).map(tool); - // 3) Create a new agent with the Gmail toolkit + // 3) Create a new agent with the Gmail MCP Server const googleAgent = new Agent({ name: "Gmail agent", instructions: "You are a helpful assistant that can assist with Google API calls.", @@ -423,19 +423,19 @@ This example handles the authentication flow by: ## Authentication persistence -Once a user authorizes an integration, Arcade will remember the authorization for that specific user_id and toolkit. You don't need to re-authorize each time you run the agent. +Once a user authorizes an integration, Arcade will remember the authorization for that specific user_id and MCP Server. You don't need to re-authorize each time you run the agent. Key points to remember: - Always use a consistent and unique `user_id` for each user - Store the `user_id` securely in your application -- Different toolkits require separate authorization flows +- Different MCP Servers require separate authorization flows - Authorization tokens are managed by Arcade, not your application ## Next steps - Build a user interface to handle authorization flows smoothly -- Explore other Arcade toolkits like Google, LinkedIn, or X +- Explore other Arcade MCP Servers like Google, LinkedIn, or X - Create multi-step workflows with multiple tools and authorizations - Learn to build your own custom tools with the Arcade Tool SDK diff --git a/app/en/home/page.mdx b/app/en/home/page.mdx index f07090035..fc5fdcfda 100644 --- a/app/en/home/page.mdx +++ b/app/en/home/page.mdx @@ -3,6 +3,6 @@ title: "Arcade Docs" description: "Welcome to the Arcade Docs! Here you'll find everything you need to know about Arcade." --- -import { LandingPage } from "@/app/_components/landing-page"; +import { LandingPage } from "./landing-page"; diff --git a/app/en/home/quickstart/page.mdx b/app/en/home/quickstart/page.mdx index 5cd0d7586..4a768d932 100644 --- a/app/en/home/quickstart/page.mdx +++ b/app/en/home/quickstart/page.mdx @@ -44,12 +44,12 @@ Ready to start? Follow the Quickstart below. - ```python - pip install arcadepy + ```python + pip install arcadepy ``` - ```javascript + ```javascript npm install @arcadeai/arcadejs ``` @@ -70,7 +70,7 @@ client = Arcade(api_key="{arcade_api_key}") # In this example, use the email you used to sign up for Arcade.dev: user_id = "{arcade_user_id}" -# Let's use the `Math.Sqrt` tool from the Arcade Math toolkit to get the square root of a number. +# Let's use the `Math.Sqrt` tool from the Arcade Math MCP Server to get the square root of a number. response = client.tools.execute( tool_name="Math.Sqrt", input={"a": '625'}, @@ -117,7 +117,7 @@ const client = new Arcade({ // In this example, use the email you used to sign up for Arcade.dev: let userId = "{arcade_user_id}"; -// Let's use the `Math.Sqrt` tool from the Arcade Math toolkit to get the square root of a number. +// Let's use the `Math.Sqrt` tool from the Arcade Math MCP Server to get the square root of a number. const response_sqrt = await client.tools.execute({ tool_name: "Math.Sqrt", input: { a: "625" }, @@ -160,16 +160,16 @@ console.log(response_github.output.value); - ```bash - python3 example.py - > The square root of 625 is 25 + ```bash + python3 example.py + > The square root of 625 is 25 > Successfully starred the repository ArcadeAI/arcade-ai ``` - ```bash - node example.mjs - > The square root of 625 is 25 + ```bash + node example.mjs + > The square root of 625 is 25 > Successfully starred the repository ArcadeAI/arcade-ai ``` @@ -179,4 +179,4 @@ console.log(response_github.output.value); ## Next Steps -In this simple example, we call the tool methods directly. In your real applications and agents, you'll likely be letting the LLM decide which tools to call - lean more about using Arcade with Frameworks in the [Frameworks](/home/langchain/use-arcade-tools) section, or [how to build your own tools](/home/build-tools/create-a-toolkit). +In this simple example, we call the tool methods directly. In your real applications and agents, you'll likely be letting the LLM decide which tools to call - lean more about using Arcade with Frameworks in the [Frameworks](/home/langchain/use-arcade-tools) section, or [how to build your own tools](/home/build-tools/create-a-mcp-server). diff --git a/app/en/home/registry-early-access/page.mdx b/app/en/home/registry-early-access/page.mdx index 3b6a75241..0ae0a81df 100644 --- a/app/en/home/registry-early-access/page.mdx +++ b/app/en/home/registry-early-access/page.mdx @@ -18,8 +18,8 @@ The **Arcade Registry** is how agentic tool developers share their work with the Unlike traditional read-only tool libraries, Arcade.dev couples the runtime with the registry. This way we can collect real metrics and usage information about your tools, sharing meaningful information and feedback back to the developers. You'll get error reports and statistics about how your tools are getting used. Arcade.dev also makes it possible for developers to optionally choose to sell their tools with a markup on top of the Arcade platform fees. -Thanks to the Arcade Engine, your toolkits will be available via all the protocols Arcade supports - be that MCP for locally-running applications, OXP for server applications, and whatever comes next. Use the open-source Arcade SDKs to future-proof your tools. +Thanks to the Arcade Engine, your MCP Servers will be available via all the protocols Arcade supports - be that MCP for locally-running applications, OXP for server applications, and whatever comes next. Use the open-source Arcade SDKs to future-proof your tools. -We are seeking beta testers who are interested in building, maintaining, and sharing toolkits with the world in either a free-to-use or for-profit manner. Sign up today to join the Arcade Registry Beta. +We are seeking beta testers who are interested in building, maintaining, and sharing MCP Servers with the world in either a free-to-use or for-profit manner. Sign up today to join the Arcade Registry Beta. diff --git a/app/en/home/serve-tools/_meta.tsx b/app/en/home/serve-tools/_meta.tsx index b4b5b35dc..d6087d4a1 100644 --- a/app/en/home/serve-tools/_meta.tsx +++ b/app/en/home/serve-tools/_meta.tsx @@ -1,5 +1,3 @@ export default { "arcade-deploy": "Arcade Deploy", - "docker-worker": "Docker", - "modal-worker": "Modal", }; diff --git a/app/en/home/serve-tools/arcade-deploy/page.mdx b/app/en/home/serve-tools/arcade-deploy/page.mdx index 5936c2eda..a380912f9 100644 --- a/app/en/home/serve-tools/arcade-deploy/page.mdx +++ b/app/en/home/serve-tools/arcade-deploy/page.mdx @@ -8,7 +8,7 @@ import { SignupLink } from "@/app/_components/analytics"; # Deploying to the cloud with Arcade Deploy -This guide shows you how to deploy a worker with a local toolkit with Arcade Deploy. +This guide shows you how to deploy your MCP Server with Arcade Deploy. ## Requirements @@ -45,7 +45,7 @@ id = "my-worker" secret = # Replace with your own secret [worker.local_source] -packages = ["./"] # Replace with the path to your toolkit directory +packages = ["./"] # Replace with the path to your MCP Server directory ``` @@ -68,9 +68,9 @@ You should see output like the following: Deploying 'my-worker...' main.py:589 ⠏ Deploying 1 workers ┏━━━━━━━━━━━━━━━━━┳━━━━━━━━━┳━━━━━━━━━┳━━━━━━━━━━━━┓ -┃ Added ┃ Removed ┃ Updated ┃ No Changes ┃ +┃ Added ┃ Removed ┃ Updated ┃ No Changes ┃ ┑━━━━━━━━━━━━━━━━━╇━━━━━━━━━╇━━━━━━━━━╇━━━━━━━━━━━━┩ -β”‚ custom-toolkit β”‚ β”‚ β”‚ β”‚ +β”‚ custom-tools β”‚ β”‚ β”‚ β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ βœ… Worker 'my-worker' deployed successfully. ``` @@ -92,12 +92,12 @@ You should see output like the following: ┏━━━━━━━━━━━┳━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓ ┃ ID ┃ Cloud Deployed ┃ Engine Registered ┃ Enabled ┃ Host ┃ Toolkits ┃ ┑━━━━━━━━━━━╇━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩ -β”‚ my-worker β”‚ True β”‚ True β”‚ True β”‚ https://4bdfrgfdgftlu0ahyko56gdsr.server.arcade.dev β”‚ CustomToolkit β”‚ +β”‚ my-worker β”‚ True β”‚ True β”‚ True β”‚ https://4bdfrgfdgftlu0ahyko56gdsr.server.arcade.dev β”‚ CustomMCP Tools β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ ``` -Your worker and toolkits are now deployed and registered with the engine and ready to use! +Your worker and MCP Servers are now deployed and registered with the engine and ready to use! You can go to the [dashboard](https://api.arcade.dev/dashboard/workers) to see your worker and its details. diff --git a/app/en/home/serve-tools/docker-worker/page.mdx b/app/en/home/serve-tools/docker-worker/page.mdx deleted file mode 100644 index 19aa56c18..000000000 --- a/app/en/home/serve-tools/docker-worker/page.mdx +++ /dev/null @@ -1,85 +0,0 @@ ---- -title: "Build custom worker images with docker" -description: "Learn how to build a custom worker image using Arcade" ---- - -import { Steps } from "nextra/components"; - -# Build custom worker images with docker - -This guide shows you how to build a custom Worker image using Arcade's base Worker image. It takes you through creating a Dockerfile, installing toolkits, and running the resulting container. - - - -### Requirements - -- Docker installed on your machine - -### Create your Dockerfile - -Create a Dockerfile in your project directory: - -```dockerfile -ARG VERSION=latest - -FROM ghcr.io/arcadeai/worker-base:${VERSION} - -# Copy the file that lists all your desired toolkits -COPY toolkits.txt ./ - -# Install these toolkits -RUN pip install -r toolkits.txt -``` - -With this Dockerfile, we start from the Arcade worker base image, copy in a file named toolkits.txt, and install each toolkit listed there. - ---- - -## List Your Toolkits - -Create a file named toolkits.txt in the same directory. Add the toolkits you want installed: - -``` -arcade-google -arcade-firecrawl -arcade-zoom -``` - -Adjust this file as needed. Each line in toolkits.txt should specify a Python package name and version. - ---- - -## 3. Build the Image - -From the directory containing the Dockerfile and toolkits.txt, run: - -```bash -docker build -t custom-worker:0.1.0 . -``` - -This command creates a Docker image named custom-worker with the tag 0.1.0 using the instructions in your Dockerfile. - ---- - -## Run the Worker - -To start the worker container: - -```bash -docker run -p 8002:8002 \ - -e ARCADE_WORKER_SECRET="your_secret_here" \ - custom-worker:0.1.0 -``` - -Replace "your_secret_here" with a secret of your choice. Your engine will need access to this secret to call your worker. The worker will be accessible on port 8002 of your local machine. - - - ---- - -## Next Steps - -- Set environment variables (like ARCADE_WORKER_SECRET) securely for production use. -- Deploy your container to a suitable environment (Docker Swarm, Kubernetes, or another container orchestration platform). - -Happy coding with Arcade! diff --git a/app/en/home/serve-tools/modal-worker/page.mdx b/app/en/home/serve-tools/modal-worker/page.mdx deleted file mode 100644 index ce8b5d3cc..000000000 --- a/app/en/home/serve-tools/modal-worker/page.mdx +++ /dev/null @@ -1,85 +0,0 @@ ---- -title: "Deploy a custom worker on Modal" -description: "Learn how to deploy a custom worker using Modal with Arcade" ---- - -import { Steps } from "nextra/components"; - -# Deploy a custom worker on Modal - -This guide shows you how to deploy a custom Arcade Worker using Modal. It takes you through setting up the environment, deploying the worker, and connecting it to the Arcade Engine. - - - -### Requirements - -- Python 3.10+ -- Modal CLI (`pip install modal`) - -### Deploy - -Navigate to the directory containing your worker script and deploy it using Modal: - -```bash -cd examples/serving-tools -modal deploy run-arcade-worker.py -``` - -### Changing the Toolkits - -To change the toolkits, edit the `toolkits` list in the `run-arcade-worker.py` file. - -### Example `run-arcade-worker.py` - -```python -import os -from modal import App, Image, asgi_app - -# Define the FastAPI app -app = App("arcade-worker") - -toolkits = ["arcade-google", "arcade-slack"] - -image = ( - Image.debian_slim() - .pip_install("arcade_tdk") - .pip_install("arcade_serve") - .pip_install(toolkits) -) - -@app.function(image=image) -@asgi_app() -def fastapi_app(): - from fastapi import FastAPI - from arcade_tdk import Toolkit - from arcade_serve.fastapi import FastAPIWorker - - web_app = FastAPI() - - # Initialize app and Arcade FastAPIWorker - worker_secret = os.environ.get("ARCADE_WORKER_SECRET", "dev") - worker = FastAPIWorker(web_app, secret=worker_secret) - - # Register toolkits we've installed - installed_toolkits = Toolkit.find_all_arcade_toolkits() - for toolkit in toolkits: - if toolkit in installed_toolkits: - worker.register_toolkit(toolkit) - - return web_app -``` - -### Connect to Arcade Engine - -To connect the Arcade Engine to your worker, configure the worker URL in the engine's configuration file. Start the engine with the appropriate configuration. - -For more details, refer to the [Arcade Engine configuration documentation](/home/local-deployment/configure/engine). - - - ---- - -## Next Steps - -- Ensure your environment variables (like `ARCADE_WORKER_SECRET`) are set securely for production use. -- Explore deploying your worker in different environments supported by Modal. diff --git a/app/en/home/use-tools/get-tool-definitions/page.mdx b/app/en/home/use-tools/get-tool-definitions/page.mdx index 0595a51ee..04ff96c60 100644 --- a/app/en/home/use-tools/get-tool-definitions/page.mdx +++ b/app/en/home/use-tools/get-tool-definitions/page.mdx @@ -78,11 +78,11 @@ console.log(githubStarRepo); -## Get all tool definitions in a toolkit formatted for a model +## Get all tool definitions in a MCP Server formatted for a model -It can be useful to list tool definitions for a toolkit in a specific model provider's format. For example, you may want to get the definitions of tools in the `Github` toolkit in OpenAI's format. +It can be useful to list tool definitions for a MCP Server in a specific model provider's format. For example, you may want to get the definitions of tools in the `Github` MCP Server in OpenAI's format. -To do this, you can use the `client.tools.formatted.list` method and specify the toolkit and format. Since this method returns an iterator of pages, you can cast to a list to get all the tools. +To do this, you can use the `client.tools.formatted.list` method and specify the MCP Server and format. Since this method returns an iterator of pages, you can cast to a list to get all the tools. @@ -91,10 +91,10 @@ from arcadepy import Arcade client = Arcade() -# Get all tools in the Github toolkit formatted for OpenAI +# Get all tools in the Github MCP Server formatted for OpenAI github_tools = list(client.tools.formatted.list(format="openai", toolkit="github")) -# Print the number of tools in the Github toolkit +# Print the number of tools in the Github MCP Server print(len(github_tools)) ``` @@ -104,13 +104,13 @@ import Arcade from "@arcadeai/arcadejs"; const client = new Arcade(); -// Get all tools in the Github toolkit formatted for OpenAI +// Get all tools in the Github MCP Server formatted for OpenAI const githubTools = await client.tools.formatted.list({ format: "openai", toolkit: "github", }); -// Print the number of tools in the Github toolkit +// Print the number of tools in the Github MCP Server console.log(githubTools.total_count); ``` @@ -119,7 +119,7 @@ console.log(githubTools.total_count); ## Get all tool definitions formatted for a model -To get all tools formatted for OpenAI, you can use the `client.tools.formatted.list` method without specifying a toolkit. +To get all tools formatted for OpenAI, you can use the `client.tools.formatted.list` method without specifying a MCP Server. diff --git a/app/en/home/use-tools/tools-overview/page.mdx b/app/en/home/use-tools/tools-overview/page.mdx index 7090c2183..02e5f21fa 100644 --- a/app/en/home/use-tools/tools-overview/page.mdx +++ b/app/en/home/use-tools/tools-overview/page.mdx @@ -13,11 +13,11 @@ To solve this, many AI models support tool calling (sometimes referred to as 'fu Say a colleague shares a document with you on Google Drive, and you'd like an LLM to help you analyze it. -You could go to your Drive/Docs, open the document, copy its contents, and paste it into your chat. But what if the LLM could do this for you? The Arcade Google Docs toolkit provides a [`SearchAndRetrieveDocuments`](/toolkits/productivity/google-docs#googledrivesearchandretrievedocuments) tool. By calling it, the LLM can find and read the document without you having to do anything. +You could go to your Drive/Docs, open the document, copy its contents, and paste it into your chat. But what if the LLM could do this for you? The Arcade Google Docs MCP Server provides a [`SearchAndRetrieveDocuments`](/mcp-servers/productivity/google-docs#googledrivesearchandretrievedocuments) tool. By calling it, the LLM can find and read the document without you having to do anything. -After analyzing the document, you decide that a meeting is needed with your colleague. You can ask the LLM to schedule a meeting and it will use the [Google Calendar toolkit](/toolkits/productivity/google-calendar) to do it without you needing to leave the chat. +After analyzing the document, you decide that a meeting is needed with your colleague. You can ask the LLM to schedule a meeting and it will use the [Google Calendar MCP Server](/mcp-servers/productivity/google-calendar) to do it without you needing to leave the chat. -Or you could ask the LLM to send a summary of the analysis to your colleague by email and it would use the [Gmail toolkit](/toolkits/productivity/gmail) for that. +Or you could ask the LLM to send a summary of the analysis to your colleague by email and it would use the [Gmail MCP Server](/mcp-servers/productivity/gmail) for that. ## Possibilities for Application and AI Agent developers @@ -93,5 +93,5 @@ This process shows the general outline of the Tool Augmented Generation (TAG) pr ### Next steps -- Explore the [Toolkits](/toolkits) available on Arcade -- Build your own [custom toolkit](/home/build-tools/create-a-toolkit) +- Explore the [MCP Servers](/mcp-servers) available on Arcade +- Build your own [custom MCP Server](/home/build-tools/create-a-mcp-server) diff --git a/app/en/home/use-tools/types-of-tools/page.mdx b/app/en/home/use-tools/types-of-tools/page.mdx index 15dacbfca..298f8fd6a 100644 --- a/app/en/home/use-tools/types-of-tools/page.mdx +++ b/app/en/home/use-tools/types-of-tools/page.mdx @@ -14,7 +14,6 @@ The distinction is merely a matter of how they are designed. Both types of tools Before we understand the two types, let's first understand the background for why we need to differentiate between them. - ## Why LLMs perform poorly when calling HTTP APIs Traditionally, the HTTP APIs offered by upstream services such as GitHub, Google, Slack, etc., were designed to be consumed by human software engineers. When we expose such interfaces for LLMs to call as tools, they usually do not perform very well. @@ -27,11 +26,10 @@ For instance, consider the following user prompt: The data model mismatches are: -| Dimension | Chat interface | Slack HTTP API | -| --- | --- | --- | -| Action | Send message to a person | Send message to a channel | -| Argument | `username = "John"` | `channel_id = ???` | - +| Dimension | Chat interface | Slack HTTP API | +| --------- | -------------------------------------- | --------------------------------------- | +| Action | Send message to a person | Send message to a channel | +| Argument | `username = "John"` | `channel_id = ???` | In order to bridge the gap in the data models, the LLM has to make multiple API calls: @@ -44,19 +42,19 @@ Even the most powerful LLMs usually perform poorly when they need to reason such ## Optimized tools -Arcade's Optimized toolkits are designed to match the typical data models expected in AI-powered chat interfaces and are subject to evaluation suites to ensure LLMs can safely use them. +Arcade's Optimized MCP Servers are designed to match the typical data models expected in AI-powered chat interfaces and are subject to evaluation suites to ensure LLMs can safely use them. -Following the example above, our Slack toolkit offers the [`Slack.SendMessage`](/toolkits/social-communication/slack#slacksendmessage) tool, which accepts a `username` as argument, matching exactly both the action and argument value expected to be present in the LLM context window. +Following the example above, our Slack MCP Server offers the [`Slack.SendMessage`](/mcp-servers/social-communication/slack#slacksendmessage) tool, which accepts a `username` as argument, matching exactly both the action and argument value expected to be present in the LLM context window. When a user says "Send a DM to John asking about a project update", the LLM can directly call the `Slack.SendMessage` tool with the `username` argument, and the tool will take care of the rest. Optimized tools dramatically improve the speed, reliability and cost-effectiveness of AI Agents and chatbots. -Since they require careful design and evaluation, Optimized tools take time and effort to build. We understand that your Agent or chatbot project might need capabilities not yet covered by our Optimized toolkits. For this reason, we also offer low-level Starter toolkits. +Since they require careful design and evaluation, Optimized tools take time and effort to build. We understand that your Agent or chatbot project might need capabilities not yet covered by our Optimized MCP Servers. For this reason, we also offer low-level Starter MCP Servers. ## Starter tools -To provide your Agent or chatbot with more freedom to interact with the upstream services, we offer Starter toolkits. +To provide your Agent or chatbot with more freedom to interact with the upstream services, we offer Starter MCP Servers. Starter tools are heavily influenced by the original API design. Each tool mirrors one HTTP endpoint. diff --git a/app/en/home/vercelai/using-arcade-tools/page.mdx b/app/en/home/vercelai/using-arcade-tools/page.mdx index e4d571484..c241731fa 100644 --- a/app/en/home/vercelai/using-arcade-tools/page.mdx +++ b/app/en/home/vercelai/using-arcade-tools/page.mdx @@ -13,18 +13,16 @@ The [Vercel AI SDK](https://sdk.vercel.ai/) is an open-source library that simpl - Framework-agnostic support for React, Next.js, Vue, Nuxt, and SvelteKit. - Easy switching between AI providers with a single line of code -Let's supercharge your Vercel AI SDK applications with Arcade's tools. You'll get instant access to production-ready tools for working with Google, Slack, GitHub, LinkedIn, and many other popular services, all with built-in authentication. Browse our [complete toolkit catalog](https://docs.arcade.dev/toolkits) to discover what you can build. +Let's supercharge your Vercel AI SDK applications with Arcade's tools. You'll get instant access to production-ready tools for working with Google, Slack, GitHub, LinkedIn, and many other popular services, all with built-in authentication. Browse our [complete MCP Server catalog](/mcp-servers) to discover what you can build. -In this guide, we'll show you how to use Arcade's Gmail toolkit to create an AI agent that can read and summarize emails. You can find the complete code in our [GitHub repository](https://github.com/ArcadeAI/arcade-ai/tree/main/examples/ai-sdk) or follow along below. +In this guide, we'll show you how to use Arcade's Gmail MCP Server to create an AI agent that can read and summarize emails. You can find the complete code in our [GitHub repository](https://github.com/ArcadeAI/arcade-ai/tree/main/examples/ai-sdk) or follow along below. ## Getting started - ### Install the required dependencies - We'll use the `@ai-sdk/openai` package in this example, but you can use any AI provider supported by the Vercel AI SDK. See the [full list of providers](https://ai-sdk.dev/docs/foundations/providers-and-models#ai-sdk-providers). @@ -58,6 +56,7 @@ yarn install ai @ai-sdk/openai @arcadeai/arcadejs ### Get your API keys and set up environment variables You'll need two API keys: + - **OpenAI API key** from [OpenAI dashboard](https://platform.openai.com/api-keys) - **Arcade API key** from our [Getting your API key guide](https://docs.arcade.dev/home/api-keys) @@ -68,45 +67,46 @@ OPENAI_API_KEY= ARCADE_API_KEY= ``` - ### Import Libraries and Initialize Arcade ```ts -import { openai } from "@ai-sdk/openai" -import { generateText } from "ai" -import { Arcade } from "@arcadeai/arcadejs" -import { toZodToolSet, executeOrAuthorizeZodTool } from "@arcadeai/arcadejs/lib" - -const arcade = new Arcade() +import { openai } from "@ai-sdk/openai"; +import { generateText } from "ai"; +import { Arcade } from "@arcadeai/arcadejs"; +import { + toZodToolSet, + executeOrAuthorizeZodTool, +} from "@arcadeai/arcadejs/lib"; + +const arcade = new Arcade(); ``` -### Get tools from Arcade's Gmail toolkit and convert them to Zod +### Get tools from Arcade's Gmail MCP Server and convert them to Zod Arcade offers methods to convert tools into Zod schemas, which is essential since the Vercel AI SDK defines tools using Zod. The `toZodToolSet` method is particularly useful, as it simplifies this integration and makes it easier to use Arcade's tools with the Vercel AI SDK. Learn more about Arcade's Zod integration options [here](/home/use-tools/get-tool-definitions#get-zod-tool-definitions). ```ts -// Get Arcade's gmail toolkit -const googleToolkit = await arcade.tools.list({ toolkit: "gmail", limit: 30 }) +// Get Arcade's gmail MCP Server +const googleToolkit = await arcade.tools.list({ toolkit: "gmail", limit: 30 }); const googleTools = toZodToolSet({ - tools: googleToolkit.items, - client: arcade, - userId: "", // Your app's internal ID for the user (an email, UUID, etc). It's used internally to identify your user in Arcade - executeFactory: executeOrAuthorizeZodTool, // Checks if tool is authorized and executes it, or returns authorization URL if needed -}) + tools: googleToolkit.items, + client: arcade, + userId: "", // Your app's internal ID for the user (an email, UUID, etc). It's used internally to identify your user in Arcade + executeFactory: executeOrAuthorizeZodTool, // Checks if tool is authorized and executes it, or returns authorization URL if needed +}); ``` - ### Generate text with the tools ```ts const result = await generateText({ - model: openai("gpt-4o-mini"), - prompt: "Read my last email and summarize it in a few sentences", - tools: googleTools, - maxSteps: 5, -}) + model: openai("gpt-4o-mini"), + prompt: "Read my last email and summarize it in a few sentences", + tools: googleTools, + maxSteps: 5, +}); -console.log(result.text) +console.log(result.text); ``` @@ -116,7 +116,6 @@ On your first run, you'll get an authorization message with a link to connect yo You can see the full code in our [GitHub repository](https://github.com/ArcadeAI/arcade-ai/blob/main/examples/ai-sdk/generateText.js). - ## Stream the response Vercel AI SDK supports streaming responses. This creates a more engaging, chat-like experience as the responses appear progressively instead of waiting for the complete answer. @@ -128,28 +127,28 @@ To enable streaming, make these key changes: 3. Process the response chunk by chunk ```ts -import { streamText } from "ai" +import { streamText } from "ai"; const { textStream } = streamText({ - model: openai("gpt-4o-mini"), - prompt: "Read my last email and summarize it in a few sentences", - tools: googleTools, - maxSteps: 5, -}) + model: openai("gpt-4o-mini"), + prompt: "Read my last email and summarize it in a few sentences", + tools: googleTools, + maxSteps: 5, +}); for await (const chunk of textStream) { - process.stdout.write(chunk) + process.stdout.write(chunk); } ``` You can see the full code in our [GitHub repository](https://github.com/ArcadeAI/arcade-ai/blob/main/examples/ai-sdk/index.js). -## How to use other toolkits +## How to use other MCP Servers -You just need to change the toolkit parameter in the `list` method. For example, to use Slack tools: +You just need to change the MCP Server parameter in the `list` method. For example, to use Slack MCP Server: ```ts -const slackToolkit = await arcade.tools.list({ toolkit: "slack", limit: 30 }) +const slackToolkit = await arcade.tools.list({ toolkit: "Slack", limit: 30 }); ``` -Browse our [complete toolkit catalog](https://docs.arcade.dev/toolkits) to see all available toolkits and their capabilities. Each toolkit comes with pre-built tools that are ready to use with your AI applications. Arcade also is the best way to create your own custom tools and toolkits - learn more [here](/home/build-tools/create-a-toolkit). +Browse our [complete MCP Server catalog](/mcp-servers) to see all available MCP Servers and their capabilities. Each MCP Server comes with pre-built tools that are ready to use with your AI applications. Arcade also is the best way to create your own custom tools and MCP Servers - learn more [here](/home/build-tools/create-a-mcp-server). diff --git a/app/en/toolkits/_meta.tsx b/app/en/mcp-servers/_meta.tsx similarity index 82% rename from app/en/toolkits/_meta.tsx rename to app/en/mcp-servers/_meta.tsx index a108b939a..e919a4b79 100644 --- a/app/en/toolkits/_meta.tsx +++ b/app/en/mcp-servers/_meta.tsx @@ -46,15 +46,12 @@ const meta: MetaRecord = { "customer-support": { title: "Customer Support", }, - "-- Submit your toolkit": { + "-- Submit your Server": { type: "separator", - title: "Submit your toolkit", + title: "Submit your Server", }, - "contribute-a-toolkit": { - title: "Contribute a toolkit", - }, - "community-toolkit-template": { - display: "hidden", + "contribute-a-server": { + title: "Contribute a Server", }, }; diff --git a/app/_components/custom/toolkits/coming-soon-modal.tsx b/app/en/mcp-servers/components/coming-soon-modal.tsx similarity index 98% rename from app/_components/custom/toolkits/coming-soon-modal.tsx rename to app/en/mcp-servers/components/coming-soon-modal.tsx index 65648fff9..d758464a7 100644 --- a/app/_components/custom/toolkits/coming-soon-modal.tsx +++ b/app/en/mcp-servers/components/coming-soon-modal.tsx @@ -11,7 +11,7 @@ import { import { usePostHog } from "posthog-js/react"; import type React from "react"; import { useState } from "react"; -import { useComingSoon } from "./coming-soon-context"; +import { useComingSoon } from "@/app/_components/coming-soon-context"; type ComingSoonModalProps = { isOpen: boolean; diff --git a/app/_components/custom/toolkits/tool-card.tsx b/app/en/mcp-servers/components/tool-card.tsx similarity index 97% rename from app/_components/custom/toolkits/tool-card.tsx rename to app/en/mcp-servers/components/tool-card.tsx index 1cea8ca06..4b6d9f769 100644 --- a/app/_components/custom/toolkits/tool-card.tsx +++ b/app/en/mcp-servers/components/tool-card.tsx @@ -37,7 +37,7 @@ const typeConfig: Record< arcade: { className: "border-emerald-600/20 hover:border-primary bg-emerald-600/[0.02] hover:bg-emerald-600/[0.03]", - label: "Arcade Optimized Toolkit", + label: "Arcade Optimized MCP Server", icon: BadgeCheck, color: "text-emerald-400", }, @@ -45,21 +45,21 @@ const typeConfig: Record< arcade_starter: { className: "border-orange-600/20 hover:border-primary bg-orange-600/[0.02] hover:bg-orange-600/[0.03]", - label: "Arcade Starter Toolkit", + label: "Arcade Starter MCP Server", icon: Terminal, color: "text-orange-400", }, verified: { className: "border-blue-600/20 hover:border-primary bg-blue-600/[0.02] hover:bg-blue-600/[0.03]", - label: "Verified Toolkit", + label: "Verified MCP Server", icon: CheckCircle, color: "text-blue-400", }, community: { className: "border-orange-600/20 hover:border-primary bg-orange-600/[0.02] hover:bg-orange-600/[0.03]", - label: "Community Toolkit", + label: "Community MCP Server", icon: Users, color: "text-orange-400", }, diff --git a/app/_components/custom/toolkits/toolkits-config.ts b/app/en/mcp-servers/components/toolkits-config.ts similarity index 80% rename from app/_components/custom/toolkits/toolkits-config.ts rename to app/en/mcp-servers/components/toolkits-config.ts index 2674a6bba..c533588a3 100644 --- a/app/_components/custom/toolkits/toolkits-config.ts +++ b/app/en/mcp-servers/components/toolkits-config.ts @@ -1,4 +1,4 @@ -import type { ToolkitType } from "@/app/_components/custom/toolkits/toolkits"; +import type { ToolkitType } from "./toolkits"; export type Tool = { name: string; image: string; @@ -34,7 +34,7 @@ const availableTools: Tool[] = [ image: "gmail.png", summary: "Send, write, draft, delete, trash, and search Gmail emails with your agents.", - link: "/toolkits/productivity/gmail", + link: "/mcp-servers/productivity/gmail", category: "productivity", type: "arcade", }, @@ -43,7 +43,7 @@ const availableTools: Tool[] = [ image: "slack.png", summary: "Send and receive messages to Slack channels and users with agents", - link: "/toolkits/social-communication/slack", + link: "/mcp-servers/social-communication/slack", category: "social", type: "arcade", }, @@ -51,7 +51,7 @@ const availableTools: Tool[] = [ name: "Slack API", image: "slack.png", summary: "Enable LLMs to interact with the low-level Slack API", - link: "/toolkits/social-communication/slack-api", + link: "/mcp-servers/social-communication/slack-api", category: "social", type: "arcade_starter", }, @@ -60,7 +60,7 @@ const availableTools: Tool[] = [ image: "twitter.png", summary: "Integrate agents with X (Twitter), including tweets, users, and more", - link: "/toolkits/social-communication/x", + link: "/mcp-servers/social-communication/x", category: "social", type: "arcade", }, @@ -69,7 +69,7 @@ const availableTools: Tool[] = [ image: "linkedin.png", summary: "Connect and interact with LinkedIn's professional network through your agents", - link: "/toolkits/social-communication/linkedin", + link: "/mcp-servers/social-communication/linkedin", category: "social", type: "arcade", }, @@ -78,7 +78,7 @@ const availableTools: Tool[] = [ image: "google_calendar.png", summary: "Create, update, delete, and search events in Google Calendar with your agents.", - link: "/toolkits/productivity/google-calendar", + link: "/mcp-servers/productivity/google-calendar", category: "productivity", type: "arcade", }, @@ -86,7 +86,7 @@ const availableTools: Tool[] = [ name: "Google Contacts", image: "google_contacts.png", summary: "Create and search contacts in Google Contacts with your agents.", - link: "/toolkits/productivity/google-contacts", + link: "/mcp-servers/productivity/google-contacts", category: "productivity", type: "arcade", }, @@ -94,7 +94,7 @@ const availableTools: Tool[] = [ name: "Google Drive", image: "google_drive.png", summary: "List documents in Google Drive with your agents.", - link: "/toolkits/productivity/google-drive", + link: "/mcp-servers/productivity/google-drive", category: "productivity", type: "arcade", }, @@ -103,7 +103,7 @@ const availableTools: Tool[] = [ image: "google_docs.png", summary: "Create, edit, and get information about Google Docs documents with your agents.", - link: "/toolkits/productivity/google-docs", + link: "/mcp-servers/productivity/google-docs", category: "productivity", type: "arcade", }, @@ -111,7 +111,7 @@ const availableTools: Tool[] = [ name: "Google Sheets", image: "google_sheets.svg", summary: "Create, read, and update Google Sheets with your agents.", - link: "/toolkits/productivity/google-sheets", + link: "/mcp-servers/productivity/google-sheets", category: "productivity", type: "arcade", }, @@ -119,7 +119,7 @@ const availableTools: Tool[] = [ name: "Google Slides", image: "google_slides.png", summary: "Create, read, and update Google Slides with your agents.", - link: "/toolkits/productivity/google-slides", + link: "/mcp-servers/productivity/google-slides", category: "productivity", type: "arcade", }, @@ -128,7 +128,7 @@ const availableTools: Tool[] = [ image: "github.png", summary: "Interact with private and public GitHub repositories, issues, pull requests, and more", - link: "/toolkits/development/github/github", + link: "/mcp-servers/development/github/github", category: "development", type: "arcade", }, @@ -136,7 +136,7 @@ const availableTools: Tool[] = [ name: "E2B", image: "e2b.png", summary: "Execute and test code in a secure sandbox environment", - link: "/toolkits/development/e2b", + link: "/mcp-servers/development/e2b", category: "development", type: "arcade", }, @@ -144,7 +144,7 @@ const availableTools: Tool[] = [ name: "Firecrawl", image: "firecrawl.png", summary: "Browse and interact with web pages programmatically", - link: "/toolkits/development/firecrawl/firecrawl", + link: "/mcp-servers/development/firecrawl/firecrawl", category: "development", type: "arcade", }, @@ -152,7 +152,7 @@ const availableTools: Tool[] = [ name: "Google Finance", image: "google_finance.png", summary: "Get stock data from Google Finance", - link: "/toolkits/search/google_finance", + link: "/mcp-servers/search/google_finance", category: "search", type: "arcade", }, @@ -160,7 +160,7 @@ const availableTools: Tool[] = [ name: "Google Flights", image: "google_flights.png", summary: "Search for flights", - link: "/toolkits/search/google_flights", + link: "/mcp-servers/search/google_flights", category: "search", type: "arcade", }, @@ -168,7 +168,7 @@ const availableTools: Tool[] = [ name: "Google Hotels", image: "google_hotels.png", summary: "Search for hotels", - link: "/toolkits/search/google_hotels", + link: "/mcp-servers/search/google_hotels", category: "search", type: "arcade", }, @@ -176,7 +176,7 @@ const availableTools: Tool[] = [ name: "Google Search", image: "google_search.png", summary: "Perform Google searches and retrieve relevant information", - link: "/toolkits/search/google_search", + link: "/mcp-servers/search/google_search", category: "search", type: "arcade", }, @@ -184,7 +184,7 @@ const availableTools: Tool[] = [ name: "Google Maps", image: "google_maps.png", summary: "Get directions between two locations with Google Maps", - link: "/toolkits/search/google_maps", + link: "/mcp-servers/search/google_maps", category: "search", type: "arcade", }, @@ -192,7 +192,7 @@ const availableTools: Tool[] = [ name: "Google News", image: "google_news.png", summary: "Search for news articles with Google News", - link: "/toolkits/search/google_news", + link: "/mcp-servers/search/google_news", category: "search", type: "arcade", }, @@ -200,7 +200,7 @@ const availableTools: Tool[] = [ name: "Google Jobs", image: "google_jobs.png", summary: "Search for job openings with Google Jobs.", - link: "/toolkits/search/google_jobs", + link: "/mcp-servers/search/google_jobs", category: "search", type: "arcade", }, @@ -208,7 +208,7 @@ const availableTools: Tool[] = [ name: "Google Shopping", image: "google_shopping.png", summary: "Search for products on Google Shopping.", - link: "/toolkits/search/google_shopping", + link: "/mcp-servers/search/google_shopping", category: "search", type: "arcade", }, @@ -216,7 +216,7 @@ const availableTools: Tool[] = [ name: "Youtube Search", image: "youtube.png", summary: "Search and get details about YouTube videos.", - link: "/toolkits/search/youtube", + link: "/mcp-servers/search/youtube", category: "search", type: "arcade", }, @@ -224,7 +224,7 @@ const availableTools: Tool[] = [ name: "Walmart Search", image: "walmart.png", summary: "Search and get details about products listed on Walmart.", - link: "/toolkits/search/walmart", + link: "/mcp-servers/search/walmart", category: "search", type: "arcade", }, @@ -232,7 +232,7 @@ const availableTools: Tool[] = [ name: "Spotify", image: "spotify.png", summary: "Control music playback and manage playlists on Spotify", - link: "/toolkits/entertainment/spotify", + link: "/mcp-servers/entertainment/spotify", category: "entertainment", type: "arcade", }, @@ -240,7 +240,7 @@ const availableTools: Tool[] = [ name: "Imgflip", image: "imgflip.jpg", summary: "Create memes with Imgflip", - link: "/toolkits/entertainment/imgflip", + link: "/mcp-servers/entertainment/imgflip", category: "entertainment", type: "arcade", }, @@ -248,7 +248,7 @@ const availableTools: Tool[] = [ name: "Notion", image: "notion.png", summary: "Create, read, and search Notion pages", - link: "/toolkits/productivity/notion", + link: "/mcp-servers/productivity/notion", category: "productivity", type: "arcade", }, @@ -256,7 +256,7 @@ const availableTools: Tool[] = [ name: "Twilio", image: "twilio.png", summary: "Send SMS and WhatsApp messages through Twilio's platform", - link: "/toolkits/social-communication/twilio/readme", + link: "/mcp-servers/social-communication/twilio/readme", category: "social", type: "verified", }, @@ -264,7 +264,7 @@ const availableTools: Tool[] = [ name: "Close.io", image: "closeio.png", summary: "Manage leads, contacts, and deals in Close.io CRM", - link: "/toolkits/productivity/closeio", + link: "/mcp-servers/productivity/closeio", category: "productivity", type: "community", }, @@ -272,7 +272,7 @@ const availableTools: Tool[] = [ name: "Obsidian", image: "obsidian.png", summary: "Create, edit, and manage Obsidian notes", - link: "/toolkits/productivity/obsidian", + link: "/mcp-servers/productivity/obsidian", category: "productivity", type: "community", }, @@ -280,7 +280,7 @@ const availableTools: Tool[] = [ name: "Zoom", image: "zoom.png", summary: "Join and manage Zoom meetings with your agents", - link: "/toolkits/social-communication/zoom", + link: "/mcp-servers/social-communication/zoom", category: "social", type: "arcade", }, @@ -288,7 +288,7 @@ const availableTools: Tool[] = [ name: "Jira", image: "atlassian.png", summary: "Manage Jira projects, issues, and more with your agents", - link: "/toolkits/productivity/jira", + link: "/mcp-servers/productivity/jira", category: "productivity", type: "auth", }, @@ -296,7 +296,7 @@ const availableTools: Tool[] = [ name: "Confluence", image: "atlassian.png", summary: "Manage Confluence pages and spaces with your agents", - link: "/toolkits/productivity/confluence", + link: "/mcp-servers/productivity/confluence", category: "productivity", type: "arcade", }, @@ -304,7 +304,7 @@ const availableTools: Tool[] = [ name: "Outlook Calendar", image: "outlook_calendar.svg", summary: "Manage Outlook calendar with your agents", - link: "/toolkits/productivity/outlook-calendar", + link: "/mcp-servers/productivity/outlook-calendar", category: "productivity", type: "arcade", }, @@ -312,7 +312,7 @@ const availableTools: Tool[] = [ name: "Outlook Mail", image: "outlook_mail.png", summary: "Manage Outlook emails with your agents", - link: "/toolkits/productivity/outlook-mail", + link: "/mcp-servers/productivity/outlook-mail", category: "productivity", type: "arcade", }, @@ -320,7 +320,7 @@ const availableTools: Tool[] = [ name: "Dropbox", image: "dropbox.png", summary: "Manage Dropbox files and folders with your agents", - link: "/toolkits/productivity/dropbox/dropbox", + link: "/mcp-servers/productivity/dropbox/dropbox", category: "productivity", type: "arcade", }, @@ -328,7 +328,7 @@ const availableTools: Tool[] = [ name: "Discord", image: "discord.png", summary: "Manage Discord servers, channels, and more with your agents", - link: "/toolkits/social-communication/discord", + link: "/mcp-servers/social-communication/discord", category: "social", type: "auth", }, @@ -336,7 +336,7 @@ const availableTools: Tool[] = [ name: "Reddit", image: "reddit.png", summary: "Interact with Reddit with your agents", - link: "/toolkits/social-communication/reddit", + link: "/mcp-servers/social-communication/reddit", category: "social", type: "arcade", }, @@ -344,7 +344,7 @@ const availableTools: Tool[] = [ name: "Twitch", image: "twitch.png", summary: "Create clips, get videos, and more from Twitch with your agents", - link: "/toolkits/entertainment/twitch", + link: "/mcp-servers/entertainment/twitch", category: "entertainment", type: "auth", }, @@ -352,7 +352,7 @@ const availableTools: Tool[] = [ name: "Microsoft Teams", image: "ms_teams.png", summary: "Manage teams, messages, chats, and channels with your agents.", - link: "/toolkits/social-communication/microsoft-teams", + link: "/mcp-servers/social-communication/microsoft-teams", category: "social", type: "arcade", isComingSoon: false, @@ -362,7 +362,7 @@ const availableTools: Tool[] = [ image: "ms_sharepoint.png", summary: "Manage SharePoint sites, lists, drives, and files with your agents.", - link: "/toolkits/productivity/sharepoint", + link: "/mcp-servers/productivity/sharepoint", category: "productivity", type: "arcade", isComingSoon: false, @@ -375,7 +375,7 @@ const comingSoonTools: Tool[] = [ name: "ADP Workforce Now", image: "adp.png", summary: "Manage payroll, HR, and workforce data with your agents.", - link: "/toolkits/productivity/adp", + link: "/mcp-servers/productivity/adp", category: "productivity", type: "arcade", isComingSoon: true, @@ -384,7 +384,7 @@ const comingSoonTools: Tool[] = [ name: "Aha", image: "aha.png", summary: "Manage product roadmaps and strategy with your agents.", - link: "/toolkits/productivity/aha", + link: "/mcp-servers/productivity/aha", category: "productivity", type: "arcade", isComingSoon: true, @@ -393,7 +393,7 @@ const comingSoonTools: Tool[] = [ name: "Airtable", image: "airtable.svg", summary: "Create, edit, and manage Airtable bases with your agents.", - link: "/toolkits/productivity/airtable", + link: "/mcp-servers/productivity/airtable", category: "productivity", type: "arcade", isComingSoon: true, @@ -402,7 +402,7 @@ const comingSoonTools: Tool[] = [ name: "Amplitude", image: "amplitude.png", summary: "Analyze user behavior and product analytics with your agents.", - link: "/toolkits/productivity/amplitude", + link: "/mcp-servers/productivity/amplitude", category: "productivity", type: "arcade", isComingSoon: true, @@ -411,7 +411,7 @@ const comingSoonTools: Tool[] = [ name: "Asana", image: "asana.svg", summary: "Manage projects, tasks, and more in Asana with your agents.", - link: "/toolkits/productivity/asana", + link: "/mcp-servers/productivity/asana", category: "productivity", type: "arcade", isComingSoon: false, @@ -420,7 +420,7 @@ const comingSoonTools: Tool[] = [ name: "Ashby", image: "ashby.png", summary: "Manage recruiting and hiring processes with your agents.", - link: "/toolkits/productivity/ashby", + link: "/mcp-servers/productivity/ashby", category: "productivity", type: "arcade", isComingSoon: true, @@ -429,7 +429,7 @@ const comingSoonTools: Tool[] = [ name: "Auth0", image: "auth0.svg", summary: "Manage authentication and authorization with your agents.", - link: "/toolkits/development/auth0", + link: "/mcp-servers/development/auth0", category: "development", type: "arcade", isComingSoon: true, @@ -438,7 +438,7 @@ const comingSoonTools: Tool[] = [ name: "BambooHR", image: "bamboohr.png", summary: "Manage employee data and HR processes with your agents.", - link: "/toolkits/productivity/bamboohr", + link: "/mcp-servers/productivity/bamboohr", category: "productivity", type: "arcade", isComingSoon: true, @@ -447,7 +447,7 @@ const comingSoonTools: Tool[] = [ name: "Basecamp", image: "basecamp.png", summary: "Manage projects, tasks, and team communication with your agents.", - link: "/toolkits/productivity/basecamp", + link: "/mcp-servers/productivity/basecamp", category: "productivity", type: "arcade", isComingSoon: true, @@ -456,7 +456,7 @@ const comingSoonTools: Tool[] = [ name: "Bill.com", image: "bill.png", summary: "Manage invoices and payments with your agents.", - link: "/toolkits/productivity/bill", + link: "/mcp-servers/productivity/bill", category: "productivity", type: "arcade", isComingSoon: true, @@ -466,7 +466,7 @@ const comingSoonTools: Tool[] = [ image: "bitbucket.png", summary: "Manage repositories, pull requests, and pipelines with your agents.", - link: "/toolkits/development/bitbucket", + link: "/mcp-servers/development/bitbucket", category: "development", type: "arcade", isComingSoon: true, @@ -475,7 +475,7 @@ const comingSoonTools: Tool[] = [ name: "Bluesky", image: "bluesky.svg", summary: "Interact with Bluesky with your agents.", - link: "/toolkits/social-communication/bluesky", + link: "/mcp-servers/social-communication/bluesky", category: "social", type: "arcade", isComingSoon: true, @@ -484,7 +484,7 @@ const comingSoonTools: Tool[] = [ name: "BoxApi", image: "box.svg", summary: "Manage files and folders in Box with your agents.", - link: "/toolkits/productivity/box-api", + link: "/mcp-servers/productivity/box", category: "productivity", type: "arcade_starter", isComingSoon: false, @@ -493,7 +493,7 @@ const comingSoonTools: Tool[] = [ name: "Braze", image: "braze.png", summary: "Manage customer engagement campaigns with your agents.", - link: "/toolkits/productivity/braze", + link: "/mcp-servers/productivity/braze", category: "productivity", type: "arcade", isComingSoon: true, @@ -502,7 +502,7 @@ const comingSoonTools: Tool[] = [ name: "Brex", image: "brex.png", summary: "Manage business expenses and cards with your agents.", - link: "/toolkits/productivity/brex", + link: "/mcp-servers/productivity/brex", category: "productivity", type: "arcade", isComingSoon: true, @@ -511,7 +511,7 @@ const comingSoonTools: Tool[] = [ name: "Buffer", image: "buffer.png", summary: "Schedule and manage social media posts with your agents.", - link: "/toolkits/social-communication/buffer", + link: "/mcp-servers/social-communication/buffer", category: "social", type: "arcade", isComingSoon: true, @@ -520,7 +520,7 @@ const comingSoonTools: Tool[] = [ name: "Calendly", image: "calendly.svg", summary: "Manage scheduling and appointments with your agents.", - link: "/toolkits/productivity/calendly", + link: "/mcp-servers/productivity/calendly", category: "productivity", type: "arcade", isComingSoon: true, @@ -529,7 +529,7 @@ const comingSoonTools: Tool[] = [ name: "ClickUp", image: "clickup.svg", summary: "Manage projects, tasks, and documents with your agents.", - link: "/toolkits/productivity/clickup", + link: "/mcp-servers/productivity/clickup", category: "productivity", type: "arcade", isComingSoon: false, @@ -538,7 +538,7 @@ const comingSoonTools: Tool[] = [ name: "Coinbase", image: "coinbase.svg", summary: "Manage cryptocurrency transactions and wallets with your agents.", - link: "/toolkits/productivity/coinbase", + link: "/mcp-servers/productivity/coinbase", category: "productivity", type: "arcade", isComingSoon: true, @@ -547,7 +547,7 @@ const comingSoonTools: Tool[] = [ name: "Datadog", image: "datadog.svg", summary: "Monitor applications and infrastructure with your agents.", - link: "/toolkits/development/datadog", + link: "/mcp-servers/development/datadog", category: "development", type: "arcade", isComingSoon: true, @@ -556,7 +556,7 @@ const comingSoonTools: Tool[] = [ name: "DigitalOcean", image: "digitalocean.png", summary: "Manage cloud servers and infrastructure with your agents.", - link: "/toolkits/development/digitalocean", + link: "/mcp-servers/development/digitalocean", category: "development", type: "arcade", isComingSoon: true, @@ -565,7 +565,7 @@ const comingSoonTools: Tool[] = [ name: "eBay", image: "ebay.svg", summary: "Manage listings, orders, and inventory on eBay with your agents.", - link: "/toolkits/productivity/ebay", + link: "/mcp-servers/productivity/ebay", category: "productivity", type: "arcade", isComingSoon: true, @@ -574,7 +574,7 @@ const comingSoonTools: Tool[] = [ name: "Evernote", image: "evernote.png", summary: "Create and manage notes with your agents.", - link: "/toolkits/productivity/evernote", + link: "/mcp-servers/productivity/evernote", category: "productivity", type: "arcade", isComingSoon: true, @@ -583,7 +583,7 @@ const comingSoonTools: Tool[] = [ name: "Factorial", image: "factorial.png", summary: "Manage HR processes and employee data with your agents.", - link: "/toolkits/productivity/factorial", + link: "/mcp-servers/productivity/factorial", category: "productivity", type: "arcade", isComingSoon: true, @@ -592,7 +592,7 @@ const comingSoonTools: Tool[] = [ name: "Figma", image: "figma.svg", summary: "Access design files and collaborate on designs with your agents.", - link: "/toolkits/productivity/figma", + link: "/mcp-servers/productivity/figma", category: "productivity", type: "arcade", isComingSoon: true, @@ -602,7 +602,7 @@ const comingSoonTools: Tool[] = [ image: "gitlab.svg", summary: "Manage repositories, issues, and merge requests with your agents.", - link: "/toolkits/development/gitlab", + link: "/mcp-servers/development/gitlab", category: "development", type: "arcade", isComingSoon: true, @@ -611,7 +611,7 @@ const comingSoonTools: Tool[] = [ name: "Heroku", image: "heroku.svg", summary: "Deploy and manage applications on Heroku with your agents.", - link: "/toolkits/development/heroku", + link: "/mcp-servers/development/heroku", category: "development", type: "arcade", isComingSoon: true, @@ -620,7 +620,7 @@ const comingSoonTools: Tool[] = [ name: "Hootsuite", image: "hootsuite.png", summary: "Manage and schedule social media content with your agents.", - link: "/toolkits/social-communication/hootsuite", + link: "/mcp-servers/social-communication/hootsuite", category: "social", type: "arcade", isComingSoon: true, @@ -630,7 +630,7 @@ const comingSoonTools: Tool[] = [ image: "hubspot.png", summary: "Manage companies, contacts, deals, and more in HubSpot with your agents.", - link: "/toolkits/sales/hubspot", + link: "/mcp-servers/sales/hubspot", category: "sales", type: "arcade", isComingSoon: false, @@ -639,7 +639,7 @@ const comingSoonTools: Tool[] = [ name: "Intercom", image: "intercom.png", summary: "Manage customer communications and support with your agents.", - link: "/toolkits/social-communication/intercom", + link: "/mcp-servers/social-communication/intercom", category: "social", type: "arcade", isComingSoon: true, @@ -648,7 +648,7 @@ const comingSoonTools: Tool[] = [ name: "Linear", image: "linear.svg", summary: "Manage issues and projects with your agents.", - link: "/toolkits/productivity/linear", + link: "/mcp-servers/productivity/linear", category: "productivity", type: "arcade", isComingSoon: false, @@ -657,7 +657,7 @@ const comingSoonTools: Tool[] = [ name: "Mailchimp", image: "mailchimp.png", summary: "Manage email campaigns and subscribers with your agents.", - link: "/toolkits/productivity/mailchimp", + link: "/mcp-servers/productivity/mailchimp", category: "productivity", type: "arcade", isComingSoon: true, @@ -666,7 +666,7 @@ const comingSoonTools: Tool[] = [ name: "Microsoft Dynamics", image: "msft.png", summary: "Manage CRM and ERP processes with your agents.", - link: "/toolkits/productivity/microsoft_dynamics", + link: "/mcp-servers/productivity/microsoft_dynamics", category: "productivity", type: "arcade", isComingSoon: true, @@ -675,7 +675,7 @@ const comingSoonTools: Tool[] = [ name: "Model Context Protocol (MCP)", image: "mcp.png", summary: "Manage context and improve AI interactions with your agents.", - link: "/toolkits/development/mcp", + link: "/mcp-servers/development/mcp", category: "development", type: "arcade", isComingSoon: true, @@ -684,7 +684,7 @@ const comingSoonTools: Tool[] = [ name: "Miro", image: "miro", summary: "Create and collaborate on visual boards with your agents.", - link: "/toolkits/productivity/miro", + link: "/mcp-servers/productivity/miro", category: "productivity", type: "arcade", isComingSoon: true, @@ -693,7 +693,7 @@ const comingSoonTools: Tool[] = [ name: "Monday", image: "monday.png", summary: "Manage projects and workflows with your agents.", - link: "/toolkits/productivity/monday", + link: "/mcp-servers/productivity/monday", category: "productivity", type: "arcade", isComingSoon: true, @@ -702,7 +702,7 @@ const comingSoonTools: Tool[] = [ name: "Netsuite", image: "netsuite.svg", summary: "Manage financial and business operations with your agents.", - link: "/toolkits/productivity/netsuite", + link: "/mcp-servers/productivity/netsuite", category: "productivity", type: "arcade", isComingSoon: true, @@ -711,7 +711,7 @@ const comingSoonTools: Tool[] = [ name: "Okta", image: "okta.png", summary: "Manage identity and access with your agents.", - link: "/toolkits/productivity/okta", + link: "/mcp-servers/productivity/okta", category: "productivity", type: "arcade", isComingSoon: true, @@ -720,7 +720,7 @@ const comingSoonTools: Tool[] = [ name: "OneDrive", image: "msft.png", summary: "Manage OneDrive files and folders with your agents", - link: "/toolkits/productivity/microsoft/onedrive", + link: "/mcp-servers/productivity/microsoft/onedrive", category: "productivity", type: "arcade", isComingSoon: true, @@ -729,7 +729,7 @@ const comingSoonTools: Tool[] = [ name: "Pinecone", image: "pinecone.png", summary: "Manage vector databases and similarity search with your agents.", - link: "/toolkits/development/pinecone", + link: "/mcp-servers/development/pinecone", category: "development", type: "arcade", isComingSoon: true, @@ -738,7 +738,7 @@ const comingSoonTools: Tool[] = [ name: "Pinterest", image: "pinterest.svg", summary: "Create and manage pins and boards with your agents.", - link: "/toolkits/social-communication/pinterest", + link: "/mcp-servers/social-communication/pinterest", category: "social", type: "arcade", isComingSoon: true, @@ -747,7 +747,7 @@ const comingSoonTools: Tool[] = [ name: "Pipedrive", image: "pipedrive.png", summary: "Manage sales pipelines and leads with your agents.", - link: "/toolkits/productivity/pipedrive", + link: "/mcp-servers/productivity/pipedrive", category: "productivity", type: "arcade", isComingSoon: true, @@ -757,7 +757,7 @@ const comingSoonTools: Tool[] = [ image: "plaid.png", summary: "Connect with financial accounts and manage financial data with your agents.", - link: "/toolkits/productivity/plaid", + link: "/mcp-servers/productivity/plaid", category: "productivity", type: "arcade", isComingSoon: true, @@ -766,7 +766,7 @@ const comingSoonTools: Tool[] = [ name: "QuickBooks", image: "quickbooks.png", summary: "Manage accounting and finances with your agents.", - link: "/toolkits/productivity/quickbooks", + link: "/mcp-servers/productivity/quickbooks", category: "productivity", type: "arcade", isComingSoon: true, @@ -775,7 +775,7 @@ const comingSoonTools: Tool[] = [ name: "Salesforce", image: "salesforce.svg", summary: "Manage customer relationships and sales with your agents.", - link: "/toolkits/sales/salesforce", + link: "/mcp-servers/sales/salesforce", category: "sales", type: "arcade", isComingSoon: false, @@ -784,7 +784,7 @@ const comingSoonTools: Tool[] = [ name: "Shopify", image: "shopify.svg", summary: "Manage e-commerce stores and products with your agents.", - link: "/toolkits/productivity/shopify", + link: "/mcp-servers/productivity/shopify", category: "productivity", type: "arcade", isComingSoon: true, @@ -793,7 +793,7 @@ const comingSoonTools: Tool[] = [ name: "SingleStore", image: "singlestore.png", summary: "Manage databases and data operations with your agents.", - link: "/toolkits/development/singlestore", + link: "/mcp-servers/development/singlestore", category: "development", type: "arcade", isComingSoon: true, @@ -802,7 +802,7 @@ const comingSoonTools: Tool[] = [ name: "Snowflake", image: "snowflake.png", summary: "Manage data warehouses and analytics with your agents.", - link: "/toolkits/development/snowflake", + link: "/mcp-servers/development/snowflake", category: "development", type: "arcade", isComingSoon: true, @@ -811,7 +811,7 @@ const comingSoonTools: Tool[] = [ name: "Splunk", image: "splunk.png", summary: "Monitor and analyze machine data with your agents.", - link: "/toolkits/development/splunk", + link: "/mcp-servers/development/splunk", category: "development", type: "arcade", isComingSoon: true, @@ -821,7 +821,7 @@ const comingSoonTools: Tool[] = [ image: "square.png", summary: "Process payments and manage business operations with your agents.", - link: "/toolkits/productivity/square", + link: "/mcp-servers/productivity/square", category: "productivity", type: "arcade", isComingSoon: true, @@ -830,7 +830,7 @@ const comingSoonTools: Tool[] = [ name: "Squarespace", image: "squarespace.png", summary: "Manage websites and online presence with your agents.", - link: "/toolkits/productivity/squarespace", + link: "/mcp-servers/productivity/squarespace", category: "productivity", type: "arcade", isComingSoon: true, @@ -839,7 +839,7 @@ const comingSoonTools: Tool[] = [ name: "Stripe", image: "stripe.svg", summary: "Process payments and manage subscriptions with your agents.", - link: "/toolkits/payments/stripe", + link: "/mcp-servers/payments/stripe", category: "payments", type: "arcade", isComingSoon: false, @@ -848,7 +848,7 @@ const comingSoonTools: Tool[] = [ name: "TikTok", image: "tiktok.svg", summary: "Create and manage TikTok content with your agents.", - link: "/toolkits/social-communication/tiktok", + link: "/mcp-servers/social-communication/tiktok", category: "social", type: "arcade", isComingSoon: true, @@ -857,7 +857,7 @@ const comingSoonTools: Tool[] = [ name: "Trello", image: "trello.png", summary: "Manage boards, cards, and lists with your agents.", - link: "/toolkits/productivity/trello", + link: "/mcp-servers/productivity/trello", category: "productivity", type: "arcade", isComingSoon: true, @@ -866,7 +866,7 @@ const comingSoonTools: Tool[] = [ name: "Vercel", image: "vercel.svg", summary: "Deploy and manage web applications with your agents.", - link: "/toolkits/development/vercel", + link: "/mcp-servers/development/vercel", category: "development", type: "arcade", isComingSoon: true, @@ -875,7 +875,7 @@ const comingSoonTools: Tool[] = [ name: "Weaviate", image: "weaviate.png", summary: "Manage vector databases and semantic search with your agents.", - link: "/toolkits/development/weaviate", + link: "/mcp-servers/development/weaviate", category: "development", type: "arcade", isComingSoon: true, @@ -884,7 +884,7 @@ const comingSoonTools: Tool[] = [ name: "Workday", image: "workday.png", summary: "Manage HR, finance, and planning with your agents.", - link: "/toolkits/productivity/workday", + link: "/mcp-servers/productivity/workday", category: "productivity", type: "arcade", isComingSoon: true, @@ -893,7 +893,7 @@ const comingSoonTools: Tool[] = [ name: "Wrike", image: "wrike.png", summary: "Manage projects and collaborate with your agents.", - link: "/toolkits/productivity/wrike", + link: "/mcp-servers/productivity/wrike", category: "productivity", type: "arcade", isComingSoon: true, @@ -902,7 +902,7 @@ const comingSoonTools: Tool[] = [ name: "Xero", image: "xero.svg", summary: "Manage accounting and finances with your agents.", - link: "/toolkits/productivity/xero", + link: "/mcp-servers/productivity/xero", category: "productivity", type: "arcade", isComingSoon: true, @@ -911,7 +911,7 @@ const comingSoonTools: Tool[] = [ name: "Zendesk", image: "zendesk.png", summary: "Manage customer support and service with your agents.", - link: "/toolkits/customer-support/zendesk", + link: "/mcp-servers/customer-support/zendesk", category: "customer-support", type: "arcade", isComingSoon: false, @@ -920,7 +920,7 @@ const comingSoonTools: Tool[] = [ name: "Postgres", image: "postgres.svg", summary: "Interact with PostgreSQL databases with your agents.", - link: "/toolkits/databases/postgres", + link: "/mcp-servers/databases/postgres", category: "databases", type: "community", isComingSoon: false, @@ -929,7 +929,7 @@ const comingSoonTools: Tool[] = [ name: "Clickhouse", image: "clickhouse.svg", summary: "Interact with Clickhouse databases with your agents.", - link: "/toolkits/databases/clickhouse", + link: "/mcp-servers/databases/clickhouse", category: "databases", type: "community", isComingSoon: false, @@ -938,7 +938,7 @@ const comingSoonTools: Tool[] = [ name: "MongoDB", image: "mongodb.svg", summary: "Interact with MongoDB databases with your agents.", - link: "/toolkits/databases/mongodb", + link: "/mcp-servers/databases/mongodb", category: "databases", type: "community", isComingSoon: false, diff --git a/app/_components/custom/toolkits/toolkits.tsx b/app/en/mcp-servers/components/toolkits.tsx similarity index 91% rename from app/_components/custom/toolkits/toolkits.tsx rename to app/en/mcp-servers/components/toolkits.tsx index b87c74673..04adf4ef8 100644 --- a/app/_components/custom/toolkits/toolkits.tsx +++ b/app/en/mcp-servers/components/toolkits.tsx @@ -15,7 +15,7 @@ import { import Link from "next/link"; import type React from "react"; import { useCallback, useMemo, useState } from "react"; -import { ComingSoonProvider } from "./coming-soon-context"; +import { ComingSoonProvider } from "@/app/_components/coming-soon-context"; import { ToolCard } from "./tool-card"; import type { Category, Tool } from "./toolkits-config"; @@ -39,23 +39,23 @@ const TYPE_PRIORITY = { const typeConfig = { arcade: { - label: "Arcade Optimized Toolkit", + label: "Arcade Optimized MCP Server", icon: BadgeCheck, color: "text-emerald-400", }, // biome-ignore lint/style/useNamingConvention: this is ok arcade_starter: { - label: "Arcade Starter Toolkit", + label: "Arcade Starter MCP Server", icon: Terminal, color: "text-orange-400", }, verified: { - label: "Verified Toolkit", + label: "Verified MCP Server", icon: CheckCircle, color: "text-blue-400", }, community: { - label: "Community Toolkit", + label: "Community MCP Server", icon: Users, color: "text-orange-400", }, @@ -136,10 +136,10 @@ export default function Toolkits({ tools, categories }: ToolkitsProps) {

- Toolkits + MCP Servers

- There are 4 designations for Arcade toolkits: + There are 4 designations for Arcade MCP Servers:

{Object.entries(typeConfig).map( @@ -155,7 +155,7 @@ export default function Toolkits({ tools, categories }: ToolkitsProps) {

{key === "arcade" && ( <> - Official toolkits hand-crafted by Arcade that are + Official MCP Servers hand-crafted by Arcade that are ready for use and optimized for LLM-usage.{" "} - Auto-generated toolkits developed by Arcade that may - require customization.{" "} + Auto-generated MCP Servers developed by Arcade that + may require customization.{" "} )} {key === "verified" && - "Community-created toolkits, thoroughly tested and verified by Arcade."} + "Community-created MCP Servers, thoroughly tested and verified by Arcade."} {key === "community" && - "Created and maintained by the Arcade community, offering a wide range of toolkits."} + "Created and maintained by the Arcade community, offering a wide range of MCP Servers."} {key === "auth" && "Auth integrations allow you to develop custom tools that connect your agent APIs and services."}

@@ -200,7 +200,7 @@ export default function Toolkits({ tools, categories }: ToolkitsProps) {

- Build your own integration + Build your own MCP Server

Don't see what you need? Use Arcade's SDK to integrate with @@ -212,9 +212,9 @@ export default function Toolkits({ tools, categories }: ToolkitsProps) { buttonVariants({ variant: "default", size: "sm" }), "bg-blue-600 hover:bg-blue-700 active:bg-blue-700" )} - href="https://docs.arcade.dev/home/build-tools/create-a-toolkit" + href="/home/build-tools/create-a-mcp-server" > - Learn how to build a toolkit + Learn how to build a MCP Server

@@ -246,7 +246,7 @@ export default function Toolkits({ tools, categories }: ToolkitsProps) { )}

- {filteredTools.length} result(s) found + {filteredTools.length} MCP Server(s) found

diff --git a/app/en/mcp-servers/contribute-a-server/page.mdx b/app/en/mcp-servers/contribute-a-server/page.mdx new file mode 100644 index 000000000..f99a7e3e9 --- /dev/null +++ b/app/en/mcp-servers/contribute-a-server/page.mdx @@ -0,0 +1,20 @@ +# How to contribute a MCP Server + +Arcade welcomes your MCP Server contributions. By adding your MCP Server to the Arcade documentation, you help other developers discover and use your tools. Follow these steps to submit your own MCP Server. + +## Prerequisites + +- Build your MCP Server. See [build a MCP Server](/home/build-tools/create-a-mcp-server) for guidance. +- Publish your MCP Server on PyPI. + +## Submit your MCP Server + +Open a pull request in the [Arcade Documentation GitHub repository](https://github.com/ArcadeAI/docs) that statisfies the automated tests. + +## Review and merge + +After submitting your pull request: + +- Double-check all checklist items have been completed. +- Address any feedback from the reviewers. +- Once approved, your MCP Server will be added to the Arcade documentation for other developers to discover and use! diff --git a/app/en/mcp-servers/customer-support/_meta.tsx b/app/en/mcp-servers/customer-support/_meta.tsx new file mode 100644 index 000000000..b474c66cb --- /dev/null +++ b/app/en/mcp-servers/customer-support/_meta.tsx @@ -0,0 +1,15 @@ +import type { MetaRecord } from "nextra"; + +const meta: MetaRecord = { + "*": { + theme: { + breadcrumb: true, + toc: true, + }, + }, + zendesk: { + title: "Zendesk", + }, +}; + +export default meta; diff --git a/app/en/toolkits/customer-support/zendesk/_meta.tsx b/app/en/mcp-servers/customer-support/zendesk/_meta.tsx similarity index 100% rename from app/en/toolkits/customer-support/zendesk/_meta.tsx rename to app/en/mcp-servers/customer-support/zendesk/_meta.tsx diff --git a/app/en/toolkits/customer-support/zendesk/page.mdx b/app/en/mcp-servers/customer-support/zendesk/page.mdx similarity index 66% rename from app/en/toolkits/customer-support/zendesk/page.mdx rename to app/en/mcp-servers/customer-support/zendesk/page.mdx index 9828c72e5..faf0e9a58 100644 --- a/app/en/toolkits/customer-support/zendesk/page.mdx +++ b/app/en/mcp-servers/customer-support/zendesk/page.mdx @@ -1,6 +1,7 @@ --- asIndexPage: true --- + # Zendesk import ToolInfo from "@/app/_components/tool-info"; @@ -13,14 +14,14 @@ import { Callout } from "nextra/components"; -The Zendesk toolkit provides a set of tools for managing customer support tickets and knowledge base articles. With this toolkit, users can: +The Zendesk MCP Server provides a set of tools for managing customer support tickets and knowledge base articles. With this MCP Sever, users can: - List and paginate through tickets in their Zendesk account. - Retrieve all comments for specific tickets, including the original description and conversation history. @@ -28,27 +29,44 @@ The Zendesk toolkit provides a set of tools for managing customer support ticket - Mark tickets as solved, optionally including a final comment. - Search for published Help Center articles in the knowledge base, with support for multiple filters in a single request. -This toolkit streamlines the process of handling customer inquiries and accessing support resources. +This MCP Sever streamlines the process of handling customer inquiries and accessing support resources. ## 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-toolkit). + tools](/home/build-tools/create-a-mcp-server). ## Zendesk.ListTickets @@ -60,10 +78,10 @@ This toolkit streamlines the process of handling customer inquiries and accessin label: "Call the Tool Directly", content: { Python: [ - "/examples/integrations/toolkits/zendesk/list_tickets_example_call_tool.py", + "/examples/integrations/mcp-servers/zendesk/list_tickets_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/zendesk/list_tickets_example_call_tool.js", + "/examples/integrations/mcp-servers/zendesk/list_tickets_example_call_tool.js", ], }, }, @@ -74,10 +92,10 @@ List tickets from your Zendesk account with offset-based pagination. **Parameters** -- **status** (`Enum` [TicketStatus](/toolkits/customer-support/zendesk/reference#TicketStatus), optional) The status of tickets to filter by. Defaults to 'open' +- **status** (`Enum` [TicketStatus](/mcp-servers/customer-support/zendesk/reference#TicketStatus), optional) The status of tickets to filter by. Defaults to 'open' - **limit** (`integer`, optional) Number of tickets to return. Defaults to 30 - **offset** (`integer`, optional) Number of tickets to skip before returning results. Defaults to 0 -- **sort_order** (`Enum` [SortOrder](/toolkits/customer-support/zendesk/reference#SortOrder), optional) Sort order for tickets by ID. 'asc' returns oldest first, 'desc' returns newest first. Defaults to 'desc' +- **sort_order** (`Enum` [SortOrder](/mcp-servers/customer-support/zendesk/reference#SortOrder), optional) Sort order for tickets by ID. 'asc' returns oldest first, 'desc' returns newest first. Defaults to 'desc' **Secrets** @@ -92,10 +110,10 @@ This tool requires the following secrets: `zendesk_subdomain` (learn how to [con label: "Call the Tool Directly", content: { Python: [ - "/examples/integrations/toolkits/zendesk/get_ticket_comments_example_call_tool.py", + "/examples/integrations/mcp-servers/zendesk/get_ticket_comments_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/zendesk/get_ticket_comments_example_call_tool.js", + "/examples/integrations/mcp-servers/zendesk/get_ticket_comments_example_call_tool.js", ], }, }, @@ -121,10 +139,10 @@ This tool requires the following secrets: `zendesk_subdomain` (learn how to [con label: "Call the Tool Directly", content: { Python: [ - "/examples/integrations/toolkits/zendesk/add_ticket_comment_example_call_tool.py", + "/examples/integrations/mcp-servers/zendesk/add_ticket_comment_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/zendesk/add_ticket_comment_example_call_tool.js", + "/examples/integrations/mcp-servers/zendesk/add_ticket_comment_example_call_tool.js", ], }, }, @@ -152,10 +170,10 @@ This tool requires the following secrets: `zendesk_subdomain` (learn how to [con label: "Call the Tool Directly", content: { Python: [ - "/examples/integrations/toolkits/zendesk/mark_ticket_solved_example_call_tool.py", + "/examples/integrations/mcp-servers/zendesk/mark_ticket_solved_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/zendesk/mark_ticket_solved_example_call_tool.js", + "/examples/integrations/mcp-servers/zendesk/mark_ticket_solved_example_call_tool.js", ], }, }, @@ -183,10 +201,10 @@ This tool requires the following secrets: `zendesk_subdomain` (learn how to [con label: "Call the Tool Directly", content: { Python: [ - "/examples/integrations/toolkits/zendesk/search_articles_example_call_tool.py", + "/examples/integrations/mcp-servers/zendesk/search_articles_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/zendesk/search_articles_example_call_tool.js", + "/examples/integrations/mcp-servers/zendesk/search_articles_example_call_tool.js", ], }, }, @@ -202,8 +220,8 @@ Search for Help Center articles in your Zendesk knowledge base. - **created_after** (`string`, optional) Filter articles created after this date (format: YYYY-MM-DD) - **created_before** (`string`, optional) Filter articles created before this date (format: YYYY-MM-DD) - **created_at** (`string`, optional) Filter articles created on this exact date (format: YYYY-MM-DD) -- **sort_by** (`Enum` [ArticleSortBy](/toolkits/customer-support/zendesk/reference#ArticleSortBy), optional) Field to sort articles by. Defaults to relevance according to the search query -- **sort_order** (`Enum` [SortOrder](/toolkits/customer-support/zendesk/reference#SortOrder), optional) Sort order direction. Defaults to descending +- **sort_by** (`Enum` [ArticleSortBy](/mcp-servers/customer-support/zendesk/reference#ArticleSortBy), optional) Field to sort articles by. Defaults to relevance according to the search query +- **sort_order** (`Enum` [SortOrder](/mcp-servers/customer-support/zendesk/reference#SortOrder), optional) Sort order direction. Defaults to descending - **limit** (`integer`, optional) Number of articles to return. Defaults to 30 - **offset** (`integer`, optional) Number of articles to skip before returning results. Defaults to 0 - **include_body** (`boolean`, optional) Include article body content in results. Bodies will be cleaned of HTML and truncated @@ -221,8 +239,12 @@ This tool requires the following secrets: `zendesk_subdomain` (learn how to [con { label: "Call the Tool Directly", content: { - Python: ["/examples/integrations/toolkits/zendesk/who_am_i_example_call_tool.py"], - JavaScript: ["/examples/integrations/toolkits/zendesk/who_am_i_example_call_tool.js"], + Python: [ + "/examples/integrations/mcp-servers/zendesk/who_am_i_example_call_tool.py", + ], + JavaScript: [ + "/examples/integrations/mcp-servers/zendesk/who_am_i_example_call_tool.js", + ], }, }, ]} diff --git a/app/en/toolkits/customer-support/zendesk/reference/page.mdx b/app/en/mcp-servers/customer-support/zendesk/reference/page.mdx similarity index 94% rename from app/en/toolkits/customer-support/zendesk/reference/page.mdx rename to app/en/mcp-servers/customer-support/zendesk/reference/page.mdx index 2919b6919..325155fe9 100644 --- a/app/en/toolkits/customer-support/zendesk/reference/page.mdx +++ b/app/en/mcp-servers/customer-support/zendesk/reference/page.mdx @@ -1,6 +1,6 @@ # Zendesk Reference -Below is a reference of enumerations used by some tools in the Zendesk toolkit: +Below is a reference of enumerations used by some tools in the Zendesk MCP Server: ## TicketStatus diff --git a/app/en/toolkits/databases/_meta.ts b/app/en/mcp-servers/databases/_meta.ts similarity index 100% rename from app/en/toolkits/databases/_meta.ts rename to app/en/mcp-servers/databases/_meta.ts diff --git a/app/en/mcp-servers/databases/_meta.tsx b/app/en/mcp-servers/databases/_meta.tsx new file mode 100644 index 000000000..7ce4196ed --- /dev/null +++ b/app/en/mcp-servers/databases/_meta.tsx @@ -0,0 +1,21 @@ +import type { MetaRecord } from "nextra"; + +const meta: MetaRecord = { + "*": { + theme: { + breadcrumb: true, + toc: true, + }, + }, + postgres: { + title: "Postgres", + }, + mongodb: { + title: "MongoDB", + }, + clickhouse: { + title: "ClickHouse", + }, +}; + +export default meta; diff --git a/app/en/toolkits/databases/clickhouse/page.mdx b/app/en/mcp-servers/databases/clickhouse/page.mdx similarity index 77% rename from app/en/toolkits/databases/clickhouse/page.mdx rename to app/en/mcp-servers/databases/clickhouse/page.mdx index 0c5b84d1c..2b59211ca 100644 --- a/app/en/toolkits/databases/clickhouse/page.mdx +++ b/app/en/mcp-servers/databases/clickhouse/page.mdx @@ -10,26 +10,26 @@ import { Callout } from "nextra/components"; -The Arcade Clickhouse toolkit provides a pre-built set of tools for interacting with Clickhouse databases in a read-only manner. This toolkit enables agents to discover database schemas, explore table structures, and execute SELECT queries safely. This toolkit is a companion to the blog post [Designing SQL Tools for AI Agents](https://blog.arcade.dev/sql-tools-ai-agents-security). +The Arcade Clickhouse MCP Server provides a pre-built set of tools for interacting with Clickhouse databases in a read-only manner. This MCP Sever enables agents to discover database schemas, explore table structures, and execute SELECT queries safely. This MCP Sever is a companion to the blog post [Designing SQL Tools for AI Agents](https://blog.arcade.dev/sql-tools-ai-agents-security). - This toolkit is meant to be an example of how to build a toolkit for a + This MCP Sever is meant to be an example of how to build a MCP Sever for a database, and is not intended to be used in production - you won't find it listed in the Arcade dashboard or APIs. For production use, we recommend - forking this repository and building your own toolkit with use-case specific + forking this repository and building your own MCP Sever with use-case specific tools. ## Key Features -This toolkit demonstrates several important concepts for LLM-powered database interactions: +This MCP Sever demonstrates several important concepts for LLM-powered database interactions: - **Schema Discovery**: Automatically discover available database schemas - **Table Exploration**: Find all tables within a specific schema @@ -76,10 +76,10 @@ Discover all databases in a Clickhouse database. This tool returns a list of all label: "Call the Tool", content: { Python: [ - "/examples/integrations/toolkits/clickhouse/discover_databases_example_call_tool.py", + "/examples/integrations/mcp-servers/clickhouse/discover_databases_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/clickhouse/discover_databases_example_call_tool.js", + "/examples/integrations/mcp-servers/clickhouse/discover_databases_example_call_tool.js", ], }, }, @@ -96,10 +96,10 @@ Discover all schemas in a Clickhouse database. This tool returns a list of all a label: "Call the Tool", content: { Python: [ - "/examples/integrations/toolkits/clickhouse/discover_schemas_example_call_tool.py", + "/examples/integrations/mcp-servers/clickhouse/discover_schemas_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/clickhouse/discover_schemas_example_call_tool.js", + "/examples/integrations/mcp-servers/clickhouse/discover_schemas_example_call_tool.js", ], }, }, @@ -120,10 +120,10 @@ Discover all tables in a specific schema. This tool should be used before any ot label: "Call the Tool", content: { Python: [ - "/examples/integrations/toolkits/clickhouse/discover_tables_example_call_tool.py", + "/examples/integrations/mcp-servers/clickhouse/discover_tables_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/clickhouse/discover_tables_example_call_tool.js", + "/examples/integrations/mcp-servers/clickhouse/discover_tables_example_call_tool.js", ], }, }, @@ -145,10 +145,10 @@ Get the detailed schema of a specific table. This tool provides column informati label: "Call the Tool", content: { Python: [ - "/examples/integrations/toolkits/clickhouse/get_table_schema_example_call_tool.py", + "/examples/integrations/mcp-servers/clickhouse/get_table_schema_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/clickhouse/get_table_schema_example_call_tool.js", + "/examples/integrations/mcp-servers/clickhouse/get_table_schema_example_call_tool.js", ], }, }, @@ -201,10 +201,10 @@ LIMIT {limit} OFFSET {offset} label: "Call the Tool", content: { Python: [ - "/examples/integrations/toolkits/clickhouse/execute_select_query_example_call_tool.py", + "/examples/integrations/mcp-servers/clickhouse/execute_select_query_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/clickhouse/execute_select_query_example_call_tool.js", + "/examples/integrations/mcp-servers/clickhouse/execute_select_query_example_call_tool.js", ], }, }, @@ -213,7 +213,7 @@ LIMIT {limit} OFFSET {offset} ## Usage Workflow -For optimal results, follow this workflow when using the Clickhouse toolkit: +For optimal results, follow this workflow when using the Clickhouse MCP Sever: 1. **Discover Schemas**: Use `discover_schemas` to see available schemas 2. **Discover Tables**: Use `discover_tables` with your target schema diff --git a/app/en/toolkits/databases/mongodb/page.mdx b/app/en/mcp-servers/databases/mongodb/page.mdx similarity index 79% rename from app/en/toolkits/databases/mongodb/page.mdx rename to app/en/mcp-servers/databases/mongodb/page.mdx index 6d0e44b1c..177393bf9 100644 --- a/app/en/toolkits/databases/mongodb/page.mdx +++ b/app/en/mcp-servers/databases/mongodb/page.mdx @@ -10,26 +10,26 @@ import { Callout } from "nextra/components"; -The Arcade MongoDB toolkit provides a pre-built set of tools for interacting with MongoDB databases in a read-only manner. This toolkit enables agents to discover databases and collections, explore document structures, and execute queries safely. This toolkit is a companion to the blog post [Designing SQL Tools for AI Agents](https://blog.arcade.dev/sql-tools-ai-agents-security). +The Arcade MongoDB MCP Server provides a pre-built set of tools for interacting with MongoDB databases in a read-only manner. This MCP Sever enables agents to discover databases and collections, explore document structures, and execute queries safely. This MCP Sever is a companion to the blog post [Designing SQL Tools for AI Agents](https://blog.arcade.dev/sql-tools-ai-agents-security). - This toolkit is meant to be an example of how to build a toolkit for a + This MCP Sever is meant to be an example of how to build a MCP Sever for a database, and is not intended to be used in production - you won't find it listed in the Arcade dashboard or APIs. For production use, we recommend - forking this repository and building your own toolkit with use-case specific + forking this repository and building your own MCP Sever with use-case specific tools. ## Key Features -This toolkit demonstrates several important concepts for LLM-powered database interactions: +This MCP Sever demonstrates several important concepts for LLM-powered database interactions: - **Database Discovery**: Automatically discover available databases in the MongoDB instance - **Collection Exploration**: Find all collections within a specific database @@ -82,10 +82,10 @@ Discover all databases in the MongoDB instance. This tool returns a list of all label: "Call the Tool", content: { Python: [ - "/examples/integrations/toolkits/mongodb/discover_databases_example_call_tool.py", + "/examples/integrations/mcp-servers/mongodb/discover_databases_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/mongodb/discover_databases_example_call_tool.js", + "/examples/integrations/mcp-servers/mongodb/discover_databases_example_call_tool.js", ], }, }, @@ -106,10 +106,10 @@ Discover all collections in a specific database. This tool should be used before label: "Call the Tool", content: { Python: [ - "/examples/integrations/toolkits/mongodb/discover_collections_example_call_tool.py", + "/examples/integrations/mcp-servers/mongodb/discover_collections_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/mongodb/discover_collections_example_call_tool.js", + "/examples/integrations/mcp-servers/mongodb/discover_collections_example_call_tool.js", ], }, }, @@ -132,10 +132,10 @@ Get the schema structure of a collection by sampling documents. Since MongoDB is label: "Call the Tool", content: { Python: [ - "/examples/integrations/toolkits/mongodb/get_collection_schema_example_call_tool.py", + "/examples/integrations/mcp-servers/mongodb/get_collection_schema_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/mongodb/get_collection_schema_example_call_tool.js", + "/examples/integrations/mcp-servers/mongodb/get_collection_schema_example_call_tool.js", ], }, }, @@ -171,10 +171,10 @@ Find documents in a collection with filtering, projection, and sorting. This too label: "Call the Tool", content: { Python: [ - "/examples/integrations/toolkits/mongodb/find_documents_example_call_tool.py", + "/examples/integrations/mcp-servers/mongodb/find_documents_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/mongodb/find_documents_example_call_tool.js", + "/examples/integrations/mcp-servers/mongodb/find_documents_example_call_tool.js", ], }, }, @@ -197,10 +197,10 @@ Count documents in a collection matching the given filter. This tool is useful f label: "Call the Tool", content: { Python: [ - "/examples/integrations/toolkits/mongodb/count_documents_example_call_tool.py", + "/examples/integrations/mcp-servers/mongodb/count_documents_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/mongodb/count_documents_example_call_tool.js", + "/examples/integrations/mcp-servers/mongodb/count_documents_example_call_tool.js", ], }, }, @@ -233,10 +233,10 @@ Execute aggregation pipelines for complex data analysis. This tool allows you to label: "Call the Tool", content: { Python: [ - "/examples/integrations/toolkits/mongodb/aggregate_documents_example_call_tool.py", + "/examples/integrations/mcp-servers/mongodb/aggregate_documents_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/mongodb/aggregate_documents_example_call_tool.js", + "/examples/integrations/mcp-servers/mongodb/aggregate_documents_example_call_tool.js", ], }, }, @@ -245,7 +245,7 @@ Execute aggregation pipelines for complex data analysis. This tool allows you to ## Usage Workflow -For optimal results, follow this workflow when using the MongoDB toolkit: +For optimal results, follow this workflow when using the MongoDB MCP Sever: 1. **Discover Databases**: Use `discover_databases` to see available databases 2. **Discover Collections**: Use `discover_collections` with your target database diff --git a/app/en/toolkits/databases/postgres/clickhouse.mdx b/app/en/mcp-servers/databases/postgres/clickhouse.mdx similarity index 58% rename from app/en/toolkits/databases/postgres/clickhouse.mdx rename to app/en/mcp-servers/databases/postgres/clickhouse.mdx index b40df0c83..2b59211ca 100644 --- a/app/en/toolkits/databases/postgres/clickhouse.mdx +++ b/app/en/mcp-servers/databases/postgres/clickhouse.mdx @@ -10,44 +10,58 @@ import { Callout } from "nextra/components"; -The Arcade Clickhouse toolkit provides a pre-built set of tools for interacting with Clickhouse databases in a read-only manner. This toolkit enables agents to discover database schemas, explore table structures, and execute SELECT queries safely. This toolkit is a companion to the blog post [Designing SQL Tools for AI Agents](https://blog.arcade.dev/sql-tools-ai-agents-security). +The Arcade Clickhouse MCP Server provides a pre-built set of tools for interacting with Clickhouse databases in a read-only manner. This MCP Sever enables agents to discover database schemas, explore table structures, and execute SELECT queries safely. This MCP Sever is a companion to the blog post [Designing SQL Tools for AI Agents](https://blog.arcade.dev/sql-tools-ai-agents-security). -This toolkit is meant to be an example of how to build a toolkit for a database, and is not intended to be used in production - you won't find it listed in the Arcade dashboard or APIs. For production use, we recommend forking this repository and building your own toolkit with use-case specific tools. + This MCP Sever is meant to be an example of how to build a MCP Sever for a + database, and is not intended to be used in production - you won't find it + listed in the Arcade dashboard or APIs. For production use, we recommend + forking this repository and building your own MCP Sever with use-case specific + tools. ## Key Features -This toolkit demonstrates several important concepts for LLM-powered database interactions: +This MCP Sever demonstrates several important concepts for LLM-powered database interactions: -* **Schema Discovery**: Automatically discover available database schemas -* **Table Exploration**: Find all tables within a specific schema -* **Schema Inspection**: Get detailed column information including data types, primary keys, and indexes -* **Safe Query Execution**: Execute SELECT queries with built-in safety measures -* **Connection Pooling**: Reuse database connections efficiently -* **Read-Only Access**: Enforce read-only access to prevent data modification -* **Row Limits**: Automatically limit query results to prevent overwhelming responses +- **Schema Discovery**: Automatically discover available database schemas +- **Table Exploration**: Find all tables within a specific schema +- **Schema Inspection**: Get detailed column information including data types, primary keys, and indexes +- **Safe Query Execution**: Execute SELECT queries with built-in safety measures +- **Connection Pooling**: Reuse database connections efficiently +- **Read-Only Access**: Enforce read-only access to prevent data modification +- **Row Limits**: Automatically limit query results to prevent overwhelming responses ## Available Tools Note that all tools require the `CLICKHOUSE_DATABASE_CONNECTION_STRING` secret to be set. @@ -62,11 +76,13 @@ Discover all databases in a Clickhouse database. This tool returns a list of all label: "Call the Tool", content: { Python: [ - "/examples/integrations/toolkits/clickhouse/discover_databases_example_call_tool.py", + "/examples/integrations/mcp-servers/clickhouse/discover_databases_example_call_tool.py", + ], + JavaScript: [ + "/examples/integrations/mcp-servers/clickhouse/discover_databases_example_call_tool.js", ], - JavaScript: ["/examples/integrations/toolkits/clickhouse/discover_databases_example_call_tool.js"], }, - } + }, ]} /> @@ -80,11 +96,13 @@ Discover all schemas in a Clickhouse database. This tool returns a list of all a label: "Call the Tool", content: { Python: [ - "/examples/integrations/toolkits/clickhouse/discover_schemas_example_call_tool.py", + "/examples/integrations/mcp-servers/clickhouse/discover_schemas_example_call_tool.py", + ], + JavaScript: [ + "/examples/integrations/mcp-servers/clickhouse/discover_schemas_example_call_tool.js", ], - JavaScript: ["/examples/integrations/toolkits/clickhouse/discover_schemas_example_call_tool.js"], }, - } + }, ]} /> @@ -93,6 +111,7 @@ Discover all schemas in a Clickhouse database. This tool returns a list of all a Discover all tables in a specific schema. This tool should be used before any other tool that requires a table name. **Parameters:** + - `schema_name` (str): The database schema to discover tables in (default: "public") @@ -114,6 +135,7 @@ Discover all tables in a specific schema. This tool should be used before any ot Get the detailed schema of a specific table. This tool provides column information including data types, primary key indicators, and index information. Always use this tool before executing any query. **Parameters:** + - `schema_name` (str): The database schema containing the table - `table_name` (str): The name of the table to inspect @@ -123,11 +145,13 @@ Get the detailed schema of a specific table. This tool provides column informati label: "Call the Tool", content: { Python: [ - "/examples/integrations/toolkits/clickhouse/get_table_schema_example_call_tool.py", + "/examples/integrations/mcp-servers/clickhouse/get_table_schema_example_call_tool.py", + ], + JavaScript: [ + "/examples/integrations/mcp-servers/clickhouse/get_table_schema_example_call_tool.js", ], - JavaScript: ["/examples/integrations/toolkits/clickhouse/get_table_schema_example_call_tool.js"], }, - } + }, ]} /> @@ -136,6 +160,7 @@ Get the detailed schema of a specific table. This tool provides column informati Execute a SELECT query with comprehensive clause support. This tool allows you to build complex queries using individual clauses while maintaining safety and performance. **Parameters:** + - `select_clause` (str): Columns to select (without SELECT keyword) - `from_clause` (str): Table(s) to query from (without FROM keyword) - `limit` (int): Maximum rows to return (default: 100) @@ -149,6 +174,7 @@ Execute a SELECT query with comprehensive clause support. This tool allows you t **Query Construction:** The final query is constructed as: + ```sql SELECT {select_clause} FROM {from_clause} JOIN {join_clause} @@ -160,8 +186,9 @@ LIMIT {limit} OFFSET {offset} ``` **Best Practices:** + - Always use `discover_tables` and `get_table_schema` before executing queries -- Never use "SELECT *" - always specify the columns you need +- Never use "SELECT \*" - always specify the columns you need - Order results by primary keys or important columns - Use case-insensitive string matching - Trim strings in queries @@ -174,17 +201,19 @@ LIMIT {limit} OFFSET {offset} label: "Call the Tool", content: { Python: [ - "/examples/integrations/toolkits/clickhouse/execute_select_query_example_call_tool.py", + "/examples/integrations/mcp-servers/clickhouse/execute_select_query_example_call_tool.py", + ], + JavaScript: [ + "/examples/integrations/mcp-servers/clickhouse/execute_select_query_example_call_tool.js", ], - JavaScript: ["/examples/integrations/toolkits/clickhouse/execute_select_query_example_call_tool.js"], }, - } + }, ]} /> ## Usage Workflow -For optimal results, follow this workflow when using the Clickhouse toolkit: +For optimal results, follow this workflow when using the Clickhouse MCP Sever: 1. **Discover Schemas**: Use `discover_schemas` to see available schemas 2. **Discover Tables**: Use `discover_tables` with your target schema @@ -193,4 +222,4 @@ For optimal results, follow this workflow when using the Clickhouse toolkit: This workflow ensures your agent has complete information about the database structure before attempting queries, reducing errors and improving query performance. - + diff --git a/app/en/toolkits/databases/postgres/mongodb.mdx b/app/en/mcp-servers/databases/postgres/mongodb.mdx similarity index 60% rename from app/en/toolkits/databases/postgres/mongodb.mdx rename to app/en/mcp-servers/databases/postgres/mongodb.mdx index 9f3a2d2e5..177393bf9 100644 --- a/app/en/toolkits/databases/postgres/mongodb.mdx +++ b/app/en/mcp-servers/databases/postgres/mongodb.mdx @@ -10,47 +10,64 @@ import { Callout } from "nextra/components"; -The Arcade MongoDB toolkit provides a pre-built set of tools for interacting with MongoDB databases in a read-only manner. This toolkit enables agents to discover databases and collections, explore document structures, and execute queries safely. This toolkit is a companion to the blog post [Designing SQL Tools for AI Agents](https://blog.arcade.dev/sql-tools-ai-agents-security). +The Arcade MongoDB MCP Server provides a pre-built set of tools for interacting with MongoDB databases in a read-only manner. This MCP Sever enables agents to discover databases and collections, explore document structures, and execute queries safely. This MCP Sever is a companion to the blog post [Designing SQL Tools for AI Agents](https://blog.arcade.dev/sql-tools-ai-agents-security). -This toolkit is meant to be an example of how to build a toolkit for a database, and is not intended to be used in production - you won't find it listed in the Arcade dashboard or APIs. For production use, we recommend forking this repository and building your own toolkit with use-case specific tools. + This MCP Sever is meant to be an example of how to build a MCP Sever for a + database, and is not intended to be used in production - you won't find it + listed in the Arcade dashboard or APIs. For production use, we recommend + forking this repository and building your own MCP Sever with use-case specific + tools. ## Key Features -This toolkit demonstrates several important concepts for LLM-powered database interactions: +This MCP Sever demonstrates several important concepts for LLM-powered database interactions: -* **Database Discovery**: Automatically discover available databases in the MongoDB instance -* **Collection Exploration**: Find all collections within a specific database -* **Schema Inference**: Sample documents to infer schema structure and data types -* **Safe Query Execution**: Execute find queries with built-in safety measures -* **Aggregation Support**: Run complex aggregation pipelines for data analysis -* **Document Counting**: Count documents matching specific criteria -* **Connection Pooling**: Reuse database connections efficiently -* **Read-Only Access**: Enforce read-only access to prevent data modification -* **Result Limits**: Automatically limit query results to prevent overwhelming responses +- **Database Discovery**: Automatically discover available databases in the MongoDB instance +- **Collection Exploration**: Find all collections within a specific database +- **Schema Inference**: Sample documents to infer schema structure and data types +- **Safe Query Execution**: Execute find queries with built-in safety measures +- **Aggregation Support**: Run complex aggregation pipelines for data analysis +- **Document Counting**: Count documents matching specific criteria +- **Connection Pooling**: Reuse database connections efficiently +- **Read-Only Access**: Enforce read-only access to prevent data modification +- **Result Limits**: Automatically limit query results to prevent overwhelming responses ## Available Tools Note that all tools require the `MONGODB_CONNECTION_STRING` secret to be set. @@ -65,11 +82,13 @@ Discover all databases in the MongoDB instance. This tool returns a list of all label: "Call the Tool", content: { Python: [ - "/examples/integrations/toolkits/mongodb/discover_databases_example_call_tool.py", + "/examples/integrations/mcp-servers/mongodb/discover_databases_example_call_tool.py", + ], + JavaScript: [ + "/examples/integrations/mcp-servers/mongodb/discover_databases_example_call_tool.js", ], - JavaScript: ["/examples/integrations/toolkits/mongodb/discover_databases_example_call_tool.js"], }, - } + }, ]} /> @@ -78,6 +97,7 @@ Discover all databases in the MongoDB instance. This tool returns a list of all Discover all collections in a specific database. This tool should be used before any other tool that requires a collection name. **Parameters:** + - `database_name` (str): The database name to discover collections in @@ -99,6 +121,7 @@ Discover all collections in a specific database. This tool should be used before Get the schema structure of a collection by sampling documents. Since MongoDB is schema-less, this tool samples a configurable number of documents to infer the schema structure and data types. Always use this tool before executing any query. **Parameters:** + - `database_name` (str): The database name containing the collection - `collection_name` (str): The name of the collection to inspect - `sample_size` (int): The number of documents to sample for schema discovery (default: 100) @@ -109,11 +132,13 @@ Get the schema structure of a collection by sampling documents. Since MongoDB is label: "Call the Tool", content: { Python: [ - "/examples/integrations/toolkits/mongodb/get_collection_schema_example_call_tool.py", + "/examples/integrations/mcp-servers/mongodb/get_collection_schema_example_call_tool.py", + ], + JavaScript: [ + "/examples/integrations/mcp-servers/mongodb/get_collection_schema_example_call_tool.js", ], - JavaScript: ["/examples/integrations/toolkits/mongodb/get_collection_schema_example_call_tool.js"], }, - } + }, ]} /> @@ -122,6 +147,7 @@ Get the schema structure of a collection by sampling documents. Since MongoDB is Find documents in a collection with filtering, projection, and sorting. This tool allows you to build complex queries using MongoDB's query operators while maintaining safety and performance. **Parameters:** + - `database_name` (str): The database name to query - `collection_name` (str): The collection name to query - `filter_dict` (str, optional): MongoDB filter/query as JSON string. Leave None for no filter @@ -131,12 +157,13 @@ Find documents in a collection with filtering, projection, and sorting. This too - `skip` (int): Number of documents to skip (default: 0) **Best Practices:** + - Always use `discover_collections` and `get_collection_schema` before executing queries - Always specify projection to limit fields returned if you don't need all data - Always sort your results by the most important fields first - Use appropriate MongoDB query operators for complex filtering ($gte, $lte, $in, $regex, etc.) - Be mindful of case sensitivity when querying string fields -- Use indexes when possible (typically on _id and commonly queried fields) +- Use indexes when possible (typically on \_id and commonly queried fields) @@ -157,6 +186,7 @@ Find documents in a collection with filtering, projection, and sorting. This too Count documents in a collection matching the given filter. This tool is useful for getting quick counts without retrieving the actual documents. **Parameters:** + - `database_name` (str): The database name to query - `collection_name` (str): The collection name to query - `filter_dict` (str, optional): MongoDB filter/query as JSON string. Leave None to count all documents @@ -167,11 +197,13 @@ Count documents in a collection matching the given filter. This tool is useful f label: "Call the Tool", content: { Python: [ - "/examples/integrations/toolkits/mongodb/count_documents_example_call_tool.py", + "/examples/integrations/mcp-servers/mongodb/count_documents_example_call_tool.py", + ], + JavaScript: [ + "/examples/integrations/mcp-servers/mongodb/count_documents_example_call_tool.js", ], - JavaScript: ["/examples/integrations/toolkits/mongodb/count_documents_example_call_tool.js"], }, - } + }, ]} /> @@ -180,12 +212,14 @@ Count documents in a collection matching the given filter. This tool is useful f Execute aggregation pipelines for complex data analysis. This tool allows you to run sophisticated data processing operations including grouping, filtering, and transformations. **Parameters:** + - `database_name` (str): The database name to query - `collection_name` (str): The collection name to query - `pipeline` (list[str]): MongoDB aggregation pipeline as a list of JSON strings - `limit` (int): Maximum number of results to return (default: 100) **Common Aggregation Stages:** + - `$match` - filter documents - `$group` - group documents and perform calculations - `$project` - reshape documents @@ -199,17 +233,19 @@ Execute aggregation pipelines for complex data analysis. This tool allows you to label: "Call the Tool", content: { Python: [ - "/examples/integrations/toolkits/mongodb/aggregate_documents_example_call_tool.py", + "/examples/integrations/mcp-servers/mongodb/aggregate_documents_example_call_tool.py", + ], + JavaScript: [ + "/examples/integrations/mcp-servers/mongodb/aggregate_documents_example_call_tool.js", ], - JavaScript: ["/examples/integrations/toolkits/mongodb/aggregate_documents_example_call_tool.js"], }, - } + }, ]} /> ## Usage Workflow -For optimal results, follow this workflow when using the MongoDB toolkit: +For optimal results, follow this workflow when using the MongoDB MCP Sever: 1. **Discover Databases**: Use `discover_databases` to see available databases 2. **Discover Collections**: Use `discover_collections` with your target database @@ -218,4 +254,4 @@ For optimal results, follow this workflow when using the MongoDB toolkit: This workflow ensures your agent has complete information about the database structure before attempting queries, reducing errors and improving query performance. - + diff --git a/app/en/toolkits/databases/postgres/page.mdx b/app/en/mcp-servers/databases/postgres/page.mdx similarity index 75% rename from app/en/toolkits/databases/postgres/page.mdx rename to app/en/mcp-servers/databases/postgres/page.mdx index d40503987..7b6ef707a 100644 --- a/app/en/toolkits/databases/postgres/page.mdx +++ b/app/en/mcp-servers/databases/postgres/page.mdx @@ -10,22 +10,26 @@ import { Callout } from "nextra/components"; -The Arcade Postgres toolkit provides a pre-built set of tools for interacting with PostgreSQL databases in a read-only manner. This toolkit enables agents to discover database schemas, explore table structures, and execute SELECT queries safely. This toolkit is a companion to the blog post [Designing SQL Tools for AI Agents](https://blog.arcade.dev/sql-tools-ai-agents-security). +The Arcade Postgres MCP Server provides a pre-built set of tools for interacting with PostgreSQL databases in a read-only manner. This MCP Sever enables agents to discover database schemas, explore table structures, and execute SELECT queries safely. This MCP Sever is a companion to the blog post [Designing SQL Tools for AI Agents](https://blog.arcade.dev/sql-tools-ai-agents-security). -This toolkit is meant to be an example of how to build a toolkit for a database, and is not intended to be used in production - you won't find it listed in the Arcade dashboard or APIs. For production use, we recommend forking this repository and building your own toolkit with use-case specific tools. + This MCP Sever is meant to be an example of how to build a MCP Sever for a + database, and is not intended to be used in production - you won't find it + listed in the Arcade dashboard or APIs. For production use, we recommend + forking this repository and building your own MCP Sever with use-case specific + tools. ## Key Features -This toolkit demonstrates several important concepts for LLM-powered database interactions: +This MCP Sever demonstrates several important concepts for LLM-powered database interactions: - **Schema Discovery**: Automatically discover available database schemas - **Table Exploration**: Find all tables within a specific schema @@ -65,10 +69,10 @@ Discover all schemas in a PostgreSQL database. This tool returns a list of all a label: "Call the Tool", content: { Python: [ - "/examples/integrations/toolkits/postgres/discover_schemas_example_call_tool.py", + "/examples/integrations/mcp-servers/postgres/discover_schemas_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/postgres/discover_schemas_example_call_tool.js", + "/examples/integrations/mcp-servers/postgres/discover_schemas_example_call_tool.js", ], }, }, @@ -89,10 +93,10 @@ Discover all tables in a specific schema. This tool should be used before any ot label: "Call the Tool", content: { Python: [ - "/examples/integrations/toolkits/postgres/discover_tables_example_call_tool.py", + "/examples/integrations/mcp-servers/postgres/discover_tables_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/postgres/discover_tables_example_call_tool.js", + "/examples/integrations/mcp-servers/postgres/discover_tables_example_call_tool.js", ], }, }, @@ -114,10 +118,10 @@ Get the detailed schema of a specific table. This tool provides column informati label: "Call the Tool", content: { Python: [ - "/examples/integrations/toolkits/postgres/get_table_schema_example_call_tool.py", + "/examples/integrations/mcp-servers/postgres/get_table_schema_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/postgres/get_table_schema_example_call_tool.js", + "/examples/integrations/mcp-servers/postgres/get_table_schema_example_call_tool.js", ], }, }, @@ -170,10 +174,10 @@ LIMIT {limit} OFFSET {offset} label: "Call the Tool", content: { Python: [ - "/examples/integrations/toolkits/postgres/execute_select_query_example_call_tool.py", + "/examples/integrations/mcp-servers/postgres/execute_select_query_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/postgres/execute_select_query_example_call_tool.js", + "/examples/integrations/mcp-servers/postgres/execute_select_query_example_call_tool.js", ], }, }, @@ -182,7 +186,7 @@ LIMIT {limit} OFFSET {offset} ## Usage Workflow -For optimal results, follow this workflow when using the Postgres toolkit: +For optimal results, follow this workflow when using the Postgres MCP Sever: 1. **Discover Schemas**: Use `discover_schemas` to see available schemas 2. **Discover Tables**: Use `discover_tables` with your target schema @@ -191,4 +195,4 @@ For optimal results, follow this workflow when using the Postgres toolkit: This workflow ensures your agent has complete information about the database structure before attempting queries, reducing errors and improving query performance. - + diff --git a/app/en/toolkits/development/_meta.tsx b/app/en/mcp-servers/development/_meta.tsx similarity index 100% rename from app/en/toolkits/development/_meta.tsx rename to app/en/mcp-servers/development/_meta.tsx diff --git a/app/en/toolkits/development/e2b/page.mdx b/app/en/mcp-servers/development/e2b/page.mdx similarity index 75% rename from app/en/toolkits/development/e2b/page.mdx rename to app/en/mcp-servers/development/e2b/page.mdx index 56600d866..80a0b8d3d 100644 --- a/app/en/toolkits/development/e2b/page.mdx +++ b/app/en/mcp-servers/development/e2b/page.mdx @@ -16,14 +16,14 @@ import { Callout } from "nextra/components"; -The Arcade E2B toolkit provides a pre-built set of tools for running code in a sandboxed environment. These tools make it easy to build agents and AI apps that can: +The Arcade E2B MCP Server provides a pre-built set of tools for running code in a sandboxed environment. These tools make it easy to build agents and AI apps that can: - Run code in a sandboxed environment - Create a static matplotlib chart ## Available Tools -These tools are currently available in the Arcade E2B toolkit. +These tools are currently available in the Arcade E2B MCP Sever. 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-toolkit). + tools](/home/build-tools/create-a-mcp-server). ## E2b.RunCode @@ -48,10 +48,10 @@ These tools are currently available in the Arcade E2B toolkit. label: "Call the Tool Directly", content: { Python: [ - "/examples/integrations/toolkits/e2b/run_code_example_call_tool.py", + "/examples/integrations/mcp-servers/e2b/run_code_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/e2b/run_code_example_call_tool.js", + "/examples/integrations/mcp-servers/e2b/run_code_example_call_tool.js", ], }, }, @@ -81,10 +81,10 @@ Run code in a sandbox and return the output. label: "Call the Tool Directly", content: { Python: [ - "/examples/integrations/toolkits/e2b/create_static_matplotlib_chart_example_call_tool.py", + "/examples/integrations/mcp-servers/e2b/create_static_matplotlib_chart_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/e2b/create_static_matplotlib_chart_example_call_tool.js", + "/examples/integrations/mcp-servers/e2b/create_static_matplotlib_chart_example_call_tool.js", ], }, }, @@ -104,7 +104,7 @@ Run the provided Python code to generate a static matplotlib chart. The resultin ## Auth -The Arcade E2B toolkit uses [E2B](https://e2b.dev/) to run code in a sandboxed environment. +The Arcade E2B MCP Sever uses [E2B](https://e2b.dev/) to run code in a sandboxed environment. **Global Environment Variables:** diff --git a/app/en/toolkits/development/firecrawl/_meta.tsx b/app/en/mcp-servers/development/firecrawl/_meta.tsx similarity index 100% rename from app/en/toolkits/development/firecrawl/_meta.tsx rename to app/en/mcp-servers/development/firecrawl/_meta.tsx diff --git a/app/en/toolkits/development/firecrawl/page.mdx b/app/en/mcp-servers/development/firecrawl/page.mdx similarity index 78% rename from app/en/toolkits/development/firecrawl/page.mdx rename to app/en/mcp-servers/development/firecrawl/page.mdx index 2e3775acf..1a3c36cbc 100644 --- a/app/en/toolkits/development/firecrawl/page.mdx +++ b/app/en/mcp-servers/development/firecrawl/page.mdx @@ -1,6 +1,7 @@ --- asIndexPage: true --- + # Firecrawl import ToolInfo from "@/app/_components/tool-info"; @@ -19,7 +20,7 @@ import { Callout } from "nextra/components"; -The Arcade Firecrawl toolkit provides a pre-built set of tools for interacting with websites. These tools make it easy to build agents and AI apps that can: +The Arcade Firecrawl MCP Server provides a pre-built set of tools for interacting with websites. These tools make it easy to build agents and AI apps that can: - Scrape web pages - Crawl websites @@ -29,7 +30,7 @@ The Arcade Firecrawl toolkit provides a pre-built set of tools for interacting w ## Available Tools -These tools are currently available in the Arcade Firecrawl toolkit. +These tools are currently available in the Arcade Firecrawl MCP Sever. 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-toolkit). + tools](/home/build-tools/create-a-mcp-server). ## Firecrawl.ScrapeUrl @@ -67,10 +68,10 @@ These tools are currently available in the Arcade Firecrawl toolkit. label: "Call the Tool Directly", content: { Python: [ - "/examples/integrations/toolkits/firecrawl/scrape_url_example_call_tool.py", + "/examples/integrations/mcp-servers/firecrawl/scrape_url_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/firecrawl/scrape_url_example_call_tool.js", + "/examples/integrations/mcp-servers/firecrawl/scrape_url_example_call_tool.js", ], }, }, @@ -87,7 +88,7 @@ Scrape a URL and return data in specified formats. **Parameters** - **`url`** _(string, required)_ The URL to scrape. -- **`formats`** _(enum ([Formats](/toolkits/development/firecrawl/reference#formats)), optional)_ The format of the scraped web page. Defaults to `Formats.MARKDOWN`. +- **`formats`** _(enum ([Formats](/mcp-servers/development/firecrawl/reference#formats)), optional)_ The format of the scraped web page. Defaults to `Formats.MARKDOWN`. - **`only_main_content`** _(bool, optional)_ Only return the main content of the page. Defaults to `True`. - **`include_tags`** _(list, optional)_ List of tags to include in the output. - **`exclude_tags`** _(list, optional)_ List of tags to exclude from the output. @@ -105,10 +106,10 @@ Scrape a URL and return data in specified formats. label: "Call the Tool Directly", content: { Python: [ - "/examples/integrations/toolkits/firecrawl/crawl_website_example_call_tool.py", + "/examples/integrations/mcp-servers/firecrawl/crawl_website_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/firecrawl/crawl_website_example_call_tool.js", + "/examples/integrations/mcp-servers/firecrawl/crawl_website_example_call_tool.js", ], }, }, @@ -146,10 +147,10 @@ Crawl a website and return crawl status and data. label: "Call the Tool Directly", content: { Python: [ - "/examples/integrations/toolkits/firecrawl/get_crawl_status_example_call_tool.py", + "/examples/integrations/mcp-servers/firecrawl/get_crawl_status_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/firecrawl/get_crawl_status_example_call_tool.js", + "/examples/integrations/mcp-servers/firecrawl/get_crawl_status_example_call_tool.js", ], }, }, @@ -178,10 +179,10 @@ Retrieve the status of a crawl job. label: "Call the Tool Directly", content: { Python: [ - "/examples/integrations/toolkits/firecrawl/get_crawl_data_example_call_tool.py", + "/examples/integrations/mcp-servers/firecrawl/get_crawl_data_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/firecrawl/get_crawl_data_example_call_tool.js", + "/examples/integrations/mcp-servers/firecrawl/get_crawl_data_example_call_tool.js", ], }, }, @@ -210,10 +211,10 @@ Retrieve data from a completed crawl job. label: "Call the Tool Directly", content: { Python: [ - "/examples/integrations/toolkits/firecrawl/cancel_crawl_example_call_tool.py", + "/examples/integrations/mcp-servers/firecrawl/cancel_crawl_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/firecrawl/cancel_crawl_example_call_tool.js", + "/examples/integrations/mcp-servers/firecrawl/cancel_crawl_example_call_tool.js", ], }, }, @@ -242,10 +243,10 @@ Cancel an ongoing crawl job. label: "Call the Tool Directly", content: { Python: [ - "/examples/integrations/toolkits/firecrawl/map_website_example_call_tool.py", + "/examples/integrations/mcp-servers/firecrawl/map_website_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/firecrawl/map_website_example_call_tool.js", + "/examples/integrations/mcp-servers/firecrawl/map_website_example_call_tool.js", ], }, }, @@ -269,7 +270,7 @@ Map a website from a single URL to a map of the entire website. ## Auth -The Arcade Web toolkit uses [Firecrawl](https://www.firecrawl.dev/) to scrape, crawl, and map websites. +The Arcade Web MCP Sever uses [Firecrawl](https://www.firecrawl.dev/) to scrape, crawl, and map websites. **Global Environment Variables:** diff --git a/app/en/toolkits/development/firecrawl/reference/page.mdx b/app/en/mcp-servers/development/firecrawl/reference/page.mdx similarity index 100% rename from app/en/toolkits/development/firecrawl/reference/page.mdx rename to app/en/mcp-servers/development/firecrawl/reference/page.mdx diff --git a/app/en/toolkits/development/github/_meta.tsx b/app/en/mcp-servers/development/github/_meta.tsx similarity index 100% rename from app/en/toolkits/development/github/_meta.tsx rename to app/en/mcp-servers/development/github/_meta.tsx diff --git a/app/en/toolkits/development/github/page.mdx b/app/en/mcp-servers/development/github/page.mdx similarity index 74% rename from app/en/toolkits/development/github/page.mdx rename to app/en/mcp-servers/development/github/page.mdx index 7bec15ec3..5006ccc46 100644 --- a/app/en/toolkits/development/github/page.mdx +++ b/app/en/mcp-servers/development/github/page.mdx @@ -1,6 +1,7 @@ --- asIndexPage: true --- + # GitHub import ToolInfo from "@/app/_components/tool-info"; @@ -20,7 +21,7 @@ import { Callout } from "nextra/components"; -The Arcade GitHub toolkit provides a pre-built set of tools for interacting with GitHub. These tools make it easy to build agents and AI apps that can: +The Arcade GitHub MCP Server provides a pre-built set of tools for interacting with GitHub. These tools make it easy to build agents and AI apps that can: - Access private repositories (with the user's permission) - Get info about repositories, issues, pull requests, and more @@ -28,7 +29,7 @@ The Arcade GitHub toolkit provides a pre-built set of tools for interacting with ## Available Tools -These tools are currently available in the Arcade GitHub toolkit. +These tools are currently available in the Arcade GitHub MCP Sever. 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-toolkit) with the [GitHub auth + tools](/home/build-tools/create-a-mcp-server) with the [GitHub auth provider](/home/auth-providers/github#using-github-auth-in-custom-tools). @@ -101,10 +102,10 @@ These tools are currently available in the Arcade GitHub toolkit. label: "Call the Tool with User Authorization", content: { Python: [ - "/examples/integrations/toolkits/github/set_starred_example_call_tool.py", + "/examples/integrations/mcp-servers/github/set_starred_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/github/set_starred_example_call_tool.js", + "/examples/integrations/mcp-servers/github/set_starred_example_call_tool.js", ], }, }, @@ -130,10 +131,10 @@ Star or unstar a GitHub repository. label: "Call the Tool with User Authorization", content: { Python: [ - "/examples/integrations/toolkits/github/list_stargazers_example_call_tool.py", + "/examples/integrations/mcp-servers/github/list_stargazers_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/github/list_stargazers_example_call_tool.js", + "/examples/integrations/mcp-servers/github/list_stargazers_example_call_tool.js", ], }, }, @@ -159,10 +160,10 @@ List the stargazers of a GitHub repository. label: "Call the Tool with User Authorization", content: { Python: [ - "/examples/integrations/toolkits/github/create_issue_example_call_tool.py", + "/examples/integrations/mcp-servers/github/create_issue_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/github/create_issue_example_call_tool.js", + "/examples/integrations/mcp-servers/github/create_issue_example_call_tool.js", ], }, }, @@ -193,10 +194,10 @@ Create an issue in a GitHub repository. label: "Call the Tool with User Authorization", content: { Python: [ - "/examples/integrations/toolkits/github/create_issue_comment_example_call_tool.py", + "/examples/integrations/mcp-servers/github/create_issue_comment_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/github/create_issue_comment_example_call_tool.js", + "/examples/integrations/mcp-servers/github/create_issue_comment_example_call_tool.js", ], }, }, @@ -224,10 +225,10 @@ Create a comment on an issue in a GitHub repository. label: "Call the Tool with User Authorization", content: { Python: [ - "/examples/integrations/toolkits/github/list_pull_requests_example_call_tool.py", + "/examples/integrations/mcp-servers/github/list_pull_requests_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/github/list_pull_requests_example_call_tool.js", + "/examples/integrations/mcp-servers/github/list_pull_requests_example_call_tool.js", ], }, }, @@ -240,11 +241,11 @@ List pull requests in a GitHub repository. - **`owner`** _(string, required)_ The account owner of the repository. The name is not case sensitive. - **`repo`** _(string, required)_ The name of the repository without the .git extension. The name is not case sensitive. -- **`state`** _(enum ([PRState](/toolkits/development/github/reference#prstate)), optional, Defaults to `PRState.OPEN`)_ The state of the pull requests to return. +- **`state`** _(enum ([PRState](/mcp-servers/development/github/reference#prstate)), optional, Defaults to `PRState.OPEN`)_ The state of the pull requests to return. - **`head`** _(string, optional)_ Filter pulls by head user or head organization and branch name in the format of user:ref-name or organization:ref-name. - **`base`** _(string, optional, Defaults to `'main'`)_ Filter pulls by base branch name. -- **`sort`** _(enum ([PRSortProperty](/toolkits/development/github/reference#prsortproperty)), optional, Defaults to `PRSortProperty.CREATED`)_ The property to sort the results by. -- **`direction`** _(enum ([SortDirection](/toolkits/development/github/reference#sortdirection)), optional)_ The direction of the sort. +- **`sort`** _(enum ([PRSortProperty](/mcp-servers/development/github/reference#prsortproperty)), optional, Defaults to `PRSortProperty.CREATED`)_ The property to sort the results by. +- **`direction`** _(enum ([SortDirection](/mcp-servers/development/github/reference#sortdirection)), optional)_ The direction of the sort. - **`per_page`** _(integer, optional, Defaults to `30`)_ The number of results per page (max 100). - **`page`** _(integer, optional, Defaults to `1`)_ The page number of the results to fetch. - **`include_extra_data`** _(boolean, optional, Defaults to `false`)_ If true, return all the data available about the pull requests. This is a large payload and may impact performance - use with caution. @@ -260,10 +261,10 @@ List pull requests in a GitHub repository. label: "Call the Tool with User Authorization", content: { Python: [ - "/examples/integrations/toolkits/github/get_pull_request_example_call_tool.py", + "/examples/integrations/mcp-servers/github/get_pull_request_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/github/get_pull_request_example_call_tool.js", + "/examples/integrations/mcp-servers/github/get_pull_request_example_call_tool.js", ], }, }, @@ -291,10 +292,10 @@ Get details of a pull request in a GitHub repository. label: "Call the Tool with User Authorization", content: { Python: [ - "/examples/integrations/toolkits/github/update_pull_request_example_call_tool.py", + "/examples/integrations/mcp-servers/github/update_pull_request_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/github/update_pull_request_example_call_tool.js", + "/examples/integrations/mcp-servers/github/update_pull_request_example_call_tool.js", ], }, }, @@ -310,7 +311,7 @@ Update a pull request in a GitHub repository. - **`pull_number`** _(integer, required)_ The number that identifies the pull request. - **`title`** _(string, optional)_ The title of the pull request. - **`body`** _(string, optional)_ The contents of the pull request. -- **`state`** _(enum ([PRState](/toolkits/development/github/reference#prstate)), optional)_ State of this Pull Request. Either open or closed. +- **`state`** _(enum ([PRState](/mcp-servers/development/github/reference#prstate)), optional)_ State of this Pull Request. Either open or closed. - **`base`** _(string, optional)_ The name of the branch you want your changes pulled into. - **`maintainer_can_modify`** _(boolean, optional)_ Indicates whether maintainers can modify the pull request. @@ -325,10 +326,10 @@ Update a pull request in a GitHub repository. label: "Call the Tool with User Authorization", content: { Python: [ - "/examples/integrations/toolkits/github/list_pull_request_commits_example_call_tool.py", + "/examples/integrations/mcp-servers/github/list_pull_request_commits_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/github/list_pull_request_commits_example_call_tool.js", + "/examples/integrations/mcp-servers/github/list_pull_request_commits_example_call_tool.js", ], }, }, @@ -357,10 +358,10 @@ List commits (from oldest to newest) on a pull request in a GitHub repository. label: "Call the Tool with User Authorization", content: { Python: [ - "/examples/integrations/toolkits/github/create_reply_for_review_comment_example_call_tool.py", + "/examples/integrations/mcp-servers/github/create_reply_for_review_comment_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/github/create_reply_for_review_comment_example_call_tool.js", + "/examples/integrations/mcp-servers/github/create_reply_for_review_comment_example_call_tool.js", ], }, }, @@ -388,10 +389,10 @@ Create a reply to a review comment for a pull request in a GitHub repository. label: "Call the Tool with User Authorization", content: { Python: [ - "/examples/integrations/toolkits/github/list_review_comments_on_pull_request_example_call_tool.py", + "/examples/integrations/mcp-servers/github/list_review_comments_on_pull_request_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/github/list_review_comments_on_pull_request_example_call_tool.js", + "/examples/integrations/mcp-servers/github/list_review_comments_on_pull_request_example_call_tool.js", ], }, }, @@ -405,8 +406,8 @@ List review comments on a pull request in a GitHub repository. - **`owner`** _(string, required)_ The account owner of the repository. The name is not case sensitive. - **`repo`** _(string, required)_ The name of the repository without the .git extension. The name is not case sensitive. - **`pull_number`** _(integer, required)_ The number that identifies the pull request. -- **`sort`** _(enum ([ReviewCommentSortProperty](/toolkits/development/github/reference#reviewcommentsortproperty)), optional, Defaults to `'created'`)_ The property to sort the results by. Can be one of: `created`, `updated`. -- **`direction`** _(enum ([SortDirection](/toolkits/development/github/reference#sortdirection)), optional, Defaults to `'desc'`)_ The direction to sort results. Can be one of: `asc`, `desc`. +- **`sort`** _(enum ([ReviewCommentSortProperty](/mcp-servers/development/github/reference#reviewcommentsortproperty)), optional, Defaults to `'created'`)_ The property to sort the results by. Can be one of: `created`, `updated`. +- **`direction`** _(enum ([SortDirection](/mcp-servers/development/github/reference#sortdirection)), optional, Defaults to `'desc'`)_ The direction to sort results. Can be one of: `asc`, `desc`. - **`since`** _(string, optional)_ Only show results that were last updated after the given time. This is a timestamp in ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ. - **`per_page`** _(integer, optional, Defaults to `30`)_ The number of results per page (max 100). - **`page`** _(integer, optional, Defaults to `1`)_ The page number of the results to fetch. @@ -423,10 +424,10 @@ List review comments on a pull request in a GitHub repository. label: "Call the Tool with User Authorization", content: { Python: [ - "/examples/integrations/toolkits/github/create_review_comment_example_call_tool.py", + "/examples/integrations/mcp-servers/github/create_review_comment_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/github/create_review_comment_example_call_tool.js", + "/examples/integrations/mcp-servers/github/create_review_comment_example_call_tool.js", ], }, }, @@ -447,9 +448,9 @@ If the subject_type is not 'file', then the start_line and end_line parameters a - **`commit_id`** _(string, optional)_ The SHA of the commit needing a comment. If not provided, the latest commit SHA of the PR's base branch will be used. - **`start_line`** _(integer, optional)_ The start line of the range of lines in the pull request diff that the comment applies to. Required unless 'subject_type' is 'file'. - **`end_line`** _(integer, optional)_ The end line of the range of lines in the pull request diff that the comment applies to. Required unless 'subject_type' is 'file'. -- **`side`** _(enum ([DiffSide](/toolkits/development/github/reference#diffside)), optional, Defaults to `'RIGHT'`)_ The side of the diff that the pull request's changes appear on. Use LEFT for deletions that appear in red. Use RIGHT for additions that appear in green or unchanged lines that appear in white and are shown for context. +- **`side`** _(enum ([DiffSide](/mcp-servers/development/github/reference#diffside)), optional, Defaults to `'RIGHT'`)_ The side of the diff that the pull request's changes appear on. Use LEFT for deletions that appear in red. Use RIGHT for additions that appear in green or unchanged lines that appear in white and are shown for context. - **`start_side`** _(string, optional)_ The starting side of the diff that the comment applies to. -- **`subject_type`** _(enum ([ReviewCommentSubjectType](/toolkits/development/github/reference#reviewcommentsubjecttype)), optional, Defaults to `'FILE'`)_ The type of subject that the comment applies to. Can be one of: file, hunk, or line. +- **`subject_type`** _(enum ([ReviewCommentSubjectType](/mcp-servers/development/github/reference#reviewcommentsubjecttype)), optional, Defaults to `'FILE'`)_ The type of subject that the comment applies to. Can be one of: file, hunk, or line. - **`include_extra_data`** _(boolean, optional, Defaults to `false`)_ If true, return all the data available about the review comment. This is a large payload and may impact performance - use with caution. --- @@ -463,10 +464,10 @@ If the subject_type is not 'file', then the start_line and end_line parameters a label: "Call the Tool with User Authorization", content: { Python: [ - "/examples/integrations/toolkits/github/count_stargazers_example_call_tool.py", + "/examples/integrations/mcp-servers/github/count_stargazers_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/github/count_stargazers_example_call_tool.js", + "/examples/integrations/mcp-servers/github/count_stargazers_example_call_tool.js", ], }, }, @@ -491,10 +492,10 @@ Count the number of stargazers (stars) for a GitHub repository. label: "Call the Tool with User Authorization", content: { Python: [ - "/examples/integrations/toolkits/github/list_org_repositories_example_call_tool.py", + "/examples/integrations/mcp-servers/github/list_org_repositories_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/github/list_org_repositories_example_call_tool.js", + "/examples/integrations/mcp-servers/github/list_org_repositories_example_call_tool.js", ], }, }, @@ -506,9 +507,9 @@ List repositories for the specified GitHub organization. **Parameters** - **`org`** _(string, required)_ The organization name. The name is not case sensitive. -- **`repo_type`** _(enum ([RepoType](/toolkits/development/github/reference#repotype)), optional, Defaults to `'ALL'`)_ The types of repositories to return. -- **`sort`** _(enum ([RepoSortProperty](/toolkits/development/github/reference#reposortproperty)), optional, Defaults to `'CREATED'`)_ The property to sort the results by. -- **`sort_direction`** _(enum ([SortDirection](/toolkits/development/github/reference#sortdirection)), optional, Defaults to `'ASC'`)_ The order to sort by. +- **`repo_type`** _(enum ([RepoType](/mcp-servers/development/github/reference#repotype)), optional, Defaults to `'ALL'`)_ The types of repositories to return. +- **`sort`** _(enum ([RepoSortProperty](/mcp-servers/development/github/reference#reposortproperty)), optional, Defaults to `'CREATED'`)_ The property to sort the results by. +- **`sort_direction`** _(enum ([SortDirection](/mcp-servers/development/github/reference#sortdirection)), optional, Defaults to `'ASC'`)_ The order to sort by. - **`per_page`** _(integer, optional, Defaults to `30`)_ The number of results per page. - **`page`** _(integer, optional, Defaults to `1`)_ The page number of the results to fetch. - **`include_extra_data`** _(boolean, optional, Defaults to `false`)_ If true, return all the data available about the repositories. This is a large payload and may impact performance - use with caution. @@ -524,10 +525,10 @@ List repositories for the specified GitHub organization. label: "Call the Tool with User Authorization", content: { Python: [ - "/examples/integrations/toolkits/github/get_repository_example_call_tool.py", + "/examples/integrations/mcp-servers/github/get_repository_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/github/get_repository_example_call_tool.js", + "/examples/integrations/mcp-servers/github/get_repository_example_call_tool.js", ], }, }, @@ -553,10 +554,10 @@ Get detailed information about a GitHub repository. label: "Call the Tool with User Authorization", content: { Python: [ - "/examples/integrations/toolkits/github/list_repository_activities_example_call_tool.py", + "/examples/integrations/mcp-servers/github/list_repository_activities_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/github/list_repository_activities_example_call_tool.js", + "/examples/integrations/mcp-servers/github/list_repository_activities_example_call_tool.js", ], }, }, @@ -569,14 +570,14 @@ List repository activities such as pushes, merges, force pushes, and branch chan - **`owner`** _(string, required)_ The account owner of the repository. The name is not case sensitive. - **`repo`** _(string, required)_ The name of the repository without the .git extension. The name is not case sensitive. -- **`direction`** _(enum ([SortDirection](/toolkits/development/github/reference#sortdirection)), optional, Defaults to `'DESC'`)_ The direction to sort the results by. +- **`direction`** _(enum ([SortDirection](/mcp-servers/development/github/reference#sortdirection)), optional, Defaults to `'DESC'`)_ The direction to sort the results by. - **`per_page`** _(integer, optional, Defaults to `30`)_ The number of results per page (max 100). - **`before`** _(string, optional)_ A cursor (unique identifier, e.g., a SHA of a commit) to search for results before this cursor. - **`after`** _(string, optional)_ A cursor (unique identifier, e.g., a SHA of a commit) to search for results after this cursor. - **`ref`** _(string, optional)_ The Git reference for the activities you want to list. Can be formatted as `refs/heads/BRANCH_NAME` or just `BRANCH_NAME`. - **`actor`** _(string, optional)_ The GitHub username to filter by the actor who performed the activity. -- **`time_period`** _(enum ([RepoTimePeriod](/toolkits/development/github/reference#repotimeperiod)), optional)_ The time period to filter by. -- **`activity_type`** _(enum ([ActivityType](/toolkits/development/github/reference#activitytype)), optional)_ The activity type to filter by. +- **`time_period`** _(enum ([RepoTimePeriod](/mcp-servers/development/github/reference#repotimeperiod)), optional)_ The time period to filter by. +- **`activity_type`** _(enum ([ActivityType](/mcp-servers/development/github/reference#activitytype)), optional)_ The activity type to filter by. - **`include_extra_data`** _(boolean, optional, Defaults to `false`)_ If true, return all the data available about the activities. This is a large payload and may impact performance - use with caution. --- @@ -590,10 +591,10 @@ List repository activities such as pushes, merges, force pushes, and branch chan label: "Call the Tool with User Authorization", content: { Python: [ - "/examples/integrations/toolkits/github/list_review_comments_in_a_repository_example_call_tool.py", + "/examples/integrations/mcp-servers/github/list_review_comments_in_a_repository_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/github/list_review_comments_in_a_repository_example_call_tool.js", + "/examples/integrations/mcp-servers/github/list_review_comments_in_a_repository_example_call_tool.js", ], }, }, @@ -606,8 +607,8 @@ List review comments in a GitHub repository. - **`owner`** _(string, required)_ The account owner of the repository. The name is not case sensitive. - **`repo`** _(string, required)_ The name of the repository without the .git extension. The name is not case sensitive. -- **`sort`** _(enum ([ReviewCommentSortProperty](/toolkits/development/github/reference#reviewcommentsortproperty)), optional, Defaults to `'created'`)_ The property to sort the results by. Can be one of: created, updated. -- **`direction`** _(enum ([SortDirection](/toolkits/development/github/reference#sortdirection)), optional, Defaults to `'DESC'`)_ The direction to sort results. Ignored without sort parameter. Can be one of: asc, desc. +- **`sort`** _(enum ([ReviewCommentSortProperty](/mcp-servers/development/github/reference#reviewcommentsortproperty)), optional, Defaults to `'created'`)_ The property to sort the results by. Can be one of: created, updated. +- **`direction`** _(enum ([SortDirection](/mcp-servers/development/github/reference#sortdirection)), optional, Defaults to `'DESC'`)_ The direction to sort results. Ignored without sort parameter. Can be one of: asc, desc. - **`since`** _(string, optional)_ Only show results that were last updated after the given time. This is a timestamp in ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ. - **`per_page`** _(integer, optional, Defaults to `30`)_ The number of results per page (max 100). - **`page`** _(integer, optional, Defaults to `1`)_ The page number of the results to fetch. @@ -617,7 +618,7 @@ List review comments in a GitHub repository. ## Auth -The Arcade GitHub toolkit uses the [GitHub auth provider](/home/auth-providers/github) to connect to users' GitHub accounts. +The Arcade GitHub MCP Sever uses the [GitHub auth provider](/home/auth-providers/github) to connect to users' GitHub accounts. With the Arcade Cloud Platform, there's nothing to configure. Your users will see `Arcade` as the name of the application that's requesting permission. diff --git a/app/en/toolkits/development/github/reference/page.mdx b/app/en/mcp-servers/development/github/reference/page.mdx similarity index 100% rename from app/en/toolkits/development/github/reference/page.mdx rename to app/en/mcp-servers/development/github/reference/page.mdx diff --git a/app/en/mcp-servers/entertainment/_meta.tsx b/app/en/mcp-servers/entertainment/_meta.tsx new file mode 100644 index 000000000..0069778cd --- /dev/null +++ b/app/en/mcp-servers/entertainment/_meta.tsx @@ -0,0 +1,21 @@ +import type { MetaRecord } from "nextra"; + +const meta: MetaRecord = { + "*": { + theme: { + breadcrumb: true, + toc: true, + }, + }, + imgflip: { + title: "Imgflip", + }, + spotify: { + title: "Spotify", + }, + twitch: { + title: "Twitch", + }, +}; + +export default meta; diff --git a/app/en/toolkits/entertainment/imgflip/page.mdx b/app/en/mcp-servers/entertainment/imgflip/page.mdx similarity index 81% rename from app/en/toolkits/entertainment/imgflip/page.mdx rename to app/en/mcp-servers/entertainment/imgflip/page.mdx index bd6079c99..19d31ba98 100644 --- a/app/en/toolkits/entertainment/imgflip/page.mdx +++ b/app/en/mcp-servers/entertainment/imgflip/page.mdx @@ -16,7 +16,7 @@ import { Callout } from "nextra/components"; -The Arcade Imgflip toolkit provides a pre-built set of tools for interacting with Imgflip. These tools make it easy to build agents and AI apps that can: +The Arcade Imgflip MCP Server provides a pre-built set of tools for interacting with Imgflip. These tools make it easy to build agents and AI apps that can: - Create memes - Search for memes @@ -24,7 +24,7 @@ The Arcade Imgflip toolkit provides a pre-built set of tools for interacting wit ## Available Tools -These tools are currently available in the Arcade Imgflip toolkit. +These tools are currently available in the Arcade Imgflip MCP Sever. 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-toolkit). + tools](/home/build-tools/create-a-mcp-server). ## Imgflip.SearchMemes @@ -53,10 +53,10 @@ These tools are currently available in the Arcade Imgflip toolkit. label: "Call the Tool with User Authorization", content: { Python: [ - "/examples/integrations/toolkits/imgflip/search_memes_example_call_tool.py", + "/examples/integrations/mcp-servers/imgflip/search_memes_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/imgflip/search_memes_example_call_tool.js", + "/examples/integrations/mcp-servers/imgflip/search_memes_example_call_tool.js", ], }, }, @@ -86,10 +86,10 @@ requires a paid Imgflip subscription. label: "Call the Tool with User Authorization", content: { Python: [ - "/examples/integrations/toolkits/imgflip/get_popular_memes_example_call_tool.py", + "/examples/integrations/mcp-servers/imgflip/get_popular_memes_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/imgflip/get_popular_memes_example_call_tool.js", + "/examples/integrations/mcp-servers/imgflip/get_popular_memes_example_call_tool.js", ], }, }, @@ -117,10 +117,10 @@ based on how many times they've been captioned. label: "Call the Tool with User Authorization", content: { Python: [ - "/examples/integrations/toolkits/imgflip/create_meme_example_call_tool.py", + "/examples/integrations/mcp-servers/imgflip/create_meme_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/imgflip/create_meme_example_call_tool.js", + "/examples/integrations/mcp-servers/imgflip/create_meme_example_call_tool.js", ], }, }, diff --git a/app/en/toolkits/entertainment/spotify/imgflip.mdx b/app/en/mcp-servers/entertainment/spotify/imgflip.mdx similarity index 78% rename from app/en/toolkits/entertainment/spotify/imgflip.mdx rename to app/en/mcp-servers/entertainment/spotify/imgflip.mdx index 795d285eb..c00a5b200 100644 --- a/app/en/toolkits/entertainment/spotify/imgflip.mdx +++ b/app/en/mcp-servers/entertainment/spotify/imgflip.mdx @@ -16,7 +16,7 @@ import { Callout } from "nextra/components"; -The Arcade Imgflip toolkit provides a pre-built set of tools for interacting with Imgflip. These tools make it easy to build agents and AI apps that can: +The Arcade Imgflip MCP Server provides a pre-built set of tools for interacting with Imgflip. These tools make it easy to build agents and AI apps that can: - Create memes - Search for memes @@ -24,12 +24,15 @@ The Arcade Imgflip toolkit provides a pre-built set of tools for interacting wit ## Available Tools -These tools are currently available in the Arcade Imgflip toolkit. +These tools are currently available in the Arcade Imgflip MCP Sever. 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-toolkit). + with us](mailto:contact@arcade.dev) to request a new tool, or [create your own + tools](/home/build-tools/create-a-mcp-server). ## Imgflip.SearchMemes @@ -50,13 +53,13 @@ These tools are currently available in the Arcade Imgflip toolkit. label: "Call the Tool with User Authorization", content: { Python: [ - "/examples/integrations/toolkits/imgflip/search_memes_example_call_tool.py", + "/examples/integrations/mcp-servers/imgflip/search_memes_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/imgflip/search_memes_example_call_tool.js", + "/examples/integrations/mcp-servers/imgflip/search_memes_example_call_tool.js", ], }, - } + }, ]} /> @@ -83,13 +86,13 @@ requires a paid Imgflip subscription. label: "Call the Tool with User Authorization", content: { Python: [ - "/examples/integrations/toolkits/imgflip/get_popular_memes_example_call_tool.py", + "/examples/integrations/mcp-servers/imgflip/get_popular_memes_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/imgflip/get_popular_memes_example_call_tool.js", + "/examples/integrations/mcp-servers/imgflip/get_popular_memes_example_call_tool.js", ], }, - } + }, ]} /> @@ -114,13 +117,13 @@ based on how many times they've been captioned. label: "Call the Tool with User Authorization", content: { Python: [ - "/examples/integrations/toolkits/imgflip/create_meme_example_call_tool.py", + "/examples/integrations/mcp-servers/imgflip/create_meme_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/imgflip/create_meme_example_call_tool.js", + "/examples/integrations/mcp-servers/imgflip/create_meme_example_call_tool.js", ], }, - } + }, ]} /> diff --git a/app/en/toolkits/entertainment/spotify/page.mdx b/app/en/mcp-servers/entertainment/spotify/page.mdx similarity index 77% rename from app/en/toolkits/entertainment/spotify/page.mdx rename to app/en/mcp-servers/entertainment/spotify/page.mdx index ecb5b886a..aa347d035 100644 --- a/app/en/toolkits/entertainment/spotify/page.mdx +++ b/app/en/mcp-servers/entertainment/spotify/page.mdx @@ -24,7 +24,7 @@ import { Callout } from "nextra/components"; -The Arcade Spotify toolkit provides a pre-built set of tools for interacting with Spotify. These tools make it easy to build agents and AI apps that can: +The Arcade Spotify MCP Server provides a pre-built set of tools for interacting with Spotify. These tools make it easy to build agents and AI apps that can: - Get information about tracks - Search for tracks @@ -32,7 +32,7 @@ The Arcade Spotify toolkit provides a pre-built set of tools for interacting wit ## Available Tools -These tools are currently available in the Arcade Spotify toolkit. +These tools are currently available in the Arcade Spotify MCP Sever. 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-toolkit) with the [Spotify auth + tools](/home/build-tools/create-a-mcp-server) with the [Spotify auth provider](/home/auth-providers/spotify#using-spotify-auth-in-custom-tools). @@ -105,10 +105,10 @@ These tools are currently available in the Arcade Spotify toolkit. label: "Call the Tool with User Authorization", content: { Python: [ - "/examples/integrations/toolkits/spotify/get_track_from_id_example_call_tool.py", + "/examples/integrations/mcp-servers/spotify/get_track_from_id_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/spotify/get_track_from_id_example_call_tool.js", + "/examples/integrations/mcp-servers/spotify/get_track_from_id_example_call_tool.js", ], }, }, @@ -132,10 +132,10 @@ Get information about a track label: "Call the Tool with User Authorization", content: { Python: [ - "/examples/integrations/toolkits/spotify/adjust_playback_position_example_call_tool.py", + "/examples/integrations/mcp-servers/spotify/adjust_playback_position_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/spotify/adjust_playback_position_example_call_tool.js", + "/examples/integrations/mcp-servers/spotify/adjust_playback_position_example_call_tool.js", ], }, }, @@ -167,10 +167,10 @@ Note: Either absolute_position_ms or relative_position_ms must be provided, but label: "Call the Tool with User Authorization", content: { Python: [ - "/examples/integrations/toolkits/spotify/skip_to_previous_track_example_call_tool.py", + "/examples/integrations/mcp-servers/spotify/skip_to_previous_track_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/spotify/skip_to_previous_track_example_call_tool.js", + "/examples/integrations/mcp-servers/spotify/skip_to_previous_track_example_call_tool.js", ], }, }, @@ -190,10 +190,10 @@ Skip to the previous track in the user's queue, if any label: "Call the Tool with User Authorization", content: { Python: [ - "/examples/integrations/toolkits/spotify/skip_to_next_track_example_call_tool.py", + "/examples/integrations/mcp-servers/spotify/skip_to_next_track_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/spotify/skip_to_next_track_example_call_tool.js", + "/examples/integrations/mcp-servers/spotify/skip_to_next_track_example_call_tool.js", ], }, }, @@ -213,10 +213,10 @@ Skip to the next track in the user's queue, if any label: "Call the Tool with User Authorization", content: { Python: [ - "/examples/integrations/toolkits/spotify/pause_playback_example_call_tool.py", + "/examples/integrations/mcp-servers/spotify/pause_playback_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/spotify/pause_playback_example_call_tool.js", + "/examples/integrations/mcp-servers/spotify/pause_playback_example_call_tool.js", ], }, }, @@ -236,10 +236,10 @@ Pause the currently playing track, if any label: "Call the Tool with User Authorization", content: { Python: [ - "/examples/integrations/toolkits/spotify/resume_playback_example_call_tool.py", + "/examples/integrations/mcp-servers/spotify/resume_playback_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/spotify/resume_playback_example_call_tool.js", + "/examples/integrations/mcp-servers/spotify/resume_playback_example_call_tool.js", ], }, }, @@ -259,10 +259,10 @@ Resume the currently playing track, if any label: "Call the Tool with User Authorization", content: { Python: [ - "/examples/integrations/toolkits/spotify/start_tracks_playback_by_id_example_call_tool.py", + "/examples/integrations/mcp-servers/spotify/start_tracks_playback_by_id_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/spotify/start_tracks_playback_by_id_example_call_tool.js", + "/examples/integrations/mcp-servers/spotify/start_tracks_playback_by_id_example_call_tool.js", ], }, }, @@ -288,10 +288,10 @@ Start playback of a list of tracks (songs) label: "Call the Tool with User Authorization", content: { Python: [ - "/examples/integrations/toolkits/spotify/get_playback_state_example_call_tool.py", + "/examples/integrations/mcp-servers/spotify/get_playback_state_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/spotify/get_playback_state_example_call_tool.js", + "/examples/integrations/mcp-servers/spotify/get_playback_state_example_call_tool.js", ], }, }, @@ -311,10 +311,10 @@ Get information about the user's current playback state, including track or epis label: "Call the Tool with User Authorization", content: { Python: [ - "/examples/integrations/toolkits/spotify/get_currently_playing_example_call_tool.py", + "/examples/integrations/mcp-servers/spotify/get_currently_playing_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/spotify/get_currently_playing_example_call_tool.js", + "/examples/integrations/mcp-servers/spotify/get_currently_playing_example_call_tool.js", ], }, }, @@ -334,10 +334,10 @@ Get information about the user's currently playing track label: "Call the Tool with User Authorization", content: { Python: [ - "/examples/integrations/toolkits/spotify/play_artist_by_name_example_call_tool.py", + "/examples/integrations/mcp-servers/spotify/play_artist_by_name_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/spotify/play_artist_by_name_example_call_tool.js", + "/examples/integrations/mcp-servers/spotify/play_artist_by_name_example_call_tool.js", ], }, }, @@ -361,10 +361,10 @@ Plays a song by an artist and queues four more songs by the same artist label: "Call the Tool with User Authorization", content: { Python: [ - "/examples/integrations/toolkits/spotify/play_track_by_name_example_call_tool.py", + "/examples/integrations/mcp-servers/spotify/play_track_by_name_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/spotify/play_track_by_name_example_call_tool.js", + "/examples/integrations/mcp-servers/spotify/play_track_by_name_example_call_tool.js", ], }, }, @@ -388,10 +388,10 @@ Plays a song by name label: "Call the Tool with User Authorization", content: { Python: [ - "/examples/integrations/toolkits/spotify/get_available_devices_example_call_tool.py", + "/examples/integrations/mcp-servers/spotify/get_available_devices_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/spotify/get_available_devices_example_call_tool.js", + "/examples/integrations/mcp-servers/spotify/get_available_devices_example_call_tool.js", ], }, }, @@ -411,10 +411,10 @@ Get the available devices label: "Call the Tool with User Authorization", content: { Python: [ - "/examples/integrations/toolkits/spotify/search_example_call_tool.py", + "/examples/integrations/mcp-servers/spotify/search_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/spotify/search_example_call_tool.js", + "/examples/integrations/mcp-servers/spotify/search_example_call_tool.js", ], }, }, diff --git a/app/en/toolkits/entertainment/twitch/page.mdx b/app/en/mcp-servers/entertainment/twitch/page.mdx similarity index 99% rename from app/en/toolkits/entertainment/twitch/page.mdx rename to app/en/mcp-servers/entertainment/twitch/page.mdx index 60009c6d6..d6ce5d4b4 100644 --- a/app/en/toolkits/entertainment/twitch/page.mdx +++ b/app/en/mcp-servers/entertainment/twitch/page.mdx @@ -162,7 +162,7 @@ const token = authResponse.context.token; ## Using Twitch auth in custom tools -You can author your own [custom tools](/home/build-tools/create-a-toolkit) that interact with the Twitch API. +You can author your own [custom tools](/home/build-tools/create-a-mcp-server) that interact with the Twitch API. Use the `Twitch()` auth class to specify that a tool requires authorization with Twitch. The `context.authorization.token` field will be automatically populated with the user's Twitch token: diff --git a/app/en/mcp-servers/page.mdx b/app/en/mcp-servers/page.mdx new file mode 100644 index 000000000..8a897261b --- /dev/null +++ b/app/en/mcp-servers/page.mdx @@ -0,0 +1,9 @@ +--- +title: Toolkits +description: Registry of all MCP Servers available in the Arcade ecosystem +--- + +import { tools, categories } from "./components/toolkits-config"; +import Toolkits from "./components/toolkits"; + + diff --git a/app/en/mcp-servers/payments/_meta.tsx b/app/en/mcp-servers/payments/_meta.tsx new file mode 100644 index 000000000..3881f1e72 --- /dev/null +++ b/app/en/mcp-servers/payments/_meta.tsx @@ -0,0 +1,15 @@ +import type { MetaRecord } from "nextra"; + +const meta: MetaRecord = { + "*": { + theme: { + breadcrumb: true, + toc: true, + }, + }, + stripe: { + title: "Stripe", + }, +}; + +export default meta; diff --git a/app/en/toolkits/payments/stripe/page.mdx b/app/en/mcp-servers/payments/stripe/page.mdx similarity index 73% rename from app/en/toolkits/payments/stripe/page.mdx rename to app/en/mcp-servers/payments/stripe/page.mdx index afac52fe7..3133cfa81 100644 --- a/app/en/toolkits/payments/stripe/page.mdx +++ b/app/en/mcp-servers/payments/stripe/page.mdx @@ -16,7 +16,7 @@ import { Callout } from "nextra/components"; -The Arcade Stripe toolkit lets you interact with the Stripe API. Use these tools to build intelligent agents and applications that process payments, create invoices, and more. +The Arcade Stripe MCP Sever lets you interact with the Stripe API. Use these tools to build intelligent agents and applications that process payments, create invoices, and more. ## Available Tools @@ -71,7 +71,7 @@ The Arcade Stripe toolkit lets you interact with the Stripe API. Use these tools If you need an action that's not listed here, please [contact us](mailto:contact@arcade.dev) to request a new tool, or [create your own - tools](/home/build-tools/create-a-toolkit). + tools](/home/build-tools/create-a-mcp-server). ## Stripe.CreateCustomer @@ -90,10 +90,10 @@ Create a customer in Stripe. label: "Call the Tool Directly", content: { Python: [ - "/examples/integrations/toolkits/stripe/create_customer_example_call_tool.py", + "/examples/integrations/mcp-servers/stripe/create_customer_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/stripe/create_customer_example_call_tool.js", + "/examples/integrations/mcp-servers/stripe/create_customer_example_call_tool.js", ], }, }, @@ -116,10 +116,10 @@ Fetch a list of customers from Stripe. label: "Call the Tool Directly", content: { Python: [ - "/examples/integrations/toolkits/stripe/list_customers_example_call_tool.py", + "/examples/integrations/mcp-servers/stripe/list_customers_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/stripe/list_customers_example_call_tool.js", + "/examples/integrations/mcp-servers/stripe/list_customers_example_call_tool.js", ], }, }, @@ -141,10 +141,10 @@ Create a product in Stripe. label: "Call the tool directly", content: { Python: [ - "/examples/integrations/toolkits/stripe/create_product_example_call_tool.py", + "/examples/integrations/mcp-servers/stripe/create_product_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/stripe/create_product_example_call_tool.js", + "/examples/integrations/mcp-servers/stripe/create_product_example_call_tool.js", ], }, }, @@ -165,10 +165,10 @@ Fetch a list of products from Stripe. label: "Call the tool directly", content: { Python: [ - "/examples/integrations/toolkits/stripe/list_products_example_call_tool.py", + "/examples/integrations/mcp-servers/stripe/list_products_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/stripe/list_products_example_call_tool.js", + "/examples/integrations/mcp-servers/stripe/list_products_example_call_tool.js", ], }, }, @@ -191,10 +191,10 @@ Create a price in Stripe. label: "Call the tool directly", content: { Python: [ - "/examples/integrations/toolkits/stripe/create_price_example_call_tool.py", + "/examples/integrations/mcp-servers/stripe/create_price_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/stripe/create_price_example_call_tool.js", + "/examples/integrations/mcp-servers/stripe/create_price_example_call_tool.js", ], }, }, @@ -216,10 +216,10 @@ Fetch a list of prices from Stripe. label: "Call the tool directly", content: { Python: [ - "/examples/integrations/toolkits/stripe/list_prices_example_call_tool.py", + "/examples/integrations/mcp-servers/stripe/list_prices_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/stripe/list_prices_example_call_tool.js", + "/examples/integrations/mcp-servers/stripe/list_prices_example_call_tool.js", ], }, }, @@ -241,10 +241,10 @@ Create a payment link in Stripe. label: "Call the tool directly", content: { Python: [ - "/examples/integrations/toolkits/stripe/create_payment_link_example_call_tool.py", + "/examples/integrations/mcp-servers/stripe/create_payment_link_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/stripe/create_payment_link_example_call_tool.js", + "/examples/integrations/mcp-servers/stripe/create_payment_link_example_call_tool.js", ], }, }, @@ -266,10 +266,10 @@ List invoices in Stripe. label: "Call the tool directly", content: { Python: [ - "/examples/integrations/toolkits/stripe/list_invoices_example_call_tool.py", + "/examples/integrations/mcp-servers/stripe/list_invoices_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/stripe/list_invoices_example_call_tool.js", + "/examples/integrations/mcp-servers/stripe/list_invoices_example_call_tool.js", ], }, }, @@ -291,10 +291,10 @@ Create an invoice in Stripe. label: "Call the tool directly", content: { Python: [ - "/examples/integrations/toolkits/stripe/create_invoice_example_call_tool.py", + "/examples/integrations/mcp-servers/stripe/create_invoice_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/stripe/create_invoice_example_call_tool.js", + "/examples/integrations/mcp-servers/stripe/create_invoice_example_call_tool.js", ], }, }, @@ -317,10 +317,10 @@ Create an invoice item in Stripe. label: "Call the tool directly", content: { Python: [ - "/examples/integrations/toolkits/stripe/create_invoice_item_example_call_tool.py", + "/examples/integrations/mcp-servers/stripe/create_invoice_item_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/stripe/create_invoice_item_example_call_tool.js", + "/examples/integrations/mcp-servers/stripe/create_invoice_item_example_call_tool.js", ], }, }, @@ -341,10 +341,10 @@ Finalize an invoice in Stripe. label: "Call the tool directly", content: { Python: [ - "/examples/integrations/toolkits/stripe/finalize_invoice_example_call_tool.py", + "/examples/integrations/mcp-servers/stripe/finalize_invoice_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/stripe/finalize_invoice_example_call_tool.js", + "/examples/integrations/mcp-servers/stripe/finalize_invoice_example_call_tool.js", ], }, }, @@ -361,10 +361,10 @@ Retrieve the balance from Stripe. This tool takes no inputs. label: "Call the tool directly", content: { Python: [ - "/examples/integrations/toolkits/stripe/retrieve_balance_example_call_tool.py", + "/examples/integrations/mcp-servers/stripe/retrieve_balance_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/stripe/retrieve_balance_example_call_tool.js", + "/examples/integrations/mcp-servers/stripe/retrieve_balance_example_call_tool.js", ], }, }, @@ -386,10 +386,10 @@ Refund a payment intent in Stripe. label: "Call the tool directly", content: { Python: [ - "/examples/integrations/toolkits/stripe/create_refund_example_call_tool.py", + "/examples/integrations/mcp-servers/stripe/create_refund_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/stripe/create_refund_example_call_tool.js", + "/examples/integrations/mcp-servers/stripe/create_refund_example_call_tool.js", ], }, }, @@ -411,10 +411,10 @@ List payment intents in Stripe. label: "Call the tool directly", content: { Python: [ - "/examples/integrations/toolkits/stripe/list_payment_intents_example_call_tool.py", + "/examples/integrations/mcp-servers/stripe/list_payment_intents_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/stripe/list_payment_intents_example_call_tool.js", + "/examples/integrations/mcp-servers/stripe/list_payment_intents_example_call_tool.js", ], }, }, @@ -436,10 +436,10 @@ Create a billing portal session in Stripe. label: "Call the tool directly", content: { Python: [ - "/examples/integrations/toolkits/stripe/create_billing_portal_session_example_call_tool.py", + "/examples/integrations/mcp-servers/stripe/create_billing_portal_session_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/stripe/create_billing_portal_session_example_call_tool.js", + "/examples/integrations/mcp-servers/stripe/create_billing_portal_session_example_call_tool.js", ], }, }, @@ -448,7 +448,7 @@ Create a billing portal session in Stripe. ## Auth -The Arcade Stripe toolkit uses the [Stripe Agent Toolkit](https://github.com/stripe/agent-toolkit) to interact with the Stripe API. +The Arcade Stripe MCP Sever uses the [Stripe Agent Toolkit](https://github.com/stripe/agent-MCP Sever) to interact with the Stripe API. - **Required Secret:** - `STRIPE_SECRET_KEY`: Your Stripe API key. diff --git a/app/en/mcp-servers/productivity/_meta.tsx b/app/en/mcp-servers/productivity/_meta.tsx new file mode 100644 index 000000000..64e908c44 --- /dev/null +++ b/app/en/mcp-servers/productivity/_meta.tsx @@ -0,0 +1,66 @@ +import type { MetaRecord } from "nextra"; + +const meta: MetaRecord = { + "*": { + theme: { + breadcrumb: true, + toc: true, + }, + }, + asana: { + title: "Asana", + }, + clickup: { + title: "ClickUp", + }, + closeio: { + title: "Close.io", + }, + confluence: { + title: "Confluence", + }, + dropbox: { + title: "Dropbox", + }, + gmail: { + title: "Gmail", + }, + "google-calendar": { + title: "Google Calendar", + }, + "google-contacts": { + title: "Google Contacts", + }, + "google-docs": { + title: "Google Docs", + }, + "google-drive": { + title: "Google Drive", + }, + "google-sheets": { + title: "Google Sheets", + }, + "google-slides": { + title: "Google Slides", + }, + jira: { + title: "Jira", + }, + linear: { + title: "Linear", + }, + notion: { + title: "Notion", + }, + obsidian: { + title: "Obsidian", + }, + "outlook-calendar": { + title: "Outlook Calendar", + }, + "outlook-mail": { + title: "Outlook Mail", + }, +}; + +export default meta; diff --git a/app/en/toolkits/productivity/asana/_meta.tsx b/app/en/mcp-servers/productivity/asana/_meta.tsx similarity index 100% rename from app/en/toolkits/productivity/asana/_meta.tsx rename to app/en/mcp-servers/productivity/asana/_meta.tsx diff --git a/app/en/toolkits/productivity/asana/page.mdx b/app/en/mcp-servers/productivity/asana/page.mdx similarity index 79% rename from app/en/toolkits/productivity/asana/page.mdx rename to app/en/mcp-servers/productivity/asana/page.mdx index 5e4498b4d..4235bcef4 100644 --- a/app/en/toolkits/productivity/asana/page.mdx +++ b/app/en/mcp-servers/productivity/asana/page.mdx @@ -1,6 +1,7 @@ --- asIndexPage: true --- + # Asana import ToolInfo from "@/app/_components/tool-info"; @@ -19,7 +20,7 @@ import { Callout } from "nextra/components"; -The Arcade Asana toolkit provides a pre-built set of tools for interacting with Asana. These tools make it easy to build agents and AI apps that can: +The Arcade Asana MCP Server provides a pre-built set of tools for interacting with Asana. These tools make it easy to build agents and AI apps that can: - Manage teams, projects, and workspaces. - Create, update, and search for tasks. @@ -65,7 +66,7 @@ The Arcade Asana toolkit provides a pre-built set of tools for interacting with 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-toolkit). + tools](/home/build-tools/create-a-mcp-server). ## Asana.GetProjectById @@ -77,10 +78,10 @@ The Arcade Asana toolkit provides a pre-built set of tools for interacting with label: "Call the Tool Directly", content: { Python: [ - "/examples/integrations/toolkits/asana/projects/get_project_by_id_example_call_tool.py", + "/examples/integrations/mcp-servers/asana/projects/get_project_by_id_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/asana/projects/get_project_by_id_example_call_tool.js", + "/examples/integrations/mcp-servers/asana/projects/get_project_by_id_example_call_tool.js", ], }, }, @@ -102,10 +103,10 @@ Get a project by its ID. label: "Call the Tool Directly", content: { Python: [ - "/examples/integrations/toolkits/asana/projects/list_projects_example_call_tool.py", + "/examples/integrations/mcp-servers/asana/projects/list_projects_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/asana/projects/list_projects_example_call_tool.js", + "/examples/integrations/mcp-servers/asana/projects/list_projects_example_call_tool.js", ], }, }, @@ -130,10 +131,10 @@ List projects associated to one or more teams. label: "Call the Tool Directly", content: { Python: [ - "/examples/integrations/toolkits/asana/tags/get_tag_by_id_example_call_tool.py", + "/examples/integrations/mcp-servers/asana/tags/get_tag_by_id_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/asana/tags/get_tag_by_id_example_call_tool.js", + "/examples/integrations/mcp-servers/asana/tags/get_tag_by_id_example_call_tool.js", ], }, }, @@ -155,10 +156,10 @@ Get a tag by its ID. label: "Call the Tool Directly", content: { Python: [ - "/examples/integrations/toolkits/asana/tags/create_tag_example_call_tool.py", + "/examples/integrations/mcp-servers/asana/tags/create_tag_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/asana/tags/create_tag_example_call_tool.js", + "/examples/integrations/mcp-servers/asana/tags/create_tag_example_call_tool.js", ], }, }, @@ -171,7 +172,7 @@ Create a tag. - **name** _(string, required)_ The name of the tag. E.g. 'Priority'. - **description** _(string, optional)_ The description of the tag. Defaults to None (no description). -- **color** _(list of enum [TagColor](/toolkits/productivity/asana/reference#tagcolor), optional)_ The color of the tag. Defaults to None (no color). +- **color** _(list of enum [TagColor](/mcp-servers/productivity/asana/reference#tagcolor), optional)_ The color of the tag. Defaults to None (no color). - **workspace_id** _(string, None)_ The ID of the workspace to create the tag in. If not provided, it will associate the tag to the user's workspace, if there's only one. Otherwise, it will raise an error. ## Asana.ListTags @@ -183,10 +184,10 @@ Create a tag. label: "Call the Tool Directly", content: { Python: [ - "/examples/integrations/toolkits/asana/tags/list_tags_example_call_tool.py", + "/examples/integrations/mcp-servers/asana/tags/list_tags_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/asana/tags/list_tags_example_call_tool.js", + "/examples/integrations/mcp-servers/asana/tags/list_tags_example_call_tool.js", ], }, }, @@ -210,10 +211,10 @@ List tags associated to one or more workspaces. label: "Call the Tool Directly", content: { Python: [ - "/examples/integrations/toolkits/asana/tasks/get_tasks_without_id_example_call_tool.py", + "/examples/integrations/mcp-servers/asana/tasks/get_tasks_without_id_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/asana/tasks/get_tasks_without_id_example_call_tool.js", + "/examples/integrations/mcp-servers/asana/tasks/get_tasks_without_id_example_call_tool.js", ], }, }, @@ -239,8 +240,8 @@ Search and retrieve tasks using full-text and filters when you don't have the ta - ** start_on_or_before** _(string, optional)_ Match tasks that started on OR BEFORE this date. Format: YYYY-MM-DD. Ex: '2025-01-01'. Defaults to None (searches tasks started on any date or without a start date). - **completed** _(bool, optional)_ Match tasks that are completed. Defaults to False (tasks that are NOT completed). - **limit** _(int, optional, Defaults to `20`)_ Maximum number of tasks to return. Min of 1, max of 20. Defaults to 20. -- **sort_by** _(enum [TaskSortBy](/toolkits/productivity/asana/reference#tasksortby), optional)_ The field to sort the tasks by. Defaults to TaskSortBy.MODIFIED_AT. -- **sort_order** _(enum [SortOrder](/toolkits/productivity/asana/reference#sortorder), optional)_ The order to sort the tasks by. Defaults to SortOrder.DESCENDING. +- **sort_by** _(enum [TaskSortBy](/mcp-servers/productivity/asana/reference#tasksortby), optional)_ The field to sort the tasks by. Defaults to TaskSortBy.MODIFIED_AT. +- **sort_order** _(enum [SortOrder](/mcp-servers/productivity/asana/reference#sortorder), optional)_ The order to sort the tasks by. Defaults to SortOrder.DESCENDING. ## Asana.GetTaskById @@ -251,10 +252,10 @@ Search and retrieve tasks using full-text and filters when you don't have the ta label: "Call the Tool Directly", content: { Python: [ - "/examples/integrations/toolkits/asana/tasks/get_task_by_id_example_call_tool.py", + "/examples/integrations/mcp-servers/asana/tasks/get_task_by_id_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/asana/tasks/get_task_by_id_example_call_tool.js", + "/examples/integrations/mcp-servers/asana/tasks/get_task_by_id_example_call_tool.js", ], }, }, @@ -277,10 +278,10 @@ Get a task by its ID. label: "Call the Tool Directly", content: { Python: [ - "/examples/integrations/toolkits/asana/tasks/get_subtasks_from_a_task_example_call_tool.py", + "/examples/integrations/mcp-servers/asana/tasks/get_subtasks_from_a_task_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/asana/tasks/get_subtasks_from_a_task_example_call_tool.js", + "/examples/integrations/mcp-servers/asana/tasks/get_subtasks_from_a_task_example_call_tool.js", ], }, }, @@ -304,10 +305,10 @@ Get subtasks associated to a task. label: "Call the Tool Directly", content: { Python: [ - "/examples/integrations/toolkits/asana/tasks/update_task_example_call_tool.py", + "/examples/integrations/mcp-servers/asana/tasks/update_task_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/asana/tasks/update_task_example_call_tool.js", + "/examples/integrations/mcp-servers/asana/tasks/update_task_example_call_tool.js", ], }, }, @@ -335,10 +336,10 @@ Update a task. label: "Call the Tool Directly", content: { Python: [ - "/examples/integrations/toolkits/asana/tasks/mark_task_as_completed_example_call_tool.py", + "/examples/integrations/mcp-servers/asana/tasks/mark_task_as_completed_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/asana/tasks/mark_task_as_completed_example_call_tool.js", + "/examples/integrations/mcp-servers/asana/tasks/mark_task_as_completed_example_call_tool.js", ], }, }, @@ -360,10 +361,10 @@ Mark a task as completed. label: "Call the Tool Directly", content: { Python: [ - "/examples/integrations/toolkits/asana/tasks/create_task_example_call_tool.py", + "/examples/integrations/mcp-servers/asana/tasks/create_task_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/asana/tasks/create_task_example_call_tool.js", + "/examples/integrations/mcp-servers/asana/tasks/create_task_example_call_tool.js", ], }, }, @@ -397,10 +398,10 @@ A new task must be associated to at least one of the following: parent_task_id, label: "Call the Tool Directly", content: { Python: [ - "/examples/integrations/toolkits/asana/tasks/attach_file_to_task_example_call_tool.py", + "/examples/integrations/mcp-servers/asana/tasks/attach_file_to_task_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/asana/tasks/attach_file_to_task_example_call_tool.js", + "/examples/integrations/mcp-servers/asana/tasks/attach_file_to_task_example_call_tool.js", ], }, }, @@ -435,10 +436,10 @@ Provide exactly one of `file_content_str`, `file_content_base64`, or `file_conte label: "Call the Tool Directly", content: { Python: [ - "/examples/integrations/toolkits/asana/users/list_users_example_call_tool.py", + "/examples/integrations/mcp-servers/asana/users/list_users_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/asana/users/list_users_example_call_tool.js", + "/examples/integrations/mcp-servers/asana/users/list_users_example_call_tool.js", ], }, }, @@ -462,10 +463,10 @@ List users that are members of one or more workspaces. label: "Call the Tool Directly", content: { Python: [ - "/examples/integrations/toolkits/asana/users/get_user_by_id_example_call_tool.py", + "/examples/integrations/mcp-servers/asana/users/get_user_by_id_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/asana/users/get_user_by_id_example_call_tool.js", + "/examples/integrations/mcp-servers/asana/users/get_user_by_id_example_call_tool.js", ], }, }, @@ -487,10 +488,10 @@ Get a user by their ID. label: "Call the Tool Directly", content: { Python: [ - "/examples/integrations/toolkits/asana/teams/get_team_by_id_example_call_tool.py", + "/examples/integrations/mcp-servers/asana/teams/get_team_by_id_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/asana/teams/get_team_by_id_example_call_tool.js", + "/examples/integrations/mcp-servers/asana/teams/get_team_by_id_example_call_tool.js", ], }, }, @@ -498,10 +499,10 @@ Get a user by their ID. label: "Execute the Tool with OpenAI", content: { Python: [ - "/examples/integrations/toolkits/asana/teams/get_team_by_id_example_llm_oai.py", + "/examples/integrations/mcp-servers/asana/teams/get_team_by_id_example_llm_oai.py", ], JavaScript: [ - "/examples/integrations/toolkits/asana/teams/get_team_by_id_example_llm_oai.js", + "/examples/integrations/mcp-servers/asana/teams/get_team_by_id_example_llm_oai.js", ], }, }, @@ -523,10 +524,10 @@ Get a team by its ID. label: "Call the Tool Directly", content: { Python: [ - "/examples/integrations/toolkits/asana/teams/list_teams_the_current_user_is_a_member_of_example_call_tool.py", + "/examples/integrations/mcp-servers/asana/teams/list_teams_the_current_user_is_a_member_of_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/asana/teams/list_teams_the_current_user_is_a_member_of_example_call_tool.js", + "/examples/integrations/mcp-servers/asana/teams/list_teams_the_current_user_is_a_member_of_example_call_tool.js", ], }, }, @@ -550,10 +551,10 @@ List the teams the current user is a member of. label: "Call the Tool Directly", content: { Python: [ - "/examples/integrations/toolkits/asana/teams/list_teams_example_call_tool.py", + "/examples/integrations/mcp-servers/asana/teams/list_teams_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/asana/teams/list_teams_example_call_tool.js", + "/examples/integrations/mcp-servers/asana/teams/list_teams_example_call_tool.js", ], }, }, @@ -575,10 +576,10 @@ List teams associated to a workspace. label: "Call the Tool Directly", content: { Python: [ - "/examples/integrations/toolkits/asana/workspaces/get_workspace_by_id_example_call_tool.py", + "/examples/integrations/mcp-servers/asana/workspaces/get_workspace_by_id_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/asana/workspaces/get_workspace_by_id_example_call_tool.js", + "/examples/integrations/mcp-servers/asana/workspaces/get_workspace_by_id_example_call_tool.js", ], }, }, @@ -600,10 +601,10 @@ Get a workspace by its ID. label: "Call the Tool Directly", content: { Python: [ - "/examples/integrations/toolkits/asana/workspaces/list_workspaces_example_call_tool.py", + "/examples/integrations/mcp-servers/asana/workspaces/list_workspaces_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/asana/workspaces/list_workspaces_example_call_tool.js", + "/examples/integrations/mcp-servers/asana/workspaces/list_workspaces_example_call_tool.js", ], }, }, @@ -619,7 +620,7 @@ List the user workspaces. ## Auth -The Arcade Asana toolkit uses the [Asana auth provider](/home/auth-providers/asana) to connect to users' Asana accounts. +The Arcade Asana MCP Sever uses the [Asana auth provider](/home/auth-providers/asana) to connect to users' Asana accounts. With the Arcade Cloud Platform, there's nothing to configure. Your users will see `Arcade` as the name of the application that's requesting permission. diff --git a/app/en/toolkits/productivity/asana/reference/page.mdx b/app/en/mcp-servers/productivity/asana/reference/page.mdx similarity index 98% rename from app/en/toolkits/productivity/asana/reference/page.mdx rename to app/en/mcp-servers/productivity/asana/reference/page.mdx index f4f5d6a3e..42b40246d 100644 --- a/app/en/toolkits/productivity/asana/reference/page.mdx +++ b/app/en/mcp-servers/productivity/asana/reference/page.mdx @@ -1,6 +1,6 @@ # Asana Reference -Below is a reference of enumerations used by some tools in the Asana toolkit: +Below is a reference of enumerations used by some tools in the Asana MCP Server: ## TagColor diff --git a/app/en/mcp-servers/productivity/clickup/_meta.tsx b/app/en/mcp-servers/productivity/clickup/_meta.tsx new file mode 100644 index 000000000..7d99d15c3 --- /dev/null +++ b/app/en/mcp-servers/productivity/clickup/_meta.tsx @@ -0,0 +1,15 @@ +import type { MetaRecord } from "nextra"; + +const meta: MetaRecord = { + "*": { + theme: { + breadcrumb: true, + toc: true, + }, + }, + reference: { + title: "Reference", + }, +}; + +export default meta; diff --git a/app/en/toolkits/productivity/clickup/page.mdx b/app/en/mcp-servers/productivity/clickup/page.mdx similarity index 79% rename from app/en/toolkits/productivity/clickup/page.mdx rename to app/en/mcp-servers/productivity/clickup/page.mdx index 3ecc2ad6e..8f948bdd8 100644 --- a/app/en/toolkits/productivity/clickup/page.mdx +++ b/app/en/mcp-servers/productivity/clickup/page.mdx @@ -1,6 +1,7 @@ --- asIndexPage: true --- + # Clickup import ToolInfo from "@/app/_components/tool-info"; @@ -19,7 +20,7 @@ import { Callout } from "nextra/components"; -The ClickUp toolkit provides tools to interact with ClickUp workspaces, projects (spaces/folders/lists), tasks, comments, and members. It enables building agents and apps that can: +The ClickUp MCP Server provides tools to interact with ClickUp workspaces, projects (spaces/folders/lists), tasks, comments, and members. It enables building agents and apps that can: - Discover workspace structure and users. - Create, view, and modify tasks. @@ -132,7 +133,7 @@ The ClickUp toolkit provides tools to interact with ClickUp workspaces, projects 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-toolkit). + tools](/home/build-tools/create-a-mcp-server). ## Clickup.GetTaskCommentReplies @@ -144,10 +145,10 @@ The ClickUp toolkit provides tools to interact with ClickUp workspaces, projects label: "Call the Tool Directly", content: { Python: [ - "/examples/integrations/toolkits/clickup/get_task_comment_replies_example_call_tool.py", + "/examples/integrations/mcp-servers/clickup/get_task_comment_replies_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/clickup/get_task_comment_replies_example_call_tool.js", + "/examples/integrations/mcp-servers/clickup/get_task_comment_replies_example_call_tool.js", ], }, }, @@ -171,10 +172,10 @@ Get threaded replies for a specific ClickUp comment with pagination support. label: "Call the Tool Directly", content: { Python: [ - "/examples/integrations/toolkits/clickup/create_task_comment_reply_example_call_tool.py", + "/examples/integrations/mcp-servers/clickup/create_task_comment_reply_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/clickup/create_task_comment_reply_example_call_tool.js", + "/examples/integrations/mcp-servers/clickup/create_task_comment_reply_example_call_tool.js", ], }, }, @@ -198,10 +199,10 @@ Create a new threaded reply to an existing ClickUp comment. label: "Call the Tool Directly", content: { Python: [ - "/examples/integrations/toolkits/clickup/create_task_example_call_tool.py", + "/examples/integrations/mcp-servers/clickup/create_task_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/clickup/create_task_example_call_tool.js", + "/examples/integrations/mcp-servers/clickup/create_task_example_call_tool.js", ], }, }, @@ -215,7 +216,7 @@ Create a new task in a ClickUp list with optional planning metadata. - **list_id** (`string`, required) The ClickUp list ID where the task will be created - **task_title** (`string`, required) The name/title of the task - **description** (`string`, optional) The description/content of the task -- **priority** (`Enum` [TaskPriority](/toolkits/productivity/clickup/reference#TaskPriority), optional) Task priority +- **priority** (`Enum` [TaskPriority](/mcp-servers/productivity/clickup/reference#TaskPriority), optional) Task priority - **status** (`string`, optional) Task status label (string) - **parent_task_id** (`string`, optional) The parent task ID if this is a subtask - **start_date** (`string`, optional) Date string in format YYYY-MM-DD or YYYY-MM-DD HH:MM[:SS]; ISO-8601 also supported @@ -231,10 +232,10 @@ Create a new task in a ClickUp list with optional planning metadata. label: "Call the Tool Directly", content: { Python: [ - "/examples/integrations/toolkits/clickup/get_task_by_id_example_call_tool.py", + "/examples/integrations/mcp-servers/clickup/get_task_by_id_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/clickup/get_task_by_id_example_call_tool.js", + "/examples/integrations/mcp-servers/clickup/get_task_by_id_example_call_tool.js", ], }, }, @@ -258,10 +259,10 @@ Get detailed information about a specific task by its ID. Also supports custom t label: "Call the Tool Directly", content: { Python: [ - "/examples/integrations/toolkits/clickup/update_task_example_call_tool.py", + "/examples/integrations/mcp-servers/clickup/update_task_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/clickup/update_task_example_call_tool.js", + "/examples/integrations/mcp-servers/clickup/update_task_example_call_tool.js", ], }, }, @@ -275,7 +276,7 @@ Update one or more fields of an existing ClickUp task. - **task_id** (`string`, required) The ClickUp task ID to update - **task_title** (`string`, optional) The new name/title of the task - **description** (`string`, optional) The new description/content of the task -- **priority** (`Enum` [TaskPriority](/toolkits/productivity/clickup/reference#TaskPriority), optional) Task priority +- **priority** (`Enum` [TaskPriority](/mcp-servers/productivity/clickup/reference#TaskPriority), optional) Task priority - **status** (`string`, optional) Task status label (string) - **parent_task_id** (`string`, optional) The new parent task ID - **start_date** (`string`, optional) Date string in format YYYY-MM-DD or YYYY-MM-DD HH:MM[:SS]; ISO-8601 also supported @@ -291,10 +292,10 @@ Update one or more fields of an existing ClickUp task. label: "Call the Tool Directly", content: { Python: [ - "/examples/integrations/toolkits/clickup/get_tasks_by_scope_example_call_tool.py", + "/examples/integrations/mcp-servers/clickup/get_tasks_by_scope_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/clickup/get_tasks_by_scope_example_call_tool.js", + "/examples/integrations/mcp-servers/clickup/get_tasks_by_scope_example_call_tool.js", ], }, }, @@ -306,11 +307,11 @@ Get filtered tasks from ClickUp with advanced filtering options. **Parameters** - **workspace_id** (`string`, required) The ClickUp workspace ID for GUI URL generation (should be a number) -- **scope** (`Enum` [FilterScope](/toolkits/productivity/clickup/reference#FilterScope), required) The scope to filter tasks by (all, spaces, folders, or lists) +- **scope** (`Enum` [FilterScope](/mcp-servers/productivity/clickup/reference#FilterScope), required) The scope to filter tasks by (all, spaces, folders, or lists) - **item_ids** (`array[string]`, optional) List of IDs to get tasks from (required for spaces/folders/lists, ignored for 'all') - **offset** (`integer`, optional) Starting position for offset-based retrieval (default: 0) - **limit** (`integer`, optional) Maximum number of tasks to return (max: 50, default: 20) -- **order_by** (`Enum` [TaskOrderBy](/toolkits/productivity/clickup/reference#TaskOrderBy), optional) Field to sort tasks by +- **order_by** (`Enum` [TaskOrderBy](/mcp-servers/productivity/clickup/reference#TaskOrderBy), optional) Field to sort tasks by - **should_sort_by_reverse** (`boolean`, optional) Whether to sort in descending order (default: False) - **statuses** (`array[string]`, optional) List of status strings to filter by - **include_closed** (`boolean`, optional) Whether to include closed tasks (default: False) @@ -328,10 +329,10 @@ Get filtered tasks from ClickUp with advanced filtering options. label: "Call the Tool Directly", content: { Python: [ - "/examples/integrations/toolkits/clickup/get_tasks_by_assignees_example_call_tool.py", + "/examples/integrations/mcp-servers/clickup/get_tasks_by_assignees_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/clickup/get_tasks_by_assignees_example_call_tool.js", + "/examples/integrations/mcp-servers/clickup/get_tasks_by_assignees_example_call_tool.js", ], }, }, @@ -346,7 +347,7 @@ Get filtered tasks assigned to specific team members with advanced filtering opt - **assignees_ids** (`array[integer]`, required) List of assignee user IDs to get tasks for - **offset** (`integer`, optional) Starting position for offset-based retrieval (default: 0) - **limit** (`integer`, optional) Maximum number of tasks to return (max: 50, default: 20) -- **order_by** (`Enum` [TaskOrderBy](/toolkits/productivity/clickup/reference#TaskOrderBy), optional) Field to sort tasks by +- **order_by** (`Enum` [TaskOrderBy](/mcp-servers/productivity/clickup/reference#TaskOrderBy), optional) Field to sort tasks by - **should_sort_by_reverse** (`boolean`, optional) Whether to sort in descending order (default: False) - **statuses** (`array[string]`, optional) List of status strings to filter by - **include_closed** (`boolean`, optional) Whether to include closed tasks (default: False) @@ -364,10 +365,10 @@ Get filtered tasks assigned to specific team members with advanced filtering opt label: "Call the Tool Directly", content: { Python: [ - "/examples/integrations/toolkits/clickup/update_task_assignees_example_call_tool.py", + "/examples/integrations/mcp-servers/clickup/update_task_assignees_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/clickup/update_task_assignees_example_call_tool.js", + "/examples/integrations/mcp-servers/clickup/update_task_assignees_example_call_tool.js", ], }, }, @@ -391,10 +392,10 @@ Update task assignees by adding and/or removing specific users. label: "Call the Tool Directly", content: { Python: [ - "/examples/integrations/toolkits/clickup/get_spaces_example_call_tool.py", + "/examples/integrations/mcp-servers/clickup/get_spaces_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/clickup/get_spaces_example_call_tool.js", + "/examples/integrations/mcp-servers/clickup/get_spaces_example_call_tool.js", ], }, }, @@ -419,10 +420,10 @@ Retrieve spaces from a ClickUp workspace. label: "Call the Tool Directly", content: { Python: [ - "/examples/integrations/toolkits/clickup/get_folders_for_space_example_call_tool.py", + "/examples/integrations/mcp-servers/clickup/get_folders_for_space_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/clickup/get_folders_for_space_example_call_tool.js", + "/examples/integrations/mcp-servers/clickup/get_folders_for_space_example_call_tool.js", ], }, }, @@ -448,10 +449,10 @@ Retrieve folders (also called directories, project categories, or project areas) label: "Call the Tool Directly", content: { Python: [ - "/examples/integrations/toolkits/clickup/get_lists_for_folder_example_call_tool.py", + "/examples/integrations/mcp-servers/clickup/get_lists_for_folder_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/clickup/get_lists_for_folder_example_call_tool.js", + "/examples/integrations/mcp-servers/clickup/get_lists_for_folder_example_call_tool.js", ], }, }, @@ -477,10 +478,10 @@ Retrieve task lists from a ClickUp folder (when users refer to a folder as a "di label: "Call the Tool Directly", content: { Python: [ - "/examples/integrations/toolkits/clickup/get_lists_for_space_example_call_tool.py", + "/examples/integrations/mcp-servers/clickup/get_lists_for_space_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/clickup/get_lists_for_space_example_call_tool.js", + "/examples/integrations/mcp-servers/clickup/get_lists_for_space_example_call_tool.js", ], }, }, @@ -506,10 +507,10 @@ Retrieve all task lists from a ClickUp space by collecting lists from all folder label: "Call the Tool Directly", content: { Python: [ - "/examples/integrations/toolkits/clickup/get_statuses_for_list_example_call_tool.py", + "/examples/integrations/mcp-servers/clickup/get_statuses_for_list_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/clickup/get_statuses_for_list_example_call_tool.js", + "/examples/integrations/mcp-servers/clickup/get_statuses_for_list_example_call_tool.js", ], }, }, @@ -531,10 +532,10 @@ Retrieve the possible task statuses for a specific ClickUp list. label: "Call the Tool Directly", content: { Python: [ - "/examples/integrations/toolkits/clickup/get_members_for_workspace_example_call_tool.py", + "/examples/integrations/mcp-servers/clickup/get_members_for_workspace_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/clickup/get_members_for_workspace_example_call_tool.js", + "/examples/integrations/mcp-servers/clickup/get_members_for_workspace_example_call_tool.js", ], }, }, @@ -558,10 +559,10 @@ Retrieve all team members from a specific ClickUp workspace. label: "Call the Tool Directly", content: { Python: [ - "/examples/integrations/toolkits/clickup/who_am_i_example_call_tool.py", + "/examples/integrations/mcp-servers/clickup/who_am_i_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/clickup/who_am_i_example_call_tool.js", + "/examples/integrations/mcp-servers/clickup/who_am_i_example_call_tool.js", ], }, }, @@ -583,10 +584,10 @@ This tool does not take any parameters. label: "Call the Tool Directly", content: { Python: [ - "/examples/integrations/toolkits/clickup/get_system_guidance_example_call_tool.py", + "/examples/integrations/mcp-servers/clickup/get_system_guidance_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/clickup/get_system_guidance_example_call_tool.js", + "/examples/integrations/mcp-servers/clickup/get_system_guidance_example_call_tool.js", ], }, }, @@ -608,10 +609,10 @@ This tool does not take any parameters. label: "Call the Tool Directly", content: { Python: [ - "/examples/integrations/toolkits/clickup/get_workspace_insights_example_call_tool.py", + "/examples/integrations/mcp-servers/clickup/get_workspace_insights_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/clickup/get_workspace_insights_example_call_tool.js", + "/examples/integrations/mcp-servers/clickup/get_workspace_insights_example_call_tool.js", ], }, }, @@ -633,10 +634,10 @@ Return a brief overview for a workspace using the latest updated tasks to inform label: "Call the Tool Directly", content: { Python: [ - "/examples/integrations/toolkits/clickup/get_task_comments_example_call_tool.py", + "/examples/integrations/mcp-servers/clickup/get_task_comments_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/clickup/get_task_comments_example_call_tool.js", + "/examples/integrations/mcp-servers/clickup/get_task_comments_example_call_tool.js", ], }, }, @@ -660,10 +661,10 @@ Get comments for a specific ClickUp task with pagination support. label: "Call the Tool Directly", content: { Python: [ - "/examples/integrations/toolkits/clickup/create_task_comment_example_call_tool.py", + "/examples/integrations/mcp-servers/clickup/create_task_comment_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/clickup/create_task_comment_example_call_tool.js", + "/examples/integrations/mcp-servers/clickup/create_task_comment_example_call_tool.js", ], }, }, @@ -687,10 +688,10 @@ Create a new comment on a ClickUp task with optional assignment. label: "Call the Tool Directly", content: { Python: [ - "/examples/integrations/toolkits/clickup/update_task_comment_example_call_tool.py", + "/examples/integrations/mcp-servers/clickup/update_task_comment_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/clickup/update_task_comment_example_call_tool.js", + "/examples/integrations/mcp-servers/clickup/update_task_comment_example_call_tool.js", ], }, }, @@ -705,7 +706,7 @@ Update an existing comment on a ClickUp task. - **task_id** (`string`, required) The ClickUp task ID the comment belongs to - **comment_text** (`string`, optional) New text content for the comment (optional) - **assignee_id** (`integer`, optional) User ID to assign the comment to (optional) -- **resolution** (`Enum` [CommentResolution](/toolkits/productivity/clickup/reference#CommentResolution), optional) Set comment resolution status (optional) +- **resolution** (`Enum` [CommentResolution](/mcp-servers/productivity/clickup/reference#CommentResolution), optional) Set comment resolution status (optional) ## Clickup.FuzzySearchTasksByName @@ -716,10 +717,10 @@ Update an existing comment on a ClickUp task. label: "Call the Tool Directly", content: { Python: [ - "/examples/integrations/toolkits/clickup/fuzzy_search_tasks_by_name_example_call_tool.py", + "/examples/integrations/mcp-servers/clickup/fuzzy_search_tasks_by_name_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/clickup/fuzzy_search_tasks_by_name_example_call_tool.js", + "/examples/integrations/mcp-servers/clickup/fuzzy_search_tasks_by_name_example_call_tool.js", ], }, }, @@ -750,10 +751,10 @@ Search for tasks using fuzzy matching on task names. label: "Call the Tool Directly", content: { Python: [ - "/examples/integrations/toolkits/clickup/fuzzy_search_lists_by_name_example_call_tool.py", + "/examples/integrations/mcp-servers/clickup/fuzzy_search_lists_by_name_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/clickup/fuzzy_search_lists_by_name_example_call_tool.js", + "/examples/integrations/mcp-servers/clickup/fuzzy_search_lists_by_name_example_call_tool.js", ], }, }, @@ -781,10 +782,10 @@ Search for lists using fuzzy matching on list names. label: "Call the Tool Directly", content: { Python: [ - "/examples/integrations/toolkits/clickup/fuzzy_search_folders_by_name_example_call_tool.py", + "/examples/integrations/mcp-servers/clickup/fuzzy_search_folders_by_name_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/clickup/fuzzy_search_folders_by_name_example_call_tool.js", + "/examples/integrations/mcp-servers/clickup/fuzzy_search_folders_by_name_example_call_tool.js", ], }, }, @@ -811,10 +812,10 @@ Search for folders using fuzzy matching on folder names. label: "Call the Tool Directly", content: { Python: [ - "/examples/integrations/toolkits/clickup/fuzzy_search_members_by_name_example_call_tool.py", + "/examples/integrations/mcp-servers/clickup/fuzzy_search_members_by_name_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/clickup/fuzzy_search_members_by_name_example_call_tool.js", + "/examples/integrations/mcp-servers/clickup/fuzzy_search_members_by_name_example_call_tool.js", ], }, }, @@ -832,7 +833,7 @@ Search for workspace members using fuzzy matching on member names. ## Reference -Below is a reference of enumerations used by some of the tools in the Clickup toolkit: +Below is a reference of enumerations used by some of the tools in the Clickup MCP Sever: ## TaskPriority @@ -861,6 +862,6 @@ Below is a reference of enumerations used by some of the tools in the Clickup to ## Auth -The Arcade Clickup toolkit uses the [Clickup auth provider](/home/auth-providers/clickup) to connect to users' Clickup accounts. Please refer to the [Clickup auth provider](/home/auth-providers/clickup) documentation to learn how to configure auth. +The Arcade Clickup MCP Sever uses the [Clickup auth provider](/home/auth-providers/clickup) to connect to users' Clickup accounts. Please refer to the [Clickup auth provider](/home/auth-providers/clickup) documentation to learn how to configure auth. diff --git a/app/en/toolkits/productivity/clickup/reference/page.mdx b/app/en/mcp-servers/productivity/clickup/reference/page.mdx similarity index 98% rename from app/en/toolkits/productivity/clickup/reference/page.mdx rename to app/en/mcp-servers/productivity/clickup/reference/page.mdx index ee1146f71..1ed5cb8be 100644 --- a/app/en/toolkits/productivity/clickup/reference/page.mdx +++ b/app/en/mcp-servers/productivity/clickup/reference/page.mdx @@ -1,6 +1,6 @@ # Clickup Reference -Below is a reference of enumerations used by some tools in the Clickup toolkit: +Below is a reference of enumerations used by some tools in the Clickup MCP Server: ## TaskPriority diff --git a/app/en/toolkits/productivity/closeio/page.mdx b/app/en/mcp-servers/productivity/closeio/page.mdx similarity index 100% rename from app/en/toolkits/productivity/closeio/page.mdx rename to app/en/mcp-servers/productivity/closeio/page.mdx diff --git a/app/en/toolkits/productivity/confluence/page.mdx b/app/en/mcp-servers/productivity/confluence/page.mdx similarity index 82% rename from app/en/toolkits/productivity/confluence/page.mdx rename to app/en/mcp-servers/productivity/confluence/page.mdx index b9fd9920a..75e55f3ea 100644 --- a/app/en/toolkits/productivity/confluence/page.mdx +++ b/app/en/mcp-servers/productivity/confluence/page.mdx @@ -17,14 +17,14 @@ import { Callout } from "nextra/components"; -The Arcade Confluence toolkit provides a pre-built set of tools for interacting with Confluence. These tools make it easy to build agents and AI apps that can: +The Arcade Confluence MCP Server provides a pre-built set of tools for interacting with Confluence. These tools make it easy to build agents and AI apps that can: - Work with pages, spaces, and attachments - Search for content ## Available tools -These tools are currently available in the Arcade Confluence toolkit. +These tools are currently available in the Arcade Confluence MCP Sever. 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-toolkit) with the [Confluence auth + tools](/home/build-tools/create-a-mcp-server) with the [Confluence auth provider](/home/auth-providers/atlassian). @@ -89,10 +89,10 @@ Create a new page at the root of the given space. label: "Call the tool with user authorization", content: { Python: [ - "/examples/integrations/toolkits/confluence/create_page_example_call_tool.py", + "/examples/integrations/mcp-servers/confluence/create_page_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/confluence/create_page_example_call_tool.js", + "/examples/integrations/mcp-servers/confluence/create_page_example_call_tool.js", ], }, }, @@ -118,10 +118,10 @@ Update a page's content. label: "Call the tool with user authorization", content: { Python: [ - "/examples/integrations/toolkits/confluence/update_page_content_example_call_tool.py", + "/examples/integrations/mcp-servers/confluence/update_page_content_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/confluence/update_page_content_example_call_tool.js", + "/examples/integrations/mcp-servers/confluence/update_page_content_example_call_tool.js", ], }, }, @@ -144,10 +144,10 @@ Rename a page by changing its title. label: "Call the tool with user authorization", content: { Python: [ - "/examples/integrations/toolkits/confluence/rename_page_example_call_tool.py", + "/examples/integrations/mcp-servers/confluence/rename_page_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/confluence/rename_page_example_call_tool.js", + "/examples/integrations/mcp-servers/confluence/rename_page_example_call_tool.js", ], }, }, @@ -175,10 +175,10 @@ IMPORTANT: For retrieving MULTIPLE pages, use `get_pages_by_id` instead for a ma label: "Call the tool with user authorization", content: { Python: [ - "/examples/integrations/toolkits/confluence/get_page_example_call_tool.py", + "/examples/integrations/mcp-servers/confluence/get_page_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/confluence/get_page_example_call_tool.js", + "/examples/integrations/mcp-servers/confluence/get_page_example_call_tool.js", ], }, }, @@ -204,10 +204,10 @@ IMPORTANT: Always use this function when you need to retrieve content from more label: "Call the tool with user authorization", content: { Python: [ - "/examples/integrations/toolkits/confluence/get_pages_by_id_example_call_tool.py", + "/examples/integrations/mcp-servers/confluence/get_pages_by_id_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/confluence/get_pages_by_id_example_call_tool.js", + "/examples/integrations/mcp-servers/confluence/get_pages_by_id_example_call_tool.js", ], }, }, @@ -234,10 +234,10 @@ Get the content of multiple pages by their ID. label: "Call the tool with user authorization", content: { Python: [ - "/examples/integrations/toolkits/confluence/list_pages_example_call_tool.py", + "/examples/integrations/mcp-servers/confluence/list_pages_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/confluence/list_pages_example_call_tool.js", + "/examples/integrations/mcp-servers/confluence/list_pages_example_call_tool.js", ], }, }, @@ -263,10 +263,10 @@ List attachments in a workspace. label: "Call the tool with user authorization", content: { Python: [ - "/examples/integrations/toolkits/confluence/list_attachments_example_call_tool.py", + "/examples/integrations/mcp-servers/confluence/list_attachments_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/confluence/list_attachments_example_call_tool.js", + "/examples/integrations/mcp-servers/confluence/list_attachments_example_call_tool.js", ], }, }, @@ -294,10 +294,10 @@ If a page title is provided, then the first page with an exact matching title wi label: "Call the tool with user authorization", content: { Python: [ - "/examples/integrations/toolkits/confluence/get_attachments_for_page_example_call_tool.py", + "/examples/integrations/mcp-servers/confluence/get_attachments_for_page_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/confluence/get_attachments_for_page_example_call_tool.js", + "/examples/integrations/mcp-servers/confluence/get_attachments_for_page_example_call_tool.js", ], }, }, @@ -341,10 +341,10 @@ You can use the parameters in different ways: label: "Call the tool with user authorization", content: { Python: [ - "/examples/integrations/toolkits/confluence/search_content_example_call_tool.py", + "/examples/integrations/mcp-servers/confluence/search_content_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/confluence/search_content_example_call_tool.js", + "/examples/integrations/mcp-servers/confluence/search_content_example_call_tool.js", ], }, }, @@ -368,10 +368,10 @@ Get the details of a space by its ID or key. label: "Call the tool with user authorization", content: { Python: [ - "/examples/integrations/toolkits/confluence/get_space_example_call_tool.py", + "/examples/integrations/mcp-servers/confluence/get_space_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/confluence/get_space_example_call_tool.js", + "/examples/integrations/mcp-servers/confluence/get_space_example_call_tool.js", ], }, }, @@ -396,10 +396,10 @@ List all spaces sorted by name in ascending order. label: "Call the tool with user authorization", content: { Python: [ - "/examples/integrations/toolkits/confluence/list_spaces_example_call_tool.py", + "/examples/integrations/mcp-servers/confluence/list_spaces_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/confluence/list_spaces_example_call_tool.js", + "/examples/integrations/mcp-servers/confluence/list_spaces_example_call_tool.js", ], }, }, @@ -429,10 +429,10 @@ smart links, etc. organized by parent-child relationships. label: "Call the tool with user authorization", content: { Python: [ - "/examples/integrations/toolkits/confluence/get_space_hierarchy_example_call_tool.py", + "/examples/integrations/mcp-servers/confluence/get_space_hierarchy_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/confluence/get_space_hierarchy_example_call_tool.js", + "/examples/integrations/mcp-servers/confluence/get_space_hierarchy_example_call_tool.js", ], }, }, @@ -441,7 +441,7 @@ smart links, etc. organized by parent-child relationships. ## Auth -The Arcade Notion toolkit uses the [Notion auth provider](/home/auth-providers/notion) to connect to users' Notion accounts. +The Arcade Notion MCP Sever uses the [Notion auth provider](/home/auth-providers/notion) to connect to users' Notion accounts. With the Arcade Cloud Platform, there's nothing to configure. Your users will see `Arcade` as the name of the application that's requesting permission. diff --git a/app/en/toolkits/productivity/dropbox/_meta.tsx b/app/en/mcp-servers/productivity/dropbox/_meta.tsx similarity index 100% rename from app/en/toolkits/productivity/dropbox/_meta.tsx rename to app/en/mcp-servers/productivity/dropbox/_meta.tsx diff --git a/app/en/toolkits/productivity/dropbox/page.mdx b/app/en/mcp-servers/productivity/dropbox/page.mdx similarity index 73% rename from app/en/toolkits/productivity/dropbox/page.mdx rename to app/en/mcp-servers/productivity/dropbox/page.mdx index fe08c4307..b8539edec 100644 --- a/app/en/toolkits/productivity/dropbox/page.mdx +++ b/app/en/mcp-servers/productivity/dropbox/page.mdx @@ -1,6 +1,7 @@ --- asIndexPage: true --- + # Dropbox import ToolInfo from "@/app/_components/tool-info"; @@ -13,14 +14,14 @@ import { Callout } from "nextra/components"; -The Arcade Dropbox toolkit provides a pre-built set of tools for interacting with Dropbox. These tools make it easy to build agents and AI apps that can: +The Arcade Dropbox MCP Server provides a pre-built set of tools for interacting with Dropbox. These tools make it easy to build agents and AI apps that can: - Browse files and folders - Search for files and folders @@ -43,7 +44,7 @@ The Arcade Dropbox toolkit provides a pre-built set of tools for interacting wit 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-toolkit). + tools](/home/build-tools/create-a-mcp-server). ## Dropbox.ListItemsInFolder @@ -55,10 +56,10 @@ The Arcade Dropbox toolkit provides a pre-built set of tools for interacting wit label: "Call the Tool Directly", content: { Python: [ - "/examples/integrations/toolkits/dropbox/list_items_in_folder_example_call_tool.py", + "/examples/integrations/mcp-servers/dropbox/list_items_in_folder_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/dropbox/list_items_in_folder_example_call_tool.js", + "/examples/integrations/mcp-servers/dropbox/list_items_in_folder_example_call_tool.js", ], }, }, @@ -82,10 +83,10 @@ List all items in a folder. label: "Call the Tool Directly", content: { Python: [ - "/examples/integrations/toolkits/dropbox/search_files_and_folders_example_call_tool.py", + "/examples/integrations/mcp-servers/dropbox/search_files_and_folders_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/dropbox/search_files_and_folders_example_call_tool.js", + "/examples/integrations/mcp-servers/dropbox/search_files_and_folders_example_call_tool.js", ], }, }, @@ -98,7 +99,7 @@ Search for files and folders in Dropbox. - **keywords** _(string, required)_ The keywords to search for. E.g. 'quarterly report' - **search_in_folder_path** _(string, optional)_ Restricts the search to the specified folder path. E.g. '/My Documents/My Folder'. Defaults to `None` (search in the entire Dropbox). -- **filter_by_category** _(list of enum [DropboxItemCategory](/toolkits/productivity/dropbox/reference#dropboxitemcategory), optional)_ Restricts the search to the specified category(ies) of items. Defaults to `None` (returns all items). +- **filter_by_category** _(list of enum [DropboxItemCategory](/mcp-servers/productivity/dropbox/reference#dropboxitemcategory), optional)_ Restricts the search to the specified category(ies) of items. Defaults to `None` (returns all items). - **limit** _(int, optional, Defaults to `100`)_ Maximum number of items to return. Defaults to 100. Maximum allowed is 2000. - **cursor** _(string, optional)_ A cursor to use for pagination. Defaults to `None`. @@ -111,10 +112,10 @@ Search for files and folders in Dropbox. label: "Call the Tool Directly", content: { Python: [ - "/examples/integrations/toolkits/dropbox/download_file_example_call_tool.py", + "/examples/integrations/mcp-servers/dropbox/download_file_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/dropbox/download_file_example_call_tool.js", + "/examples/integrations/mcp-servers/dropbox/download_file_example_call_tool.js", ], }, }, @@ -132,7 +133,7 @@ Note: to call this tool, you must provide either `file_path` or `file_id`. ## Auth -The Arcade Dropbox toolkit uses the [Dropbox auth provider](/home/auth-providers/dropbox) to connect to users' Dropbox accounts. +The Arcade Dropbox MCP Sever uses the [Dropbox auth provider](/home/auth-providers/dropbox) to connect to users' Dropbox accounts. With the Arcade Cloud Platform, there's nothing to configure. Your users will see `Arcade` as the name of the application that's requesting permission. diff --git a/app/en/toolkits/productivity/dropbox/reference/page.mdx b/app/en/mcp-servers/productivity/dropbox/reference/page.mdx similarity index 100% rename from app/en/toolkits/productivity/dropbox/reference/page.mdx rename to app/en/mcp-servers/productivity/dropbox/reference/page.mdx diff --git a/app/en/mcp-servers/productivity/gmail/_meta.tsx b/app/en/mcp-servers/productivity/gmail/_meta.tsx new file mode 100644 index 000000000..7d99d15c3 --- /dev/null +++ b/app/en/mcp-servers/productivity/gmail/_meta.tsx @@ -0,0 +1,15 @@ +import type { MetaRecord } from "nextra"; + +const meta: MetaRecord = { + "*": { + theme: { + breadcrumb: true, + toc: true, + }, + }, + reference: { + title: "Reference", + }, +}; + +export default meta; diff --git a/app/en/toolkits/productivity/gmail/page.mdx b/app/en/mcp-servers/productivity/gmail/page.mdx similarity index 76% rename from app/en/toolkits/productivity/gmail/page.mdx rename to app/en/mcp-servers/productivity/gmail/page.mdx index 35baa6011..fd5166775 100644 --- a/app/en/toolkits/productivity/gmail/page.mdx +++ b/app/en/mcp-servers/productivity/gmail/page.mdx @@ -1,6 +1,7 @@ --- asIndexPage: true --- + # Gmail import ToolInfo from "@/app/_components/tool-info"; @@ -20,7 +21,7 @@ import { Callout } from "nextra/components"; -The Arcade Gmail toolkit provides a pre-built set of tools for interacting with Gmail. These tools make it easy to build agents and AI apps that can: +The Arcade Gmail MCP Server provides a pre-built set of tools for interacting with Gmail. These tools make it easy to build agents and AI apps that can: - Send, read, and manage emails - Compose and update draft emails @@ -30,7 +31,7 @@ The Arcade Gmail toolkit provides a pre-built set of tools for interacting with ## Available Tools -These tools are currently available in the Arcade Gmail toolkit. +These tools are currently available in the Arcade Gmail MCP Sever. 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-toolkit) with the [Google auth + tools](/home/build-tools/create-a-mcp-server) with the [Google auth provider](/home/auth-providers/google#using-google-auth-in-custom-tools). @@ -70,10 +74,10 @@ These tools are currently available in the Arcade Gmail toolkit. label: "Call the Tool with User Authorization", content: { Python: [ - "/examples/integrations/toolkits/google/gmail/send_email_example_call_tool.py", + "/examples/integrations/mcp-servers/google/gmail/send_email_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/google/gmail/send_email_example_call_tool.js", + "/examples/integrations/mcp-servers/google/gmail/send_email_example_call_tool.js", ], }, }, @@ -101,10 +105,10 @@ Send an email using the Gmail API. label: "Call the Tool with User Authorization", content: { Python: [ - "/examples/integrations/toolkits/google/gmail/send_draft_email_example_call_tool.py", + "/examples/integrations/mcp-servers/google/gmail/send_draft_email_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/google/gmail/send_draft_email_example_call_tool.js", + "/examples/integrations/mcp-servers/google/gmail/send_draft_email_example_call_tool.js", ], }, }, @@ -128,10 +132,10 @@ Send a draft email using the Gmail API. label: "Call the Tool with User Authorization", content: { Python: [ - "/examples/integrations/toolkits/google/gmail/write_draft_email_example_call_tool.py", + "/examples/integrations/mcp-servers/google/gmail/write_draft_email_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/google/gmail/write_draft_email_example_call_tool.js", + "/examples/integrations/mcp-servers/google/gmail/write_draft_email_example_call_tool.js", ], }, }, @@ -159,10 +163,10 @@ Compose a new email draft using the Gmail API. label: "Call the Tool with User Authorization", content: { Python: [ - "/examples/integrations/toolkits/google/gmail/update_draft_email_example_call_tool.py", + "/examples/integrations/mcp-servers/google/gmail/update_draft_email_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/google/gmail/update_draft_email_example_call_tool.js", + "/examples/integrations/mcp-servers/google/gmail/update_draft_email_example_call_tool.js", ], }, }, @@ -191,10 +195,10 @@ Update an existing email draft. label: "Call the Tool with User Authorization", content: { Python: [ - "/examples/integrations/toolkits/google/gmail/delete_draft_email_example_call_tool.py", + "/examples/integrations/mcp-servers/google/gmail/delete_draft_email_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/google/gmail/delete_draft_email_example_call_tool.js", + "/examples/integrations/mcp-servers/google/gmail/delete_draft_email_example_call_tool.js", ], }, }, @@ -224,10 +228,10 @@ Delete a draft email using the Gmail API. label: "Call the Tool with User Authorization", content: { Python: [ - "/examples/integrations/toolkits/google/gmail/trash_email_example_call_tool.py", + "/examples/integrations/mcp-servers/google/gmail/trash_email_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/google/gmail/trash_email_example_call_tool.js", + "/examples/integrations/mcp-servers/google/gmail/trash_email_example_call_tool.js", ], }, }, @@ -251,10 +255,10 @@ Move an email to the trash folder. label: "Call the Tool with User Authorization", content: { Python: [ - "/examples/integrations/toolkits/google/gmail/list_draft_emails_example_call_tool.py", + "/examples/integrations/mcp-servers/google/gmail/list_draft_emails_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/google/gmail/list_draft_emails_example_call_tool.js", + "/examples/integrations/mcp-servers/google/gmail/list_draft_emails_example_call_tool.js", ], }, }, @@ -278,10 +282,10 @@ List draft emails in the user's mailbox. label: "Call the Tool with User Authorization", content: { Python: [ - "/examples/integrations/toolkits/google/gmail/list_emails_by_header_example_call_tool.py", + "/examples/integrations/mcp-servers/google/gmail/list_emails_by_header_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/google/gmail/list_emails_by_header_example_call_tool.js", + "/examples/integrations/mcp-servers/google/gmail/list_emails_by_header_example_call_tool.js", ], }, }, @@ -312,10 +316,10 @@ _At least one of the following parameters must be provided: `sender`, `recipient label: "Call the Tool with User Authorization", content: { Python: [ - "/examples/integrations/toolkits/google/gmail/list_emails_example_call_tool.py", + "/examples/integrations/mcp-servers/google/gmail/list_emails_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/google/gmail/list_emails_example_call_tool.js", + "/examples/integrations/mcp-servers/google/gmail/list_emails_example_call_tool.js", ], }, }, @@ -339,10 +343,10 @@ Read emails from a Gmail account and extract plain text content. label: "Call the Tool with User Authorization", content: { Python: [ - "/examples/integrations/toolkits/google/gmail/search_threads_example_call_tool.py", + "/examples/integrations/mcp-servers/google/gmail/search_threads_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/google/gmail/search_threads_example_call_tool.js", + "/examples/integrations/mcp-servers/google/gmail/search_threads_example_call_tool.js", ], }, }, @@ -374,10 +378,10 @@ Search for threads in the user's mailbox label: "Call the Tool with User Authorization", content: { Python: [ - "/examples/integrations/toolkits/google/gmail/list_threads_example_call_tool.py", + "/examples/integrations/mcp-servers/google/gmail/list_threads_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/google/gmail/list_threads_example_call_tool.js", + "/examples/integrations/mcp-servers/google/gmail/list_threads_example_call_tool.js", ], }, }, @@ -403,10 +407,10 @@ List threads in the user's mailbox. label: "Call the Tool with User Authorization", content: { Python: [ - "/examples/integrations/toolkits/google/gmail/get_thread_example_call_tool.py", + "/examples/integrations/mcp-servers/google/gmail/get_thread_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/google/gmail/get_thread_example_call_tool.js", + "/examples/integrations/mcp-servers/google/gmail/get_thread_example_call_tool.js", ], }, }, @@ -427,8 +431,12 @@ Get the specified thread by ID. { label: "Call the Tool Directly", content: { - Python: ["/examples/integrations/toolkits/gmail/who_am_i_example_call_tool.py"], - JavaScript: ["/examples/integrations/toolkits/gmail/who_am_i_example_call_tool.js"], + Python: [ + "/examples/integrations/mcp-servers/gmail/who_am_i_example_call_tool.py", + ], + JavaScript: [ + "/examples/integrations/mcp-servers/gmail/who_am_i_example_call_tool.js", + ], }, }, ]} @@ -442,7 +450,7 @@ This tool does not take any parameters. ## Auth -The Arcade Gmail toolkit uses the [Google auth provider](/home/auth-providers/google) to connect to users' Google accounts. +The Arcade Gmail MCP Sever uses the [Google auth provider](/home/auth-providers/google) to connect to users' Google accounts. With the Arcade Cloud Platform, there's nothing to configure. Your users will see `Arcade` as the name of the application that's requesting permission. diff --git a/app/en/toolkits/productivity/gmail/reference/page.mdx b/app/en/mcp-servers/productivity/gmail/reference/page.mdx similarity index 96% rename from app/en/toolkits/productivity/gmail/reference/page.mdx rename to app/en/mcp-servers/productivity/gmail/reference/page.mdx index 1905c3ade..04c4c6dbf 100644 --- a/app/en/toolkits/productivity/gmail/reference/page.mdx +++ b/app/en/mcp-servers/productivity/gmail/reference/page.mdx @@ -1,6 +1,6 @@ # Gmail Reference -Below is a reference of enumerations used by some tools in the Gmail toolkit: +Below is a reference of enumerations used by some tools in the Gmail MCP Server: ## GmailReplyToWhom diff --git a/app/en/toolkits/productivity/google-calendar/_meta.tsx b/app/en/mcp-servers/productivity/google-calendar/_meta.tsx similarity index 100% rename from app/en/toolkits/productivity/google-calendar/_meta.tsx rename to app/en/mcp-servers/productivity/google-calendar/_meta.tsx diff --git a/app/en/toolkits/productivity/google-calendar/page.mdx b/app/en/mcp-servers/productivity/google-calendar/page.mdx similarity index 78% rename from app/en/toolkits/productivity/google-calendar/page.mdx rename to app/en/mcp-servers/productivity/google-calendar/page.mdx index 68b1abce4..ea471a019 100644 --- a/app/en/toolkits/productivity/google-calendar/page.mdx +++ b/app/en/mcp-servers/productivity/google-calendar/page.mdx @@ -1,6 +1,7 @@ --- asIndexPage: true --- + # Google Calendar import ToolInfo from "@/app/_components/tool-info"; @@ -20,7 +21,7 @@ import { Callout } from "nextra/components"; -The Arcade Google Calendar toolkit provides a pre-built set of tools for interacting with a user’s Google Calendar. These tools make it easy to build agents and apps that can: +The Arcade Google Calendar MCP Server provides a pre-built set of tools for interacting with a user’s Google Calendar. These tools make it easy to build agents and apps that can: - Discover calendars accessible to the user and inspect user/profile/calendar environment (ListCalendars, WhoAmI). - Create, update, list, and delete events (CreateEvent, UpdateEvent, ListEvents, DeleteEvent). @@ -28,7 +29,7 @@ The Arcade Google Calendar toolkit provides a pre-built set of tools for interac ## Available Tools -These tools are currently available in the Arcade Google Calendar toolkit. +These tools are currently available in the Arcade Google Calendar MCP Sever. 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-toolkit) with the [Google auth + tools](/home/build-tools/create-a-mcp-server) with the [Google auth provider](/home/auth-providers/google#using-google-auth-in-custom-tools). @@ -74,10 +75,10 @@ These tools are currently available in the Arcade Google Calendar toolkit. label: "Call the Tool with User Authorization", content: { Python: [ - "/examples/integrations/toolkits/google_calendar/list_calendars_example_call_tool.py", + "/examples/integrations/mcp-servers/google_calendar/list_calendars_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/google_calendar/list_calendars_example_call_tool.js", + "/examples/integrations/mcp-servers/google_calendar/list_calendars_example_call_tool.js", ], }, }, @@ -102,10 +103,10 @@ List all calendars accessible by the user. label: "Call the Tool Directly", content: { Python: [ - "/examples/integrations/toolkits/google_calendar/create_event_example_call_tool.py", + "/examples/integrations/mcp-servers/google_calendar/create_event_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/google_calendar/create_event_example_call_tool.js", + "/examples/integrations/mcp-servers/google_calendar/create_event_example_call_tool.js", ], }, }, @@ -122,9 +123,9 @@ Create a new event/meeting/sync/meetup in the specified calendar. - **`calendar_id`** (`string`, optional) The ID of the calendar to create the event in, usually 'primary'. - **`description`** (`string`, optional) The description of the event - **`location`** (`string`, optional) The location of the event -- **`visibility`** (`Enum` [EventVisibility](/toolkits/productivity/google-calendar/reference#EventVisibility), optional) The visibility of the event +- **`visibility`** (`Enum` [EventVisibility](/mcp-servers/productivity/google-calendar/reference#EventVisibility), optional) The visibility of the event - **`attendee_emails`** (`array[string]`, optional) The list of attendee emails. Must be valid email addresses e.g., username@domain.com. -- **`send_notifications_to_attendees`** (`Enum` [SendUpdatesOptions](/toolkits/productivity/google-calendar/reference#SendUpdatesOptions), optional) Should attendees be notified by email of the invitation? (none, all, external_only) +- **`send_notifications_to_attendees`** (`Enum` [SendUpdatesOptions](/mcp-servers/productivity/google-calendar/reference#SendUpdatesOptions), optional) Should attendees be notified by email of the invitation? (none, all, external_only) - **`add_google_meet`** (`boolean`, optional) Whether to add a Google Meet link to the event. Defaults to False. ## GoogleCalendar.ListEvents @@ -136,10 +137,10 @@ Create a new event/meeting/sync/meetup in the specified calendar. label: "Call the Tool with User Authorization", content: { Python: [ - "/examples/integrations/toolkits/google_calendar/list_events_example_call_tool.py", + "/examples/integrations/mcp-servers/google_calendar/list_events_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/google_calendar/list_events_example_call_tool.js", + "/examples/integrations/mcp-servers/google_calendar/list_events_example_call_tool.js", ], }, }, @@ -171,10 +172,10 @@ For example: If min_end_datetime is set to 2024-09-15T09:00:00 and max_start_dat label: "Call the Tool with User Authorization", content: { Python: [ - "/examples/integrations/toolkits/google_calendar/update_event_example_call_tool.py", + "/examples/integrations/mcp-servers/google_calendar/update_event_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/google_calendar/update_event_example_call_tool.js", + "/examples/integrations/mcp-servers/google_calendar/update_event_example_call_tool.js", ], }, }, @@ -194,11 +195,11 @@ Update an existing event in the specified calendar with the provided details. On - **`updated_summary`** (`string`, optional) The updated title of the event - **`updated_description`** (`string`, optional) The updated description of the event - **`updated_location`** (`string`, optional) The updated location of the event -- **`updated_visibility`** (`Enum` [EventVisibility](/toolkits/productivity/google-calendar/reference#EventVisibility), optional) The visibility of the event +- **`updated_visibility`** (`Enum` [EventVisibility](/mcp-servers/productivity/google-calendar/reference#EventVisibility), optional) The visibility of the event - **`attendee_emails_to_add`** (`array[string]`, optional) The list of attendee emails to add. Must be valid email addresses e.g., username@domain.com. - **`attendee_emails_to_remove`** (`array[string]`, optional) The list of attendee emails to remove. Must be valid email addresses e.g., username@domain.com. -- **`send_notifications_to_attendees`** (`Enum` [SendUpdatesOptions](/toolkits/productivity/google-calendar/reference#SendUpdatesOptions), optional) Should attendees be notified of the update? (none, all, external_only) -- **`update_google_meet`** (`Enum` [UpdateGoogleMeetOptions](/toolkits/productivity/google-calendar/reference#UpdateGoogleMeetOptions), optional) Whether to update the Google Meet link to the event. (none, add, remove) +- **`send_notifications_to_attendees`** (`Enum` [SendUpdatesOptions](/mcp-servers/productivity/google-calendar/reference#SendUpdatesOptions), optional) Should attendees be notified of the update? (none, all, external_only) +- **`update_google_meet`** (`Enum` [UpdateGoogleMeetOptions](/mcp-servers/productivity/google-calendar/reference#UpdateGoogleMeetOptions), optional) Whether to update the Google Meet link to the event. (none, add, remove) ## GoogleCalendar.DeleteEvent @@ -209,10 +210,10 @@ Update an existing event in the specified calendar with the provided details. On label: "Call the Tool with User Authorization", content: { Python: [ - "/examples/integrations/toolkits/google_calendar/delete_event_example_call_tool.py", + "/examples/integrations/mcp-servers/google_calendar/delete_event_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/google_calendar/delete_event_example_call_tool.js", + "/examples/integrations/mcp-servers/google_calendar/delete_event_example_call_tool.js", ], }, }, @@ -225,7 +226,7 @@ Delete an event from Google Calendar. - **`event_id`** (`string`, required) The ID of the event to delete - **`calendar_id`** (`string`, optional) The ID of the calendar containing the event -- **`send_updates`** (`Enum` [SendUpdatesOptions](/toolkits/productivity/google-calendar/reference#SendUpdatesOptions), optional) Specifies which attendees to notify about the deletion +- **`send_updates`** (`Enum` [SendUpdatesOptions](/mcp-servers/productivity/google-calendar/reference#SendUpdatesOptions), optional) Specifies which attendees to notify about the deletion ## GoogleCalendar.FindTimeSlotsWhenEveryoneIsFree @@ -236,10 +237,10 @@ Delete an event from Google Calendar. label: "Call the Tool with User Authorization", content: { Python: [ - "/examples/integrations/toolkits/google_calendar/find_time_slots_when_everyone_is_free_example_call_tool.py", + "/examples/integrations/mcp-servers/google_calendar/find_time_slots_when_everyone_is_free_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/google_calendar/find_time_slots_when_everyone_is_free_example_call_tool.js", + "/examples/integrations/mcp-servers/google_calendar/find_time_slots_when_everyone_is_free_example_call_tool.js", ], }, }, @@ -265,10 +266,10 @@ Provides time slots when everyone is free within a given date range and time bou label: "Call the Tool with User Authorization", content: { Python: [ - "/examples/integrations/toolkits/google_calendar/who_am_i_example_call_tool.py", + "/examples/integrations/mcp-servers/google_calendar/who_am_i_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/google_calendar/who_am_i_example_call_tool.js", + "/examples/integrations/mcp-servers/google_calendar/who_am_i_example_call_tool.js", ], }, }, @@ -285,7 +286,7 @@ This tool does not take any parameters. ## Auth -The Arcade Google Calendar toolkit uses the [Google auth provider](/home/auth-providers/google) to connect to users' Google accounts. +The Arcade Google Calendar MCP Sever uses the [Google auth provider](/home/auth-providers/google) to connect to users' Google accounts. With the Arcade Cloud Platform, there's nothing to configure. Your users will see `Arcade` as the name of the application that's requesting permission. diff --git a/app/en/toolkits/productivity/google-calendar/reference/page.mdx b/app/en/mcp-servers/productivity/google-calendar/reference/page.mdx similarity index 93% rename from app/en/toolkits/productivity/google-calendar/reference/page.mdx rename to app/en/mcp-servers/productivity/google-calendar/reference/page.mdx index e7d06e54a..ee7d53ef5 100644 --- a/app/en/toolkits/productivity/google-calendar/reference/page.mdx +++ b/app/en/mcp-servers/productivity/google-calendar/reference/page.mdx @@ -1,6 +1,6 @@ # GoogleCalendar Reference -Below is a reference of enumerations used by some tools in the GoogleCalendar toolkit: +Below is a reference of enumerations used by some tools in the GoogleCalendar MCP Server: ## EventVisibility diff --git a/app/en/toolkits/productivity/google-contacts/page.mdx b/app/en/mcp-servers/productivity/google-contacts/page.mdx similarity index 65% rename from app/en/toolkits/productivity/google-contacts/page.mdx rename to app/en/mcp-servers/productivity/google-contacts/page.mdx index f25bce555..5698d0ee6 100644 --- a/app/en/toolkits/productivity/google-contacts/page.mdx +++ b/app/en/mcp-servers/productivity/google-contacts/page.mdx @@ -17,29 +17,41 @@ import { Callout } from "nextra/components"; -The Arcade Google Contacts toolkit provides a pre-built set of tools for interacting with Google Contacts. These tools make it easy to build agents and AI apps that can: +The Arcade Google Contacts MCP Server provides a pre-built set of tools for interacting with Google Contacts. These tools make it easy to build agents and AI apps that can: - Create new contacts - Search for contacts by name or email ## Available Tools -These tools are currently available in the Arcade Google Contacts toolkit. +These tools are currently available in the Arcade Google Contacts MCP Sever. 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-toolkit) with the [Google auth + tools](/home/build-tools/create-a-mcp-server) with the [Google auth provider](/home/auth-providers/google#using-google-auth-in-custom-tools). @@ -53,10 +65,10 @@ Search the user's contacts in Google Contacts by email address. label: "Call the tool with user authorization", content: { Python: [ - "/examples/integrations/toolkits/google/contacts/search_contacts_by_email_example_call_tool.py", + "/examples/integrations/mcp-servers/google/contacts/search_contacts_by_email_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/google/contacts/search_contacts_by_email_example_call_tool.js", + "/examples/integrations/mcp-servers/google/contacts/search_contacts_by_email_example_call_tool.js", ], }, }, @@ -80,10 +92,10 @@ Search the user's contacts in Google Contacts by name. label: "Call the tool with user authorization", content: { Python: [ - "/examples/integrations/toolkits/google/contacts/search_contacts_by_name_example_call_tool.py", + "/examples/integrations/mcp-servers/google/contacts/search_contacts_by_name_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/google/contacts/search_contacts_by_name_example_call_tool.js", + "/examples/integrations/mcp-servers/google/contacts/search_contacts_by_name_example_call_tool.js", ], }, }, @@ -107,10 +119,10 @@ Create a new contact record in Google Contacts. label: "Call the tool with user authorization", content: { Python: [ - "/examples/integrations/toolkits/google/contacts/create_contact_example_call_tool.py", + "/examples/integrations/mcp-servers/google/contacts/create_contact_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/google/contacts/create_contact_example_call_tool.js", + "/examples/integrations/mcp-servers/google/contacts/create_contact_example_call_tool.js", ], }, }, @@ -133,8 +145,12 @@ Create a new contact record in Google Contacts. { label: "Call the Tool with User Authorization", content: { - Python: ["/examples/integrations/toolkits/google_contacts/who_am_i_example_call_tool.py"], - JavaScript: ["/examples/integrations/toolkits/google_contacts/who_am_i_example_call_tool.js"], + Python: [ + "/examples/integrations/mcp-servers/google_contacts/who_am_i_example_call_tool.py", + ], + JavaScript: [ + "/examples/integrations/mcp-servers/google_contacts/who_am_i_example_call_tool.js", + ], }, }, ]} @@ -150,7 +166,7 @@ This tool does not take any parameters. ## Auth -The Arcade Google Contacts toolkit uses the [Google auth provider](/home/auth-providers/google) to connect to users' Google accounts. +The Arcade Google Contacts MCP Sever uses the [Google auth provider](/home/auth-providers/google) to connect to users' Google accounts. With the Arcade Cloud Platform, there's nothing to configure. Your users will see `Arcade` as the name of the application that's requesting permission. diff --git a/app/en/toolkits/productivity/google-docs/_meta.tsx b/app/en/mcp-servers/productivity/google-docs/_meta.tsx similarity index 100% rename from app/en/toolkits/productivity/google-docs/_meta.tsx rename to app/en/mcp-servers/productivity/google-docs/_meta.tsx diff --git a/app/en/toolkits/productivity/google-docs/page.mdx b/app/en/mcp-servers/productivity/google-docs/page.mdx similarity index 75% rename from app/en/toolkits/productivity/google-docs/page.mdx rename to app/en/mcp-servers/productivity/google-docs/page.mdx index 14f861833..aefc024d3 100644 --- a/app/en/toolkits/productivity/google-docs/page.mdx +++ b/app/en/mcp-servers/productivity/google-docs/page.mdx @@ -1,6 +1,7 @@ --- asIndexPage: true --- + # Google Docs import ToolInfo from "@/app/_components/tool-info"; @@ -26,35 +27,65 @@ import { Callout } from "nextra/components";
-The Arcade Google Docs toolkit provides a pre-built set of tools for interacting with Google Docs. These tools make it easy to build agents and AI apps that can: +The Arcade Google Docs MCP Server provides a pre-built set of tools for interacting with Google Docs. These tools make it easy to build agents and AI apps that can: - Create, update, list, and delete documents ## Available Tools -These tools are currently available in the Arcade Google Docs toolkit. +These tools are currently available in the Arcade Google Docs MCP Sever. 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-toolkit) with the [Google auth + tools](/home/build-tools/create-a-mcp-server) with the [Google auth provider](/home/auth-providers/google#using-google-auth-in-custom-tools). @@ -67,10 +98,10 @@ These tools are currently available in the Arcade Google Docs toolkit. label: "Call the Tool with User Authorization", content: { Python: [ - "/examples/integrations/toolkits/google_docs/who_am_i_example_call_tool.py", + "/examples/integrations/mcp-servers/google_docs/who_am_i_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/google_docs/who_am_i_example_call_tool.js", + "/examples/integrations/mcp-servers/google_docs/who_am_i_example_call_tool.js", ], }, }, @@ -94,10 +125,10 @@ This tool does not take any parameters. label: "Call the Tool with User Authorization", content: { Python: [ - "/examples/integrations/toolkits/google/docs/get_document_by_id_example_call_tool.py", + "/examples/integrations/mcp-servers/google/docs/get_document_by_id_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/google/docs/get_document_by_id_example_call_tool.js", + "/examples/integrations/mcp-servers/google/docs/get_document_by_id_example_call_tool.js", ], }, }, @@ -121,11 +152,13 @@ Get the latest version of the specified Google Docs document. label: "Call the Tool with User Authorization", content: { Python: [ - "/examples/integrations/toolkits/google/docs/get_document_as_docmd_example_call_tool.py", + "/examples/integrations/mcp-servers/google/docs/get_document_as_docmd_example_call_tool.py", + ], + JavaScript: [ + "/examples/integrations/mcp-servers/google/docs/get_document_as_docmd_example_call_tool.js", ], - JavaScript: ["/examples/integrations/toolkits/google/docs/get_document_as_docmd_example_call_tool.js"], }, - } + }, ]} /> @@ -146,11 +179,13 @@ Get the latest version of the specified Google Docs document in DocMD format. Th label: "Call the Tool with User Authorization", content: { Python: [ - "/examples/integrations/toolkits/google/docs/edit_document_example_call_tool.py", + "/examples/integrations/mcp-servers/google/docs/edit_document_example_call_tool.py", + ], + JavaScript: [ + "/examples/integrations/mcp-servers/google/docs/edit_document_example_call_tool.js", ], - JavaScript: ["/examples/integrations/toolkits/google/docs/edit_document_example_call_tool.js"], }, - } + }, ]} /> @@ -175,10 +210,10 @@ Note that this tool is agentic, and requires the secret OPENAI_API_KEY to be set label: "Call the Tool with User Authorization", content: { Python: [ - "/examples/integrations/toolkits/google/docs/insert_text_at_end_of_document_example_call_tool.py", + "/examples/integrations/mcp-servers/google/docs/insert_text_at_end_of_document_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/google/docs/insert_text_at_end_of_document_example_call_tool.js", + "/examples/integrations/mcp-servers/google/docs/insert_text_at_end_of_document_example_call_tool.js", ], }, }, @@ -203,10 +238,10 @@ Insert text at the end of an existing Google Docs document. label: "Call the Tool with User Authorization", content: { Python: [ - "/examples/integrations/toolkits/google/docs/create_blank_document_example_call_tool.py", + "/examples/integrations/mcp-servers/google/docs/create_blank_document_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/google/docs/create_blank_document_example_call_tool.js", + "/examples/integrations/mcp-servers/google/docs/create_blank_document_example_call_tool.js", ], }, }, @@ -230,10 +265,10 @@ Create a blank Google Docs document with the specified title. label: "Call the Tool with User Authorization", content: { Python: [ - "/examples/integrations/toolkits/google/docs/create_document_from_text_example_call_tool.py", + "/examples/integrations/mcp-servers/google/docs/create_document_from_text_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/google/docs/create_document_from_text_example_call_tool.js", + "/examples/integrations/mcp-servers/google/docs/create_document_from_text_example_call_tool.js", ], }, }, @@ -258,10 +293,10 @@ Create a Google Docs document with the specified title and text content. label: "Call the Tool with User Authorization", content: { Python: [ - "/examples/integrations/toolkits/google/docs/search_documents_example_call_tool.py", + "/examples/integrations/mcp-servers/google/docs/search_documents_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/google/docs/search_documents_example_call_tool.js", + "/examples/integrations/mcp-servers/google/docs/search_documents_example_call_tool.js", ], }, }, @@ -290,10 +325,10 @@ Search Google documents in the user's Google Drive. Excludes documents that are label: "Call the Tool with User Authorization", content: { Python: [ - "/examples/integrations/toolkits/google/docs/search_and_retrieve_documents_example_call_tool.py", + "/examples/integrations/mcp-servers/google/docs/search_and_retrieve_documents_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/google/docs/search_and_retrieve_documents_example_call_tool.js", + "/examples/integrations/mcp-servers/google/docs/search_and_retrieve_documents_example_call_tool.js", ], }, }, @@ -325,11 +360,13 @@ Searches for documents in the user's Google Drive and returns a list of document label: "Call the Tool with User Authorization", content: { Python: [ - "/examples/integrations/toolkits/google/docs/list_document_comments_example_call_tool.py", + "/examples/integrations/mcp-servers/google/docs/list_document_comments_example_call_tool.py", + ], + JavaScript: [ + "/examples/integrations/mcp-servers/google/docs/list_document_comments_example_call_tool.js", ], - JavaScript: ["/examples/integrations/toolkits/google/docs/list_document_comments_example_call_tool.js"], }, - } + }, ]} /> @@ -351,11 +388,13 @@ List all comments on the specified Google Docs document. label: "Call the Tool with User Authorization", content: { Python: [ - "/examples/integrations/toolkits/google/docs/comment_on_document_example_call_tool.py", + "/examples/integrations/mcp-servers/google/docs/comment_on_document_example_call_tool.py", + ], + JavaScript: [ + "/examples/integrations/mcp-servers/google/docs/comment_on_document_example_call_tool.js", ], - JavaScript: ["/examples/integrations/toolkits/google/docs/comment_on_document_example_call_tool.js"], }, - } + }, ]} /> @@ -366,11 +405,11 @@ Comment on a specific document by its ID. - **`document_id`** _(string, required)_ The ID of the document to comment on. - **`comment_text`** _(string, required)_ The comment to add to the document. - --- + ## Auth -The Arcade Docs toolkit uses the [Google auth provider](/home/auth-providers/google) to connect to users' Google accounts. +The Arcade Docs MCP Sever uses the [Google auth provider](/home/auth-providers/google) to connect to users' Google accounts. With the Arcade Cloud Platform, there's nothing to configure. Your users will see `Arcade` as the name of the application that's requesting permission. diff --git a/app/en/toolkits/productivity/google-docs/reference/page.mdx b/app/en/mcp-servers/productivity/google-docs/reference/page.mdx similarity index 97% rename from app/en/toolkits/productivity/google-docs/reference/page.mdx rename to app/en/mcp-servers/productivity/google-docs/reference/page.mdx index 56e57d0c1..17b9abd39 100644 --- a/app/en/toolkits/productivity/google-docs/reference/page.mdx +++ b/app/en/mcp-servers/productivity/google-docs/reference/page.mdx @@ -1,6 +1,6 @@ # GoogleDocs Reference -Below is a reference of enumerations used by some tools in the GoogleDocs toolkit: +Below is a reference of enumerations used by some tools in the GoogleDocs MCP Server: ## OrderBy diff --git a/app/en/toolkits/productivity/google-drive/_meta.tsx b/app/en/mcp-servers/productivity/google-drive/_meta.tsx similarity index 100% rename from app/en/toolkits/productivity/google-drive/_meta.tsx rename to app/en/mcp-servers/productivity/google-drive/_meta.tsx diff --git a/app/en/toolkits/productivity/google-drive/page.mdx b/app/en/mcp-servers/productivity/google-drive/page.mdx similarity index 58% rename from app/en/toolkits/productivity/google-drive/page.mdx rename to app/en/mcp-servers/productivity/google-drive/page.mdx index c6f6109dc..390812b8f 100644 --- a/app/en/toolkits/productivity/google-drive/page.mdx +++ b/app/en/mcp-servers/productivity/google-drive/page.mdx @@ -1,6 +1,7 @@ --- asIndexPage: true --- + # Google Drive import ToolInfo from "@/app/_components/tool-info"; @@ -19,7 +20,7 @@ import { Callout } from "nextra/components"; -The GoogleDrive toolkit provides a set of tools for interacting with Google Drive, enabling users to efficiently manage and access their files. With this toolkit, users can: +The GoogleDrive MCP Server provides a set of tools for interacting with Google Drive, enabling users to efficiently manage and access their files. With this MCP Sever, users can: - Retrieve the file and folder structure of their Google Drive. - Generate a Google File Picker URL for user-driven file selection and authorization, allowing secure access to files. @@ -29,20 +30,27 @@ The GoogleDrive toolkit provides a set of tools for interacting with Google Driv 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-toolkit). + with us](mailto:contact@arcade.dev) to request a new tool, or [create your own + tools](/home/build-tools/create-a-mcp-server). ## GoogleDrive.WhoAmI @@ -53,8 +61,12 @@ The GoogleDrive toolkit provides a set of tools for interacting with Google Driv { label: "Call the Tool with User Authorization", content: { - Python: ["/examples/integrations/toolkits/google_drive/who_am_i_example_call_tool.py"], - JavaScript: ["/examples/integrations/toolkits/google_drive/who_am_i_example_call_tool.js"], + Python: [ + "/examples/integrations/mcp-servers/google_drive/who_am_i_example_call_tool.py", + ], + JavaScript: [ + "/examples/integrations/mcp-servers/google_drive/who_am_i_example_call_tool.js", + ], }, }, ]} @@ -76,8 +88,12 @@ This tool does not take any parameters. { label: "Call the Tool with User Authorization", content: { - Python: ["/examples/integrations/toolkits/google_drive/get_file_tree_structure_example_call_tool.py"], - JavaScript: ["/examples/integrations/toolkits/google_drive/get_file_tree_structure_example_call_tool.js"], + Python: [ + "/examples/integrations/mcp-servers/google_drive/get_file_tree_structure_example_call_tool.py", + ], + JavaScript: [ + "/examples/integrations/mcp-servers/google_drive/get_file_tree_structure_example_call_tool.js", + ], }, }, ]} @@ -90,10 +106,9 @@ Get the file/folder tree structure of the user's Google Drive. - **include_shared_drives** (`boolean`, optional) Whether to include shared drives in the file tree structure. Defaults to False. - **restrict_to_shared_drive_id** (`string`, optional) If provided, only include files from this shared drive in the file tree structure. Defaults to None, which will include files and folders from all drives. - **include_organization_domain_documents** (`boolean`, optional) Whether to include documents from the organization's domain. This is applicable to admin users who have permissions to view organization-wide documents in a Google Workspace account. Defaults to False. -- **order_by** (`Enum` [OrderBy](/toolkits/productivity/google-drive/reference#OrderBy), optional) Sort order. Defaults to listing the most recently modified documents first +- **order_by** (`Enum` [OrderBy](/mcp-servers/productivity/google-drive/reference#OrderBy), optional) Sort order. Defaults to listing the most recently modified documents first - **limit** (`integer`, optional) The number of files and folders to list. Defaults to None, which will list all files and folders. - ## GoogleDrive.GenerateGoogleFilePickerUrl
@@ -102,8 +117,12 @@ Get the file/folder tree structure of the user's Google Drive. { label: "Call the Tool with User Authorization", content: { - Python: ["/examples/integrations/toolkits/google_drive/generate_google_file_picker_url_example_call_tool.py"], - JavaScript: ["/examples/integrations/toolkits/google_drive/generate_google_file_picker_url_example_call_tool.js"], + Python: [ + "/examples/integrations/mcp-servers/google_drive/generate_google_file_picker_url_example_call_tool.py", + ], + JavaScript: [ + "/examples/integrations/mcp-servers/google_drive/generate_google_file_picker_url_example_call_tool.js", + ], }, }, ]} @@ -123,8 +142,12 @@ This tool does not take any parameters. { label: "Call the Tool with User Authorization", content: { - Python: ["/examples/integrations/toolkits/google_drive/search_files_example_call_tool.py"], - JavaScript: ["/examples/integrations/toolkits/google_drive/search_files_example_call_tool.js"], + Python: [ + "/examples/integrations/mcp-servers/google_drive/search_files_example_call_tool.py", + ], + JavaScript: [ + "/examples/integrations/mcp-servers/google_drive/search_files_example_call_tool.js", + ], }, }, ]} @@ -138,16 +161,12 @@ Search for files in Google Drive - **include_shared_drives** (`boolean`, optional) Whether to include shared drives in the search. Defaults to False. - **restrict_to_shared_drive_id** (`string`, optional) If provided, only search files from this shared drive. Defaults to None, which will search files from all drives. - **include_organization_domain_documents** (`boolean`, optional) Whether to include documents from the organization's domain. This is applicable to admin users who have permissions to view organization-wide documents in a Google Workspace account. Defaults to False. -- **order_by** (`Enum` [OrderBy](/toolkits/productivity/google-drive/reference#OrderBy), optional) Sort order for search results. Defaults to listing the most recently modified documents first +- **order_by** (`Enum` [OrderBy](/mcp-servers/productivity/google-drive/reference#OrderBy), optional) Sort order for search results. Defaults to listing the most recently modified documents first - **limit** (`integer`, optional) The maximum number of search results to return. Defaults to 50. -- **file_types** (`Enum` [GoogleDriveFileType](/toolkits/productivity/google-drive/reference#GoogleDriveFileType), optional) Filter by specific file types. Defaults to None, which includes all file types. - - - +- **file_types** (`Enum` [GoogleDriveFileType](/mcp-servers/productivity/google-drive/reference#GoogleDriveFileType), optional) Filter by specific file types. Defaults to None, which includes all file types. ## Auth -The Arcade GoogleDrive toolkit uses the [Google auth provider](/home/auth-providers/google) to connect to users' GoogleDrive accounts. Please refer to the [Google auth provider](/home/auth-providers/google) documentation to learn how to configure auth. +The Arcade GoogleDrive MCP Sever uses the [Google auth provider](/home/auth-providers/google) to connect to users' GoogleDrive accounts. Please refer to the [Google auth provider](/home/auth-providers/google) documentation to learn how to configure auth. - diff --git a/app/en/toolkits/productivity/google-drive/reference/page.mdx b/app/en/mcp-servers/productivity/google-drive/reference/page.mdx similarity index 98% rename from app/en/toolkits/productivity/google-drive/reference/page.mdx rename to app/en/mcp-servers/productivity/google-drive/reference/page.mdx index b91d31d19..1c5e498c4 100644 --- a/app/en/toolkits/productivity/google-drive/reference/page.mdx +++ b/app/en/mcp-servers/productivity/google-drive/reference/page.mdx @@ -1,6 +1,6 @@ # GoogleDrive Reference -Below is a reference of enumerations used by some tools in the GoogleDrive toolkit: +Below is a reference of enumerations used by some tools in the GoogleDrive MCP Server: ## OrderBy diff --git a/app/en/toolkits/productivity/google-sheets/_meta.tsx b/app/en/mcp-servers/productivity/google-sheets/_meta.tsx similarity index 100% rename from app/en/toolkits/productivity/google-sheets/_meta.tsx rename to app/en/mcp-servers/productivity/google-sheets/_meta.tsx diff --git a/app/en/toolkits/productivity/google-sheets/page.mdx b/app/en/mcp-servers/productivity/google-sheets/page.mdx similarity index 80% rename from app/en/toolkits/productivity/google-sheets/page.mdx rename to app/en/mcp-servers/productivity/google-sheets/page.mdx index 807510ff7..54895da99 100644 --- a/app/en/toolkits/productivity/google-sheets/page.mdx +++ b/app/en/mcp-servers/productivity/google-sheets/page.mdx @@ -1,6 +1,7 @@ --- asIndexPage: true --- + # Google Sheets import ToolInfo from "@/app/_components/tool-info"; @@ -19,7 +20,7 @@ import { Callout } from "nextra/components"; -The Arcade GoogleSheets toolkit provides a pre-built set of tools for working with Google Sheets. These tools make it easy to build agents and AI apps that can: +The Arcade GoogleSheets MCP Server provides a pre-built set of tools for working with Google Sheets. These tools make it easy to build agents and AI apps that can: - Create new spreadsheets and seed initial data. - Search Google Drive for spreadsheets and retrieve metadata (titles, IDs, URLs; excludes trash). @@ -75,7 +76,7 @@ The Arcade GoogleSheets toolkit provides a pre-built set of tools for working wi 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-toolkit). + tools](/home/build-tools/create-a-mcp-server). ## GoogleSheets.CreateSpreadsheet @@ -87,10 +88,10 @@ The Arcade GoogleSheets toolkit provides a pre-built set of tools for working wi label: "Call the Tool Directly", content: { Python: [ - "/examples/integrations/toolkits/google_sheets/create_spreadsheet_example_call_tool.py", + "/examples/integrations/mcp-servers/google_sheets/create_spreadsheet_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/google_sheets/create_spreadsheet_example_call_tool.js", + "/examples/integrations/mcp-servers/google_sheets/create_spreadsheet_example_call_tool.js", ], }, }, @@ -113,10 +114,10 @@ Create a new spreadsheet with the provided title and data in its first sheet label: "Call the Tool Directly", content: { Python: [ - "/examples/integrations/toolkits/google_sheets/write_to_cell_example_call_tool.py", + "/examples/integrations/mcp-servers/google_sheets/write_to_cell_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/google_sheets/write_to_cell_example_call_tool.js", + "/examples/integrations/mcp-servers/google_sheets/write_to_cell_example_call_tool.js", ], }, }, @@ -142,10 +143,10 @@ Write a value to a single cell in a spreadsheet. label: "Call the Tool Directly", content: { Python: [ - "/examples/integrations/toolkits/google_sheets/update_cells_example_call_tool.py", + "/examples/integrations/mcp-servers/google_sheets/update_cells_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/google_sheets/update_cells_example_call_tool.js", + "/examples/integrations/mcp-servers/google_sheets/update_cells_example_call_tool.js", ], }, }, @@ -170,10 +171,10 @@ Write values to a Google Sheet using a flexible data format. label: "Call the Tool Directly", content: { Python: [ - "/examples/integrations/toolkits/google_sheets/add_note_to_cell_example_call_tool.py", + "/examples/integrations/mcp-servers/google_sheets/add_note_to_cell_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/google_sheets/add_note_to_cell_example_call_tool.js", + "/examples/integrations/mcp-servers/google_sheets/add_note_to_cell_example_call_tool.js", ], }, }, @@ -200,10 +201,10 @@ Add a note to a specific cell in a spreadsheet. A note is a small label: "Call the Tool Directly", content: { Python: [ - "/examples/integrations/toolkits/google_sheets/search_spreadsheets_example_call_tool.py", + "/examples/integrations/mcp-servers/google_sheets/search_spreadsheets_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/google_sheets/search_spreadsheets_example_call_tool.js", + "/examples/integrations/mcp-servers/google_sheets/search_spreadsheets_example_call_tool.js", ], }, }, @@ -219,7 +220,7 @@ Searches for spreadsheets in the user's Google Drive based on the titles and con - **search_only_in_shared_drive_id** (`string`, optional) The ID of the shared drive to restrict the search to. If provided, the search will only return spreadsheets from this drive. Defaults to None, which searches across all drives. - **include_shared_drives** (`boolean`, optional) Whether to include spreadsheets from shared drives. Defaults to False (searches only in the user's 'My Drive'). - **include_organization_domain_spreadsheets** (`boolean`, optional) Whether to include spreadsheets from the organization's domain. This is applicable to admin users who have permissions to view organization-wide spreadsheets in a Google Workspace account. Defaults to False. -- **order_by** (`Enum` [OrderBy](/toolkits/productivity/google-sheets/reference#orderby), optional) Sort order. Defaults to listing the most recently modified spreadsheets first +- **order_by** (`Enum` [OrderBy](/mcp-servers/productivity/google-sheets/reference#orderby), optional) Sort order. Defaults to listing the most recently modified spreadsheets first - **limit** (`integer`, optional) The maximum number of spreadsheets to list. Defaults to 10. Max is 50 - **pagination_token** (`string`, optional) The pagination token to continue a previous request @@ -232,10 +233,10 @@ Searches for spreadsheets in the user's Google Drive based on the titles and con label: "Call the Tool Directly", content: { Python: [ - "/examples/integrations/toolkits/google_sheets/who_am_i_example_call_tool.py", + "/examples/integrations/mcp-servers/google_sheets/who_am_i_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/google_sheets/who_am_i_example_call_tool.js", + "/examples/integrations/mcp-servers/google_sheets/who_am_i_example_call_tool.js", ], }, }, @@ -257,10 +258,10 @@ This tool does not take any parameters. label: "Call the Tool Directly", content: { Python: [ - "/examples/integrations/toolkits/google_sheets/generate_google_file_picker_url_example_call_tool.py", + "/examples/integrations/mcp-servers/google_sheets/generate_google_file_picker_url_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/google_sheets/generate_google_file_picker_url_example_call_tool.js", + "/examples/integrations/mcp-servers/google_sheets/generate_google_file_picker_url_example_call_tool.js", ], }, }, @@ -282,10 +283,10 @@ This tool does not take any parameters. label: "Call the Tool Directly", content: { Python: [ - "/examples/integrations/toolkits/google_sheets/get_spreadsheet_example_call_tool.py", + "/examples/integrations/mcp-servers/google_sheets/get_spreadsheet_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/google_sheets/get_spreadsheet_example_call_tool.js", + "/examples/integrations/mcp-servers/google_sheets/get_spreadsheet_example_call_tool.js", ], }, }, @@ -313,10 +314,10 @@ Gets the specified range of cells from a single sheet in the spreadsheet. label: "Call the Tool Directly", content: { Python: [ - "/examples/integrations/toolkits/google_sheets/get_spreadsheet_metadata_example_call_tool.py", + "/examples/integrations/mcp-servers/google_sheets/get_spreadsheet_metadata_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/google_sheets/get_spreadsheet_metadata_example_call_tool.js", + "/examples/integrations/mcp-servers/google_sheets/get_spreadsheet_metadata_example_call_tool.js", ], }, }, @@ -331,6 +332,6 @@ Gets the metadata for a spreadsheet including the metadata for the sheets in the ## Auth -The Arcade GoogleSheets toolkit uses the [Google auth provider](/home/auth-providers/google) to connect to users' GoogleSheets accounts. Please refer to the [Google auth provider](/home/auth-providers/google) documentation to learn how to configure auth. +The Arcade GoogleSheets MCP Sever uses the [Google auth provider](/home/auth-providers/google) to connect to users' GoogleSheets accounts. Please refer to the [Google auth provider](/home/auth-providers/google) documentation to learn how to configure auth. diff --git a/app/en/toolkits/productivity/google-sheets/reference/page.mdx b/app/en/mcp-servers/productivity/google-sheets/reference/page.mdx similarity index 97% rename from app/en/toolkits/productivity/google-sheets/reference/page.mdx rename to app/en/mcp-servers/productivity/google-sheets/reference/page.mdx index 6d1e90f84..a14c73d4f 100644 --- a/app/en/toolkits/productivity/google-sheets/reference/page.mdx +++ b/app/en/mcp-servers/productivity/google-sheets/reference/page.mdx @@ -1,6 +1,6 @@ # GoogleSheets Reference -Below is a reference of enumerations used by some tools in the GoogleSheets toolkit: +Below is a reference of enumerations used by some tools in the GoogleSheets MCP Server: ## OrderBy diff --git a/app/en/toolkits/productivity/google-slides/page.mdx b/app/en/mcp-servers/productivity/google-slides/page.mdx similarity index 78% rename from app/en/toolkits/productivity/google-slides/page.mdx rename to app/en/mcp-servers/productivity/google-slides/page.mdx index 0f581b3ae..8bcab7625 100644 --- a/app/en/toolkits/productivity/google-slides/page.mdx +++ b/app/en/mcp-servers/productivity/google-slides/page.mdx @@ -16,7 +16,7 @@ import { Callout } from "nextra/components"; -The GoogleSlides toolkit provides a set of tools for interacting with Google Slides presentations. These tools enable users and AI applications to: +The GoogleSlides MCP Server provides a set of tools for interacting with Google Slides presentations. These tools enable users and AI applications to: - Create new presentations and add slides. - Comment on specific slides and list all comments in a presentation. @@ -66,7 +66,7 @@ The GoogleSlides toolkit provides a set of tools for interacting with Google Sli 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-toolkit). + tools](/home/build-tools/create-a-mcp-server). ## GoogleSlides.CommentOnPresentation @@ -78,10 +78,10 @@ The GoogleSlides toolkit provides a set of tools for interacting with Google Sli label: "Call the Tool Directly", content: { Python: [ - "/examples/integrations/toolkits/google/slides/comment_on_presentation_example_call_tool.py", + "/examples/integrations/mcp-servers/google/slides/comment_on_presentation_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/google/slides/comment_on_presentation_example_call_tool.js", + "/examples/integrations/mcp-servers/google/slides/comment_on_presentation_example_call_tool.js", ], }, }, @@ -104,10 +104,10 @@ Comment on a specific slide by its index in a Google Slides presentation. label: "Call the Tool Directly", content: { Python: [ - "/examples/integrations/toolkits/google/slides/list_presentation_comments_example_call_tool.py", + "/examples/integrations/mcp-servers/google/slides/list_presentation_comments_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/google/slides/list_presentation_comments_example_call_tool.js", + "/examples/integrations/mcp-servers/google/slides/list_presentation_comments_example_call_tool.js", ], }, }, @@ -130,10 +130,10 @@ List all comments on the specified Google Slides presentation. label: "Call the Tool Directly", content: { Python: [ - "/examples/integrations/toolkits/google/slides/create_presentation_example_call_tool.py", + "/examples/integrations/mcp-servers/google/slides/create_presentation_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/google/slides/create_presentation_example_call_tool.js", + "/examples/integrations/mcp-servers/google/slides/create_presentation_example_call_tool.js", ], }, }, @@ -156,10 +156,10 @@ Create a new Google Slides presentation label: "Call the Tool Directly", content: { Python: [ - "/examples/integrations/toolkits/google/slides/create_slide_example_call_tool.py", + "/examples/integrations/mcp-servers/google/slides/create_slide_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/google/slides/create_slide_example_call_tool.js", + "/examples/integrations/mcp-servers/google/slides/create_slide_example_call_tool.js", ], }, }, @@ -183,10 +183,10 @@ Create a new slide at the end of the specified presentation label: "Call the Tool Directly", content: { Python: [ - "/examples/integrations/toolkits/google/slides/search_presentations_example_call_tool.py", + "/examples/integrations/mcp-servers/google/slides/search_presentations_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/google/slides/search_presentations_example_call_tool.js", + "/examples/integrations/mcp-servers/google/slides/search_presentations_example_call_tool.js", ], }, }, @@ -215,10 +215,10 @@ Searches for presentations in the user's Google Drive. label: "Call the Tool Directly", content: { Python: [ - "/examples/integrations/toolkits/google/slides/who_am_i_example_call_tool.py", + "/examples/integrations/mcp-servers/google/slides/who_am_i_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/google/slides/who_am_i_example_call_tool.js", + "/examples/integrations/mcp-servers/google/slides/who_am_i_example_call_tool.js", ], }, }, @@ -240,10 +240,10 @@ This tool does not take any parameters. label: "Call the Tool Directly", content: { Python: [ - "/examples/integrations/toolkits/google/slides/generate_google_file_picker_url_example_call_tool.py", + "/examples/integrations/mcp-servers/google/slides/generate_google_file_picker_url_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/google/slides/generate_google_file_picker_url_example_call_tool.js", + "/examples/integrations/mcp-servers/google/slides/generate_google_file_picker_url_example_call_tool.js", ], }, }, @@ -265,10 +265,10 @@ This tool does not take any parameters. label: "Call the Tool Directly", content: { Python: [ - "/examples/integrations/toolkits/google/slides/get_presentation_as_markdown_example_call_tool.py", + "/examples/integrations/mcp-servers/google/slides/get_presentation_as_markdown_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/google/slides/get_presentation_as_markdown_example_call_tool.js", + "/examples/integrations/mcp-servers/google/slides/get_presentation_as_markdown_example_call_tool.js", ], }, }, @@ -283,11 +283,11 @@ Get the specified Google Slides presentation and convert it to markdown. ## Auth -The Arcade GoogleSlides toolkit uses the [Google auth provider](/home/auth-providers/google) to connect to users' GoogleSlides accounts. Please refer to the [Google auth provider](/home/auth-providers/google) documentation to learn how to configure auth. +The Arcade GoogleSlides MCP Sever uses the [Google auth provider](/home/auth-providers/google) to connect to users' GoogleSlides accounts. Please refer to the [Google auth provider](/home/auth-providers/google) documentation to learn how to configure auth. ## GoogleSlides Reference -Below is a reference of enumerations used by some tools in the GoogleSlides toolkit: +Below is a reference of enumerations used by some tools in the GoogleSlides MCP Sever: ### OrderBy diff --git a/app/en/toolkits/productivity/jira/_meta.tsx b/app/en/mcp-servers/productivity/jira/_meta.tsx similarity index 100% rename from app/en/toolkits/productivity/jira/_meta.tsx rename to app/en/mcp-servers/productivity/jira/_meta.tsx diff --git a/app/en/toolkits/productivity/jira/environment-variables/page.mdx b/app/en/mcp-servers/productivity/jira/environment-variables/page.mdx similarity index 85% rename from app/en/toolkits/productivity/jira/environment-variables/page.mdx rename to app/en/mcp-servers/productivity/jira/environment-variables/page.mdx index 5294de603..a392025af 100644 --- a/app/en/toolkits/productivity/jira/environment-variables/page.mdx +++ b/app/en/mcp-servers/productivity/jira/environment-variables/page.mdx @@ -26,7 +26,7 @@ The value must be a numeric string with an integer greater than or equal to 1. The caching strategy does not involve caching Jira API responses that go into tool output, but only internal values. -The Arcade Jira toolkit will cache some values that are repeatedly used in tool execution to enable better performance. This environment variable controls the maximum number of items to hold in each cache. +The Arcade Jira MCP Server will cache some values that are repeatedly used in tool execution to enable better performance. This environment variable controls the maximum number of items to hold in each cache. The value must be a numeric string with an integer greater than or equal to 1. diff --git a/app/en/toolkits/productivity/jira/page.mdx b/app/en/mcp-servers/productivity/jira/page.mdx similarity index 76% rename from app/en/toolkits/productivity/jira/page.mdx rename to app/en/mcp-servers/productivity/jira/page.mdx index 73f610ee4..d93a619da 100644 --- a/app/en/toolkits/productivity/jira/page.mdx +++ b/app/en/mcp-servers/productivity/jira/page.mdx @@ -1,6 +1,7 @@ --- asIndexPage: true --- + # Jira import ToolInfo from "@/app/_components/tool-info"; @@ -19,7 +20,7 @@ import { Callout } from "nextra/components"; -The Jira toolkit provides a comprehensive set of tools for interacting with Jira, enabling users and AI applications to efficiently manage issues and projects. With this toolkit, you can: +The Jira MCP Server provides a comprehensive set of tools for interacting with Jira, enabling users and AI applications to efficiently manage issues and projects. With this MCP Sever, you can: - Create, update, and search for Jira issues using various parameters. - Retrieve detailed information about issues, projects, users, and issue types. @@ -28,12 +29,15 @@ The Jira toolkit provides a comprehensive set of tools for interacting with Jira - Browse and list available projects, priorities, and users within Jira. - Browse and list information of available boards and sprints within a Jira cloud. -This toolkit streamlines the process of issue management, making it easier to integrate Jira functionalities into applications and workflows. +This MCP Sever streamlines the process of issue management, making it easier to integrate Jira functionalities into applications and workflows. -

Handling multiple Atlassian Clouds

-A Jira user may have multiple Atlassian Clouds authorized via the same OAuth grant. In such cases, the Jira tools must be called with the `atlassian_cloud_id` argument. The [`Jira.GetAvailableAtlassianClouds`](/toolkits/productivity/jira#jiragetavailableatlassianclouds) tool can be used to get the available Atlassian Clouds and their IDs. +

+ Handling multiple Atlassian Clouds +

+ +A Jira user may have multiple Atlassian Clouds authorized via the same OAuth grant. In such cases, the Jira tools must be called with the `atlassian_cloud_id` argument. The [`Jira.GetAvailableAtlassianClouds`](/mcp-servers/productivity/jira#jiragetavailableatlassianclouds) tool can be used to get the available Atlassian Clouds and their IDs. When a tool call does not receive a value for `atlassian_cloud_id` and the user only has a single Atlassian Cloud authorized, the tool will use that. Otherwise, an error will be raised. The error will contain an additional content listing the available Atlassian Clouds and their IDs. @@ -45,6 +49,7 @@ When the user selects an Atlassian Cloud, it may be appropriate to keep this inf 1. Make it clear to the chat's end user which Atlassian Cloud is being used at any moment, to avoid, for example, having a Jira Issue being created in the wrong Atlassian Cloud; 1. Appropriately instruct the LLM and keep the relevant information in its context window, enabling it to correctly call the Jira tools, **especially in multi-turn conversations**. +
## Available Tools @@ -52,57 +57,128 @@ When the user selects an Atlassian Cloud, it may be appropriate to keep this inf 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-toolkit). + tools](/home/build-tools/create-a-mcp-server). ## Jira.ListIssueTypesByProject @@ -114,10 +190,10 @@ When the user selects an Atlassian Cloud, it may be appropriate to keep this inf label: "Call the Tool Directly", content: { Python: [ - "/examples/integrations/toolkits/jira/list_issue_types_by_project_example_call_tool.py", + "/examples/integrations/mcp-servers/jira/list_issue_types_by_project_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/jira/list_issue_types_by_project_example_call_tool.js", + "/examples/integrations/mcp-servers/jira/list_issue_types_by_project_example_call_tool.js", ], }, }, @@ -142,10 +218,10 @@ Get the list of issue types (e.g. 'Task', 'Epic', etc.) available to a given pro label: "Call the Tool Directly", content: { Python: [ - "/examples/integrations/toolkits/jira/get_issue_type_by_id_example_call_tool.py", + "/examples/integrations/mcp-servers/jira/get_issue_type_by_id_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/jira/get_issue_type_by_id_example_call_tool.js", + "/examples/integrations/mcp-servers/jira/get_issue_type_by_id_example_call_tool.js", ], }, }, @@ -168,10 +244,10 @@ Get the details of a Jira issue type by its ID. label: "Call the Tool Directly", content: { Python: [ - "/examples/integrations/toolkits/jira/get_issue_by_id_example_call_tool.py", + "/examples/integrations/mcp-servers/jira/get_issue_by_id_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/jira/get_issue_by_id_example_call_tool.js", + "/examples/integrations/mcp-servers/jira/get_issue_by_id_example_call_tool.js", ], }, }, @@ -194,10 +270,10 @@ Get the details of a Jira issue by its ID. label: "Call the Tool Directly", content: { Python: [ - "/examples/integrations/toolkits/jira/get_issues_without_id_example_call_tool.py", + "/examples/integrations/mcp-servers/jira/get_issues_without_id_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/jira/get_issues_without_id_example_call_tool.js", + "/examples/integrations/mcp-servers/jira/get_issues_without_id_example_call_tool.js", ], }, }, @@ -231,10 +307,10 @@ Search for Jira issues when you don't have the issue ID(s). label: "Call the Tool Directly", content: { Python: [ - "/examples/integrations/toolkits/jira/list_issues_example_call_tool.py", + "/examples/integrations/mcp-servers/jira/list_issues_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/jira/list_issues_example_call_tool.js", + "/examples/integrations/mcp-servers/jira/list_issues_example_call_tool.js", ], }, }, @@ -259,10 +335,10 @@ Get the issues for a given project. label: "Call the Tool Directly", content: { Python: [ - "/examples/integrations/toolkits/jira/search_issues_without_jql_example_call_tool.py", + "/examples/integrations/mcp-servers/jira/search_issues_without_jql_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/jira/search_issues_without_jql_example_call_tool.js", + "/examples/integrations/mcp-servers/jira/search_issues_without_jql_example_call_tool.js", ], }, }, @@ -296,10 +372,10 @@ Parameterized search for Jira issues (without having to provide a JQL query). label: "Call the Tool Directly", content: { Python: [ - "/examples/integrations/toolkits/jira/search_issues_with_jql_example_call_tool.py", + "/examples/integrations/mcp-servers/jira/search_issues_with_jql_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/jira/search_issues_with_jql_example_call_tool.js", + "/examples/integrations/mcp-servers/jira/search_issues_with_jql_example_call_tool.js", ], }, }, @@ -324,10 +400,10 @@ Search for Jira issues using a JQL (Jira Query Language) query. label: "Call the Tool Directly", content: { Python: [ - "/examples/integrations/toolkits/jira/create_issue_example_call_tool.py", + "/examples/integrations/mcp-servers/jira/create_issue_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/jira/create_issue_example_call_tool.js", + "/examples/integrations/mcp-servers/jira/create_issue_example_call_tool.js", ], }, }, @@ -360,10 +436,10 @@ Create a new Jira issue. label: "Call the Tool Directly", content: { Python: [ - "/examples/integrations/toolkits/jira/add_labels_to_issue_example_call_tool.py", + "/examples/integrations/mcp-servers/jira/add_labels_to_issue_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/jira/add_labels_to_issue_example_call_tool.js", + "/examples/integrations/mcp-servers/jira/add_labels_to_issue_example_call_tool.js", ], }, }, @@ -388,10 +464,10 @@ Add labels to an existing Jira issue. label: "Call the Tool Directly", content: { Python: [ - "/examples/integrations/toolkits/jira/remove_labels_from_issue_example_call_tool.py", + "/examples/integrations/mcp-servers/jira/remove_labels_from_issue_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/jira/remove_labels_from_issue_example_call_tool.js", + "/examples/integrations/mcp-servers/jira/remove_labels_from_issue_example_call_tool.js", ], }, }, @@ -416,10 +492,10 @@ Remove labels from an existing Jira issue. label: "Call the Tool Directly", content: { Python: [ - "/examples/integrations/toolkits/jira/update_issue_example_call_tool.py", + "/examples/integrations/mcp-servers/jira/update_issue_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/jira/update_issue_example_call_tool.js", + "/examples/integrations/mcp-servers/jira/update_issue_example_call_tool.js", ], }, }, @@ -453,10 +529,10 @@ Update an existing Jira issue. label: "Call the Tool Directly", content: { Python: [ - "/examples/integrations/toolkits/jira/list_sprints_for_boards_example_call_tool.py", + "/examples/integrations/mcp-servers/jira/list_sprints_for_boards_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/jira/list_sprints_for_boards_example_call_tool.js", + "/examples/integrations/mcp-servers/jira/list_sprints_for_boards_example_call_tool.js", ], }, }, @@ -470,7 +546,7 @@ Retrieve sprints from Jira boards with filtering options for planning and tracki - **board_identifiers_list** (`array[string]`, optional) List of board names or numeric IDs (as strings) to retrieve sprints from. Include all mentioned boards in a single list for best performance. Maximum 25 boards per operation. Optional, defaults to None. - **max_sprints_per_board** (`integer`, optional) Maximum sprints per board (1-50). Latest sprints first. Optional, defaults to 50. - **offset** (`integer`, optional) Number of sprints to skip per board for pagination. Optional, defaults to 0. -- **state** (`Enum` [SprintState](/toolkits/productivity/jira/reference#SprintState), optional) Filter by sprint state. NOTE: Date filters (start_date, end_date, specific_date) have higher priority than state filtering. Use state filtering only when no date criteria is specified. For temporal queries like 'last month' or 'next week', use date parameters instead. Optional, defaults to None (all states). +- **state** (`Enum` [SprintState](/mcp-servers/productivity/jira/reference#SprintState), optional) Filter by sprint state. NOTE: Date filters (start_date, end_date, specific_date) have higher priority than state filtering. Use state filtering only when no date criteria is specified. For temporal queries like 'last month' or 'next week', use date parameters instead. Optional, defaults to None (all states). - **start_date** (`string`, optional) Start date filter in YYYY-MM-DD format. Can combine with end_date. Optional, defaults to None. - **end_date** (`string`, optional) End date filter in YYYY-MM-DD format. Can combine with start_date. Optional, defaults to None. - **specific_date** (`string`, optional) Specific date in YYYY-MM-DD to find sprints active on that date. Cannot combine with start_date/end_date. Optional, defaults to None. @@ -485,10 +561,10 @@ Retrieve sprints from Jira boards with filtering options for planning and tracki label: "Call the Tool Directly", content: { Python: [ - "/examples/integrations/toolkits/jira/get_sprint_issues_example_call_tool.py", + "/examples/integrations/mcp-servers/jira/get_sprint_issues_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/jira/get_sprint_issues_example_call_tool.js", + "/examples/integrations/mcp-servers/jira/get_sprint_issues_example_call_tool.js", ], }, }, @@ -513,10 +589,10 @@ Get all issues that are currently assigned to a specific sprint with pagination label: "Call the Tool Directly", content: { Python: [ - "/examples/integrations/toolkits/jira/add_issues_to_sprint_example_call_tool.py", + "/examples/integrations/mcp-servers/jira/add_issues_to_sprint_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/jira/add_issues_to_sprint_example_call_tool.js", + "/examples/integrations/mcp-servers/jira/add_issues_to_sprint_example_call_tool.js", ], }, }, @@ -540,10 +616,10 @@ Add a list of issues to a sprint. label: "Call the Tool Directly", content: { Python: [ - "/examples/integrations/toolkits/jira/move_issues_from_sprint_to_backlog_example_call_tool.py", + "/examples/integrations/mcp-servers/jira/move_issues_from_sprint_to_backlog_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/jira/move_issues_from_sprint_to_backlog_example_call_tool.js", + "/examples/integrations/mcp-servers/jira/move_issues_from_sprint_to_backlog_example_call_tool.js", ], }, }, @@ -558,8 +634,6 @@ Move issues from active or future sprints back to the board's backlog. - **issue_identifiers** (`array[string]`, required) List of issue IDs or keys to move from the sprint to the backlog. Maximum 50 issues per call. Issues will be moved back to the board's backlog. - **atlassian_cloud_id** (`string`, optional) The ID of the Atlassian Cloud to use (defaults to None). If not provided and the user has a single cloud authorized, the tool will use that. Otherwise, an error will be raised. - - ## Jira.ListLabels
@@ -569,10 +643,10 @@ Move issues from active or future sprints back to the board's backlog. label: "Call the Tool Directly", content: { Python: [ - "/examples/integrations/toolkits/jira/list_labels_example_call_tool.py", + "/examples/integrations/mcp-servers/jira/list_labels_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/jira/list_labels_example_call_tool.js", + "/examples/integrations/mcp-servers/jira/list_labels_example_call_tool.js", ], }, }, @@ -596,10 +670,10 @@ Get the existing labels (tags) in the user's Jira instance. label: "Call the Tool Directly", content: { Python: [ - "/examples/integrations/toolkits/jira/list_users_example_call_tool.py", + "/examples/integrations/mcp-servers/jira/list_users_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/jira/list_users_example_call_tool.js", + "/examples/integrations/mcp-servers/jira/list_users_example_call_tool.js", ], }, }, @@ -624,10 +698,10 @@ Browse users in Jira. label: "Call the Tool Directly", content: { Python: [ - "/examples/integrations/toolkits/jira/get_user_by_id_example_call_tool.py", + "/examples/integrations/mcp-servers/jira/get_user_by_id_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/jira/get_user_by_id_example_call_tool.js", + "/examples/integrations/mcp-servers/jira/get_user_by_id_example_call_tool.js", ], }, }, @@ -650,10 +724,10 @@ Get user information by their ID. label: "Call the Tool Directly", content: { Python: [ - "/examples/integrations/toolkits/jira/get_users_without_id_example_call_tool.py", + "/examples/integrations/mcp-servers/jira/get_users_without_id_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/jira/get_users_without_id_example_call_tool.js", + "/examples/integrations/mcp-servers/jira/get_users_without_id_example_call_tool.js", ], }, }, @@ -679,10 +753,10 @@ Get users without their account ID, searching by display name and email address. label: "Call the Tool Directly", content: { Python: [ - "/examples/integrations/toolkits/jira/get_available_atlassian_clouds_example_call_tool.py", + "/examples/integrations/mcp-servers/jira/get_available_atlassian_clouds_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/jira/get_available_atlassian_clouds_example_call_tool.js", + "/examples/integrations/mcp-servers/jira/get_available_atlassian_clouds_example_call_tool.js", ], }, }, @@ -704,10 +778,10 @@ This tool does not take any parameters. label: "Call the Tool Directly", content: { Python: [ - "/examples/integrations/toolkits/jira/attach_file_to_issue_example_call_tool.py", + "/examples/integrations/mcp-servers/jira/attach_file_to_issue_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/jira/attach_file_to_issue_example_call_tool.js", + "/examples/integrations/mcp-servers/jira/attach_file_to_issue_example_call_tool.js", ], }, }, @@ -735,10 +809,10 @@ Add an attachment to an issue. label: "Call the Tool Directly", content: { Python: [ - "/examples/integrations/toolkits/jira/list_issue_attachments_metadata_example_call_tool.py", + "/examples/integrations/mcp-servers/jira/list_issue_attachments_metadata_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/jira/list_issue_attachments_metadata_example_call_tool.js", + "/examples/integrations/mcp-servers/jira/list_issue_attachments_metadata_example_call_tool.js", ], }, }, @@ -761,10 +835,10 @@ Get the metadata about the files attached to an issue. label: "Call the Tool Directly", content: { Python: [ - "/examples/integrations/toolkits/jira/get_attachment_metadata_example_call_tool.py", + "/examples/integrations/mcp-servers/jira/get_attachment_metadata_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/jira/get_attachment_metadata_example_call_tool.js", + "/examples/integrations/mcp-servers/jira/get_attachment_metadata_example_call_tool.js", ], }, }, @@ -787,10 +861,10 @@ Get the metadata of an attachment. label: "Call the Tool Directly", content: { Python: [ - "/examples/integrations/toolkits/jira/download_attachment_example_call_tool.py", + "/examples/integrations/mcp-servers/jira/download_attachment_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/jira/download_attachment_example_call_tool.js", + "/examples/integrations/mcp-servers/jira/download_attachment_example_call_tool.js", ], }, }, @@ -813,10 +887,10 @@ Download the contents of an attachment associated with an issue. label: "Call the Tool Directly", content: { Python: [ - "/examples/integrations/toolkits/jira/get_transition_by_id_example_call_tool.py", + "/examples/integrations/mcp-servers/jira/get_transition_by_id_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/jira/get_transition_by_id_example_call_tool.js", + "/examples/integrations/mcp-servers/jira/get_transition_by_id_example_call_tool.js", ], }, }, @@ -840,10 +914,10 @@ Get a transition by its ID. label: "Call the Tool Directly", content: { Python: [ - "/examples/integrations/toolkits/jira/get_transitions_available_for_issue_example_call_tool.py", + "/examples/integrations/mcp-servers/jira/get_transitions_available_for_issue_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/jira/get_transitions_available_for_issue_example_call_tool.js", + "/examples/integrations/mcp-servers/jira/get_transitions_available_for_issue_example_call_tool.js", ], }, }, @@ -866,10 +940,10 @@ Get the transitions available for an existing Jira issue. label: "Call the Tool Directly", content: { Python: [ - "/examples/integrations/toolkits/jira/get_transition_by_status_name_example_call_tool.py", + "/examples/integrations/mcp-servers/jira/get_transition_by_status_name_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/jira/get_transition_by_status_name_example_call_tool.js", + "/examples/integrations/mcp-servers/jira/get_transition_by_status_name_example_call_tool.js", ], }, }, @@ -893,10 +967,10 @@ Get a transition available for an issue by the transition name. label: "Call the Tool Directly", content: { Python: [ - "/examples/integrations/toolkits/jira/transition_issue_to_new_status_example_call_tool.py", + "/examples/integrations/mcp-servers/jira/transition_issue_to_new_status_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/jira/transition_issue_to_new_status_example_call_tool.js", + "/examples/integrations/mcp-servers/jira/transition_issue_to_new_status_example_call_tool.js", ], }, }, @@ -920,10 +994,10 @@ Transition a Jira issue to a new status. label: "Call the Tool Directly", content: { Python: [ - "/examples/integrations/toolkits/jira/who_am_i_example_call_tool.py", + "/examples/integrations/mcp-servers/jira/who_am_i_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/jira/who_am_i_example_call_tool.js", + "/examples/integrations/mcp-servers/jira/who_am_i_example_call_tool.js", ], }, }, @@ -936,7 +1010,6 @@ Fetches the current user's profile information. This tool does not take any parameters. - ## Jira.ListProjects
@@ -946,10 +1019,10 @@ This tool does not take any parameters. label: "Call the Tool Directly", content: { Python: [ - "/examples/integrations/toolkits/jira/list_projects_example_call_tool.py", + "/examples/integrations/mcp-servers/jira/list_projects_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/jira/list_projects_example_call_tool.js", + "/examples/integrations/mcp-servers/jira/list_projects_example_call_tool.js", ], }, }, @@ -973,10 +1046,10 @@ Browse projects available in Jira. label: "Call the Tool Directly", content: { Python: [ - "/examples/integrations/toolkits/jira/search_projects_example_call_tool.py", + "/examples/integrations/mcp-servers/jira/search_projects_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/jira/search_projects_example_call_tool.js", + "/examples/integrations/mcp-servers/jira/search_projects_example_call_tool.js", ], }, }, @@ -1001,10 +1074,10 @@ Get the details of all Jira projects. label: "Call the Tool Directly", content: { Python: [ - "/examples/integrations/toolkits/jira/get_project_by_id_example_call_tool.py", + "/examples/integrations/mcp-servers/jira/get_project_by_id_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/jira/get_project_by_id_example_call_tool.js", + "/examples/integrations/mcp-servers/jira/get_project_by_id_example_call_tool.js", ], }, }, @@ -1027,10 +1100,10 @@ Get the details of a Jira project by its ID or key. label: "Call the Tool Directly", content: { Python: [ - "/examples/integrations/toolkits/jira/get_boards_example_call_tool.py", + "/examples/integrations/mcp-servers/jira/get_boards_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/jira/get_boards_example_call_tool.js", + "/examples/integrations/mcp-servers/jira/get_boards_example_call_tool.js", ], }, }, @@ -1055,10 +1128,10 @@ Retrieve Jira boards either by specifying their names or IDs, or get all label: "Call the Tool Directly", content: { Python: [ - "/examples/integrations/toolkits/jira/get_board_backlog_issues_example_call_tool.py", + "/examples/integrations/mcp-servers/jira/get_board_backlog_issues_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/jira/get_board_backlog_issues_example_call_tool.js", + "/examples/integrations/mcp-servers/jira/get_board_backlog_issues_example_call_tool.js", ], }, }, @@ -1074,8 +1147,6 @@ Get all issues in a board's backlog with pagination support. - **offset** (`integer`, optional) The number of issues to skip before starting to return results. Used for pagination when the backlog has many issues. For example, offset=50 with limit=50 would return issues 51-100. Must be 0 or greater. Defaults to 0. - **atlassian_cloud_id** (`string`, optional) The ID of the Atlassian Cloud to use (defaults to None). If not provided and the user has a single cloud authorized, the tool will use that. Otherwise, an error will be raised. - - ## Jira.GetPriorityById
@@ -1085,10 +1156,10 @@ Get all issues in a board's backlog with pagination support. label: "Call the Tool Directly", content: { Python: [ - "/examples/integrations/toolkits/jira/get_priority_by_id_example_call_tool.py", + "/examples/integrations/mcp-servers/jira/get_priority_by_id_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/jira/get_priority_by_id_example_call_tool.js", + "/examples/integrations/mcp-servers/jira/get_priority_by_id_example_call_tool.js", ], }, }, @@ -1111,10 +1182,10 @@ Get the details of a priority by its ID. label: "Call the Tool Directly", content: { Python: [ - "/examples/integrations/toolkits/jira/list_priority_schemes_example_call_tool.py", + "/examples/integrations/mcp-servers/jira/list_priority_schemes_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/jira/list_priority_schemes_example_call_tool.js", + "/examples/integrations/mcp-servers/jira/list_priority_schemes_example_call_tool.js", ], }, }, @@ -1128,7 +1199,7 @@ Browse the priority schemes available in Jira. - **scheme_name** (`string`, optional) Filter by scheme name. Defaults to None (returns all scheme names). - **limit** (`integer`, optional) The maximum number of priority schemes to return. Min of 1, max of 50. Defaults to 50. - **offset** (`integer`, optional) The number of priority schemes to skip. Defaults to 0 (start from the first scheme). -- **order_by** (`Enum` [PrioritySchemeOrderBy](/toolkits/productivity/jira/reference#PrioritySchemeOrderBy), optional) The order in which to return the priority schemes. Defaults to name ascending. +- **order_by** (`Enum` [PrioritySchemeOrderBy](/mcp-servers/productivity/jira/reference#PrioritySchemeOrderBy), optional) The order in which to return the priority schemes. Defaults to name ascending. - **atlassian_cloud_id** (`string`, optional) The ID of the Atlassian Cloud to use (defaults to None). If not provided and the user has a single cloud authorized, the tool will use that. Otherwise, an error will be raised. ## Jira.ListPrioritiesAssociatedWithAPriorityScheme @@ -1140,10 +1211,10 @@ Browse the priority schemes available in Jira. label: "Call the Tool Directly", content: { Python: [ - "/examples/integrations/toolkits/jira/list_priorities_associated_with_a_priority_scheme_example_call_tool.py", + "/examples/integrations/mcp-servers/jira/list_priorities_associated_with_a_priority_scheme_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/jira/list_priorities_associated_with_a_priority_scheme_example_call_tool.js", + "/examples/integrations/mcp-servers/jira/list_priorities_associated_with_a_priority_scheme_example_call_tool.js", ], }, }, @@ -1168,10 +1239,10 @@ Browse the priorities associated with a priority scheme. label: "Call the Tool Directly", content: { Python: [ - "/examples/integrations/toolkits/jira/list_projects_associated_with_a_priority_scheme_example_call_tool.py", + "/examples/integrations/mcp-servers/jira/list_projects_associated_with_a_priority_scheme_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/jira/list_projects_associated_with_a_priority_scheme_example_call_tool.js", + "/examples/integrations/mcp-servers/jira/list_projects_associated_with_a_priority_scheme_example_call_tool.js", ], }, }, @@ -1197,10 +1268,10 @@ Browse the projects associated with a priority scheme. label: "Call the Tool Directly", content: { Python: [ - "/examples/integrations/toolkits/jira/list_priorities_available_to_a_project_example_call_tool.py", + "/examples/integrations/mcp-servers/jira/list_priorities_available_to_a_project_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/jira/list_priorities_available_to_a_project_example_call_tool.js", + "/examples/integrations/mcp-servers/jira/list_priorities_available_to_a_project_example_call_tool.js", ], }, }, @@ -1223,10 +1294,10 @@ Browse the priorities available to be used in issues in the specified Jira proje label: "Call the Tool Directly", content: { Python: [ - "/examples/integrations/toolkits/jira/list_priorities_available_to_an_issue_example_call_tool.py", + "/examples/integrations/mcp-servers/jira/list_priorities_available_to_an_issue_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/jira/list_priorities_available_to_an_issue_example_call_tool.js", + "/examples/integrations/mcp-servers/jira/list_priorities_available_to_an_issue_example_call_tool.js", ], }, }, @@ -1249,10 +1320,10 @@ Browse the priorities available to be used in the specified Jira issue. label: "Call the Tool Directly", content: { Python: [ - "/examples/integrations/toolkits/jira/get_comment_by_id_example_call_tool.py", + "/examples/integrations/mcp-servers/jira/get_comment_by_id_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/jira/get_comment_by_id_example_call_tool.js", + "/examples/integrations/mcp-servers/jira/get_comment_by_id_example_call_tool.js", ], }, }, @@ -1277,10 +1348,10 @@ Get a comment by its ID. label: "Call the Tool Directly", content: { Python: [ - "/examples/integrations/toolkits/jira/get_issue_comments_example_call_tool.py", + "/examples/integrations/mcp-servers/jira/get_issue_comments_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/jira/get_issue_comments_example_call_tool.js", + "/examples/integrations/mcp-servers/jira/get_issue_comments_example_call_tool.js", ], }, }, @@ -1294,7 +1365,7 @@ Get the comments of a Jira issue by its ID. - **issue** (`string`, required) The ID or key of the issue to retrieve - **limit** (`integer`, optional) The maximum number of comments to retrieve. Min 1, max 100, default 100. - **offset** (`integer`, optional) The number of comments to skip. Defaults to 0 (start from the first comment). -- **order_by** (`Enum` [IssueCommentOrderBy](/toolkits/productivity/jira/reference#IssueCommentOrderBy), optional) The order in which to return the comments. Defaults to 'created_date_descending' (most recent first). +- **order_by** (`Enum` [IssueCommentOrderBy](/mcp-servers/productivity/jira/reference#IssueCommentOrderBy), optional) The order in which to return the comments. Defaults to 'created_date_descending' (most recent first). - **include_adf_content** (`boolean`, optional) Whether to include the ADF (Atlassian Document Format) content of the comment in the response. Defaults to False (return only the HTML rendered content). - **atlassian_cloud_id** (`string`, optional) The ID of the Atlassian Cloud to use (defaults to None). If not provided and the user has a single cloud authorized, the tool will use that. Otherwise, an error will be raised. @@ -1307,10 +1378,10 @@ Get the comments of a Jira issue by its ID. label: "Call the Tool Directly", content: { Python: [ - "/examples/integrations/toolkits/jira/add_comment_to_issue_example_call_tool.py", + "/examples/integrations/mcp-servers/jira/add_comment_to_issue_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/jira/add_comment_to_issue_example_call_tool.js", + "/examples/integrations/mcp-servers/jira/add_comment_to_issue_example_call_tool.js", ], }, }, @@ -1329,6 +1400,6 @@ Add a comment to a Jira issue. ## Auth -The Arcade Jira toolkit uses the [Atlassian auth provider](/home/auth-providers/atlassian) to connect to users' Jira accounts. Please refer to the [Atlassian auth provider](/home/auth-providers/atlassian) documentation to learn how to configure auth. +The Arcade Jira MCP Sever uses the [Atlassian auth provider](/home/auth-providers/atlassian) to connect to users' Jira accounts. Please refer to the [Atlassian auth provider](/home/auth-providers/atlassian) documentation to learn how to configure auth. diff --git a/app/en/toolkits/productivity/jira/reference/page.mdx b/app/en/mcp-servers/productivity/jira/reference/page.mdx similarity index 97% rename from app/en/toolkits/productivity/jira/reference/page.mdx rename to app/en/mcp-servers/productivity/jira/reference/page.mdx index addebc4fb..e01dea324 100644 --- a/app/en/toolkits/productivity/jira/reference/page.mdx +++ b/app/en/mcp-servers/productivity/jira/reference/page.mdx @@ -1,6 +1,6 @@ # Jira Reference -Below is a reference of enumerations used by some tools in the Jira toolkit: +Below is a reference of enumerations used by some tools in the Jira MCP Server: ## SprintState diff --git a/app/en/toolkits/productivity/linear/page.mdx b/app/en/mcp-servers/productivity/linear/page.mdx similarity index 77% rename from app/en/toolkits/productivity/linear/page.mdx rename to app/en/mcp-servers/productivity/linear/page.mdx index a52656c0b..573eede30 100644 --- a/app/en/toolkits/productivity/linear/page.mdx +++ b/app/en/mcp-servers/productivity/linear/page.mdx @@ -16,12 +16,12 @@ import { Callout } from "nextra/components"; -The Linear toolkit offers a streamlined set of tools for interacting with Linear's issue tracking and team management features. With this toolkit, users can: +The Linear MCP Sever offers a streamlined set of tools for interacting with Linear's issue tracking and team management features. With this MCP Sever, users can: - Retrieve detailed information about a specific issue, including their status, comments, and related dependencies. - Access comprehensive team information, including team members, roles, and settings. -This toolkit is ideal for users looking to read and analyze issue and team data within Linear without making any modifications. +This MCP Sever is ideal for users looking to read and analyze issue and team data within Linear without making any modifications. ## Available Tools @@ -42,7 +42,7 @@ This toolkit is ideal for users looking to read and analyze issue and team data 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-toolkit). + tools](/home/build-tools/create-a-mcp-server). ## Linear.GetIssue @@ -54,10 +54,10 @@ This toolkit is ideal for users looking to read and analyze issue and team data label: "Call the Tool Directly", content: { Python: [ - "/examples/integrations/toolkits/linear/get_issue_example_call_tool.py", + "/examples/integrations/mcp-servers/linear/get_issue_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/linear/get_issue_example_call_tool.js", + "/examples/integrations/mcp-servers/linear/get_issue_example_call_tool.js", ], }, }, @@ -83,10 +83,10 @@ Get detailed information about a specific Linear issue label: "Call the Tool Directly", content: { Python: [ - "/examples/integrations/toolkits/linear/get_teams_example_call_tool.py", + "/examples/integrations/mcp-servers/linear/get_teams_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/linear/get_teams_example_call_tool.js", + "/examples/integrations/mcp-servers/linear/get_teams_example_call_tool.js", ], }, }, @@ -108,6 +108,6 @@ Get Linear teams and team information including team members ## Auth -The Arcade Linear toolkit uses the [Linear auth provider](/home/auth-providers/linear) to connect to users' Linear accounts. Please refer to the [Linear auth provider](/home/auth-providers/linear) documentation to learn how to configure auth. +The Arcade Linear MCP Sever uses the [Linear auth provider](/home/auth-providers/linear) to connect to users' Linear accounts. Please refer to the [Linear auth provider](/home/auth-providers/linear) documentation to learn how to configure auth. diff --git a/app/en/toolkits/productivity/notion/page.mdx b/app/en/mcp-servers/productivity/notion/page.mdx similarity index 71% rename from app/en/toolkits/productivity/notion/page.mdx rename to app/en/mcp-servers/productivity/notion/page.mdx index 739620bde..5410e6e5f 100644 --- a/app/en/toolkits/productivity/notion/page.mdx +++ b/app/en/mcp-servers/productivity/notion/page.mdx @@ -15,9 +15,9 @@ import { Callout } from "nextra/components"; versions={["1.0.1"]} /> - + -The Arcade Notion toolkit provides a pre-built set of tools for interacting with Notion. These tools make it easy to build agents and AI apps that can: +The Arcade Notion MCP Server provides a pre-built set of tools for interacting with Notion. These tools make it easy to build agents and AI apps that can: - Get a page's content - Create a new page @@ -27,7 +27,7 @@ The Arcade Notion toolkit provides a pre-built set of tools for interacting with ## Available tools -These tools are currently available in the Arcade Notion toolkit. +These tools are currently available in the Arcade Notion MCP Sever. 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-toolkit) with the [Notion auth + tools](/home/build-tools/create-a-mcp-server) with the [Notion auth provider](/home/auth-providers/notion). @@ -68,10 +80,10 @@ These tools are currently available in the Arcade Notion toolkit. label: "Call the tool with user authorization", content: { Python: [ - "/examples/integrations/toolkits/notion/get_page_content_by_id_example_call_tool.py", + "/examples/integrations/mcp-servers/notion/get_page_content_by_id_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/notion/get_page_content_by_id_example_call_tool.js", + "/examples/integrations/mcp-servers/notion/get_page_content_by_id_example_call_tool.js", ], }, }, @@ -95,10 +107,10 @@ Get the content of a Notion page as markdown with the page's ID. label: "Call the tool with user authorization", content: { Python: [ - "/examples/integrations/toolkits/notion/get_page_content_by_title_example_call_tool.py", + "/examples/integrations/mcp-servers/notion/get_page_content_by_title_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/notion/get_page_content_by_title_example_call_tool.js", + "/examples/integrations/mcp-servers/notion/get_page_content_by_title_example_call_tool.js", ], }, }, @@ -122,10 +134,10 @@ Get the content of a Notion page as markdown with the page's title. label: "Call the tool with user authorization", content: { Python: [ - "/examples/integrations/toolkits/notion/create_page_example_call_tool.py", + "/examples/integrations/mcp-servers/notion/create_page_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/notion/create_page_example_call_tool.js", + "/examples/integrations/mcp-servers/notion/create_page_example_call_tool.js", ], }, }, @@ -151,10 +163,10 @@ Create a new Notion page by specifying an existing parent page and the new page label: "Call the tool with user authorization", content: { Python: [ - "/examples/integrations/toolkits/notion/search_by_title_example_call_tool.py", + "/examples/integrations/mcp-servers/notion/search_by_title_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/notion/search_by_title_example_call_tool.js", + "/examples/integrations/mcp-servers/notion/search_by_title_example_call_tool.js", ], }, }, @@ -185,10 +197,10 @@ Search for similar titles of pages, databases, or both within the user's Notion label: "Call the tool with user authorization", content: { Python: [ - "/examples/integrations/toolkits/notion/get_object_metadata_example_call_tool.py", + "/examples/integrations/mcp-servers/notion/get_object_metadata_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/notion/get_object_metadata_example_call_tool.js", + "/examples/integrations/mcp-servers/notion/get_object_metadata_example_call_tool.js", ], }, }, @@ -217,10 +229,10 @@ Get the metadata of a Notion object (page or database) using its title or ID. On label: "Call the tool with user authorization", content: { Python: [ - "/examples/integrations/toolkits/notion/get_workspace_structure_example_call_tool.py", + "/examples/integrations/mcp-servers/notion/get_workspace_structure_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/notion/get_workspace_structure_example_call_tool.js", + "/examples/integrations/mcp-servers/notion/get_workspace_structure_example_call_tool.js", ], }, }, @@ -244,10 +256,10 @@ _None_ label: "Call the tool with user authorization", content: { Python: [ - "/examples/integrations/toolkits/notion/append_content_to_end_of_page.py", + "/examples/integrations/mcp-servers/notion/append_content_to_end_of_page.py", ], JavaScript: [ - "/examples/integrations/toolkits/notion/append_content_to_end_of_page.js", + "/examples/integrations/mcp-servers/notion/append_content_to_end_of_page.js", ], }, }, @@ -271,8 +283,12 @@ Append markdown content to the end of a Notion page using either the page's ID o { label: "Call the Tool Directly", content: { - Python: ["/examples/integrations/toolkits/notion/who_am_i_example_call_tool.py"], - JavaScript: ["/examples/integrations/toolkits/notion/who_am_i_example_call_tool.js"], + Python: [ + "/examples/integrations/mcp-servers/notion/who_am_i_example_call_tool.py", + ], + JavaScript: [ + "/examples/integrations/mcp-servers/notion/who_am_i_example_call_tool.js", + ], }, }, ]} @@ -286,10 +302,10 @@ This tool does not take any parameters. ## Auth -The Arcade Notion toolkit uses the [Notion auth provider](/home/auth-providers/notion) to connect to users' Notion accounts. +The Arcade Notion MCP Sever uses the [Notion auth provider](/home/auth-providers/notion) to connect to users' Notion accounts. With the Arcade Cloud Platform, there's nothing to configure. Your users will see `Arcade` as the name of the application that's requesting permission. With a self-hosted installation of Arcade, you need to [configure the Notion auth provider](/home/auth-providers/notion#configuring-notion-auth) with your own Notion app credentials. - + diff --git a/app/en/mcp-servers/productivity/obsidian/page.mdx b/app/en/mcp-servers/productivity/obsidian/page.mdx new file mode 100644 index 000000000..422047d16 --- /dev/null +++ b/app/en/mcp-servers/productivity/obsidian/page.mdx @@ -0,0 +1,3 @@ +# Obsidian + +The Arcade Obsidian Toolkit is a community contributed MCP Sever verified by the Arcade team. To learn more about the MCP Sever, please visit the [Arcade Obsidian GitHub repository](https://github.com/spartee/arcade-obsidian). diff --git a/app/en/toolkits/productivity/outlook-calendar/page.mdx b/app/en/mcp-servers/productivity/outlook-calendar/page.mdx similarity index 72% rename from app/en/toolkits/productivity/outlook-calendar/page.mdx rename to app/en/mcp-servers/productivity/outlook-calendar/page.mdx index 643d4e2e2..4d3747624 100644 --- a/app/en/toolkits/productivity/outlook-calendar/page.mdx +++ b/app/en/mcp-servers/productivity/outlook-calendar/page.mdx @@ -17,7 +17,7 @@ import { Callout } from "nextra/components"; -The Arcade Outlook Calendar toolkit provides pre-built tools for working with calendar events using the Outlook API. Use these tools to: +The Arcade Outlook Calendar MCP Server provides pre-built tools for working with calendar events using the Outlook API. Use these tools to: - Create events - List events @@ -25,22 +25,34 @@ The Arcade Outlook Calendar toolkit provides pre-built tools for working with ca ## Available Tools -These tools are currently available in the Arcade Outlook Calendar toolkit. +These tools are currently available in the Arcade Outlook Calendar MCP Sever. 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-toolkit) with the [Google auth + tools](/home/build-tools/create-a-mcp-server) with the [Google auth provider](/home/auth-providers/google#using-google-auth-in-custom-tools). @@ -55,10 +67,10 @@ Get information about the current user and their Outlook Calendar environment. label: "Call the Tool with User Authorization", content: { Python: [ - "/examples/integrations/toolkits/microsoft/outlook_calendar/who_am_i_example_call_tool.py", + "/examples/integrations/mcp-servers/microsoft/outlook_calendar/who_am_i_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/microsoft/outlook_calendar/who_am_i_example_call_tool.js", + "/examples/integrations/mcp-servers/microsoft/outlook_calendar/who_am_i_example_call_tool.js", ], }, }, @@ -96,10 +108,10 @@ If the user has not set a timezone for their calendar, then the timezone will be label: "Call the Tool with User Authorization", content: { Python: [ - "/examples/integrations/toolkits/microsoft/outlook_calendar/create_event_example_call_tool.py", + "/examples/integrations/mcp-servers/microsoft/outlook_calendar/create_event_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/microsoft/outlook_calendar/create_event_example_call_tool.js", + "/examples/integrations/mcp-servers/microsoft/outlook_calendar/create_event_example_call_tool.js", ], }, }, @@ -123,10 +135,10 @@ Get an event by its ID from the user's calendar. label: "Call the Tool with User Authorization", content: { Python: [ - "/examples/integrations/toolkits/microsoft/outlook_calendar/get_event_example_call_tool.py", + "/examples/integrations/mcp-servers/microsoft/outlook_calendar/get_event_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/microsoft/outlook_calendar/get_event_example_call_tool.js", + "/examples/integrations/mcp-servers/microsoft/outlook_calendar/get_event_example_call_tool.js", ], }, }, @@ -156,10 +168,10 @@ If the user has not set a timezone for their calendar, then the timezone will be label: "Call the tool with user authorization", content: { Python: [ - "/examples/integrations/toolkits/microsoft/outlook_calendar/list_events_in_time_range_example_call_tool.py", + "/examples/integrations/mcp-servers/microsoft/outlook_calendar/list_events_in_time_range_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/microsoft/outlook_calendar/list_events_in_time_range_example_call_tool.js", + "/examples/integrations/mcp-servers/microsoft/outlook_calendar/list_events_in_time_range_example_call_tool.js", ], }, }, @@ -170,7 +182,7 @@ If the user has not set a timezone for their calendar, then the timezone will be ## Auth -The Arcade Outlook Calendar toolkit uses the [Microsoft auth provider](/home/auth-providers/microsoft) to connect to users' Microsoft accounts. +The Arcade Outlook Calendar MCP Sever uses the [Microsoft auth provider](/home/auth-providers/microsoft) to connect to users' Microsoft accounts. With the Arcade Cloud Platform, there's nothing to configure. Your users will see `Arcade` as the name of the application that's requesting permission. diff --git a/app/en/toolkits/productivity/outlook-mail/_meta.tsx b/app/en/mcp-servers/productivity/outlook-mail/_meta.tsx similarity index 100% rename from app/en/toolkits/productivity/outlook-mail/_meta.tsx rename to app/en/mcp-servers/productivity/outlook-mail/_meta.tsx diff --git a/app/en/toolkits/productivity/outlook-mail/page.mdx b/app/en/mcp-servers/productivity/outlook-mail/page.mdx similarity index 80% rename from app/en/toolkits/productivity/outlook-mail/page.mdx rename to app/en/mcp-servers/productivity/outlook-mail/page.mdx index e38cff79b..e31e6d0e8 100644 --- a/app/en/toolkits/productivity/outlook-mail/page.mdx +++ b/app/en/mcp-servers/productivity/outlook-mail/page.mdx @@ -1,6 +1,7 @@ --- asIndexPage: true --- + # Outlook Mail import ToolInfo from "@/app/_components/tool-info"; @@ -20,7 +21,7 @@ import { Callout } from "nextra/components"; -The Arcade Outlook Mail toolkit provides pre-built tools for working with emails using the Outlook API. Use these tools to: +The Arcade Outlook Mail MCP Server provides pre-built tools for working with emails using the Outlook API. Use these tools to: - Read emails - Write emails @@ -28,12 +29,15 @@ The Arcade Outlook Mail toolkit provides pre-built tools for working with emails ## Available Tools -These tools are currently available in the Arcade Outlook Mail toolkit. +These tools are currently available in the Arcade Outlook Mail MCP Sever. 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-toolkit) with the [Google auth + tools](/home/build-tools/create-a-mcp-server) with the [Google auth provider](/home/auth-providers/google#using-google-auth-in-custom-tools). @@ -83,10 +87,10 @@ These tools are currently available in the Arcade Outlook Mail toolkit. label: "Call the Tool with User Authorization", content: { Python: [ - "/examples/integrations/toolkits/microsoft/outlook_mail/who_am_i_example_call_tool.py", + "/examples/integrations/mcp-servers/microsoft/outlook_mail/who_am_i_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/microsoft/outlook_mail/who_am_i_example_call_tool.js", + "/examples/integrations/mcp-servers/microsoft/outlook_mail/who_am_i_example_call_tool.js", ], }, }, @@ -120,10 +124,10 @@ Compose a new draft email in Outlook. label: "Call the Tool with User Authorization", content: { Python: [ - "/examples/integrations/toolkits/microsoft/outlook_mail/create_draft_email_example_call_tool.py", + "/examples/integrations/mcp-servers/microsoft/outlook_mail/create_draft_email_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/microsoft/outlook_mail/create_draft_email_example_call_tool.js", + "/examples/integrations/mcp-servers/microsoft/outlook_mail/create_draft_email_example_call_tool.js", ], }, }, @@ -159,10 +163,10 @@ This tool can update any un-sent email: - draft - reply-draft - reply-all draft label: "Call the Tool with User Authorization", content: { Python: [ - "/examples/integrations/toolkits/microsoft/outlook_mail/update_draft_email_example_call_tool.py", + "/examples/integrations/mcp-servers/microsoft/outlook_mail/update_draft_email_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/microsoft/outlook_mail/update_draft_email_example_call_tool.js", + "/examples/integrations/mcp-servers/microsoft/outlook_mail/update_draft_email_example_call_tool.js", ], }, }, @@ -191,10 +195,10 @@ Send an existing draft email in Outlook label: "Call the tool with user authorization", content: { Python: [ - "/examples/integrations/toolkits/microsoft/outlook_mail/send_draft_email_example_call_tool.py", + "/examples/integrations/mcp-servers/microsoft/outlook_mail/send_draft_email_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/microsoft/outlook_mail/send_draft_email_example_call_tool.js", + "/examples/integrations/mcp-servers/microsoft/outlook_mail/send_draft_email_example_call_tool.js", ], }, }, @@ -221,10 +225,10 @@ Create and immediately send a new email in Outlook to the specified recipients label: "Call the tool with user authorization", content: { Python: [ - "/examples/integrations/toolkits/microsoft/outlook_mail/create_and_send_email_example_call_tool.py", + "/examples/integrations/mcp-servers/microsoft/outlook_mail/create_and_send_email_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/microsoft/outlook_mail/create_and_send_email_example_call_tool.js", + "/examples/integrations/mcp-servers/microsoft/outlook_mail/create_and_send_email_example_call_tool.js", ], }, }, @@ -252,10 +256,10 @@ Specify the reply_type to determine the scope of the reply. label: "Call the tool with user authorization", content: { Python: [ - "/examples/integrations/toolkits/microsoft/outlook_mail/reply_to_email_example_call_tool.py", + "/examples/integrations/mcp-servers/microsoft/outlook_mail/reply_to_email_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/microsoft/outlook_mail/reply_to_email_example_call_tool.js", + "/examples/integrations/mcp-servers/microsoft/outlook_mail/reply_to_email_example_call_tool.js", ], }, }, @@ -282,10 +286,10 @@ and other items that are not in the inbox. label: "Call the tool with user authorization", content: { Python: [ - "/examples/integrations/toolkits/microsoft/outlook_mail/list_emails_example_call_tool.py", + "/examples/integrations/mcp-servers/microsoft/outlook_mail/list_emails_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/microsoft/outlook_mail/list_emails_example_call_tool.js", + "/examples/integrations/mcp-servers/microsoft/outlook_mail/list_emails_example_call_tool.js", ], }, }, @@ -313,10 +317,10 @@ Exactly one of `well_known_folder_name` or `folder_id` MUST be provided. label: "Call the tool with user authorization", content: { Python: [ - "/examples/integrations/toolkits/microsoft/outlook_mail/list_emails_in_folder_example_call_tool.py", + "/examples/integrations/mcp-servers/microsoft/outlook_mail/list_emails_in_folder_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/microsoft/outlook_mail/list_emails_in_folder_example_call_tool.js", + "/examples/integrations/mcp-servers/microsoft/outlook_mail/list_emails_in_folder_example_call_tool.js", ], }, }, @@ -343,10 +347,10 @@ List emails in the user's mailbox across all folders filtering by a property. label: "Call the tool with user authorization", content: { Python: [ - "/examples/integrations/toolkits/microsoft/outlook_mail/list_emails_by_property_example_call_tool.py", + "/examples/integrations/mcp-servers/microsoft/outlook_mail/list_emails_by_property_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/microsoft/outlook_mail/list_emails_by_property_example_call_tool.js", + "/examples/integrations/mcp-servers/microsoft/outlook_mail/list_emails_by_property_example_call_tool.js", ], }, }, @@ -357,7 +361,7 @@ List emails in the user's mailbox across all folders filtering by a property. ## Auth -The Arcade Outlook Mail toolkit uses the [Microsoft auth provider](/home/auth-providers/microsoft) to connect to users' Microsoft accounts. +The Arcade Outlook Mail MCP Sever uses the [Microsoft auth provider](/home/auth-providers/microsoft) to connect to users' Microsoft accounts. With the Arcade Cloud Platform, there's nothing to configure. Your users will see `Arcade` as the name of the application that's requesting permission. diff --git a/app/en/toolkits/productivity/outlook-mail/reference/page.mdx b/app/en/mcp-servers/productivity/outlook-mail/reference/page.mdx similarity index 97% rename from app/en/toolkits/productivity/outlook-mail/reference/page.mdx rename to app/en/mcp-servers/productivity/outlook-mail/reference/page.mdx index b92dee750..5774d27ac 100644 --- a/app/en/toolkits/productivity/outlook-mail/reference/page.mdx +++ b/app/en/mcp-servers/productivity/outlook-mail/reference/page.mdx @@ -1,6 +1,6 @@ # OutlookMail Reference -Below is a reference of enumerations used by some tools in the OutlookMail toolkit: +Below is a reference of enumerations used by some tools in the OutlookMail MCP Server: ## ReplyType diff --git a/app/en/toolkits/productivity/sharepoint/page.mdx b/app/en/mcp-servers/productivity/sharepoint/page.mdx similarity index 57% rename from app/en/toolkits/productivity/sharepoint/page.mdx rename to app/en/mcp-servers/productivity/sharepoint/page.mdx index 947b6c871..36d6f67dd 100644 --- a/app/en/toolkits/productivity/sharepoint/page.mdx +++ b/app/en/mcp-servers/productivity/sharepoint/page.mdx @@ -16,41 +16,69 @@ import { Callout } from "nextra/components"; -The SharePoint toolkit provides a comprehensive set of tools for interacting with SharePoint sites and their contents. Users can perform various actions, including: +The SharePoint MCP Server provides a comprehensive set of tools for interacting with SharePoint sites and their contents. Users can perform various actions, including: - Retrieve lists, items, and pages from SharePoint sites. - Access metadata and content of specific pages. - Search for and retrieve information about SharePoint sites and drives. - Browse and download files from SharePoint drives / document libraries. -This toolkit simplifies the process of accessing and managing SharePoint resources efficiently for AI Agents and chat bots. +This MCP Sever simplifies the process of accessing and managing SharePoint resources efficiently for AI Agents and chat bots. ## 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-toolkit). + with us](mailto:contact@arcade.dev) to request a new tool, or [create your own + tools](/home/build-tools/create-a-mcp-server). ## Sharepoint.GetListsFromSite @@ -61,8 +89,12 @@ This toolkit simplifies the process of accessing and managing SharePoint resourc { label: "Call the Tool Directly", content: { - Python: ["/examples/integrations/toolkits/sharepoint/get_lists_from_site_example_call_tool.py"], - JavaScript: ["/examples/integrations/toolkits/sharepoint/get_lists_from_site_example_call_tool.js"], + Python: [ + "/examples/integrations/mcp-servers/sharepoint/get_lists_from_site_example_call_tool.py", + ], + JavaScript: [ + "/examples/integrations/mcp-servers/sharepoint/get_lists_from_site_example_call_tool.js", + ], }, }, ]} @@ -74,7 +106,6 @@ Retrieve lists from a SharePoint site. - **site** (`string`, required) Site ID, SharePoint URL, or site name to get lists from. Prefer using a site ID whenever available for optimal performance. - ## Sharepoint.GetItemsFromList
@@ -83,8 +114,12 @@ Retrieve lists from a SharePoint site. { label: "Call the Tool Directly", content: { - Python: ["/examples/integrations/toolkits/sharepoint/get_items_from_list_example_call_tool.py"], - JavaScript: ["/examples/integrations/toolkits/sharepoint/get_items_from_list_example_call_tool.js"], + Python: [ + "/examples/integrations/mcp-servers/sharepoint/get_items_from_list_example_call_tool.py", + ], + JavaScript: [ + "/examples/integrations/mcp-servers/sharepoint/get_items_from_list_example_call_tool.js", + ], }, }, ]} @@ -97,7 +132,6 @@ Retrieve items from a list in a SharePoint site. - **site** (`string`, required) Site ID, SharePoint URL, or site name to get lists from. Prefer using a site ID whenever available for optimal performance. - **list_id** (`string`, required) The ID of the list to get items from. - ## Sharepoint.GetPage
@@ -106,8 +140,12 @@ Retrieve items from a list in a SharePoint site. { label: "Call the Tool Directly", content: { - Python: ["/examples/integrations/toolkits/sharepoint/get_page_example_call_tool.py"], - JavaScript: ["/examples/integrations/toolkits/sharepoint/get_page_example_call_tool.js"], + Python: [ + "/examples/integrations/mcp-servers/sharepoint/get_page_example_call_tool.py", + ], + JavaScript: [ + "/examples/integrations/mcp-servers/sharepoint/get_page_example_call_tool.js", + ], }, }, ]} @@ -121,7 +159,6 @@ Retrieve metadata and the contents of a page in a SharePoint site. - **page_id** (`string`, required) The ID of the page to retrieve. - **include_page_content** (`boolean`, optional) Whether to include the page content in the response. Defaults to True. If set to False, the tool will return only the page metadata. - ## Sharepoint.ListPages
@@ -130,8 +167,12 @@ Retrieve metadata and the contents of a page in a SharePoint site. { label: "Call the Tool Directly", content: { - Python: ["/examples/integrations/toolkits/sharepoint/list_pages_example_call_tool.py"], - JavaScript: ["/examples/integrations/toolkits/sharepoint/list_pages_example_call_tool.js"], + Python: [ + "/examples/integrations/mcp-servers/sharepoint/list_pages_example_call_tool.py", + ], + JavaScript: [ + "/examples/integrations/mcp-servers/sharepoint/list_pages_example_call_tool.js", + ], }, }, ]} @@ -144,7 +185,6 @@ Retrieve pages from a SharePoint site. - **site** (`string`, required) Site ID, SharePoint URL, or site name to retrieve base pages from. Prefer using a site ID whenever available for optimal performance. - **limit** (`integer`, optional) The maximum number of pages to return. Defaults to 10, max is 200. - ## Sharepoint.GetSite
@@ -153,8 +193,12 @@ Retrieve pages from a SharePoint site. { label: "Call the Tool Directly", content: { - Python: ["/examples/integrations/toolkits/sharepoint/get_site_example_call_tool.py"], - JavaScript: ["/examples/integrations/toolkits/sharepoint/get_site_example_call_tool.js"], + Python: [ + "/examples/integrations/mcp-servers/sharepoint/get_site_example_call_tool.py", + ], + JavaScript: [ + "/examples/integrations/mcp-servers/sharepoint/get_site_example_call_tool.js", + ], }, }, ]} @@ -166,7 +210,6 @@ Retrieve information about a specific SharePoint site by its ID, URL, or name. - **site** (`string`, required) Site ID, SharePoint URL, or site name to search for. - ## Sharepoint.SearchSites
@@ -175,8 +218,12 @@ Retrieve information about a specific SharePoint site by its ID, URL, or name. { label: "Call the Tool Directly", content: { - Python: ["/examples/integrations/toolkits/sharepoint/search_sites_example_call_tool.py"], - JavaScript: ["/examples/integrations/toolkits/sharepoint/search_sites_example_call_tool.js"], + Python: [ + "/examples/integrations/mcp-servers/sharepoint/search_sites_example_call_tool.py", + ], + JavaScript: [ + "/examples/integrations/mcp-servers/sharepoint/search_sites_example_call_tool.js", + ], }, }, ]} @@ -190,7 +237,6 @@ Search for SharePoint sites by name or description. - **limit** (`integer`, optional) The maximum number of sites to return. Defaults to 10, max is 100. - **offset** (`integer`, optional) The offset to start from. - ## Sharepoint.ListSites
@@ -199,8 +245,12 @@ Search for SharePoint sites by name or description. { label: "Call the Tool Directly", content: { - Python: ["/examples/integrations/toolkits/sharepoint/list_sites_example_call_tool.py"], - JavaScript: ["/examples/integrations/toolkits/sharepoint/list_sites_example_call_tool.js"], + Python: [ + "/examples/integrations/mcp-servers/sharepoint/list_sites_example_call_tool.py", + ], + JavaScript: [ + "/examples/integrations/mcp-servers/sharepoint/list_sites_example_call_tool.js", + ], }, }, ]} @@ -213,7 +263,6 @@ List all SharePoint sites accessible to the current user. - **limit** (`integer`, optional) The maximum number of sites to return. Defaults to 10, max is 100. - **offset** (`integer`, optional) The offset to start from. - ## Sharepoint.GetFollowedSites
@@ -222,8 +271,12 @@ List all SharePoint sites accessible to the current user. { label: "Call the Tool Directly", content: { - Python: ["/examples/integrations/toolkits/sharepoint/get_followed_sites_example_call_tool.py"], - JavaScript: ["/examples/integrations/toolkits/sharepoint/get_followed_sites_example_call_tool.js"], + Python: [ + "/examples/integrations/mcp-servers/sharepoint/get_followed_sites_example_call_tool.py", + ], + JavaScript: [ + "/examples/integrations/mcp-servers/sharepoint/get_followed_sites_example_call_tool.js", + ], }, }, ]} @@ -235,7 +288,6 @@ Retrieve a list of SharePoint sites that are followed by the current user. - **limit** (`integer`, optional) The maximum number of sites to return. Defaults to 10, max is 100. - ## Sharepoint.GetDrivesFromSite
@@ -244,8 +296,12 @@ Retrieve a list of SharePoint sites that are followed by the current user. { label: "Call the Tool Directly", content: { - Python: ["/examples/integrations/toolkits/sharepoint/get_drives_from_site_example_call_tool.py"], - JavaScript: ["/examples/integrations/toolkits/sharepoint/get_drives_from_site_example_call_tool.js"], + Python: [ + "/examples/integrations/mcp-servers/sharepoint/get_drives_from_site_example_call_tool.py", + ], + JavaScript: [ + "/examples/integrations/mcp-servers/sharepoint/get_drives_from_site_example_call_tool.js", + ], }, }, ]} @@ -257,7 +313,6 @@ Retrieve drives / document libraries from a SharePoint site. - **site** (`string`, required) Site ID, SharePoint URL, or site name to get drives from. Prefer using a site ID whenever available for optimal performance. - ## Sharepoint.ListRootItemsInDrive
@@ -266,8 +321,12 @@ Retrieve drives / document libraries from a SharePoint site. { label: "Call the Tool Directly", content: { - Python: ["/examples/integrations/toolkits/sharepoint/list_root_items_in_drive_example_call_tool.py"], - JavaScript: ["/examples/integrations/toolkits/sharepoint/list_root_items_in_drive_example_call_tool.js"], + Python: [ + "/examples/integrations/mcp-servers/sharepoint/list_root_items_in_drive_example_call_tool.py", + ], + JavaScript: [ + "/examples/integrations/mcp-servers/sharepoint/list_root_items_in_drive_example_call_tool.js", + ], }, }, ]} @@ -281,7 +340,6 @@ Retrieve items from the root of a drive in a SharePoint site. - **limit** (`integer`, optional) The number of items to get. Defaults to 100, max is 500. - **offset** (`integer`, optional) The number of items to skip. - ## Sharepoint.ListItemsInFolder
@@ -290,8 +348,12 @@ Retrieve items from the root of a drive in a SharePoint site. { label: "Call the Tool Directly", content: { - Python: ["/examples/integrations/toolkits/sharepoint/list_items_in_folder_example_call_tool.py"], - JavaScript: ["/examples/integrations/toolkits/sharepoint/list_items_in_folder_example_call_tool.js"], + Python: [ + "/examples/integrations/mcp-servers/sharepoint/list_items_in_folder_example_call_tool.py", + ], + JavaScript: [ + "/examples/integrations/mcp-servers/sharepoint/list_items_in_folder_example_call_tool.js", + ], }, }, ]} @@ -306,7 +368,6 @@ Retrieve items from a folder in a drive in a SharePoint site. - **limit** (`integer`, optional) The number of items to get. Defaults to 100, max is 500. - **offset** (`integer`, optional) The number of items to skip. - ## Sharepoint.SearchDriveItems
@@ -315,8 +376,12 @@ Retrieve items from a folder in a drive in a SharePoint site. { label: "Call the Tool Directly", content: { - Python: ["/examples/integrations/toolkits/sharepoint/search_drive_items_example_call_tool.py"], - JavaScript: ["/examples/integrations/toolkits/sharepoint/search_drive_items_example_call_tool.js"], + Python: [ + "/examples/integrations/mcp-servers/sharepoint/search_drive_items_example_call_tool.py", + ], + JavaScript: [ + "/examples/integrations/mcp-servers/sharepoint/search_drive_items_example_call_tool.js", + ], }, }, ]} @@ -332,11 +397,8 @@ Search for items in one or more Sharepoint drives. - **limit** (`integer`, optional) The number of files to get. Defaults to 50, max is 500. - **offset** (`integer`, optional) The number of files to skip. - - - ## Auth -The Arcade Sharepoint toolkit uses the [Microsoft auth provider](/home/auth-providers/microsoft) to connect to users' Sharepoint accounts. Please refer to the [Microsoft auth provider](/home/auth-providers/microsoft) documentation to learn how to configure auth. +The Arcade Sharepoint MCP Sever uses the [Microsoft auth provider](/home/auth-providers/microsoft) to connect to users' Sharepoint accounts. Please refer to the [Microsoft auth provider](/home/auth-providers/microsoft) documentation to learn how to configure auth. - \ No newline at end of file + diff --git a/app/en/mcp-servers/sales/_meta.tsx b/app/en/mcp-servers/sales/_meta.tsx new file mode 100644 index 000000000..4423f6f5e --- /dev/null +++ b/app/en/mcp-servers/sales/_meta.tsx @@ -0,0 +1,18 @@ +import type { MetaRecord } from "nextra"; + +const meta: MetaRecord = { + "*": { + theme: { + breadcrumb: true, + toc: true, + }, + }, + hubspot: { + title: "HubSpot", + }, + salesforce: { + title: "Salesforce", + }, +}; + +export default meta; diff --git a/app/en/toolkits/sales/hubspot/_meta.tsx b/app/en/mcp-servers/sales/hubspot/_meta.tsx similarity index 100% rename from app/en/toolkits/sales/hubspot/_meta.tsx rename to app/en/mcp-servers/sales/hubspot/_meta.tsx diff --git a/app/en/toolkits/sales/hubspot/page.mdx b/app/en/mcp-servers/sales/hubspot/page.mdx similarity index 76% rename from app/en/toolkits/sales/hubspot/page.mdx rename to app/en/mcp-servers/sales/hubspot/page.mdx index 7edd473a7..605fcaf31 100644 --- a/app/en/toolkits/sales/hubspot/page.mdx +++ b/app/en/mcp-servers/sales/hubspot/page.mdx @@ -1,6 +1,7 @@ --- asIndexPage: true --- + # Hubspot import ToolInfo from "@/app/_components/tool-info"; @@ -19,7 +20,7 @@ import { Callout } from "nextra/components"; -The Hubspot toolkit offers pre-built tools for interacting with HubSpot CRM. +The Hubspot MCP Sever offers pre-built tools for interacting with HubSpot CRM. Use these tools to automate CRM updates, log interactions, link records, and query HubSpot data for workflows and agents. ## Available Tools @@ -35,7 +36,7 @@ Use these tools to automate CRM updates, log interactions, link records, and que ["Hubspot.WhoAmI", "Get current user information from HubSpot."], [ "Hubspot.ToolkitEnviromentGuidance", - "Get guidance and considerations for using the HubSpot toolkit effectively.", + "Get guidance and considerations for using the HubSpot MCP Sever effectively.", ], [ "Hubspot.CreateNoteActivity", @@ -140,7 +141,7 @@ Use these tools to automate CRM updates, log interactions, link records, and que 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-toolkit). + tools](/home/build-tools/create-a-mcp-server). ## Hubspot.GetAllUsers @@ -152,10 +153,10 @@ Use these tools to automate CRM updates, log interactions, link records, and que label: "Call the Tool Directly", content: { Python: [ - "/examples/integrations/toolkits/hubspot/get_all_users_example_call_tool.py", + "/examples/integrations/mcp-servers/hubspot/get_all_users_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/hubspot/get_all_users_example_call_tool.js", + "/examples/integrations/mcp-servers/hubspot/get_all_users_example_call_tool.js", ], }, }, @@ -177,10 +178,10 @@ This tool does not take any parameters. label: "Call the Tool Directly", content: { Python: [ - "/examples/integrations/toolkits/hubspot/get_user_by_id_example_call_tool.py", + "/examples/integrations/mcp-servers/hubspot/get_user_by_id_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/hubspot/get_user_by_id_example_call_tool.js", + "/examples/integrations/mcp-servers/hubspot/get_user_by_id_example_call_tool.js", ], }, }, @@ -202,10 +203,10 @@ Get detailed information about a specific user/owner by their ID. label: "Call the Tool Directly", content: { Python: [ - "/examples/integrations/toolkits/hubspot/who_am_i_example_call_tool.py", + "/examples/integrations/mcp-servers/hubspot/who_am_i_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/hubspot/who_am_i_example_call_tool.js", + "/examples/integrations/mcp-servers/hubspot/who_am_i_example_call_tool.js", ], }, }, @@ -227,17 +228,17 @@ This tool does not take any parameters. label: "Call the Tool Directly", content: { Python: [ - "/examples/integrations/toolkits/hubspot/toolkit_enviroment_guidance_example_call_tool.py", + "/examples/integrations/mcp-servers/hubspot/MCP Sever_enviroment_guidance_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/hubspot/toolkit_enviroment_guidance_example_call_tool.js", + "/examples/integrations/mcp-servers/hubspot/MCP Sever_enviroment_guidance_example_call_tool.js", ], }, }, ]} /> -Get guidance and considerations for using the HubSpot toolkit effectively. +Get guidance and considerations for using the HubSpot MCP Sever effectively. **Parameters** @@ -252,10 +253,10 @@ This tool does not take any parameters. label: "Call the Tool Directly", content: { Python: [ - "/examples/integrations/toolkits/hubspot/create_note_activity_example_call_tool.py", + "/examples/integrations/mcp-servers/hubspot/create_note_activity_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/hubspot/create_note_activity_example_call_tool.js", + "/examples/integrations/mcp-servers/hubspot/create_note_activity_example_call_tool.js", ], }, }, @@ -281,10 +282,10 @@ Create a note engagement activity with required owner and associations. label: "Call the Tool Directly", content: { Python: [ - "/examples/integrations/toolkits/hubspot/create_call_activity_example_call_tool.py", + "/examples/integrations/mcp-servers/hubspot/create_call_activity_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/hubspot/create_call_activity_example_call_tool.js", + "/examples/integrations/mcp-servers/hubspot/create_call_activity_example_call_tool.js", ], }, }, @@ -297,7 +298,7 @@ Create a call engagement activity with required owner and associations. - **title** (`string`, required) Short title for the call. - **when_occurred** (`string`, required) When the call occurred (ISO date format: YYYY-MM-DDTHH:MM:SS). -- **direction** (`Enum` [HubspotCallDirection](/toolkits/sales/hubspot/reference#HubspotCallDirection), optional) Call direction (INBOUND or OUTBOUND). +- **direction** (`Enum` [HubspotCallDirection](/mcp-servers/sales/hubspot/reference#HubspotCallDirection), optional) Call direction (INBOUND or OUTBOUND). - **summary** (`string`, optional) Short summary/notes of the call. - **duration** (`integer`, optional) Call duration in seconds. - **to_number** (`string`, optional) Phone number called to. @@ -315,10 +316,10 @@ Create a call engagement activity with required owner and associations. label: "Call the Tool Directly", content: { Python: [ - "/examples/integrations/toolkits/hubspot/create_email_activity_example_call_tool.py", + "/examples/integrations/mcp-servers/hubspot/create_email_activity_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/hubspot/create_email_activity_example_call_tool.js", + "/examples/integrations/mcp-servers/hubspot/create_email_activity_example_call_tool.js", ], }, }, @@ -341,8 +342,8 @@ Create a logged email engagement activity with essential fields including email - **to_last_name** (`string`, optional) Primary recipient last name. - **cc_emails** (`array[string]`, optional) CC recipient email addresses. - **bcc_emails** (`array[string]`, optional) BCC recipient email addresses. -- **direction** (`Enum` [HubspotEmailDirection](/toolkits/sales/hubspot/reference#HubspotEmailDirection), optional) Direction the email was sent (EMAIL, INCOMING_EMAIL, FORWARDED_EMAIL). -- **status** (`Enum` [HubspotEmailStatus](/toolkits/sales/hubspot/reference#HubspotEmailStatus), optional) Email status indicating the state of the email. +- **direction** (`Enum` [HubspotEmailDirection](/mcp-servers/sales/hubspot/reference#HubspotEmailDirection), optional) Direction the email was sent (EMAIL, INCOMING_EMAIL, FORWARDED_EMAIL). +- **status** (`Enum` [HubspotEmailStatus](/mcp-servers/sales/hubspot/reference#HubspotEmailStatus), optional) Email status indicating the state of the email. - **associate_to_contact_id** (`integer`, optional) Contact ID to associate this email with. - **associate_to_company_id** (`integer`, optional) Company ID to associate this email with. - **associate_to_deal_id** (`integer`, optional) Deal ID to associate this email with. @@ -356,10 +357,10 @@ Create a logged email engagement activity with essential fields including email label: "Call the Tool Directly", content: { Python: [ - "/examples/integrations/toolkits/hubspot/create_meeting_activity_example_call_tool.py", + "/examples/integrations/mcp-servers/hubspot/create_meeting_activity_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/hubspot/create_meeting_activity_example_call_tool.js", + "/examples/integrations/mcp-servers/hubspot/create_meeting_activity_example_call_tool.js", ], }, }, @@ -375,7 +376,7 @@ Create a meeting with essential fields including separate date and time. - **start_time** (`string`, required) Start time (HH:MM or HH:MM:SS format). - **duration** (`string`, optional) Meeting duration in HH:MM format (e.g., 1:30 for 1 hour 30 minutes). - **location** (`string`, optional) Meeting location. -- **outcome** (`Enum` [HubspotMeetingOutcome](/toolkits/sales/hubspot/reference#HubspotMeetingOutcome), optional) Meeting outcome. +- **outcome** (`Enum` [HubspotMeetingOutcome](/mcp-servers/sales/hubspot/reference#HubspotMeetingOutcome), optional) Meeting outcome. - **associate_to_contact_id** (`integer`, optional) Contact ID to associate this meeting with. - **associate_to_company_id** (`integer`, optional) Company ID to associate this meeting with. - **associate_to_deal_id** (`integer`, optional) Deal ID to associate this meeting with. @@ -389,10 +390,10 @@ Create a meeting with essential fields including separate date and time. label: "Call the Tool Directly", content: { Python: [ - "/examples/integrations/toolkits/hubspot/create_communication_activity_example_call_tool.py", + "/examples/integrations/mcp-servers/hubspot/create_communication_activity_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/hubspot/create_communication_activity_example_call_tool.js", + "/examples/integrations/mcp-servers/hubspot/create_communication_activity_example_call_tool.js", ], }, }, @@ -403,7 +404,7 @@ Create a communication activity for logging communications that are not done via **Parameters** -- **channel** (`Enum` [HubspotCommunicationChannel](/toolkits/sales/hubspot/reference#HubspotCommunicationChannel), required) Communication channel type. +- **channel** (`Enum` [HubspotCommunicationChannel](/mcp-servers/sales/hubspot/reference#HubspotCommunicationChannel), required) Communication channel type. - **when_occurred** (`string`, required) When the communication occurred (ISO date format: YYYY-MM-DDTHH:MM:SS). - **body_text** (`string`, optional) Full message content. - **associate_to_contact_id** (`integer`, optional) Contact ID to associate this communication with. @@ -419,10 +420,10 @@ Create a communication activity for logging communications that are not done via label: "Call the Tool Directly", content: { Python: [ - "/examples/integrations/toolkits/hubspot/associate_activity_to_deal_example_call_tool.py", + "/examples/integrations/mcp-servers/hubspot/associate_activity_to_deal_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/hubspot/associate_activity_to_deal_example_call_tool.js", + "/examples/integrations/mcp-servers/hubspot/associate_activity_to_deal_example_call_tool.js", ], }, }, @@ -433,7 +434,7 @@ Associate a single activity object to a deal using HubSpot standard association **Parameters** -- **activity_type** (`Enum` [HubspotActivityType](/toolkits/sales/hubspot/reference#HubspotActivityType), required) Engagement activity type. +- **activity_type** (`Enum` [HubspotActivityType](/mcp-servers/sales/hubspot/reference#HubspotActivityType), required) Engagement activity type. - **activity_id** (`integer`, required) The activity object ID - **deal_id** (`integer`, required) The deal ID to associate to @@ -446,10 +447,10 @@ Associate a single activity object to a deal using HubSpot standard association label: "Call the Tool Directly", content: { Python: [ - "/examples/integrations/toolkits/hubspot/get_contact_data_by_keywords_example_call_tool.py", + "/examples/integrations/mcp-servers/hubspot/get_contact_data_by_keywords_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/hubspot/get_contact_data_by_keywords_example_call_tool.js", + "/examples/integrations/mcp-servers/hubspot/get_contact_data_by_keywords_example_call_tool.js", ], }, }, @@ -473,10 +474,10 @@ Retrieve contact data with associated companies, deals, calls, emails, label: "Call the Tool Directly", content: { Python: [ - "/examples/integrations/toolkits/hubspot/create_contact_example_call_tool.py", + "/examples/integrations/mcp-servers/hubspot/create_contact_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/hubspot/create_contact_example_call_tool.js", + "/examples/integrations/mcp-servers/hubspot/create_contact_example_call_tool.js", ], }, }, @@ -504,10 +505,10 @@ Create a contact associated with a company. label: "Call the Tool Directly", content: { Python: [ - "/examples/integrations/toolkits/hubspot/list_contacts_example_call_tool.py", + "/examples/integrations/mcp-servers/hubspot/list_contacts_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/hubspot/list_contacts_example_call_tool.js", + "/examples/integrations/mcp-servers/hubspot/list_contacts_example_call_tool.js", ], }, }, @@ -521,7 +522,7 @@ List contacts with optional filtering by company ID or deal ID, with pagination - **limit** (`integer`, optional) The maximum number of contacts to return. Defaults to 10. Max is 50. - **company_id** (`integer`, optional) Filter contacts by company ID. Defaults to None (no filtering). - **deal_id** (`integer`, optional) Filter contacts by deal ID. Defaults to None (no filtering). -- **sort_order** (`Enum` [HubspotSortOrder](/toolkits/sales/hubspot/reference#HubspotSortOrder), optional) Sort order for results. Defaults to LATEST_MODIFIED. +- **sort_order** (`Enum` [HubspotSortOrder](/mcp-servers/sales/hubspot/reference#HubspotSortOrder), optional) Sort order for results. Defaults to LATEST_MODIFIED. - **next_page_token** (`string`, optional) The token to get the next page of results. Defaults to None (returns first page of results) ## Hubspot.GetDealDataByKeywords @@ -533,10 +534,10 @@ List contacts with optional filtering by company ID or deal ID, with pagination label: "Call the Tool Directly", content: { Python: [ - "/examples/integrations/toolkits/hubspot/get_deal_data_by_keywords_example_call_tool.py", + "/examples/integrations/mcp-servers/hubspot/get_deal_data_by_keywords_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/hubspot/get_deal_data_by_keywords_example_call_tool.js", + "/examples/integrations/mcp-servers/hubspot/get_deal_data_by_keywords_example_call_tool.js", ], }, }, @@ -560,10 +561,10 @@ Retrieve deal data with associated contacts, companies, calls, emails, label: "Call the Tool Directly", content: { Python: [ - "/examples/integrations/toolkits/hubspot/create_deal_example_call_tool.py", + "/examples/integrations/mcp-servers/hubspot/create_deal_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/hubspot/create_deal_example_call_tool.js", + "/examples/integrations/mcp-servers/hubspot/create_deal_example_call_tool.js", ], }, }, @@ -577,11 +578,11 @@ Create a new deal in HubSpot. - **deal_name** (`string`, required) The deal name (required) - **deal_amount** (`number`, optional) The deal amount/value - **deal_stage** (`string`, optional) The deal stage -- **deal_type** (`Enum` [HubspotDealType](/toolkits/sales/hubspot/reference#HubspotDealType), optional) The deal type. +- **deal_type** (`Enum` [HubspotDealType](/mcp-servers/sales/hubspot/reference#HubspotDealType), optional) The deal type. - **expected_close_date** (`string`, optional) Expected close date in YYYY-MM-DD format - **pipeline_id** (`string`, optional) Pipeline id. Use 'default' for default pipeline or pass a pipeline id (integer) - **deal_owner** (`string`, optional) The deal owner user ID -- **priority_level** (`Enum` [HubspotDealPriority](/toolkits/sales/hubspot/reference#HubspotDealPriority), optional) Priority level. +- **priority_level** (`Enum` [HubspotDealPriority](/mcp-servers/sales/hubspot/reference#HubspotDealPriority), optional) Priority level. - **deal_description** (`string`, optional) The deal description ## Hubspot.UpdateDealCloseDate @@ -593,10 +594,10 @@ Create a new deal in HubSpot. label: "Call the Tool Directly", content: { Python: [ - "/examples/integrations/toolkits/hubspot/update_deal_close_date_example_call_tool.py", + "/examples/integrations/mcp-servers/hubspot/update_deal_close_date_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/hubspot/update_deal_close_date_example_call_tool.js", + "/examples/integrations/mcp-servers/hubspot/update_deal_close_date_example_call_tool.js", ], }, }, @@ -619,10 +620,10 @@ Update the expected close date of an existing deal in HubSpot. label: "Call the Tool Directly", content: { Python: [ - "/examples/integrations/toolkits/hubspot/update_deal_stage_example_call_tool.py", + "/examples/integrations/mcp-servers/hubspot/update_deal_stage_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/hubspot/update_deal_stage_example_call_tool.js", + "/examples/integrations/mcp-servers/hubspot/update_deal_stage_example_call_tool.js", ], }, }, @@ -647,10 +648,10 @@ Updates a deal's stage, validating against the current pipeline if provided label: "Call the Tool Directly", content: { Python: [ - "/examples/integrations/toolkits/hubspot/get_deal_by_id_example_call_tool.py", + "/examples/integrations/mcp-servers/hubspot/get_deal_by_id_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/hubspot/get_deal_by_id_example_call_tool.js", + "/examples/integrations/mcp-servers/hubspot/get_deal_by_id_example_call_tool.js", ], }, }, @@ -672,10 +673,10 @@ Retrieve a specific deal by its ID from HubSpot. label: "Call the Tool Directly", content: { Python: [ - "/examples/integrations/toolkits/hubspot/associate_contact_to_deal_example_call_tool.py", + "/examples/integrations/mcp-servers/hubspot/associate_contact_to_deal_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/hubspot/associate_contact_to_deal_example_call_tool.js", + "/examples/integrations/mcp-servers/hubspot/associate_contact_to_deal_example_call_tool.js", ], }, }, @@ -698,10 +699,10 @@ Associate a contact with an existing deal in HubSpot. label: "Call the Tool Directly", content: { Python: [ - "/examples/integrations/toolkits/hubspot/list_deals_example_call_tool.py", + "/examples/integrations/mcp-servers/hubspot/list_deals_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/hubspot/list_deals_example_call_tool.js", + "/examples/integrations/mcp-servers/hubspot/list_deals_example_call_tool.js", ], }, }, @@ -715,7 +716,7 @@ List deals with optional filtering by contact ID or company ID, with pagination - **limit** (`integer`, optional) The maximum number of deals to return. Defaults to 10. Max is 50. - **contact_id** (`integer`, optional) Filter deals by contact ID. Defaults to None (no filtering). - **company_id** (`integer`, optional) Filter deals by company ID. Defaults to None (no filtering). -- **sort_order** (`Enum` [HubspotSortOrder](/toolkits/sales/hubspot/reference#HubspotSortOrder), optional) Sort order for results. Defaults to LATEST_MODIFIED. +- **sort_order** (`Enum` [HubspotSortOrder](/mcp-servers/sales/hubspot/reference#HubspotSortOrder), optional) Sort order for results. Defaults to LATEST_MODIFIED. - **next_page_token** (`string`, optional) The token to get the next page of results. Defaults to None (returns first page of results) ## Hubspot.GetNoteDataByKeywords @@ -727,10 +728,10 @@ List deals with optional filtering by contact ID or company ID, with pagination label: "Call the Tool Directly", content: { Python: [ - "/examples/integrations/toolkits/hubspot/get_note_data_by_keywords_example_call_tool.py", + "/examples/integrations/mcp-servers/hubspot/get_note_data_by_keywords_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/hubspot/get_note_data_by_keywords_example_call_tool.js", + "/examples/integrations/mcp-servers/hubspot/get_note_data_by_keywords_example_call_tool.js", ], }, }, @@ -755,10 +756,10 @@ Search for note activities by search terms in NOTE object properties. label: "Call the Tool Directly", content: { Python: [ - "/examples/integrations/toolkits/hubspot/get_call_data_by_keywords_example_call_tool.py", + "/examples/integrations/mcp-servers/hubspot/get_call_data_by_keywords_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/hubspot/get_call_data_by_keywords_example_call_tool.js", + "/examples/integrations/mcp-servers/hubspot/get_call_data_by_keywords_example_call_tool.js", ], }, }, @@ -783,10 +784,10 @@ Search for call activities by search terms in CALL object properties. label: "Call the Tool Directly", content: { Python: [ - "/examples/integrations/toolkits/hubspot/get_email_data_by_keywords_example_call_tool.py", + "/examples/integrations/mcp-servers/hubspot/get_email_data_by_keywords_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/hubspot/get_email_data_by_keywords_example_call_tool.js", + "/examples/integrations/mcp-servers/hubspot/get_email_data_by_keywords_example_call_tool.js", ], }, }, @@ -811,10 +812,10 @@ Search for email activities by search terms in EMAIL object properties. label: "Call the Tool Directly", content: { Python: [ - "/examples/integrations/toolkits/hubspot/get_meeting_data_by_keywords_example_call_tool.py", + "/examples/integrations/mcp-servers/hubspot/get_meeting_data_by_keywords_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/hubspot/get_meeting_data_by_keywords_example_call_tool.js", + "/examples/integrations/mcp-servers/hubspot/get_meeting_data_by_keywords_example_call_tool.js", ], }, }, @@ -839,10 +840,10 @@ Search for meeting activities by search terms in MEETING object properties. label: "Call the Tool Directly", content: { Python: [ - "/examples/integrations/toolkits/hubspot/get_task_data_by_keywords_example_call_tool.py", + "/examples/integrations/mcp-servers/hubspot/get_task_data_by_keywords_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/hubspot/get_task_data_by_keywords_example_call_tool.js", + "/examples/integrations/mcp-servers/hubspot/get_task_data_by_keywords_example_call_tool.js", ], }, }, @@ -867,10 +868,10 @@ Search for task activities by search terms in TASK object properties. label: "Call the Tool Directly", content: { Python: [ - "/examples/integrations/toolkits/hubspot/get_communication_data_by_keywords_example_call_tool.py", + "/examples/integrations/mcp-servers/hubspot/get_communication_data_by_keywords_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/hubspot/get_communication_data_by_keywords_example_call_tool.js", + "/examples/integrations/mcp-servers/hubspot/get_communication_data_by_keywords_example_call_tool.js", ], }, }, @@ -895,10 +896,10 @@ Search for communication activities by search terms in COMMUNICATION object prop label: "Call the Tool Directly", content: { Python: [ - "/examples/integrations/toolkits/hubspot/get_company_data_by_keywords_example_call_tool.py", + "/examples/integrations/mcp-servers/hubspot/get_company_data_by_keywords_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/hubspot/get_company_data_by_keywords_example_call_tool.js", + "/examples/integrations/mcp-servers/hubspot/get_company_data_by_keywords_example_call_tool.js", ], }, }, @@ -922,10 +923,10 @@ Retrieve company data with associated contacts, deals, calls, emails, label: "Call the Tool Directly", content: { Python: [ - "/examples/integrations/toolkits/hubspot/create_company_example_call_tool.py", + "/examples/integrations/mcp-servers/hubspot/create_company_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/hubspot/create_company_example_call_tool.js", + "/examples/integrations/mcp-servers/hubspot/create_company_example_call_tool.js", ], }, }, @@ -954,10 +955,10 @@ Create a new company in HubSpot. label: "Call the Tool Directly", content: { Python: [ - "/examples/integrations/toolkits/hubspot/list_companies_example_call_tool.py", + "/examples/integrations/mcp-servers/hubspot/list_companies_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/hubspot/list_companies_example_call_tool.js", + "/examples/integrations/mcp-servers/hubspot/list_companies_example_call_tool.js", ], }, }, @@ -969,7 +970,7 @@ List companies with pagination support. **Parameters** - **limit** (`integer`, optional) The maximum number of companies to return. Defaults to 10. Max is 50. -- **sort_order** (`Enum` [HubspotSortOrder](/toolkits/sales/hubspot/reference#HubspotSortOrder), optional) Sort order for results. Defaults to LATEST_MODIFIED. +- **sort_order** (`Enum` [HubspotSortOrder](/mcp-servers/sales/hubspot/reference#HubspotSortOrder), optional) Sort order for results. Defaults to LATEST_MODIFIED. - **next_page_token** (`string`, optional) The token to get the next page of results. Defaults to None (returns first page of results) ## Hubspot.GetAvailableIndustryTypes @@ -981,10 +982,10 @@ List companies with pagination support. label: "Call the Tool Directly", content: { Python: [ - "/examples/integrations/toolkits/hubspot/get_available_industry_types_example_call_tool.py", + "/examples/integrations/mcp-servers/hubspot/get_available_industry_types_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/hubspot/get_available_industry_types_example_call_tool.js", + "/examples/integrations/mcp-servers/hubspot/get_available_industry_types_example_call_tool.js", ], }, }, @@ -1006,10 +1007,10 @@ This tool does not take any parameters. label: "Call the Tool Directly", content: { Python: [ - "/examples/integrations/toolkits/hubspot/get_deal_pipelines_example_call_tool.py", + "/examples/integrations/mcp-servers/hubspot/get_deal_pipelines_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/hubspot/get_deal_pipelines_example_call_tool.js", + "/examples/integrations/mcp-servers/hubspot/get_deal_pipelines_example_call_tool.js", ], }, }, @@ -1031,10 +1032,10 @@ List HubSpot deal pipelines with their stages, optionally filtered by a search s label: "Call the Tool Directly", content: { Python: [ - "/examples/integrations/toolkits/hubspot/get_deal_pipeline_stages_example_call_tool.py", + "/examples/integrations/mcp-servers/hubspot/get_deal_pipeline_stages_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/hubspot/get_deal_pipeline_stages_example_call_tool.js", + "/examples/integrations/mcp-servers/hubspot/get_deal_pipeline_stages_example_call_tool.js", ], }, }, diff --git a/app/en/toolkits/sales/hubspot/reference/page.mdx b/app/en/mcp-servers/sales/hubspot/reference/page.mdx similarity index 98% rename from app/en/toolkits/sales/hubspot/reference/page.mdx rename to app/en/mcp-servers/sales/hubspot/reference/page.mdx index 3a02811ce..c8725f1fa 100644 --- a/app/en/toolkits/sales/hubspot/reference/page.mdx +++ b/app/en/mcp-servers/sales/hubspot/reference/page.mdx @@ -1,6 +1,6 @@ # Hubspot Reference -Below is a reference of enumerations used by some of the tools in the Hubspot toolkit: +Below is a reference of enumerations used by some of the tools in the Hubspot MCP Server: ## HubspotCallDirection diff --git a/app/en/toolkits/sales/salesforce/page.mdx b/app/en/mcp-servers/sales/salesforce/page.mdx similarity index 71% rename from app/en/toolkits/sales/salesforce/page.mdx rename to app/en/mcp-servers/sales/salesforce/page.mdx index 704965846..e922dedb5 100644 --- a/app/en/toolkits/sales/salesforce/page.mdx +++ b/app/en/mcp-servers/sales/salesforce/page.mdx @@ -8,7 +8,7 @@ import { Callout } from "nextra/components"; At this time, Arcade does not offer a default Salesforce Auth Provider. To use - Salesforce auth and toolkit, you must create a custom Auth Provider with your + Salesforce auth and MCP Sever, you must create a custom Auth Provider with your own Salesforce OAuth 2.0 credentials as documented in [Salesforce Auth Provider](/home/auth-providers/salesforce). @@ -22,7 +22,7 @@ import { Callout } from "nextra/components"; -The Arcade Salesforce CRM toolkit provides a pre-built set of tools for interacting with Accounts, Leads, Contacts, etc in the Salesforce CRM. These tools make it easy to build agents and AI apps that can: +The Arcade Salesforce CRM MCP Server provides a pre-built set of tools for interacting with Accounts, Leads, Contacts, etc in the Salesforce CRM. These tools make it easy to build agents and AI apps that can: - Search for Accounts and Contacts by keywords or retrieve them by ID - Read information about Accounts, such as company metadata, opportunities, deals, etc. @@ -31,7 +31,7 @@ The Arcade Salesforce CRM toolkit provides a pre-built set of tools for interact ## Install and Run the Arcade Engine -At this time, you need to [self-host](/home/auth-providers/salesforce) the Arcade Engine to use the Salesforce toolkit. Follow the step-by-step instructions in the [Salesforce Auth Provider](/home/auth-providers/salesforce) page. +At this time, you need to [self-host](/home/auth-providers/salesforce) the Arcade Engine to use the Salesforce MCP Sever. Follow the step-by-step instructions in the [Salesforce Auth Provider](/home/auth-providers/salesforce) page. ## Install @@ -62,11 +62,11 @@ pip install arcade_salesforce 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-toolkit). + tools](/home/build-tools/create-a-mcp-server). - In order to use the Salesforce toolkit, you must [self-host the Arcade + In order to use the Salesforce MCP Sever, you must [self-host the Arcade Engine](/home/local-deployment/install/local) and [configure the Salesforce auth provider](/home/auth-providers/salesforce). The Arcade Engine is available at `http://localhost:9099` by default. In the code examples below, @@ -83,10 +83,10 @@ pip install arcade_salesforce label: "Call the Tool Directly", content: { Python: [ - "/examples/integrations/toolkits/salesforce/get_account_data_by_keywords_example_call_tool.py", + "/examples/integrations/mcp-servers/salesforce/get_account_data_by_keywords_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/salesforce/get_account_data_by_keywords_example_call_tool.js", + "/examples/integrations/mcp-servers/salesforce/get_account_data_by_keywords_example_call_tool.js", ], }, }, @@ -94,10 +94,10 @@ pip install arcade_salesforce label: "Execute the Tool with OpenAI", content: { Python: [ - "/examples/integrations/toolkits/salesforce/get_account_data_by_keywords_example_llm_oai.py", + "/examples/integrations/mcp-servers/salesforce/get_account_data_by_keywords_example_llm_oai.py", ], JavaScript: [ - "/examples/integrations/toolkits/salesforce/get_account_data_by_keywords_example_llm_oai.js", + "/examples/integrations/mcp-servers/salesforce/get_account_data_by_keywords_example_llm_oai.js", ], }, }, @@ -121,10 +121,10 @@ Searches for accounts in Salesforce and returns them with related info: contacts label: "Call the Tool Directly", content: { Python: [ - "/examples/integrations/toolkits/salesforce/get_account_data_by_id_example_call_tool.py", + "/examples/integrations/mcp-servers/salesforce/get_account_data_by_id_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/salesforce/get_account_data_by_id_example_call_tool.js", + "/examples/integrations/mcp-servers/salesforce/get_account_data_by_id_example_call_tool.js", ], }, }, @@ -132,10 +132,10 @@ Searches for accounts in Salesforce and returns them with related info: contacts label: "Execute the Tool with OpenAI", content: { Python: [ - "/examples/integrations/toolkits/salesforce/get_account_data_by_id_example_llm_oai.py", + "/examples/integrations/mcp-servers/salesforce/get_account_data_by_id_example_llm_oai.py", ], JavaScript: [ - "/examples/integrations/toolkits/salesforce/get_account_data_by_id_example_llm_oai.js", + "/examples/integrations/mcp-servers/salesforce/get_account_data_by_id_example_llm_oai.js", ], }, }, @@ -157,10 +157,10 @@ Gets the account with related info: contacts, leads, notes, calls, opportunities label: "Call the Tool Directly", content: { Python: [ - "/examples/integrations/toolkits/salesforce/create_contact_example_call_tool.py", + "/examples/integrations/mcp-servers/salesforce/create_contact_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/salesforce/create_contact_example_call_tool.js", + "/examples/integrations/mcp-servers/salesforce/create_contact_example_call_tool.js", ], }, }, @@ -168,10 +168,10 @@ Gets the account with related info: contacts, leads, notes, calls, opportunities label: "Execute the Tool with OpenAI", content: { Python: [ - "/examples/integrations/toolkits/salesforce/create_contact_example_llm_oai.py", + "/examples/integrations/mcp-servers/salesforce/create_contact_example_llm_oai.py", ], JavaScript: [ - "/examples/integrations/toolkits/salesforce/create_contact_example_llm_oai.js", + "/examples/integrations/mcp-servers/salesforce/create_contact_example_llm_oai.js", ], }, }, @@ -196,4 +196,4 @@ Creates a contact in Salesforce associated with an account. At this time, Arcade Cloud does not support Salesforce auth. -In order to use the Salesforce toolkit (or develop custom tools for Salesforce), you have to [self-host the Arcade Engine](/home/local-deployment/install/local) and [configure the Salesforce auth provider](/home/auth-providers/salesforce) in your engine configuration. +In order to use the Salesforce MCP Sever (or develop custom tools for Salesforce), you have to [self-host the Arcade Engine](/home/local-deployment/install/local) and [configure the Salesforce auth provider](/home/auth-providers/salesforce) in your engine configuration. diff --git a/app/en/toolkits/search/_meta.js b/app/en/mcp-servers/search/_meta.tsx similarity index 80% rename from app/en/toolkits/search/_meta.js rename to app/en/mcp-servers/search/_meta.tsx index f502b34e5..791efd44f 100644 --- a/app/en/toolkits/search/_meta.js +++ b/app/en/mcp-servers/search/_meta.tsx @@ -1,5 +1,13 @@ /** biome-ignore-all lint/style/useNamingConvention: This is ok for the meta file */ -const meta = { +import type { MetaRecord } from "nextra"; + +const meta: MetaRecord = { + "*": { + theme: { + breadcrumb: true, + toc: true, + }, + }, google_finance: { title: "Google Finance", }, diff --git a/app/en/toolkits/search/google_finance/page.mdx b/app/en/mcp-servers/search/google_finance/page.mdx similarity index 81% rename from app/en/toolkits/search/google_finance/page.mdx rename to app/en/mcp-servers/search/google_finance/page.mdx index 7066a27d8..93b1a73d2 100644 --- a/app/en/toolkits/search/google_finance/page.mdx +++ b/app/en/mcp-servers/search/google_finance/page.mdx @@ -16,7 +16,7 @@ import { Callout } from "nextra/components"; -The Arcade Google Finance toolkit lets you fetch real-time and historical stock data with ease. Use these tools to build intelligent agents and applications that fetch: +The Arcade Google Finance MCP Sever lets you fetch real-time and historical stock data with ease. Use these tools to build intelligent agents and applications that fetch: - Stock summary data. - Historical stock data. @@ -40,7 +40,7 @@ The Arcade Google Finance toolkit lets you fetch real-time and historical stock If you need an action that's not listed here, please [contact us](mailto:contact@arcade.dev) to request a new tool, or [create your own - tools](/home/build-tools/create-a-toolkit). + tools](/home/build-tools/create-a-mcp-server). ## GoogleFinance.GetStockSummary @@ -59,10 +59,10 @@ Retrieve summary information for a given stock using the Google Finance API via label: "Call the Tool Directly", content: { Python: [ - "/examples/integrations/toolkits/search/google_finance/get_stock_summary_example_call_tool.py", + "/examples/integrations/mcp-servers/search/google_finance/get_stock_summary_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/search/google_finance/get_stock_summary_example_call_tool.js", + "/examples/integrations/mcp-servers/search/google_finance/get_stock_summary_example_call_tool.js", ], }, }, @@ -86,10 +86,10 @@ Fetch historical data for a given stock over a defined time window. This tool re label: "Call the Tool Directly", content: { Python: [ - "/examples/integrations/toolkits/search/google_finance/get_stock_historical_data_example_call_tool.py", + "/examples/integrations/mcp-servers/search/google_finance/get_stock_historical_data_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/search/google_finance/get_stock_historical_data_example_call_tool.js", + "/examples/integrations/mcp-servers/search/google_finance/get_stock_historical_data_example_call_tool.js", ], }, }, @@ -98,7 +98,7 @@ Fetch historical data for a given stock over a defined time window. This tool re ## Auth -The Arcade Google Finance toolkit uses the [SerpAPI](https://serpapi.com/) to get stock data from Google Finance. +The Arcade Google Finance MCP Sever uses the [SerpAPI](https://serpapi.com/) to get stock data from Google Finance. - **Secret:** - `SERP_API_KEY`: Your SerpAPI API key. diff --git a/app/en/toolkits/search/google_flights/page.mdx b/app/en/mcp-servers/search/google_flights/page.mdx similarity index 87% rename from app/en/toolkits/search/google_flights/page.mdx rename to app/en/mcp-servers/search/google_flights/page.mdx index bced86c09..08ad89685 100644 --- a/app/en/toolkits/search/google_flights/page.mdx +++ b/app/en/mcp-servers/search/google_flights/page.mdx @@ -16,7 +16,7 @@ import { Callout } from "nextra/components"; -The Arcade Google Flights toolkit lets you search for flights with ease. Use these tools to build intelligent agents and applications that: +The Arcade Google Flights MCP Sever lets you search for flights with ease. Use these tools to build intelligent agents and applications that: - Search for one-way flights. @@ -55,10 +55,10 @@ Retrieve flight search results for a one-way flight using Google Flights. label: "Call the tool directly", content: { Python: [ - "/examples/integrations/toolkits/search/google_flights/search_one_way_flights_example_call_tool.py", + "/examples/integrations/mcp-servers/search/google_flights/search_one_way_flights_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/search/google_flights/search_one_way_flights_example_call_tool.js", + "/examples/integrations/mcp-servers/search/google_flights/search_one_way_flights_example_call_tool.js", ], }, }, @@ -67,7 +67,7 @@ Retrieve flight search results for a one-way flight using Google Flights. ## Auth -The Arcade Google Flights toolkit uses the [SerpAPI](https://serpapi.com/) to search for flights from Google Flights. +The Arcade Google Flights MCP Sever uses the [SerpAPI](https://serpapi.com/) to search for flights from Google Flights. - **Secret:** - `SERP_API_KEY`: Your SerpAPI API key. diff --git a/app/en/toolkits/search/google_hotels/page.mdx b/app/en/mcp-servers/search/google_hotels/page.mdx similarity index 85% rename from app/en/toolkits/search/google_hotels/page.mdx rename to app/en/mcp-servers/search/google_hotels/page.mdx index 59b90f76d..94b8ba0d0 100644 --- a/app/en/toolkits/search/google_hotels/page.mdx +++ b/app/en/mcp-servers/search/google_hotels/page.mdx @@ -16,7 +16,7 @@ import { Callout } from "nextra/components"; -The Arcade Google Hotels toolkit lets you search for hotels with ease. Use this tool to build intelligent agents and applications that search for hotels worldwide. +The Arcade Google Hotels MCP Sever lets you search for hotels with ease. Use this tool to build intelligent agents and applications that search for hotels worldwide. ## Available Tools @@ -55,10 +55,10 @@ Retrieve hotel search results using the Google Hotels API. label: "Call the tool directly", content: { Python: [ - "/examples/integrations/toolkits/search/google_hotels/search_hotels_example_call_tool.py", + "/examples/integrations/mcp-servers/search/google_hotels/search_hotels_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/search/google_hotels/search_hotels_example_call_tool.js", + "/examples/integrations/mcp-servers/search/google_hotels/search_hotels_example_call_tool.js", ], }, }, @@ -67,7 +67,7 @@ Retrieve hotel search results using the Google Hotels API. ## Auth -The Arcade Google Hotels toolkit uses the [SerpAPI](https://serpapi.com/) to search for hotels from Google Hotels. +The Arcade Google Hotels MCP Sever uses the [SerpAPI](https://serpapi.com/) to search for hotels from Google Hotels. - **Secret:** - `SERP_API_KEY`: Your SerpAPI API key. diff --git a/app/en/toolkits/search/google_jobs/page.mdx b/app/en/mcp-servers/search/google_jobs/page.mdx similarity index 88% rename from app/en/toolkits/search/google_jobs/page.mdx rename to app/en/mcp-servers/search/google_jobs/page.mdx index 510539e79..2f7e2a477 100644 --- a/app/en/toolkits/search/google_jobs/page.mdx +++ b/app/en/mcp-servers/search/google_jobs/page.mdx @@ -16,7 +16,7 @@ import { Callout } from "nextra/components"; -The Arcade Google Jobs toolkit provides a pre-built set of tools for interacting with Google Jobs. These tools make it easy to build agents and AI apps that can: +The Arcade Google Jobs MCP Server provides a pre-built set of tools for interacting with Google Jobs. These tools make it easy to build agents and AI apps that can: - Search for job openings with Google Jobs. @@ -32,7 +32,7 @@ The Arcade Google Jobs toolkit provides a pre-built set of tools for interacting 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-toolkit). + tools](/home/build-tools/create-a-mcp-server). ## GoogleJobs.SearchJobs @@ -44,10 +44,10 @@ The Arcade Google Jobs toolkit provides a pre-built set of tools for interacting label: "Call the Tool Directly", content: { Python: [ - "/examples/integrations/toolkits/search/google_jobs/search_jobs_example_call_tool.py", + "/examples/integrations/mcp-servers/search/google_jobs/search_jobs_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/search/google_jobs/search_jobs_example_call_tool.js", + "/examples/integrations/mcp-servers/search/google_jobs/search_jobs_example_call_tool.js", ], }, }, @@ -66,7 +66,7 @@ Search for job openings with Google Jobs. ## Auth -The Arcade Google Jobs toolkit uses the [SerpAPI](https://serpapi.com/) to get job data from Google Jobs. +The Arcade Google Jobs MCP Sever uses the [SerpAPI](https://serpapi.com/) to get job data from Google Jobs. - **Secret:** - `SERP_API_KEY`: Your SerpAPI API key. diff --git a/app/en/toolkits/search/google_maps/page.mdx b/app/en/mcp-servers/search/google_maps/page.mdx similarity index 94% rename from app/en/toolkits/search/google_maps/page.mdx rename to app/en/mcp-servers/search/google_maps/page.mdx index 1d96fef30..f37bce46f 100644 --- a/app/en/toolkits/search/google_maps/page.mdx +++ b/app/en/mcp-servers/search/google_maps/page.mdx @@ -16,7 +16,7 @@ import { Callout } from "nextra/components"; -The Arcade Google Maps toolkit provides a pre-built set of tools for interacting with Google Maps. These tools make it easy to build agents and AI apps that can: +The Arcade Google Maps MCP Server provides a pre-built set of tools for interacting with Google Maps. These tools make it easy to build agents and AI apps that can: - Get directions to a location using an address or latitude/longitude. @@ -39,7 +39,7 @@ The Arcade Google Maps toolkit provides a pre-built set of tools for interacting 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-toolkit). + tools](/home/build-tools/create-a-mcp-server). ## GoogleMaps.GetDirectionsBetweenAddresses @@ -51,10 +51,10 @@ The Arcade Google Maps toolkit provides a pre-built set of tools for interacting label: "Call the Tool Directly", content: { Python: [ - "/examples/integrations/toolkits/search/google_maps/get_directions_between_addresses_example_call_tool.py", + "/examples/integrations/mcp-servers/search/google_maps/get_directions_between_addresses_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/search/google_maps/get_directions_between_addresses_example_call_tool.js", + "/examples/integrations/mcp-servers/search/google_maps/get_directions_between_addresses_example_call_tool.js", ], }, }, @@ -81,10 +81,10 @@ Get directions between two addresses. label: "Call the Tool Directly", content: { Python: [ - "/examples/integrations/toolkits/search/google_maps/get_directions_between_coordinates_example_call_tool.py", + "/examples/integrations/mcp-servers/search/google_maps/get_directions_between_coordinates_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/search/google_maps/get_directions_between_coordinates_example_call_tool.js", + "/examples/integrations/mcp-servers/search/google_maps/get_directions_between_coordinates_example_call_tool.js", ], }, }, @@ -106,7 +106,7 @@ Get directions between two latitude/longitude coordinates. ## Auth -The Arcade Google Maps toolkit uses the [SerpAPI](https://serpapi.com/) to get directions. +The Arcade Google Maps MCP Sever uses the [SerpAPI](https://serpapi.com/) to get directions. - **Secret:** - `SERP_API_KEY`: Your SerpAPI API key. diff --git a/app/en/toolkits/search/google_news/page.mdx b/app/en/mcp-servers/search/google_news/page.mdx similarity index 95% rename from app/en/toolkits/search/google_news/page.mdx rename to app/en/mcp-servers/search/google_news/page.mdx index e3af6f05f..a0aa7704c 100644 --- a/app/en/toolkits/search/google_news/page.mdx +++ b/app/en/mcp-servers/search/google_news/page.mdx @@ -16,7 +16,7 @@ import { Callout } from "nextra/components"; -The Arcade Google News toolkit provides a pre-built set of tools for interacting with Google News. These tools make it easy to build agents and AI apps that can: +The Arcade Google News MCP Server provides a pre-built set of tools for interacting with Google News. These tools make it easy to build agents and AI apps that can: - Search for news stories with Google News. @@ -32,7 +32,7 @@ The Arcade Google News toolkit provides a pre-built set of tools for interacting 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-toolkit). + tools](/home/build-tools/create-a-mcp-server). ## GoogleNews.SearchNews @@ -44,10 +44,10 @@ The Arcade Google News toolkit provides a pre-built set of tools for interacting label: "Call the Tool Directly", content: { Python: [ - "/examples/integrations/toolkits/search/google_news/search_news_example_call_tool.py", + "/examples/integrations/mcp-servers/search/google_news/search_news_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/search/google_news/search_news_example_call_tool.js", + "/examples/integrations/mcp-servers/search/google_news/search_news_example_call_tool.js", ], }, }, @@ -65,7 +65,7 @@ Search for news stories with Google News. ## Auth -The Arcade Google News toolkit uses the [SerpAPI](https://serpapi.com/) to get news data from Google News. +The Arcade Google News MCP Sever uses the [SerpAPI](https://serpapi.com/) to get news data from Google News. - **Secret:** - `SERP_API_KEY`: Your SerpAPI API key. diff --git a/app/en/toolkits/search/google_search/page.mdx b/app/en/mcp-servers/search/google_search/page.mdx similarity index 77% rename from app/en/toolkits/search/google_search/page.mdx rename to app/en/mcp-servers/search/google_search/page.mdx index 6646df476..ccc82f6fd 100644 --- a/app/en/toolkits/search/google_search/page.mdx +++ b/app/en/mcp-servers/search/google_search/page.mdx @@ -16,7 +16,7 @@ import { Callout } from "nextra/components"; -The Arcade Search toolkit provides a pre-built set of tools for interacting with Google search results. These tools make it easy to build agents and AI apps that can: +The Arcade Search MCP Server provides a pre-built set of tools for interacting with Google search results. These tools make it easy to build agents and AI apps that can: - Search Google and return results. @@ -30,7 +30,7 @@ The Arcade Search toolkit provides a pre-built set of tools for interacting with 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-toolkit). + tools](/home/build-tools/create-a-mcp-server). ## GoogleSearch.Search @@ -42,10 +42,10 @@ The Arcade Search toolkit provides a pre-built set of tools for interacting with label: "Call the Tool Directly", content: { Python: [ - "/examples/integrations/toolkits/search/google_search/search_google_example_call_tool.py", + "/examples/integrations/mcp-servers/search/google_search/search_google_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/search/google_search/search_google_example_call_tool.js", + "/examples/integrations/mcp-servers/search/google_search/search_google_example_call_tool.js", ], }, }, @@ -61,7 +61,7 @@ Search Google using SerpAPI and return organic search results. ## Auth -The Arcade Google Search toolkit uses the [SerpAPI](https://serpapi.com/) to get get results from a Google search. +The Arcade Google Search MCP Sever uses the [SerpAPI](https://serpapi.com/) to get get results from a Google search. - **Secret:** - `SERP_API_KEY`: Your SerpAPI API key. diff --git a/app/en/toolkits/search/google_shopping/page.mdx b/app/en/mcp-servers/search/google_shopping/page.mdx similarity index 94% rename from app/en/toolkits/search/google_shopping/page.mdx rename to app/en/mcp-servers/search/google_shopping/page.mdx index d2cc39d6b..072dd5976 100644 --- a/app/en/toolkits/search/google_shopping/page.mdx +++ b/app/en/mcp-servers/search/google_shopping/page.mdx @@ -16,7 +16,7 @@ import { Callout } from "nextra/components"; -The Arcade Google Shopping Search toolkit provides a pre-built set of tools for interacting with Google Shopping. These tools make it easy to build agents and AI apps that can: +The Arcade Google Shopping Search MCP Server provides a pre-built set of tools for interacting with Google Shopping. These tools make it easy to build agents and AI apps that can: - Search for products on Google Shopping; @@ -35,7 +35,7 @@ The Arcade Google Shopping Search toolkit provides a pre-built set of tools for 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-toolkit). + tools](/home/build-tools/create-a-mcp-server). ## GoogleShopping.SearchProducts @@ -47,10 +47,10 @@ The Arcade Google Shopping Search toolkit provides a pre-built set of tools for label: "Call the Tool Directly", content: { Python: [ - "/examples/integrations/toolkits/search/google_shopping/search_shopping_products_example_call_tool.py", + "/examples/integrations/mcp-servers/search/google_shopping/search_shopping_products_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/search/google_shopping/search_shopping_products_example_call_tool.js", + "/examples/integrations/mcp-servers/search/google_shopping/search_shopping_products_example_call_tool.js", ], }, }, @@ -67,7 +67,7 @@ Search for products on Google Shopping. ## Auth -The Arcade Google Shopping Search toolkit uses the [SerpAPI](https://serpapi.com/) to get product information from Google Shopping. +The Arcade Google Shopping Search MCP Sever uses the [SerpAPI](https://serpapi.com/) to get product information from Google Shopping. - **Secret:** - `SERP_API_KEY`: Your SerpAPI API key. diff --git a/app/en/toolkits/search/walmart/page.mdx b/app/en/mcp-servers/search/walmart/page.mdx similarity index 82% rename from app/en/toolkits/search/walmart/page.mdx rename to app/en/mcp-servers/search/walmart/page.mdx index b3ec97bea..7bf156251 100644 --- a/app/en/toolkits/search/walmart/page.mdx +++ b/app/en/mcp-servers/search/walmart/page.mdx @@ -16,7 +16,7 @@ import { Callout } from "nextra/components"; -The Arcade Walmart Search toolkit provides a pre-built set of tools for interacting with Walmart. These tools make it easy to build agents and AI apps that can: +The Arcade Walmart Search MCP Server provides a pre-built set of tools for interacting with Walmart. These tools make it easy to build agents and AI apps that can: - Search for products listed on Walmart stores; - Get details about a product. @@ -37,7 +37,7 @@ The Arcade Walmart Search toolkit provides a pre-built set of tools for interact 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-toolkit). + tools](/home/build-tools/create-a-mcp-server). ## Walmart.SearchProducts @@ -49,10 +49,10 @@ The Arcade Walmart Search toolkit provides a pre-built set of tools for interact label: "Call the Tool Directly", content: { Python: [ - "/examples/integrations/toolkits/search/walmart/search_walmart_products_example_call_tool.py", + "/examples/integrations/mcp-servers/search/walmart/search_walmart_products_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/search/walmart/search_walmart_products_example_call_tool.js", + "/examples/integrations/mcp-servers/search/walmart/search_walmart_products_example_call_tool.js", ], }, }, @@ -79,10 +79,10 @@ Search for products listed on Walmart stores. label: "Call the Tool Directly", content: { Python: [ - "/examples/integrations/toolkits/search/walmart/get_walmart_product_details_example_call_tool.py", + "/examples/integrations/mcp-servers/search/walmart/get_walmart_product_details_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/search/walmart/get_walmart_product_details_example_call_tool.js", + "/examples/integrations/mcp-servers/search/walmart/get_walmart_product_details_example_call_tool.js", ], }, }, @@ -97,7 +97,7 @@ Get details about a product listed on Walmart. ## Auth -The Arcade Walmart Search toolkit uses the [SerpAPI](https://serpapi.com/) to get product information from Walmart. +The Arcade Walmart Search MCP Sever uses the [SerpAPI](https://serpapi.com/) to get product information from Walmart. - **Secret:** - `SERP_API_KEY`: Your SerpAPI API key. diff --git a/app/en/toolkits/search/youtube/page.mdx b/app/en/mcp-servers/search/youtube/page.mdx similarity index 93% rename from app/en/toolkits/search/youtube/page.mdx rename to app/en/mcp-servers/search/youtube/page.mdx index bec06bc1c..3e924b4be 100644 --- a/app/en/toolkits/search/youtube/page.mdx +++ b/app/en/mcp-servers/search/youtube/page.mdx @@ -16,7 +16,7 @@ import { Callout } from "nextra/components"; -The Arcade YouTube Search toolkit provides a pre-built set of tools for interacting with YouTube. These tools make it easy to build agents and AI apps that can: +The Arcade YouTube Search MCP Server provides a pre-built set of tools for interacting with YouTube. These tools make it easy to build agents and AI apps that can: - Search for videos on YouTube; - Get details about a video. @@ -34,7 +34,7 @@ The Arcade YouTube Search toolkit provides a pre-built set of tools for interact 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-toolkit). + tools](/home/build-tools/create-a-mcp-server). ## Youtube.SearchForVideos @@ -46,10 +46,10 @@ The Arcade YouTube Search toolkit provides a pre-built set of tools for interact label: "Call the Tool Directly", content: { Python: [ - "/examples/integrations/toolkits/search/youtube/search_youtube_videos_example_call_tool.py", + "/examples/integrations/mcp-servers/search/youtube/search_youtube_videos_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/search/youtube/search_youtube_videos_example_call_tool.js", + "/examples/integrations/mcp-servers/search/youtube/search_youtube_videos_example_call_tool.js", ], }, }, @@ -74,10 +74,10 @@ Search for videos on YouTube. label: "Call the Tool Directly", content: { Python: [ - "/examples/integrations/toolkits/search/youtube/get_youtube_video_details_example_call_tool.py", + "/examples/integrations/mcp-servers/search/youtube/get_youtube_video_details_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/search/youtube/get_youtube_video_details_example_call_tool.js", + "/examples/integrations/mcp-servers/search/youtube/get_youtube_video_details_example_call_tool.js", ], }, }, @@ -94,7 +94,7 @@ Get details about a video on YouTube. ## Auth -The Arcade YouTube Search toolkit uses the [SerpAPI](https://serpapi.com/) to get video information from YouTube. +The Arcade YouTube Search MCP Sever uses the [SerpAPI](https://serpapi.com/) to get video information from YouTube. - **Secret:** - `SERP_API_KEY`: Your SerpAPI API key. diff --git a/app/en/mcp-servers/social-communication/_meta.tsx b/app/en/mcp-servers/social-communication/_meta.tsx new file mode 100644 index 000000000..e504f580f --- /dev/null +++ b/app/en/mcp-servers/social-communication/_meta.tsx @@ -0,0 +1,42 @@ +import type { MetaRecord } from "nextra"; + +const meta: MetaRecord = { + "*": { + theme: { + breadcrumb: true, + toc: true, + }, + }, + discord: { + title: "Discord", + }, + linkedin: { + title: "LinkedIn", + }, + "microsoft-teams": { + title: "Microsoft Teams", + }, + reddit: { + title: "Reddit", + }, + slack: { + title: "Slack", + }, + "slack-api": { + title: "Slack API", + }, + teams: { + title: "Teams", + }, + twilio: { + title: "Twilio", + }, + x: { + title: "X (Twitter)", + }, + zoom: { + title: "Zoom", + }, +}; + +export default meta; diff --git a/app/en/toolkits/social-communication/discord/page.mdx b/app/en/mcp-servers/social-communication/discord/page.mdx similarity index 97% rename from app/en/toolkits/social-communication/discord/page.mdx rename to app/en/mcp-servers/social-communication/discord/page.mdx index 76b44f5b9..51dc07f50 100644 --- a/app/en/toolkits/social-communication/discord/page.mdx +++ b/app/en/mcp-servers/social-communication/discord/page.mdx @@ -56,8 +56,9 @@ DISCORD_CLIENT_ID="" ``` - See [Engine configuration](/home/local-deployment/configure/engine) for more information on how - to set environment variables and configure the Arcade Engine. + See [Engine configuration](/home/local-deployment/configure/engine) for more + information on how to set environment variables and configure the Arcade + Engine. ### Edit the Engine configuration @@ -146,7 +147,7 @@ const token = authResponse.context.token; ## Using Discord auth in custom tools -You can author your own [custom tools](/home/build-tools/create-a-toolkit) that interact with the Discord API. +You can author your own [custom tools](/home/build-tools/create-a-mcp-server) that interact with the Discord API. Use the `Discord()` auth class to specify that a tool requires authorization with Discord. The `context.authorization.token` field will be automatically populated with the user's Discord token: diff --git a/app/en/toolkits/social-communication/linkedin/page.mdx b/app/en/mcp-servers/social-communication/linkedin/page.mdx similarity index 71% rename from app/en/toolkits/social-communication/linkedin/page.mdx rename to app/en/mcp-servers/social-communication/linkedin/page.mdx index 637662a2d..445c62d1e 100644 --- a/app/en/toolkits/social-communication/linkedin/page.mdx +++ b/app/en/mcp-servers/social-communication/linkedin/page.mdx @@ -10,7 +10,7 @@ import { Callout } from "nextra/components"; -The Arcade LinkedIn toolkit provides a pre-built set of tools for interacting with LinkedIn. These tools make it easy to build agents and AI apps that can: +The Arcade LinkedIn MCP Server provides a pre-built set of tools for interacting with LinkedIn. These tools make it easy to build agents and AI apps that can: - Create a post ## Available Tools -These tools are currently available in the Arcade LinkedIn toolkit. +These tools are currently available in the Arcade LinkedIn MCP Sever. 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-toolkit) with the [LinkedIn auth + tools](/home/build-tools/create-a-mcp-server) with the [LinkedIn auth provider](/home/auth-providers/linkedin#using-linkedin-auth-in-custom-tools). @@ -47,10 +47,10 @@ These tools are currently available in the Arcade LinkedIn toolkit. label: "Call the Tool with User Authorization", content: { Python: [ - "/examples/integrations/toolkits/linkedin/create_text_post_example_call_tool.py", + "/examples/integrations/mcp-servers/linkedin/create_text_post_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/linkedin/create_text_post_example_call_tool.js", + "/examples/integrations/mcp-servers/linkedin/create_text_post_example_call_tool.js", ], }, }, @@ -67,7 +67,7 @@ Share a new text post to LinkedIn. ## Auth -The Arcade LinkedIn toolkit uses the [LinkedIn auth provider](/home/auth-providers/linkedin) to connect to users' LinkedIn accounts. +The Arcade LinkedIn MCP Sever uses the [LinkedIn auth provider](/home/auth-providers/linkedin) to connect to users' LinkedIn accounts. With the Arcade Cloud Platform, there's nothing to configure. Your users will see `Arcade` as the name of the application that's requesting permission. diff --git a/app/en/toolkits/social-communication/microsoft-teams/_meta.tsx b/app/en/mcp-servers/social-communication/microsoft-teams/_meta.tsx similarity index 100% rename from app/en/toolkits/social-communication/microsoft-teams/_meta.tsx rename to app/en/mcp-servers/social-communication/microsoft-teams/_meta.tsx diff --git a/app/en/toolkits/social-communication/microsoft-teams/page.mdx b/app/en/mcp-servers/social-communication/microsoft-teams/page.mdx similarity index 64% rename from app/en/toolkits/social-communication/microsoft-teams/page.mdx rename to app/en/mcp-servers/social-communication/microsoft-teams/page.mdx index 66305fd0e..b51248e54 100644 --- a/app/en/toolkits/social-communication/microsoft-teams/page.mdx +++ b/app/en/mcp-servers/social-communication/microsoft-teams/page.mdx @@ -1,6 +1,7 @@ --- asIndexPage: true --- + # Microsoft Teams import ToolInfo from "@/app/_components/tool-info"; @@ -19,7 +20,7 @@ import { Callout } from "nextra/components"; -The Microsoft Teams toolkit provides a comprehensive set of tools for interacting with Microsoft Teams. Users can efficiently manage teams, channels, and chats, enabling them to: +The Microsoft Teams MCP Server provides a comprehensive set of tools for interacting with Microsoft Teams. Users can efficiently manage teams, channels, and chats, enabling them to: - Retrieve information about teams, channels, and chats. - List, search, and manage users and teams. @@ -27,46 +28,117 @@ The Microsoft Teams toolkit provides a comprehensive set of tools for interactin - Access and search for messages across chats and channels. - Create new chats and retrieve metadata about existing chats and channels. -This toolkit streamlines collaboration and communication within Microsoft Teams, making it easier to manage interactions and information flow. +This MCP Sever streamlines collaboration and communication within Microsoft Teams, making it easier to manage interactions and information flow. ## 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-toolkit). + tools](/home/build-tools/create-a-mcp-server). ## MicrosoftTeams.WhoAmI @@ -78,10 +150,10 @@ This toolkit streamlines collaboration and communication within Microsoft Teams, label: "Call the Tool Directly", content: { Python: [ - "/examples/integrations/toolkits/microsoft_teams/who_am_i_example_call_tool.py", + "/examples/integrations/mcp-servers/microsoft_teams/who_am_i_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/microsoft_teams/who_am_i_example_call_tool.js", + "/examples/integrations/mcp-servers/microsoft_teams/who_am_i_example_call_tool.js", ], }, }, @@ -94,8 +166,6 @@ Get information about the current user and their Microsoft Teams environment. This tool does not take any parameters. - - ## MicrosoftTeams.GetSignedInUser
@@ -105,10 +175,10 @@ This tool does not take any parameters. label: "Call the Tool Directly", content: { Python: [ - "/examples/integrations/toolkits/microsoft_teams/get_signed_in_user_example_call_tool.py", + "/examples/integrations/mcp-servers/microsoft_teams/get_signed_in_user_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/microsoft_teams/get_signed_in_user_example_call_tool.js", + "/examples/integrations/mcp-servers/microsoft_teams/get_signed_in_user_example_call_tool.js", ], }, }, @@ -130,10 +200,10 @@ This tool does not take any parameters. label: "Call the Tool Directly", content: { Python: [ - "/examples/integrations/toolkits/microsoft_teams/list_users_example_call_tool.py", + "/examples/integrations/mcp-servers/microsoft_teams/list_users_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/microsoft_teams/list_users_example_call_tool.js", + "/examples/integrations/mcp-servers/microsoft_teams/list_users_example_call_tool.js", ], }, }, @@ -156,10 +226,10 @@ Lists the users in the Microsoft Teams tenant. label: "Call the Tool Directly", content: { Python: [ - "/examples/integrations/toolkits/microsoft_teams/search_users_example_call_tool.py", + "/examples/integrations/mcp-servers/microsoft_teams/search_users_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/microsoft_teams/search_users_example_call_tool.js", + "/examples/integrations/mcp-servers/microsoft_teams/search_users_example_call_tool.js", ], }, }, @@ -171,7 +241,7 @@ Searches for users in the Microsoft Teams tenant. **Parameters** - **keywords** (`array[string]`, required) The keywords to match against users' names. -- **match_type** (`Enum` [PartialMatchType](/toolkits/social-communication/microsoft-teams/reference#PartialMatchType), optional) The type of match to use for the keywords. Defaults to match_any_of_the_keywords. +- **match_type** (`Enum` [PartialMatchType](/mcp-servers/social-communication/microsoft-teams/reference#PartialMatchType), optional) The type of match to use for the keywords. Defaults to match_any_of_the_keywords. - **limit** (`integer`, optional) The maximum number of users to return. Defaults to 50, max is 999. - **offset** (`integer`, optional) The offset to start from. @@ -184,10 +254,10 @@ Searches for users in the Microsoft Teams tenant. label: "Call the Tool Directly", content: { Python: [ - "/examples/integrations/toolkits/microsoft_teams/get_channel_metadata_example_call_tool.py", + "/examples/integrations/mcp-servers/microsoft_teams/get_channel_metadata_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/microsoft_teams/get_channel_metadata_example_call_tool.js", + "/examples/integrations/mcp-servers/microsoft_teams/get_channel_metadata_example_call_tool.js", ], }, }, @@ -211,10 +281,10 @@ Retrieves metadata about a Microsoft Teams channel and its members. label: "Call the Tool Directly", content: { Python: [ - "/examples/integrations/toolkits/microsoft_teams/list_channels_example_call_tool.py", + "/examples/integrations/mcp-servers/microsoft_teams/list_channels_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/microsoft_teams/list_channels_example_call_tool.js", + "/examples/integrations/mcp-servers/microsoft_teams/list_channels_example_call_tool.js", ], }, }, @@ -238,10 +308,10 @@ Lists channels in Microsoft Teams (including shared incoming channels). label: "Call the Tool Directly", content: { Python: [ - "/examples/integrations/toolkits/microsoft_teams/search_channels_example_call_tool.py", + "/examples/integrations/mcp-servers/microsoft_teams/search_channels_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/microsoft_teams/search_channels_example_call_tool.js", + "/examples/integrations/mcp-servers/microsoft_teams/search_channels_example_call_tool.js", ], }, }, @@ -253,7 +323,7 @@ Searches for channels in a given Microsoft Teams team. **Parameters** - **keywords** (`array[string]`, required) The keywords to search for in channel names. -- **match_type** (`Enum` [MatchType](/toolkits/social-communication/microsoft-teams/reference#MatchType), optional) The type of match to use for the search. Defaults to 'partial_match_all_keywords'. +- **match_type** (`Enum` [MatchType](/mcp-servers/social-communication/microsoft-teams/reference#MatchType), optional) The type of match to use for the search. Defaults to 'partial_match_all_keywords'. - **limit** (`integer`, optional) The maximum number of channels to return. Defaults to 50. Max of 100. - **offset** (`integer`, optional) The offset to start from. - **team_id_or_name** (`string`, optional) The ID or name of the team to search the channels of (optional). If not provided: in case the user is a member of a single team, the tool will use it; otherwise an error will be returned with a list of all teams to pick from. @@ -267,10 +337,10 @@ Searches for channels in a given Microsoft Teams team. label: "Call the Tool Directly", content: { Python: [ - "/examples/integrations/toolkits/microsoft_teams/get_channel_messages_example_call_tool.py", + "/examples/integrations/mcp-servers/microsoft_teams/get_channel_messages_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/microsoft_teams/get_channel_messages_example_call_tool.js", + "/examples/integrations/mcp-servers/microsoft_teams/get_channel_messages_example_call_tool.js", ], }, }, @@ -295,10 +365,10 @@ Retrieves the messages in a Microsoft Teams channel. label: "Call the Tool Directly", content: { Python: [ - "/examples/integrations/toolkits/microsoft_teams/get_channel_message_replies_example_call_tool.py", + "/examples/integrations/mcp-servers/microsoft_teams/get_channel_message_replies_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/microsoft_teams/get_channel_message_replies_example_call_tool.js", + "/examples/integrations/mcp-servers/microsoft_teams/get_channel_message_replies_example_call_tool.js", ], }, }, @@ -322,10 +392,10 @@ Retrieves the replies to a Microsoft Teams channel message. label: "Call the Tool Directly", content: { Python: [ - "/examples/integrations/toolkits/microsoft_teams/send_message_to_channel_example_call_tool.py", + "/examples/integrations/mcp-servers/microsoft_teams/send_message_to_channel_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/microsoft_teams/send_message_to_channel_example_call_tool.js", + "/examples/integrations/mcp-servers/microsoft_teams/send_message_to_channel_example_call_tool.js", ], }, }, @@ -349,10 +419,10 @@ Sends a message to a Microsoft Teams channel. label: "Call the Tool Directly", content: { Python: [ - "/examples/integrations/toolkits/microsoft_teams/reply_to_channel_message_example_call_tool.py", + "/examples/integrations/mcp-servers/microsoft_teams/reply_to_channel_message_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/microsoft_teams/reply_to_channel_message_example_call_tool.js", + "/examples/integrations/mcp-servers/microsoft_teams/reply_to_channel_message_example_call_tool.js", ], }, }, @@ -377,10 +447,10 @@ Sends a reply to a Microsoft Teams channel message. label: "Call the Tool Directly", content: { Python: [ - "/examples/integrations/toolkits/microsoft_teams/list_teams_example_call_tool.py", + "/examples/integrations/mcp-servers/microsoft_teams/list_teams_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/microsoft_teams/list_teams_example_call_tool.js", + "/examples/integrations/mcp-servers/microsoft_teams/list_teams_example_call_tool.js", ], }, }, @@ -391,7 +461,7 @@ Lists the teams the current user is associated with in Microsoft Teams. **Parameters** -- **membership_type** (`Enum` [TeamMembershipType](/toolkits/social-communication/microsoft-teams/reference#TeamMembershipType), optional) The type of membership to filter by. Defaults to 'direct_member_of_the_team'. +- **membership_type** (`Enum` [TeamMembershipType](/mcp-servers/social-communication/microsoft-teams/reference#TeamMembershipType), optional) The type of membership to filter by. Defaults to 'direct_member_of_the_team'. ## MicrosoftTeams.SearchTeams @@ -402,10 +472,10 @@ Lists the teams the current user is associated with in Microsoft Teams. label: "Call the Tool Directly", content: { Python: [ - "/examples/integrations/toolkits/microsoft_teams/search_teams_example_call_tool.py", + "/examples/integrations/mcp-servers/microsoft_teams/search_teams_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/microsoft_teams/search_teams_example_call_tool.js", + "/examples/integrations/mcp-servers/microsoft_teams/search_teams_example_call_tool.js", ], }, }, @@ -429,10 +499,10 @@ Searches for teams available to the current user in Microsoft Teams. label: "Call the Tool Directly", content: { Python: [ - "/examples/integrations/toolkits/microsoft_teams/get_team_example_call_tool.py", + "/examples/integrations/mcp-servers/microsoft_teams/get_team_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/microsoft_teams/get_team_example_call_tool.js", + "/examples/integrations/mcp-servers/microsoft_teams/get_team_example_call_tool.js", ], }, }, @@ -455,10 +525,10 @@ Retrieves metadata about a team in Microsoft Teams. label: "Call the Tool Directly", content: { Python: [ - "/examples/integrations/toolkits/microsoft_teams/list_team_members_example_call_tool.py", + "/examples/integrations/mcp-servers/microsoft_teams/list_team_members_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/microsoft_teams/list_team_members_example_call_tool.js", + "/examples/integrations/mcp-servers/microsoft_teams/list_team_members_example_call_tool.js", ], }, }, @@ -483,10 +553,10 @@ Lists the members of a team in Microsoft Teams. label: "Call the Tool Directly", content: { Python: [ - "/examples/integrations/toolkits/microsoft_teams/search_team_members_example_call_tool.py", + "/examples/integrations/mcp-servers/microsoft_teams/search_team_members_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/microsoft_teams/search_team_members_example_call_tool.js", + "/examples/integrations/mcp-servers/microsoft_teams/search_team_members_example_call_tool.js", ], }, }, @@ -512,10 +582,10 @@ Searches for members of a team in Microsoft Teams. label: "Call the Tool Directly", content: { Python: [ - "/examples/integrations/toolkits/microsoft_teams/get_chat_message_by_id_example_call_tool.py", + "/examples/integrations/mcp-servers/microsoft_teams/get_chat_message_by_id_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/microsoft_teams/get_chat_message_by_id_example_call_tool.js", + "/examples/integrations/mcp-servers/microsoft_teams/get_chat_message_by_id_example_call_tool.js", ], }, }, @@ -540,10 +610,10 @@ Retrieves a Microsoft Teams chat message. label: "Call the Tool Directly", content: { Python: [ - "/examples/integrations/toolkits/microsoft_teams/get_chat_messages_example_call_tool.py", + "/examples/integrations/mcp-servers/microsoft_teams/get_chat_messages_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/microsoft_teams/get_chat_messages_example_call_tool.js", + "/examples/integrations/mcp-servers/microsoft_teams/get_chat_messages_example_call_tool.js", ], }, }, @@ -570,10 +640,10 @@ Retrieves messages from a Microsoft Teams chat (individual or group). label: "Call the Tool Directly", content: { Python: [ - "/examples/integrations/toolkits/microsoft_teams/get_chat_metadata_example_call_tool.py", + "/examples/integrations/mcp-servers/microsoft_teams/get_chat_metadata_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/microsoft_teams/get_chat_metadata_example_call_tool.js", + "/examples/integrations/mcp-servers/microsoft_teams/get_chat_metadata_example_call_tool.js", ], }, }, @@ -597,10 +667,10 @@ Retrieves metadata about a Microsoft Teams chat. label: "Call the Tool Directly", content: { Python: [ - "/examples/integrations/toolkits/microsoft_teams/list_chats_example_call_tool.py", + "/examples/integrations/mcp-servers/microsoft_teams/list_chats_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/microsoft_teams/list_chats_example_call_tool.js", + "/examples/integrations/mcp-servers/microsoft_teams/list_chats_example_call_tool.js", ], }, }, @@ -623,10 +693,10 @@ List the Microsoft Teams chats to which the current user is a member of. label: "Call the Tool Directly", content: { Python: [ - "/examples/integrations/toolkits/microsoft_teams/send_message_to_chat_example_call_tool.py", + "/examples/integrations/mcp-servers/microsoft_teams/send_message_to_chat_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/microsoft_teams/send_message_to_chat_example_call_tool.js", + "/examples/integrations/mcp-servers/microsoft_teams/send_message_to_chat_example_call_tool.js", ], }, }, @@ -651,10 +721,10 @@ Sends a message to a Microsoft Teams chat. label: "Call the Tool Directly", content: { Python: [ - "/examples/integrations/toolkits/microsoft_teams/reply_to_chat_message_example_call_tool.py", + "/examples/integrations/mcp-servers/microsoft_teams/reply_to_chat_message_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/microsoft_teams/reply_to_chat_message_example_call_tool.js", + "/examples/integrations/mcp-servers/microsoft_teams/reply_to_chat_message_example_call_tool.js", ], }, }, @@ -680,10 +750,10 @@ Sends a reply to a Microsoft Teams chat message. label: "Call the Tool Directly", content: { Python: [ - "/examples/integrations/toolkits/microsoft_teams/create_chat_example_call_tool.py", + "/examples/integrations/mcp-servers/microsoft_teams/create_chat_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/microsoft_teams/create_chat_example_call_tool.js", + "/examples/integrations/mcp-servers/microsoft_teams/create_chat_example_call_tool.js", ], }, }, @@ -706,10 +776,10 @@ Creates a Microsoft Teams chat. label: "Call the Tool Directly", content: { Python: [ - "/examples/integrations/toolkits/microsoft_teams/search_people_example_call_tool.py", + "/examples/integrations/mcp-servers/microsoft_teams/search_people_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/microsoft_teams/search_people_example_call_tool.js", + "/examples/integrations/mcp-servers/microsoft_teams/search_people_example_call_tool.js", ], }, }, @@ -721,7 +791,7 @@ Searches for people the user has interacted with in Microsoft Teams and other 36 **Parameters** - **keywords** (`array[string]`, required) The keywords to match against people's names. Provide one or more expressions. -- **match_type** (`Enum` [PartialMatchType](/toolkits/social-communication/microsoft-teams/reference#PartialMatchType), optional) The type of match to use for the keywords. Defaults to match_any_of_the_keywords. +- **match_type** (`Enum` [PartialMatchType](/mcp-servers/social-communication/microsoft-teams/reference#PartialMatchType), optional) The type of match to use for the keywords. Defaults to match_any_of_the_keywords. - **limit** (`integer`, optional) The maximum number of people to return. Defaults to 50, max is 100. - **next_page_token** (`string`, optional) The next page token to use for pagination. @@ -734,10 +804,10 @@ Searches for people the user has interacted with in Microsoft Teams and other 36 label: "Call the Tool Directly", content: { Python: [ - "/examples/integrations/toolkits/microsoft_teams/search_messages_example_call_tool.py", + "/examples/integrations/mcp-servers/microsoft_teams/search_messages_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/microsoft_teams/search_messages_example_call_tool.js", + "/examples/integrations/mcp-servers/microsoft_teams/search_messages_example_call_tool.js", ], }, }, @@ -754,6 +824,6 @@ Searches for messages across Microsoft Teams chats and channels. ## Auth -The Arcade MicrosoftTeams toolkit uses the [Microsoft auth provider](/home/auth-providers/microsoft) to connect to users' MicrosoftTeams accounts. Please refer to the [Microsoft auth provider](/home/auth-providers/microsoft) documentation to learn how to configure auth. +The Arcade MicrosoftTeams MCP Sever uses the [Microsoft auth provider](/home/auth-providers/microsoft) to connect to users' MicrosoftTeams accounts. Please refer to the [Microsoft auth provider](/home/auth-providers/microsoft) documentation to learn how to configure auth. diff --git a/app/en/toolkits/social-communication/microsoft-teams/reference/page.mdx b/app/en/mcp-servers/social-communication/microsoft-teams/reference/page.mdx similarity index 95% rename from app/en/toolkits/social-communication/microsoft-teams/reference/page.mdx rename to app/en/mcp-servers/social-communication/microsoft-teams/reference/page.mdx index a14fb8dfc..a4e6c6802 100644 --- a/app/en/toolkits/social-communication/microsoft-teams/reference/page.mdx +++ b/app/en/mcp-servers/social-communication/microsoft-teams/reference/page.mdx @@ -1,6 +1,6 @@ # MicrosoftTeams Reference -Below is a reference of enumerations used by some tools in the MicrosoftTeams toolkit: +Below is a reference of enumerations used by some tools in the MicrosoftTeams MCP Server: ## PartialMatchType diff --git a/app/en/toolkits/social-communication/reddit/page.mdx b/app/en/mcp-servers/social-communication/reddit/page.mdx similarity index 74% rename from app/en/toolkits/social-communication/reddit/page.mdx rename to app/en/mcp-servers/social-communication/reddit/page.mdx index cb436c8d3..d59ec04bd 100644 --- a/app/en/toolkits/social-communication/reddit/page.mdx +++ b/app/en/mcp-servers/social-communication/reddit/page.mdx @@ -17,7 +17,7 @@ import { Callout } from "nextra/components"; -The Arcade Reddit toolkit provides a pre-built set of tools for interacting with Reddit. These tools make it easy to build agents and AI apps that can: +The Arcade Reddit MCP Server provides a pre-built set of tools for interacting with Reddit. These tools make it easy to build agents and AI apps that can: - Submit text posts - Comment on posts @@ -32,7 +32,7 @@ The Arcade Reddit toolkit provides a pre-built set of tools for interacting with ## Available Tools -These tools are currently available in the Arcade Reddit toolkit. +These tools are currently available in the Arcade Reddit MCP Sever. 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-toolkit) with the [Reddit auth + tools](/home/build-tools/create-a-mcp-server) with the [Reddit auth provider](/home/auth-providers/reddit#using-reddit-auth-in-custom-tools). @@ -79,10 +79,10 @@ These tools are currently available in the Arcade Reddit toolkit. label: "Call the Tool with User Authorization", content: { Python: [ - "/examples/integrations/toolkits/reddit/submit_text_post_example_call_tool.py", + "/examples/integrations/mcp-servers/reddit/submit_text_post_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/reddit/submit_text_post_example_call_tool.js", + "/examples/integrations/mcp-servers/reddit/submit_text_post_example_call_tool.js", ], }, }, @@ -111,10 +111,10 @@ Submit a text-based post to a subreddit label: "Call the Tool with User Authorization", content: { Python: [ - "/examples/integrations/toolkits/reddit/comment_on_post_example_call_tool.py", + "/examples/integrations/mcp-servers/reddit/comment_on_post_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/reddit/comment_on_post_example_call_tool.js", + "/examples/integrations/mcp-servers/reddit/comment_on_post_example_call_tool.js", ], }, }, @@ -139,10 +139,10 @@ Comment on a Reddit post. label: "Call the Tool with User Authorization", content: { Python: [ - "/examples/integrations/toolkits/reddit/reply_to_comment_example_call_tool.py", + "/examples/integrations/mcp-servers/reddit/reply_to_comment_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/reddit/reply_to_comment_example_call_tool.js", + "/examples/integrations/mcp-servers/reddit/reply_to_comment_example_call_tool.js", ], }, }, @@ -167,10 +167,10 @@ Reply to a Reddit comment label: "Call the Tool with User Authorization", content: { Python: [ - "/examples/integrations/toolkits/reddit/get_posts_in_subreddit_example_call_tool.py", + "/examples/integrations/mcp-servers/reddit/get_posts_in_subreddit_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/reddit/get_posts_in_subreddit_example_call_tool.js", + "/examples/integrations/mcp-servers/reddit/get_posts_in_subreddit_example_call_tool.js", ], }, }, @@ -184,10 +184,10 @@ The time_range is required if the listing type is 'top' or 'controversial'. **Parameters** - **`subreddit`** _(string, required)_ The name of the subreddit to fetch posts from. -- **`listing`** _(enum ([SubredditListingType](/toolkits/social-communication/reddit#subredditlistingtype)), optional)_ The type of listing to fetch. For simple listings such as 'hot', 'new', or 'rising', the time_range parameter is ignored. For time-based listings such as 'top' or 'controversial', the 'time_range' parameter is required. Default is 'hot'. +- **`listing`** _(enum ([SubredditListingType](/mcp-servers/social-communication/reddit#subredditlistingtype)), optional)_ The type of listing to fetch. For simple listings such as 'hot', 'new', or 'rising', the time_range parameter is ignored. For time-based listings such as 'top' or 'controversial', the 'time_range' parameter is required. Default is 'hot'. - **`limit`** _(integer, optional)_ The maximum number of posts to fetch. Default is 10, max is 100. - **`cursor`** _(str, optional)_ The pagination token from a previous call. -- **`time_range`** _(enum ([RedditTimeFilter](/toolkits/social-communication/reddit#reddittimefilter)), optional)_ The time range for filtering posts. Must be provided if the listing type is 'top' or 'controversial'. Otherwise, it is ignored. Defaults to 'today'. +- **`time_range`** _(enum ([RedditTimeFilter](/mcp-servers/social-communication/reddit#reddittimefilter)), optional)_ The time range for filtering posts. Must be provided if the listing type is 'top' or 'controversial'. Otherwise, it is ignored. Defaults to 'today'. --- @@ -200,10 +200,10 @@ The time_range is required if the listing type is 'top' or 'controversial'. label: "Call the Tool with User Authorization", content: { Python: [ - "/examples/integrations/toolkits/reddit/get_content_of_post_example_call_tool.py", + "/examples/integrations/mcp-servers/reddit/get_content_of_post_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/reddit/get_content_of_post_example_call_tool.js", + "/examples/integrations/mcp-servers/reddit/get_content_of_post_example_call_tool.js", ], }, }, @@ -227,10 +227,10 @@ Get the content (body) of a Reddit post by its identifier. label: "Call the Tool with User Authorization", content: { Python: [ - "/examples/integrations/toolkits/reddit/get_content_of_multiple_posts_example_call_tool.py", + "/examples/integrations/mcp-servers/reddit/get_content_of_multiple_posts_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/reddit/get_content_of_multiple_posts_example_call_tool.js", + "/examples/integrations/mcp-servers/reddit/get_content_of_multiple_posts_example_call_tool.js", ], }, }, @@ -245,7 +245,7 @@ Get the content (body) of multiple Reddit posts by their identifiers in a single --- -## Reddit.GetTopLevelCommentsOfPost +## Reddit.GetTopLevelComments
- + -The SlackApi toolkit offers a comprehensive set of tools for administering Slack workspaces, automating messaging, managing channels, calls, files, emojis, user groups, invites, and user/team data. Key capabilities include: +The SlackApi MCP Sever offers a comprehensive set of tools for administering Slack workspaces, automating messaging, managing channels, calls, files, emojis, user groups, invites, and user/team data. Key capabilities include: - Workspace & team management: create/update team name/description, fetch team info, settings, preferences, integration logs, billable users, and list/inspect teams in an Enterprise org. - User and identity operations: list workspace/team users, find users by email, get user profiles, presence, identity, and manage profile photos. @@ -34,7 +34,7 @@ The SlackApi toolkit offers a comprehensive set of tools for administering Slack - Admin tools & verification: fetch workspace settings, owners, channels for org usergroups, list enterprise emojis/teams, revoke tokens, verify API calling code, and retrieve integration logs. - Custom behavior: provide custom unfurling for URLs. -This toolkit is designed for admins and apps requiring broad Slack API access (admin, invites, calls, chat, files, usergroups, reactions, users scopes). +This MCP Sever is designed for admins and apps requiring broad Slack API access (admin, invites, calls, chat, files, usergroups, reactions, users scopes). ## Available Tools @@ -285,7 +285,7 @@ This toolkit is designed for admins and apps requiring broad Slack API access (a 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-toolkit). + tools](/home/build-tools/create-a-mcp-server). ## SlackApi.AddSlackEmojiAlias @@ -297,10 +297,10 @@ This toolkit is designed for admins and apps requiring broad Slack API access (a label: "Call the Tool Directly", content: { Python: [ - "/examples/integrations/toolkits/slack_api/add_slack_emoji_alias_example_call_tool.py", + "/examples/integrations/mcp-servers/slack_api/add_slack_emoji_alias_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/slack_api/add_slack_emoji_alias_example_call_tool.js", + "/examples/integrations/mcp-servers/slack_api/add_slack_emoji_alias_example_call_tool.js", ], }, }, @@ -323,10 +323,10 @@ Add an emoji alias in a Slack Enterprise organization. label: "Call the Tool Directly", content: { Python: [ - "/examples/integrations/toolkits/slack_api/list_slack_enterprise_emojis_example_call_tool.py", + "/examples/integrations/mcp-servers/slack_api/list_slack_enterprise_emojis_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/slack_api/list_slack_enterprise_emojis_example_call_tool.js", + "/examples/integrations/mcp-servers/slack_api/list_slack_enterprise_emojis_example_call_tool.js", ], }, }, @@ -349,10 +349,10 @@ Retrieve emojis for a Slack Enterprise organization. label: "Call the Tool Directly", content: { Python: [ - "/examples/integrations/toolkits/slack_api/rename_slack_emoji_example_call_tool.py", + "/examples/integrations/mcp-servers/slack_api/rename_slack_emoji_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/slack_api/rename_slack_emoji_example_call_tool.js", + "/examples/integrations/mcp-servers/slack_api/rename_slack_emoji_example_call_tool.js", ], }, }, @@ -375,10 +375,10 @@ Rename an emoji in a Slack Enterprise organization. label: "Call the Tool Directly", content: { Python: [ - "/examples/integrations/toolkits/slack_api/list_approved_workspace_invite_requests_example_call_tool.py", + "/examples/integrations/mcp-servers/slack_api/list_approved_workspace_invite_requests_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/slack_api/list_approved_workspace_invite_requests_example_call_tool.js", + "/examples/integrations/mcp-servers/slack_api/list_approved_workspace_invite_requests_example_call_tool.js", ], }, }, @@ -402,10 +402,10 @@ Retrieve all approved workspace invite requests from Slack. label: "Call the Tool Directly", content: { Python: [ - "/examples/integrations/toolkits/slack_api/list_denied_slack_invite_requests_example_call_tool.py", + "/examples/integrations/mcp-servers/slack_api/list_denied_slack_invite_requests_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/slack_api/list_denied_slack_invite_requests_example_call_tool.js", + "/examples/integrations/mcp-servers/slack_api/list_denied_slack_invite_requests_example_call_tool.js", ], }, }, @@ -429,10 +429,10 @@ Retrieve denied Slack workspace invite requests. label: "Call the Tool Directly", content: { Python: [ - "/examples/integrations/toolkits/slack_api/list_pending_workspace_invites_example_call_tool.py", + "/examples/integrations/mcp-servers/slack_api/list_pending_workspace_invites_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/slack_api/list_pending_workspace_invites_example_call_tool.js", + "/examples/integrations/mcp-servers/slack_api/list_pending_workspace_invites_example_call_tool.js", ], }, }, @@ -456,10 +456,10 @@ Retrieve all pending workspace invite requests from Slack. label: "Call the Tool Directly", content: { Python: [ - "/examples/integrations/toolkits/slack_api/list_teams_in_enterprise_example_call_tool.py", + "/examples/integrations/mcp-servers/slack_api/list_teams_in_enterprise_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/slack_api/list_teams_in_enterprise_example_call_tool.js", + "/examples/integrations/mcp-servers/slack_api/list_teams_in_enterprise_example_call_tool.js", ], }, }, @@ -482,10 +482,10 @@ Retrieve all teams in an Enterprise organization on Slack. label: "Call the Tool Directly", content: { Python: [ - "/examples/integrations/toolkits/slack_api/list_slack_workspace_owners_example_call_tool.py", + "/examples/integrations/mcp-servers/slack_api/list_slack_workspace_owners_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/slack_api/list_slack_workspace_owners_example_call_tool.js", + "/examples/integrations/mcp-servers/slack_api/list_slack_workspace_owners_example_call_tool.js", ], }, }, @@ -509,10 +509,10 @@ Retrieve all owners in a Slack workspace. label: "Call the Tool Directly", content: { Python: [ - "/examples/integrations/toolkits/slack_api/fetch_workspace_settings_info_example_call_tool.py", + "/examples/integrations/mcp-servers/slack_api/fetch_workspace_settings_info_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/slack_api/fetch_workspace_settings_info_example_call_tool.js", + "/examples/integrations/mcp-servers/slack_api/fetch_workspace_settings_info_example_call_tool.js", ], }, }, @@ -534,10 +534,10 @@ Retrieve settings information for a Slack workspace. label: "Call the Tool Directly", content: { Python: [ - "/examples/integrations/toolkits/slack_api/set_workspace_description_example_call_tool.py", + "/examples/integrations/mcp-servers/slack_api/set_workspace_description_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/slack_api/set_workspace_description_example_call_tool.js", + "/examples/integrations/mcp-servers/slack_api/set_workspace_description_example_call_tool.js", ], }, }, @@ -560,10 +560,10 @@ Update the description of a Slack workspace. label: "Call the Tool Directly", content: { Python: [ - "/examples/integrations/toolkits/slack_api/set_slack_workspace_name_example_call_tool.py", + "/examples/integrations/mcp-servers/slack_api/set_slack_workspace_name_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/slack_api/set_slack_workspace_name_example_call_tool.js", + "/examples/integrations/mcp-servers/slack_api/set_slack_workspace_name_example_call_tool.js", ], }, }, @@ -586,10 +586,10 @@ Update the name of a Slack workspace. label: "Call the Tool Directly", content: { Python: [ - "/examples/integrations/toolkits/slack_api/list_channels_for_usergroup_example_call_tool.py", + "/examples/integrations/mcp-servers/slack_api/list_channels_for_usergroup_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/slack_api/list_channels_for_usergroup_example_call_tool.js", + "/examples/integrations/mcp-servers/slack_api/list_channels_for_usergroup_example_call_tool.js", ], }, }, @@ -613,10 +613,10 @@ Retrieve channels linked to an org-level user group in Slack. label: "Call the Tool Directly", content: { Python: [ - "/examples/integrations/toolkits/slack_api/list_workspace_users_example_call_tool.py", + "/examples/integrations/mcp-servers/slack_api/list_workspace_users_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/slack_api/list_workspace_users_example_call_tool.js", + "/examples/integrations/mcp-servers/slack_api/list_workspace_users_example_call_tool.js", ], }, }, @@ -643,10 +643,10 @@ Retrieve a list of users from a Slack workspace. label: "Call the Tool Directly", content: { Python: [ - "/examples/integrations/toolkits/slack_api/check_api_calling_code_example_call_tool.py", + "/examples/integrations/mcp-servers/slack_api/check_api_calling_code_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/slack_api/check_api_calling_code_example_call_tool.js", + "/examples/integrations/mcp-servers/slack_api/check_api_calling_code_example_call_tool.js", ], }, }, @@ -668,10 +668,10 @@ Verify the correctness of API calling code for Slack. label: "Call the Tool Directly", content: { Python: [ - "/examples/integrations/toolkits/slack_api/revoke_slack_token_example_call_tool.py", + "/examples/integrations/mcp-servers/slack_api/revoke_slack_token_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/slack_api/revoke_slack_token_example_call_tool.js", + "/examples/integrations/mcp-servers/slack_api/revoke_slack_token_example_call_tool.js", ], }, }, @@ -693,10 +693,10 @@ Revoke a Slack authentication token. label: "Call the Tool Directly", content: { Python: [ - "/examples/integrations/toolkits/slack_api/edit_slack_bookmark_example_call_tool.py", + "/examples/integrations/mcp-servers/slack_api/edit_slack_bookmark_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/slack_api/edit_slack_bookmark_example_call_tool.js", + "/examples/integrations/mcp-servers/slack_api/edit_slack_bookmark_example_call_tool.js", ], }, }, @@ -722,10 +722,10 @@ Edit an existing bookmark in a Slack channel. label: "Call the Tool Directly", content: { Python: [ - "/examples/integrations/toolkits/slack_api/remove_slack_bookmark_example_call_tool.py", + "/examples/integrations/mcp-servers/slack_api/remove_slack_bookmark_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/slack_api/remove_slack_bookmark_example_call_tool.js", + "/examples/integrations/mcp-servers/slack_api/remove_slack_bookmark_example_call_tool.js", ], }, }, @@ -749,10 +749,10 @@ Remove a bookmark from a Slack channel. label: "Call the Tool Directly", content: { Python: [ - "/examples/integrations/toolkits/slack_api/get_slack_bot_info_example_call_tool.py", + "/examples/integrations/mcp-servers/slack_api/get_slack_bot_info_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/slack_api/get_slack_bot_info_example_call_tool.js", + "/examples/integrations/mcp-servers/slack_api/get_slack_bot_info_example_call_tool.js", ], }, }, @@ -775,10 +775,10 @@ Retrieve details about a Slack bot user. label: "Call the Tool Directly", content: { Python: [ - "/examples/integrations/toolkits/slack_api/register_slack_call_example_call_tool.py", + "/examples/integrations/mcp-servers/slack_api/register_slack_call_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/slack_api/register_slack_call_example_call_tool.js", + "/examples/integrations/mcp-servers/slack_api/register_slack_call_example_call_tool.js", ], }, }, @@ -807,10 +807,10 @@ Registers a new call on Slack. label: "Call the Tool Directly", content: { Python: [ - "/examples/integrations/toolkits/slack_api/get_call_information_example_call_tool.py", + "/examples/integrations/mcp-servers/slack_api/get_call_information_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/slack_api/get_call_information_example_call_tool.js", + "/examples/integrations/mcp-servers/slack_api/get_call_information_example_call_tool.js", ], }, }, @@ -832,10 +832,10 @@ Retrieve detailed information about a specific call in Slack. label: "Call the Tool Directly", content: { Python: [ - "/examples/integrations/toolkits/slack_api/add_call_participants_example_call_tool.py", + "/examples/integrations/mcp-servers/slack_api/add_call_participants_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/slack_api/add_call_participants_example_call_tool.js", + "/examples/integrations/mcp-servers/slack_api/add_call_participants_example_call_tool.js", ], }, }, @@ -858,10 +858,10 @@ Add new participants to a Slack call. label: "Call the Tool Directly", content: { Python: [ - "/examples/integrations/toolkits/slack_api/remove_call_participants_example_call_tool.py", + "/examples/integrations/mcp-servers/slack_api/remove_call_participants_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/slack_api/remove_call_participants_example_call_tool.js", + "/examples/integrations/mcp-servers/slack_api/remove_call_participants_example_call_tool.js", ], }, }, @@ -884,10 +884,10 @@ Remove participants from a Slack call. label: "Call the Tool Directly", content: { Python: [ - "/examples/integrations/toolkits/slack_api/delete_scheduled_slack_message_example_call_tool.py", + "/examples/integrations/mcp-servers/slack_api/delete_scheduled_slack_message_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/slack_api/delete_scheduled_slack_message_example_call_tool.js", + "/examples/integrations/mcp-servers/slack_api/delete_scheduled_slack_message_example_call_tool.js", ], }, }, @@ -911,10 +911,10 @@ Delete a pending scheduled message from Slack queue. label: "Call the Tool Directly", content: { Python: [ - "/examples/integrations/toolkits/slack_api/get_slack_message_permalink_example_call_tool.py", + "/examples/integrations/mcp-servers/slack_api/get_slack_message_permalink_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/slack_api/get_slack_message_permalink_example_call_tool.js", + "/examples/integrations/mcp-servers/slack_api/get_slack_message_permalink_example_call_tool.js", ], }, }, @@ -937,10 +937,10 @@ Retrieve a permalink URL for a specific Slack message. label: "Call the Tool Directly", content: { Python: [ - "/examples/integrations/toolkits/slack_api/send_ephemeral_message_slack_example_call_tool.py", + "/examples/integrations/mcp-servers/slack_api/send_ephemeral_message_slack_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/slack_api/send_ephemeral_message_slack_example_call_tool.js", + "/examples/integrations/mcp-servers/slack_api/send_ephemeral_message_slack_example_call_tool.js", ], }, }, @@ -973,10 +973,10 @@ Send an ephemeral message to a user in a Slack channel. label: "Call the Tool Directly", content: { Python: [ - "/examples/integrations/toolkits/slack_api/send_slack_message_example_call_tool.py", + "/examples/integrations/mcp-servers/slack_api/send_slack_message_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/slack_api/send_slack_message_example_call_tool.js", + "/examples/integrations/mcp-servers/slack_api/send_slack_message_example_call_tool.js", ], }, }, @@ -1014,10 +1014,10 @@ Sends a message to a Slack channel. label: "Call the Tool Directly", content: { Python: [ - "/examples/integrations/toolkits/slack_api/list_scheduled_messages_example_call_tool.py", + "/examples/integrations/mcp-servers/slack_api/list_scheduled_messages_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/slack_api/list_scheduled_messages_example_call_tool.js", + "/examples/integrations/mcp-servers/slack_api/list_scheduled_messages_example_call_tool.js", ], }, }, @@ -1044,10 +1044,10 @@ Retrieve scheduled messages from Slack. label: "Call the Tool Directly", content: { Python: [ - "/examples/integrations/toolkits/slack_api/schedule_slack_message_example_call_tool.py", + "/examples/integrations/mcp-servers/slack_api/schedule_slack_message_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/slack_api/schedule_slack_message_example_call_tool.js", + "/examples/integrations/mcp-servers/slack_api/schedule_slack_message_example_call_tool.js", ], }, }, @@ -1081,10 +1081,10 @@ Schedule a message to be sent later in Slack. label: "Call the Tool Directly", content: { Python: [ - "/examples/integrations/toolkits/slack_api/custom_unfurl_slack_urls_example_call_tool.py", + "/examples/integrations/mcp-servers/slack_api/custom_unfurl_slack_urls_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/slack_api/custom_unfurl_slack_urls_example_call_tool.js", + "/examples/integrations/mcp-servers/slack_api/custom_unfurl_slack_urls_example_call_tool.js", ], }, }, @@ -1114,10 +1114,10 @@ Provide custom unfurl behavior for user-posted URLs on Slack. label: "Call the Tool Directly", content: { Python: [ - "/examples/integrations/toolkits/slack_api/accept_slack_invite_example_call_tool.py", + "/examples/integrations/mcp-servers/slack_api/accept_slack_invite_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/slack_api/accept_slack_invite_example_call_tool.js", + "/examples/integrations/mcp-servers/slack_api/accept_slack_invite_example_call_tool.js", ], }, }, @@ -1144,10 +1144,10 @@ Accept invitations to a Slack Connect channel. label: "Call the Tool Directly", content: { Python: [ - "/examples/integrations/toolkits/slack_api/approve_slack_channel_invitation_example_call_tool.py", + "/examples/integrations/mcp-servers/slack_api/approve_slack_channel_invitation_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/slack_api/approve_slack_channel_invitation_example_call_tool.js", + "/examples/integrations/mcp-servers/slack_api/approve_slack_channel_invitation_example_call_tool.js", ], }, }, @@ -1170,10 +1170,10 @@ Approve an invitation to a Slack Connect channel. label: "Call the Tool Directly", content: { Python: [ - "/examples/integrations/toolkits/slack_api/create_slack_conversation_example_call_tool.py", + "/examples/integrations/mcp-servers/slack_api/create_slack_conversation_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/slack_api/create_slack_conversation_example_call_tool.js", + "/examples/integrations/mcp-servers/slack_api/create_slack_conversation_example_call_tool.js", ], }, }, @@ -1197,10 +1197,10 @@ Create a new public or private Slack conversation. label: "Call the Tool Directly", content: { Python: [ - "/examples/integrations/toolkits/slack_api/get_conversation_info_example_call_tool.py", + "/examples/integrations/mcp-servers/slack_api/get_conversation_info_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/slack_api/get_conversation_info_example_call_tool.js", + "/examples/integrations/mcp-servers/slack_api/get_conversation_info_example_call_tool.js", ], }, }, @@ -1224,10 +1224,10 @@ Fetches information about a Slack conversation. label: "Call the Tool Directly", content: { Python: [ - "/examples/integrations/toolkits/slack_api/invite_user_to_slack_channel_example_call_tool.py", + "/examples/integrations/mcp-servers/slack_api/invite_user_to_slack_channel_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/slack_api/invite_user_to_slack_channel_example_call_tool.js", + "/examples/integrations/mcp-servers/slack_api/invite_user_to_slack_channel_example_call_tool.js", ], }, }, @@ -1251,10 +1251,10 @@ Invite users to a Slack channel. label: "Call the Tool Directly", content: { Python: [ - "/examples/integrations/toolkits/slack_api/join_slack_conversation_example_call_tool.py", + "/examples/integrations/mcp-servers/slack_api/join_slack_conversation_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/slack_api/join_slack_conversation_example_call_tool.js", + "/examples/integrations/mcp-servers/slack_api/join_slack_conversation_example_call_tool.js", ], }, }, @@ -1276,10 +1276,10 @@ Join an existing conversation in Slack. label: "Call the Tool Directly", content: { Python: [ - "/examples/integrations/toolkits/slack_api/list_slack_channels_example_call_tool.py", + "/examples/integrations/mcp-servers/slack_api/list_slack_channels_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/slack_api/list_slack_channels_example_call_tool.js", + "/examples/integrations/mcp-servers/slack_api/list_slack_channels_example_call_tool.js", ], }, }, @@ -1305,10 +1305,10 @@ Retrieve a list of all channels in a Slack team. label: "Call the Tool Directly", content: { Python: [ - "/examples/integrations/toolkits/slack_api/list_shared_channel_invites_example_call_tool.py", + "/examples/integrations/mcp-servers/slack_api/list_shared_channel_invites_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/slack_api/list_shared_channel_invites_example_call_tool.js", + "/examples/integrations/mcp-servers/slack_api/list_shared_channel_invites_example_call_tool.js", ], }, }, @@ -1332,10 +1332,10 @@ Retrieve unapproved shared channel invites from Slack. label: "Call the Tool Directly", content: { Python: [ - "/examples/integrations/toolkits/slack_api/set_slack_channel_read_cursor_example_call_tool.py", + "/examples/integrations/mcp-servers/slack_api/set_slack_channel_read_cursor_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/slack_api/set_slack_channel_read_cursor_example_call_tool.js", + "/examples/integrations/mcp-servers/slack_api/set_slack_channel_read_cursor_example_call_tool.js", ], }, }, @@ -1358,10 +1358,10 @@ Update the read cursor in a Slack channel. label: "Call the Tool Directly", content: { Python: [ - "/examples/integrations/toolkits/slack_api/get_slack_conversation_members_example_call_tool.py", + "/examples/integrations/mcp-servers/slack_api/get_slack_conversation_members_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/slack_api/get_slack_conversation_members_example_call_tool.js", + "/examples/integrations/mcp-servers/slack_api/get_slack_conversation_members_example_call_tool.js", ], }, }, @@ -1385,10 +1385,10 @@ Retrieve members from a specified Slack conversation. label: "Call the Tool Directly", content: { Python: [ - "/examples/integrations/toolkits/slack_api/open_or_resume_slack_conversation_example_call_tool.py", + "/examples/integrations/mcp-servers/slack_api/open_or_resume_slack_conversation_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/slack_api/open_or_resume_slack_conversation_example_call_tool.js", + "/examples/integrations/mcp-servers/slack_api/open_or_resume_slack_conversation_example_call_tool.js", ], }, }, @@ -1413,10 +1413,10 @@ Open or resume a direct or multi-person message in Slack. label: "Call the Tool Directly", content: { Python: [ - "/examples/integrations/toolkits/slack_api/get_slack_thread_messages_example_call_tool.py", + "/examples/integrations/mcp-servers/slack_api/get_slack_thread_messages_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/slack_api/get_slack_thread_messages_example_call_tool.js", + "/examples/integrations/mcp-servers/slack_api/get_slack_thread_messages_example_call_tool.js", ], }, }, @@ -1445,10 +1445,10 @@ Retrieve messages from a Slack conversation thread. label: "Call the Tool Directly", content: { Python: [ - "/examples/integrations/toolkits/slack_api/deny_shared_invite_request_example_call_tool.py", + "/examples/integrations/mcp-servers/slack_api/deny_shared_invite_request_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/slack_api/deny_shared_invite_request_example_call_tool.js", + "/examples/integrations/mcp-servers/slack_api/deny_shared_invite_request_example_call_tool.js", ], }, }, @@ -1471,10 +1471,10 @@ Denies an external user invitation to a Slack channel. label: "Call the Tool Directly", content: { Python: [ - "/examples/integrations/toolkits/slack_api/list_custom_emoji_for_team_example_call_tool.py", + "/examples/integrations/mcp-servers/slack_api/list_custom_emoji_for_team_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/slack_api/list_custom_emoji_for_team_example_call_tool.js", + "/examples/integrations/mcp-servers/slack_api/list_custom_emoji_for_team_example_call_tool.js", ], }, }, @@ -1496,10 +1496,10 @@ Retrieve a list of custom emojis for a specific team. label: "Call the Tool Directly", content: { Python: [ - "/examples/integrations/toolkits/slack_api/get_external_file_upload_url_example_call_tool.py", + "/examples/integrations/mcp-servers/slack_api/get_external_file_upload_url_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/slack_api/get_external_file_upload_url_example_call_tool.js", + "/examples/integrations/mcp-servers/slack_api/get_external_file_upload_url_example_call_tool.js", ], }, }, @@ -1524,10 +1524,10 @@ Retrieve a URL to upload an external file to Slack. label: "Call the Tool Directly", content: { Python: [ - "/examples/integrations/toolkits/slack_api/get_remote_file_info_slack_example_call_tool.py", + "/examples/integrations/mcp-servers/slack_api/get_remote_file_info_slack_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/slack_api/get_remote_file_info_slack_example_call_tool.js", + "/examples/integrations/mcp-servers/slack_api/get_remote_file_info_slack_example_call_tool.js", ], }, }, @@ -1550,10 +1550,10 @@ Retrieve details about a remote file from Slack. label: "Call the Tool Directly", content: { Python: [ - "/examples/integrations/toolkits/slack_api/get_slack_remote_files_info_example_call_tool.py", + "/examples/integrations/mcp-servers/slack_api/get_slack_remote_files_info_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/slack_api/get_slack_remote_files_info_example_call_tool.js", + "/examples/integrations/mcp-servers/slack_api/get_slack_remote_files_info_example_call_tool.js", ], }, }, @@ -1579,10 +1579,10 @@ Retrieve information about remote files added to Slack. label: "Call the Tool Directly", content: { Python: [ - "/examples/integrations/toolkits/slack_api/share_remote_file_in_channel_example_call_tool.py", + "/examples/integrations/mcp-servers/slack_api/share_remote_file_in_channel_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/slack_api/share_remote_file_in_channel_example_call_tool.js", + "/examples/integrations/mcp-servers/slack_api/share_remote_file_in_channel_example_call_tool.js", ], }, }, @@ -1606,10 +1606,10 @@ Share a remote file into a Slack channel. label: "Call the Tool Directly", content: { Python: [ - "/examples/integrations/toolkits/slack_api/enable_slack_file_sharing_example_call_tool.py", + "/examples/integrations/mcp-servers/slack_api/enable_slack_file_sharing_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/slack_api/enable_slack_file_sharing_example_call_tool.js", + "/examples/integrations/mcp-servers/slack_api/enable_slack_file_sharing_example_call_tool.js", ], }, }, @@ -1631,10 +1631,10 @@ Enable a Slack file for public sharing. label: "Call the Tool Directly", content: { Python: [ - "/examples/integrations/toolkits/slack_api/pin_item_to_slack_channel_example_call_tool.py", + "/examples/integrations/mcp-servers/slack_api/pin_item_to_slack_channel_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/slack_api/pin_item_to_slack_channel_example_call_tool.js", + "/examples/integrations/mcp-servers/slack_api/pin_item_to_slack_channel_example_call_tool.js", ], }, }, @@ -1657,10 +1657,10 @@ Pin an item to a Slack channel. label: "Call the Tool Directly", content: { Python: [ - "/examples/integrations/toolkits/slack_api/list_pinned_items_example_call_tool.py", + "/examples/integrations/mcp-servers/slack_api/list_pinned_items_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/slack_api/list_pinned_items_example_call_tool.js", + "/examples/integrations/mcp-servers/slack_api/list_pinned_items_example_call_tool.js", ], }, }, @@ -1682,10 +1682,10 @@ Retrieve items pinned to a Slack channel. label: "Call the Tool Directly", content: { Python: [ - "/examples/integrations/toolkits/slack_api/add_slack_reaction_example_call_tool.py", + "/examples/integrations/mcp-servers/slack_api/add_slack_reaction_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/slack_api/add_slack_reaction_example_call_tool.js", + "/examples/integrations/mcp-servers/slack_api/add_slack_reaction_example_call_tool.js", ], }, }, @@ -1709,10 +1709,10 @@ Add a reaction to a Slack item. label: "Call the Tool Directly", content: { Python: [ - "/examples/integrations/toolkits/slack_api/remove_reaction_from_item_example_call_tool.py", + "/examples/integrations/mcp-servers/slack_api/remove_reaction_from_item_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/slack_api/remove_reaction_from_item_example_call_tool.js", + "/examples/integrations/mcp-servers/slack_api/remove_reaction_from_item_example_call_tool.js", ], }, }, @@ -1738,10 +1738,10 @@ Remove a reaction from a Slack item. label: "Call the Tool Directly", content: { Python: [ - "/examples/integrations/toolkits/slack_api/search_files_in_slack_example_call_tool.py", + "/examples/integrations/mcp-servers/slack_api/search_files_in_slack_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/slack_api/search_files_in_slack_example_call_tool.js", + "/examples/integrations/mcp-servers/slack_api/search_files_in_slack_example_call_tool.js", ], }, }, @@ -1769,10 +1769,10 @@ Search for files in Slack using a query. label: "Call the Tool Directly", content: { Python: [ - "/examples/integrations/toolkits/slack_api/search_slack_messages_example_call_tool.py", + "/examples/integrations/mcp-servers/slack_api/search_slack_messages_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/slack_api/search_slack_messages_example_call_tool.js", + "/examples/integrations/mcp-servers/slack_api/search_slack_messages_example_call_tool.js", ], }, }, @@ -1801,10 +1801,10 @@ Search Slack messages based on a query. label: "Call the Tool Directly", content: { Python: [ - "/examples/integrations/toolkits/slack_api/get_team_billable_users_info_example_call_tool.py", + "/examples/integrations/mcp-servers/slack_api/get_team_billable_users_info_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/slack_api/get_team_billable_users_info_example_call_tool.js", + "/examples/integrations/mcp-servers/slack_api/get_team_billable_users_info_example_call_tool.js", ], }, }, @@ -1829,10 +1829,10 @@ Retrieves billable users info for the current Slack team. label: "Call the Tool Directly", content: { Python: [ - "/examples/integrations/toolkits/slack_api/get_current_slack_team_info_example_call_tool.py", + "/examples/integrations/mcp-servers/slack_api/get_current_slack_team_info_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/slack_api/get_current_slack_team_info_example_call_tool.js", + "/examples/integrations/mcp-servers/slack_api/get_current_slack_team_info_example_call_tool.js", ], }, }, @@ -1855,10 +1855,10 @@ Retrieve information about the current Slack team. label: "Call the Tool Directly", content: { Python: [ - "/examples/integrations/toolkits/slack_api/get_integration_logs_example_call_tool.py", + "/examples/integrations/mcp-servers/slack_api/get_integration_logs_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/slack_api/get_integration_logs_example_call_tool.js", + "/examples/integrations/mcp-servers/slack_api/get_integration_logs_example_call_tool.js", ], }, }, @@ -1886,10 +1886,10 @@ Retrieve integration logs for the current Slack team. label: "Call the Tool Directly", content: { Python: [ - "/examples/integrations/toolkits/slack_api/get_slack_team_preferences_example_call_tool.py", + "/examples/integrations/mcp-servers/slack_api/get_slack_team_preferences_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/slack_api/get_slack_team_preferences_example_call_tool.js", + "/examples/integrations/mcp-servers/slack_api/get_slack_team_preferences_example_call_tool.js", ], }, }, @@ -1911,10 +1911,10 @@ This tool does not take any parameters. label: "Call the Tool Directly", content: { Python: [ - "/examples/integrations/toolkits/slack_api/get_team_profile_example_call_tool.py", + "/examples/integrations/mcp-servers/slack_api/get_team_profile_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/slack_api/get_team_profile_example_call_tool.js", + "/examples/integrations/mcp-servers/slack_api/get_team_profile_example_call_tool.js", ], }, }, @@ -1936,10 +1936,10 @@ Retrieve a team's profile information from Slack. label: "Call the Tool Directly", content: { Python: [ - "/examples/integrations/toolkits/slack_api/create_slack_user_group_example_call_tool.py", + "/examples/integrations/mcp-servers/slack_api/create_slack_user_group_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/slack_api/create_slack_user_group_example_call_tool.js", + "/examples/integrations/mcp-servers/slack_api/create_slack_user_group_example_call_tool.js", ], }, }, @@ -1968,10 +1968,10 @@ Creates a new user group in Slack. label: "Call the Tool Directly", content: { Python: [ - "/examples/integrations/toolkits/slack_api/disable_user_group_example_call_tool.py", + "/examples/integrations/mcp-servers/slack_api/disable_user_group_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/slack_api/disable_user_group_example_call_tool.js", + "/examples/integrations/mcp-servers/slack_api/disable_user_group_example_call_tool.js", ], }, }, @@ -1995,10 +1995,10 @@ Disable an existing Slack User Group. label: "Call the Tool Directly", content: { Python: [ - "/examples/integrations/toolkits/slack_api/enable_slack_user_group_example_call_tool.py", + "/examples/integrations/mcp-servers/slack_api/enable_slack_user_group_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/slack_api/enable_slack_user_group_example_call_tool.js", + "/examples/integrations/mcp-servers/slack_api/enable_slack_user_group_example_call_tool.js", ], }, }, @@ -2022,10 +2022,10 @@ Enable a user group in Slack. label: "Call the Tool Directly", content: { Python: [ - "/examples/integrations/toolkits/slack_api/list_slack_user_groups_example_call_tool.py", + "/examples/integrations/mcp-servers/slack_api/list_slack_user_groups_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/slack_api/list_slack_user_groups_example_call_tool.js", + "/examples/integrations/mcp-servers/slack_api/list_slack_user_groups_example_call_tool.js", ], }, }, @@ -2050,10 +2050,10 @@ Retrieve all user groups for a Slack team. label: "Call the Tool Directly", content: { Python: [ - "/examples/integrations/toolkits/slack_api/update_slack_user_group_example_call_tool.py", + "/examples/integrations/mcp-servers/slack_api/update_slack_user_group_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/slack_api/update_slack_user_group_example_call_tool.js", + "/examples/integrations/mcp-servers/slack_api/update_slack_user_group_example_call_tool.js", ], }, }, @@ -2083,10 +2083,10 @@ Update an existing User Group in Slack. label: "Call the Tool Directly", content: { Python: [ - "/examples/integrations/toolkits/slack_api/update_slack_usergroup_users_example_call_tool.py", + "/examples/integrations/mcp-servers/slack_api/update_slack_usergroup_users_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/slack_api/update_slack_usergroup_users_example_call_tool.js", + "/examples/integrations/mcp-servers/slack_api/update_slack_usergroup_users_example_call_tool.js", ], }, }, @@ -2113,10 +2113,10 @@ Update the list of users in a Slack user group. label: "Call the Tool Directly", content: { Python: [ - "/examples/integrations/toolkits/slack_api/list_accessible_slack_conversations_example_call_tool.py", + "/examples/integrations/mcp-servers/slack_api/list_accessible_slack_conversations_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/slack_api/list_accessible_slack_conversations_example_call_tool.js", + "/examples/integrations/mcp-servers/slack_api/list_accessible_slack_conversations_example_call_tool.js", ], }, }, @@ -2143,10 +2143,10 @@ Retrieve a list of conversations the user can access on Slack. label: "Call the Tool Directly", content: { Python: [ - "/examples/integrations/toolkits/slack_api/check_slack_discoverability_example_call_tool.py", + "/examples/integrations/mcp-servers/slack_api/check_slack_discoverability_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/slack_api/check_slack_discoverability_example_call_tool.js", + "/examples/integrations/mcp-servers/slack_api/check_slack_discoverability_example_call_tool.js", ], }, }, @@ -2168,10 +2168,10 @@ Check if an email is discoverable on Slack. label: "Call the Tool Directly", content: { Python: [ - "/examples/integrations/toolkits/slack_api/get_slack_user_presence_example_call_tool.py", + "/examples/integrations/mcp-servers/slack_api/get_slack_user_presence_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/slack_api/get_slack_user_presence_example_call_tool.js", + "/examples/integrations/mcp-servers/slack_api/get_slack_user_presence_example_call_tool.js", ], }, }, @@ -2193,10 +2193,10 @@ Retrieve user presence information from Slack. label: "Call the Tool Directly", content: { Python: [ - "/examples/integrations/toolkits/slack_api/get_user_identity_example_call_tool.py", + "/examples/integrations/mcp-servers/slack_api/get_user_identity_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/slack_api/get_user_identity_example_call_tool.js", + "/examples/integrations/mcp-servers/slack_api/get_user_identity_example_call_tool.js", ], }, }, @@ -2218,10 +2218,10 @@ This tool does not take any parameters. label: "Call the Tool Directly", content: { Python: [ - "/examples/integrations/toolkits/slack_api/list_slack_team_users_example_call_tool.py", + "/examples/integrations/mcp-servers/slack_api/list_slack_team_users_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/slack_api/list_slack_team_users_example_call_tool.js", + "/examples/integrations/mcp-servers/slack_api/list_slack_team_users_example_call_tool.js", ], }, }, @@ -2246,10 +2246,10 @@ Fetches a list of all users in a Slack team. label: "Call the Tool Directly", content: { Python: [ - "/examples/integrations/toolkits/slack_api/find_slack_user_by_email_example_call_tool.py", + "/examples/integrations/mcp-servers/slack_api/find_slack_user_by_email_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/slack_api/find_slack_user_by_email_example_call_tool.js", + "/examples/integrations/mcp-servers/slack_api/find_slack_user_by_email_example_call_tool.js", ], }, }, @@ -2271,10 +2271,10 @@ Find a Slack user using their email address. label: "Call the Tool Directly", content: { Python: [ - "/examples/integrations/toolkits/slack_api/get_slack_user_profile_example_call_tool.py", + "/examples/integrations/mcp-servers/slack_api/get_slack_user_profile_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/slack_api/get_slack_user_profile_example_call_tool.js", + "/examples/integrations/mcp-servers/slack_api/get_slack_user_profile_example_call_tool.js", ], }, }, @@ -2297,10 +2297,10 @@ Retrieve Slack user profile information and custom status. label: "Call the Tool Directly", content: { Python: [ - "/examples/integrations/toolkits/slack_api/set_slack_profile_photo_example_call_tool.py", + "/examples/integrations/mcp-servers/slack_api/set_slack_profile_photo_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/slack_api/set_slack_profile_photo_example_call_tool.js", + "/examples/integrations/mcp-servers/slack_api/set_slack_profile_photo_example_call_tool.js", ], }, }, diff --git a/app/en/toolkits/social-communication/slack/_meta.tsx b/app/en/mcp-servers/social-communication/slack/_meta.tsx similarity index 100% rename from app/en/toolkits/social-communication/slack/_meta.tsx rename to app/en/mcp-servers/social-communication/slack/_meta.tsx diff --git a/app/en/toolkits/social-communication/slack/environment-variables/page.mdx b/app/en/mcp-servers/social-communication/slack/environment-variables/page.mdx similarity index 100% rename from app/en/toolkits/social-communication/slack/environment-variables/page.mdx rename to app/en/mcp-servers/social-communication/slack/environment-variables/page.mdx diff --git a/app/en/toolkits/social-communication/slack/install/page.mdx b/app/en/mcp-servers/social-communication/slack/install/page.mdx similarity index 92% rename from app/en/toolkits/social-communication/slack/install/page.mdx rename to app/en/mcp-servers/social-communication/slack/install/page.mdx index 4658474ca..854b41a0c 100644 --- a/app/en/toolkits/social-communication/slack/install/page.mdx +++ b/app/en/mcp-servers/social-communication/slack/install/page.mdx @@ -19,7 +19,7 @@ Arcade's sample app for Slack brings Arcade's powerful AI tool-calling capabilit - Generate content, summaries, and responses for messages you receive - and more! -For more details on what tools are available and what scopes they require, see the [Slack toolkit documentation](/toolkits/social-communication/slack). +For more details on what tools are available and what scopes they require, see the [Slack MCP Server documentation](/mcp-servers/social-communication/slack). The Arcade app for Slack requires an active Arcade account. If you don't have @@ -49,7 +49,7 @@ Invite Arcade to any channel or direct message by typing `/invite @Arcade` to al ### Start using Arcade's Slack tools -Use Arcade's [tools for Slack](/toolkits/social-communication/slack) to: +Use Arcade's [tools for Slack](/mcp-servers/social-communication/slack) to: - Send messages to channels and DMs - Find information in conversations @@ -72,5 +72,5 @@ The Arcade app for Slack is a sample for what Arcade can do with your Slack work If you have any questions or need assistance: -- Check our [Slack toolkit documentation](/toolkits/social-communication/slack) +- Check our [Slack MCP Server documentation](/mcp-servers/social-communication/slack) - [Contact our support team](/home/contact-us) diff --git a/app/en/toolkits/social-communication/slack/install/slack-auth-link.tsx b/app/en/mcp-servers/social-communication/slack/install/slack-auth-link.tsx similarity index 100% rename from app/en/toolkits/social-communication/slack/install/slack-auth-link.tsx rename to app/en/mcp-servers/social-communication/slack/install/slack-auth-link.tsx diff --git a/app/en/toolkits/social-communication/slack/page.mdx b/app/en/mcp-servers/social-communication/slack/page.mdx similarity index 81% rename from app/en/toolkits/social-communication/slack/page.mdx rename to app/en/mcp-servers/social-communication/slack/page.mdx index ccbccf057..b24036a84 100644 --- a/app/en/toolkits/social-communication/slack/page.mdx +++ b/app/en/mcp-servers/social-communication/slack/page.mdx @@ -1,6 +1,7 @@ --- asIndexPage: true --- + # Slack import ToolInfo from "@/app/_components/tool-info"; @@ -19,7 +20,7 @@ import { Callout } from "nextra/components"; -The Slack toolkit provides a comprehensive set of tools for interacting with the Slack platform, enabling users and AI applications to efficiently manage conversations and user information. With this toolkit, you can: +The Slack MCP Server provides a comprehensive set of tools for interacting with the Slack platform, enabling users and AI applications to efficiently manage conversations and user information. With this MCP Sever, you can: - Retrieve detailed information about users, including their IDs, usernames, and emails. - List all users in your Slack team and get users in specific conversations. @@ -27,7 +28,7 @@ The Slack toolkit provides a comprehensive set of tools for interacting with the - Access messages and metadata from various conversations, including channels and direct messages. - Manage and list conversations, including public and private channels. -This toolkit streamlines communication and enhances collaboration within Slack. +This MCP Sever streamlines communication and enhances collaboration within Slack. ## Available Tools @@ -72,7 +73,7 @@ This toolkit streamlines communication and enhances collaboration within Slack. 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-toolkit). + tools](/home/build-tools/create-a-mcp-server). ## Slack.WhoAmI @@ -84,10 +85,10 @@ This toolkit streamlines communication and enhances collaboration within Slack. label: "Call the Tool Directly", content: { Python: [ - "/examples/integrations/toolkits/slack/who_am_i_example_call_tool.py", + "/examples/integrations/mcp-servers/slack/who_am_i_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/slack/who_am_i_example_call_tool.js", + "/examples/integrations/mcp-servers/slack/who_am_i_example_call_tool.js", ], }, }, @@ -109,10 +110,10 @@ This tool takes no parameters. label: "Call the Tool Directly", content: { Python: [ - "/examples/integrations/toolkits/slack/get_users_info_example_call_tool.py", + "/examples/integrations/mcp-servers/slack/get_users_info_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/slack/get_users_info_example_call_tool.js", + "/examples/integrations/mcp-servers/slack/get_users_info_example_call_tool.js", ], }, }, @@ -136,10 +137,10 @@ Get the information of one or more users in Slack by ID, username, and/or email. label: "Call the Tool Directly", content: { Python: [ - "/examples/integrations/toolkits/slack/list_users_example_call_tool.py", + "/examples/integrations/mcp-servers/slack/list_users_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/slack/list_users_example_call_tool.js", + "/examples/integrations/mcp-servers/slack/list_users_example_call_tool.js", ], }, }, @@ -163,10 +164,10 @@ List all users in the authenticated user's Slack team. label: "Call the Tool Directly", content: { Python: [ - "/examples/integrations/toolkits/slack/send_message_example_call_tool.py", + "/examples/integrations/mcp-servers/slack/send_message_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/slack/send_message_example_call_tool.js", + "/examples/integrations/mcp-servers/slack/send_message_example_call_tool.js", ], }, }, @@ -204,10 +205,10 @@ To improve performance, prefer providing a conversation_id over a channel_name, label: "Call the Tool Directly", content: { Python: [ - "/examples/integrations/toolkits/slack/get_users_in_conversation_example_call_tool.py", + "/examples/integrations/mcp-servers/slack/get_users_in_conversation_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/slack/get_users_in_conversation_example_call_tool.js", + "/examples/integrations/mcp-servers/slack/get_users_in_conversation_example_call_tool.js", ], }, }, @@ -234,10 +235,10 @@ Provide exactly one of conversation_id or channel_name. Prefer providing a conve label: "Call the Tool Directly", content: { Python: [ - "/examples/integrations/toolkits/slack/get_messages_example_call_tool.py", + "/examples/integrations/mcp-servers/slack/get_messages_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/slack/get_messages_example_call_tool.js", + "/examples/integrations/mcp-servers/slack/get_messages_example_call_tool.js", ], }, }, @@ -294,10 +295,10 @@ Leave all arguments with the default None to get messages without date/time filt label: "Call the Tool Directly", content: { Python: [ - "/examples/integrations/toolkits/slack/get_conversation_metadata_example_call_tool.py", + "/examples/integrations/mcp-servers/slack/get_conversation_metadata_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/slack/get_conversation_metadata_example_call_tool.js", + "/examples/integrations/mcp-servers/slack/get_conversation_metadata_example_call_tool.js", ], }, }, @@ -331,10 +332,10 @@ To improve performance, prefer providing a conversation_id over a channel_name, label: "Call the Tool Directly", content: { Python: [ - "/examples/integrations/toolkits/slack/list_conversations_example_call_tool.py", + "/examples/integrations/mcp-servers/slack/list_conversations_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/slack/list_conversations_example_call_tool.js", + "/examples/integrations/mcp-servers/slack/list_conversations_example_call_tool.js", ], }, }, @@ -345,7 +346,7 @@ List metadata for Slack conversations (channels, DMs, MPIMs) the user is a membe **Parameters** -- **conversation_types** (`Enum` [ConversationType](/toolkits/social-communication/slack/reference#ConversationType), optional) Optionally filter by the type(s) of conversations. Defaults to None (all types). +- **conversation_types** (`Enum` [ConversationType](/mcp-servers/social-communication/slack/reference#ConversationType), optional) Optionally filter by the type(s) of conversations. Defaults to None (all types). - **limit** (`integer`, optional) The maximum number of conversations to list. Defaults to 200. Maximum is 500. - **next_cursor** (`string`, optional) The cursor to use for pagination. @@ -363,10 +364,10 @@ List metadata for Slack conversations (channels, DMs, MPIMs) the user is a membe label: "Call the Tool Directly", content: { Python: [ - "/examples/integrations/toolkits/slack/get_user_info_by_id_example_call_tool.py", + "/examples/integrations/mcp-servers/slack/get_user_info_by_id_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/slack/get_user_info_by_id_example_call_tool.js", + "/examples/integrations/mcp-servers/slack/get_user_info_by_id_example_call_tool.js", ], }, }, @@ -393,10 +394,10 @@ Get the information of a user in Slack. label: "Call the Tool Directly", content: { Python: [ - "/examples/integrations/toolkits/slack/send_dm_to_user_example_call_tool.py", + "/examples/integrations/mcp-servers/slack/send_dm_to_user_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/slack/send_dm_to_user_example_call_tool.js", + "/examples/integrations/mcp-servers/slack/send_dm_to_user_example_call_tool.js", ], }, }, @@ -424,10 +425,10 @@ Send a direct message to a user in Slack. label: "Call the Tool Directly", content: { Python: [ - "/examples/integrations/toolkits/slack/send_message_to_channel_example_call_tool.py", + "/examples/integrations/mcp-servers/slack/send_message_to_channel_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/slack/send_message_to_channel_example_call_tool.js", + "/examples/integrations/mcp-servers/slack/send_message_to_channel_example_call_tool.js", ], }, }, @@ -456,10 +457,10 @@ Send a message to a channel in Slack. label: "Call the Tool Directly", content: { Python: [ - "/examples/integrations/toolkits/slack/get_members_in_conversation_by_id_example_call_tool.py", + "/examples/integrations/mcp-servers/slack/get_members_in_conversation_by_id_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/slack/get_members_in_conversation_by_id_example_call_tool.js", + "/examples/integrations/mcp-servers/slack/get_members_in_conversation_by_id_example_call_tool.js", ], }, }, @@ -489,10 +490,10 @@ Get the members of a conversation in Slack by the conversation's ID. label: "Call the Tool Directly", content: { Python: [ - "/examples/integrations/toolkits/slack/get_members_in_channel_by_name_example_call_tool.py", + "/examples/integrations/mcp-servers/slack/get_members_in_channel_by_name_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/slack/get_members_in_channel_by_name_example_call_tool.js", + "/examples/integrations/mcp-servers/slack/get_members_in_channel_by_name_example_call_tool.js", ], }, }, @@ -521,10 +522,10 @@ Get the members of a conversation in Slack by the conversation's name. label: "Call the Tool Directly", content: { Python: [ - "/examples/integrations/toolkits/slack/get_messages_in_channel_by_name_example_call_tool.py", + "/examples/integrations/mcp-servers/slack/get_messages_in_channel_by_name_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/slack/get_messages_in_channel_by_name_example_call_tool.js", + "/examples/integrations/mcp-servers/slack/get_messages_in_channel_by_name_example_call_tool.js", ], }, }, @@ -557,10 +558,10 @@ Get the messages in a channel by the channel's name. label: "Call the Tool Directly", content: { Python: [ - "/examples/integrations/toolkits/slack/get_messages_in_conversation_by_id_example_call_tool.py", + "/examples/integrations/mcp-servers/slack/get_messages_in_conversation_by_id_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/slack/get_messages_in_conversation_by_id_example_call_tool.js", + "/examples/integrations/mcp-servers/slack/get_messages_in_conversation_by_id_example_call_tool.js", ], }, }, @@ -593,10 +594,10 @@ Get the messages in a conversation by the conversation's ID. label: "Call the Tool Directly", content: { Python: [ - "/examples/integrations/toolkits/slack/get_messages_in_direct_message_conversation_by_username_example_call_tool.py", + "/examples/integrations/mcp-servers/slack/get_messages_in_direct_message_conversation_by_username_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/slack/get_messages_in_direct_message_conversation_by_username_example_call_tool.js", + "/examples/integrations/mcp-servers/slack/get_messages_in_direct_message_conversation_by_username_example_call_tool.js", ], }, }, @@ -629,10 +630,10 @@ Get the messages in a direct conversation by the user's name. label: "Call the Tool Directly", content: { Python: [ - "/examples/integrations/toolkits/slack/get_messages_in_multi_person_dm_conversation_by_usernames_example_call_tool.py", + "/examples/integrations/mcp-servers/slack/get_messages_in_multi_person_dm_conversation_by_usernames_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/slack/get_messages_in_multi_person_dm_conversation_by_usernames_example_call_tool.js", + "/examples/integrations/mcp-servers/slack/get_messages_in_multi_person_dm_conversation_by_usernames_example_call_tool.js", ], }, }, @@ -665,10 +666,10 @@ Get the messages in a multi-person direct message conversation by the usernames. label: "Call the Tool Directly", content: { Python: [ - "/examples/integrations/toolkits/slack/list_conversations_metadata_example_call_tool.py", + "/examples/integrations/mcp-servers/slack/list_conversations_metadata_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/slack/list_conversations_metadata_example_call_tool.js", + "/examples/integrations/mcp-servers/slack/list_conversations_metadata_example_call_tool.js", ], }, }, @@ -679,7 +680,7 @@ List Slack conversations (channels, DMs, MPIMs) the user is a member of. **Parameters** -- **conversation_types** (`Enum` [ConversationType](/toolkits/social-communication/slack/reference#ConversationType), optional) Optionally filter by the type(s) of conversations. Defaults to None (all types). +- **conversation_types** (`Enum` [ConversationType](/mcp-servers/social-communication/slack/reference#ConversationType), optional) Optionally filter by the type(s) of conversations. Defaults to None (all types). - **limit** (`integer`, optional) The maximum number of conversations to list. - **next_cursor** (`string`, optional) The cursor to use for pagination. @@ -697,10 +698,10 @@ List Slack conversations (channels, DMs, MPIMs) the user is a member of. label: "Call the Tool Directly", content: { Python: [ - "/examples/integrations/toolkits/slack/list_public_channels_metadata_example_call_tool.py", + "/examples/integrations/mcp-servers/slack/list_public_channels_metadata_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/slack/list_public_channels_metadata_example_call_tool.js", + "/examples/integrations/mcp-servers/slack/list_public_channels_metadata_example_call_tool.js", ], }, }, @@ -727,10 +728,10 @@ List metadata for public channels in Slack that the user is a member of. label: "Call the Tool Directly", content: { Python: [ - "/examples/integrations/toolkits/slack/list_private_channels_metadata_example_call_tool.py", + "/examples/integrations/mcp-servers/slack/list_private_channels_metadata_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/slack/list_private_channels_metadata_example_call_tool.js", + "/examples/integrations/mcp-servers/slack/list_private_channels_metadata_example_call_tool.js", ], }, }, @@ -757,10 +758,10 @@ List metadata for private channels in Slack that the user is a member of. label: "Call the Tool Directly", content: { Python: [ - "/examples/integrations/toolkits/slack/list_group_direct_message_conversations_metadata_example_call_tool.py", + "/examples/integrations/mcp-servers/slack/list_group_direct_message_conversations_metadata_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/slack/list_group_direct_message_conversations_metadata_example_call_tool.js", + "/examples/integrations/mcp-servers/slack/list_group_direct_message_conversations_metadata_example_call_tool.js", ], }, }, @@ -787,10 +788,10 @@ List metadata for group direct message conversations that the user is a member o label: "Call the Tool Directly", content: { Python: [ - "/examples/integrations/toolkits/slack/list_direct_message_conversations_metadata_example_call_tool.py", + "/examples/integrations/mcp-servers/slack/list_direct_message_conversations_metadata_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/slack/list_direct_message_conversations_metadata_example_call_tool.js", + "/examples/integrations/mcp-servers/slack/list_direct_message_conversations_metadata_example_call_tool.js", ], }, }, @@ -818,10 +819,10 @@ List metadata for direct message conversations in Slack that the user is a membe label: "Call the Tool Directly", content: { Python: [ - "/examples/integrations/toolkits/slack/get_conversation_metadata_by_id_example_call_tool.py", + "/examples/integrations/mcp-servers/slack/get_conversation_metadata_by_id_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/slack/get_conversation_metadata_by_id_example_call_tool.js", + "/examples/integrations/mcp-servers/slack/get_conversation_metadata_by_id_example_call_tool.js", ], }, }, @@ -849,10 +850,10 @@ Get the metadata of a conversation in Slack searching by its ID. label: "Call the Tool Directly", content: { Python: [ - "/examples/integrations/toolkits/slack/get_channel_metadata_by_name_example_call_tool.py", + "/examples/integrations/mcp-servers/slack/get_channel_metadata_by_name_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/slack/get_channel_metadata_by_name_example_call_tool.js", + "/examples/integrations/mcp-servers/slack/get_channel_metadata_by_name_example_call_tool.js", ], }, }, @@ -881,10 +882,10 @@ Get the metadata of a channel in Slack searching by its name. label: "Call the Tool Directly", content: { Python: [ - "/examples/integrations/toolkits/slack/get_direct_message_conversation_metadata_by_username_example_call_tool.py", + "/examples/integrations/mcp-servers/slack/get_direct_message_conversation_metadata_by_username_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/slack/get_direct_message_conversation_metadata_by_username_example_call_tool.js", + "/examples/integrations/mcp-servers/slack/get_direct_message_conversation_metadata_by_username_example_call_tool.js", ], }, }, @@ -913,10 +914,10 @@ Get the metadata of a direct message conversation in Slack by the username. label: "Call the Tool Directly", content: { Python: [ - "/examples/integrations/toolkits/slack/get_multi_person_dm_conversation_metadata_by_usernames_example_call_tool.py", + "/examples/integrations/mcp-servers/slack/get_multi_person_dm_conversation_metadata_by_usernames_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/slack/get_multi_person_dm_conversation_metadata_by_usernames_example_call_tool.js", + "/examples/integrations/mcp-servers/slack/get_multi_person_dm_conversation_metadata_by_usernames_example_call_tool.js", ], }, }, @@ -932,6 +933,6 @@ Get the metadata of a multi-person direct message conversation in Slack by the u ## Auth -The Arcade Slack toolkit uses the [Slack auth provider](/home/auth-providers/slack) to connect to users' Slack accounts. Please refer to the [Slack auth provider](/home/auth-providers/slack) documentation to learn how to configure auth. +The Arcade Slack MCP Sever uses the [Slack auth provider](/home/auth-providers/slack) to connect to users' Slack accounts. Please refer to the [Slack auth provider](/home/auth-providers/slack) documentation to learn how to configure auth. diff --git a/app/en/toolkits/social-communication/slack/reference/page.mdx b/app/en/mcp-servers/social-communication/slack/reference/page.mdx similarity index 94% rename from app/en/toolkits/social-communication/slack/reference/page.mdx rename to app/en/mcp-servers/social-communication/slack/reference/page.mdx index c3d7076b1..f61cb7c0f 100644 --- a/app/en/toolkits/social-communication/slack/reference/page.mdx +++ b/app/en/mcp-servers/social-communication/slack/reference/page.mdx @@ -1,6 +1,6 @@ # Reference -Below is a reference of enumerations used by some tools in the Slack toolkit: +Below is a reference of enumerations used by some tools in the Slack MCP Server: ## ConversationType diff --git a/app/en/mcp-servers/social-communication/teams/_meta.tsx b/app/en/mcp-servers/social-communication/teams/_meta.tsx new file mode 100644 index 000000000..7d99d15c3 --- /dev/null +++ b/app/en/mcp-servers/social-communication/teams/_meta.tsx @@ -0,0 +1,15 @@ +import type { MetaRecord } from "nextra"; + +const meta: MetaRecord = { + "*": { + theme: { + breadcrumb: true, + toc: true, + }, + }, + reference: { + title: "Reference", + }, +}; + +export default meta; diff --git a/app/en/toolkits/social-communication/teams/reference/page.mdx b/app/en/mcp-servers/social-communication/teams/reference/page.mdx similarity index 97% rename from app/en/toolkits/social-communication/teams/reference/page.mdx rename to app/en/mcp-servers/social-communication/teams/reference/page.mdx index 23204ffab..999517183 100644 --- a/app/en/toolkits/social-communication/teams/reference/page.mdx +++ b/app/en/mcp-servers/social-communication/teams/reference/page.mdx @@ -1,6 +1,6 @@ # Teams Reference -Below is a reference of enumerations used by some tools in the Teams toolkit: +Below is a reference of enumerations used by some tools in the Teams MCP Server: ## PartialMatchType diff --git a/app/en/toolkits/social-communication/twilio/page.mdx b/app/en/mcp-servers/social-communication/twilio/page.mdx similarity index 92% rename from app/en/toolkits/social-communication/twilio/page.mdx rename to app/en/mcp-servers/social-communication/twilio/page.mdx index d04d366dd..c58e4992a 100644 --- a/app/en/toolkits/social-communication/twilio/page.mdx +++ b/app/en/mcp-servers/social-communication/twilio/page.mdx @@ -3,7 +3,7 @@ asIndexPage: true --- # Twilio -A handy toolkit for easily sending SMS and WhatsApp messages with Twilio. +A handy MCP Sever for easily sending SMS and WhatsApp messages with Twilio. ## Features @@ -37,7 +37,7 @@ MY_PHONE_NUMBER=your_personal_phone_number ## Usage Examples -Explore the versatility of this toolkit with the following example prompts: +Explore the versatility of this MCP Sever with the following example prompts: - **πŸ“© Send an SMS to your personal number:** diff --git a/app/en/toolkits/social-communication/twilio/reference/page.mdx b/app/en/mcp-servers/social-communication/twilio/reference/page.mdx similarity index 100% rename from app/en/toolkits/social-communication/twilio/reference/page.mdx rename to app/en/mcp-servers/social-communication/twilio/reference/page.mdx diff --git a/app/en/toolkits/social-communication/x/page.mdx b/app/en/mcp-servers/social-communication/x/page.mdx similarity index 73% rename from app/en/toolkits/social-communication/x/page.mdx rename to app/en/mcp-servers/social-communication/x/page.mdx index c44a9b656..645539075 100644 --- a/app/en/toolkits/social-communication/x/page.mdx +++ b/app/en/mcp-servers/social-communication/x/page.mdx @@ -16,7 +16,7 @@ import { Callout } from "nextra/components"; -The Arcade X (formerly Twitter) toolkit provides a pre-built set of tools for interacting with X (formerly Twitter). These tools make it easy to build agents and AI apps that can: +The Arcade X (formerly Twitter) MCP Server provides a pre-built set of tools for interacting with X (formerly Twitter). These tools make it easy to build agents and AI apps that can: - Post tweets - Reply to tweets @@ -53,7 +53,7 @@ The Arcade X (formerly Twitter) toolkit provides a pre-built set of tools for in 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-toolkit). + tools](/home/build-tools/create-a-mcp-server). ## X.LookupSingleUserByUsername @@ -65,10 +65,10 @@ The Arcade X (formerly Twitter) toolkit provides a pre-built set of tools for in label: "Call the Tool Directly", content: { Python: [ - "/examples/integrations/toolkits/x/lookup_single_user_by_username_example_call_tool.py", + "/examples/integrations/mcp-servers/x/lookup_single_user_by_username_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/x/lookup_single_user_by_username_example_call_tool.js", + "/examples/integrations/mcp-servers/x/lookup_single_user_by_username_example_call_tool.js", ], }, }, @@ -90,10 +90,10 @@ Look up a user on X (Twitter) by their username. label: "Call the Tool Directly", content: { Python: [ - "/examples/integrations/toolkits/x/post_tweet_example_call_tool.py", + "/examples/integrations/mcp-servers/x/post_tweet_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/x/post_tweet_example_call_tool.js", + "/examples/integrations/mcp-servers/x/post_tweet_example_call_tool.js", ], }, }, @@ -116,10 +116,10 @@ Post a tweet to X (Twitter). label: "Call the Tool Directly", content: { Python: [ - "/examples/integrations/toolkits/x/reply_to_tweet_example_call_tool.py", + "/examples/integrations/mcp-servers/x/reply_to_tweet_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/x/reply_to_tweet_example_call_tool.js", + "/examples/integrations/mcp-servers/x/reply_to_tweet_example_call_tool.js", ], }, }, @@ -143,10 +143,10 @@ Reply to a tweet on X (Twitter). label: "Call the Tool Directly", content: { Python: [ - "/examples/integrations/toolkits/x/delete_tweet_by_id_example_call_tool.py", + "/examples/integrations/mcp-servers/x/delete_tweet_by_id_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/x/delete_tweet_by_id_example_call_tool.js", + "/examples/integrations/mcp-servers/x/delete_tweet_by_id_example_call_tool.js", ], }, }, @@ -168,10 +168,10 @@ Delete a tweet on X (Twitter). label: "Call the Tool Directly", content: { Python: [ - "/examples/integrations/toolkits/x/search_recent_tweets_by_username_example_call_tool.py", + "/examples/integrations/mcp-servers/x/search_recent_tweets_by_username_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/x/search_recent_tweets_by_username_example_call_tool.js", + "/examples/integrations/mcp-servers/x/search_recent_tweets_by_username_example_call_tool.js", ], }, }, @@ -195,10 +195,10 @@ Search for recent tweets (last 7 days) on X (Twitter) by username. label: "Call the Tool Directly", content: { Python: [ - "/examples/integrations/toolkits/x/search_recent_tweets_by_keywords_example_call_tool.py", + "/examples/integrations/mcp-servers/x/search_recent_tweets_by_keywords_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/x/search_recent_tweets_by_keywords_example_call_tool.js", + "/examples/integrations/mcp-servers/x/search_recent_tweets_by_keywords_example_call_tool.js", ], }, }, @@ -223,10 +223,10 @@ Search for recent tweets (last 7 days) on X (Twitter) by required keywords and p label: "Call the Tool Directly", content: { Python: [ - "/examples/integrations/toolkits/x/lookup_tweet_by_id_example_call_tool.py", + "/examples/integrations/mcp-servers/x/lookup_tweet_by_id_example_call_tool.py", ], JavaScript: [ - "/examples/integrations/toolkits/x/lookup_tweet_by_id_example_call_tool.js", + "/examples/integrations/mcp-servers/x/lookup_tweet_by_id_example_call_tool.js", ], }, }, @@ -241,6 +241,6 @@ Look up a tweet on X (Twitter) by tweet ID. ## Auth -The Arcade X toolkit uses the [X auth provider](/home/auth-providers/x) to connect to users' X accounts. Please refer to the [X auth provider](/home/auth-providers/x) documentation to learn how to configure auth. +The Arcade X MCP Sever uses the [X auth provider](/home/auth-providers/x) to connect to users' X accounts. Please refer to the [X auth provider](/home/auth-providers/x) documentation to learn how to configure auth. diff --git a/app/en/toolkits/social-communication/zoom/_meta.tsx b/app/en/mcp-servers/social-communication/zoom/_meta.tsx similarity index 100% rename from app/en/toolkits/social-communication/zoom/_meta.tsx rename to app/en/mcp-servers/social-communication/zoom/_meta.tsx diff --git a/app/en/toolkits/social-communication/zoom/install/page.mdx b/app/en/mcp-servers/social-communication/zoom/install/page.mdx similarity index 94% rename from app/en/toolkits/social-communication/zoom/install/page.mdx rename to app/en/mcp-servers/social-communication/zoom/install/page.mdx index 992e890cf..76259eecc 100644 --- a/app/en/toolkits/social-communication/zoom/install/page.mdx +++ b/app/en/mcp-servers/social-communication/zoom/install/page.mdx @@ -19,12 +19,13 @@ Arcade's Zoom app brings Arcade's powerful AI tool-calling capabilities to your - Find the participants and/or registrants for a specific meeting - and more! -For more details on what tools are available and what scopes they require, see the [Zoom toolkit documentation](/toolkits/social-communication/zoom). +For more details on what tools are available and what scopes they require, see the [Zoom MCP Server documentation](/mcp-servers/social-communication/zoom). The Arcade Zoom app requires an active Arcade account. If you don't have one yet,{" "} - sign up for free. + sign up for free + . ## How it works @@ -33,7 +34,7 @@ For more details on what tools are available and what scopes they require, see t ### Start using Arcade's Zoom tools -Use Arcade's [tools for Zoom](/toolkits/social-communication/zoom) to: +Use Arcade's [tools for Zoom](/mcp-servers/social-communication/zoom) to: - List your upcoming meetings - Get meeting invitation details @@ -103,5 +104,5 @@ The Arcade Zoom app is a sample of what Arcade can do with your Zoom account. Fo If you have any questions or need assistance: -- Check our [Zoom toolkit documentation](/toolkits/social-communication/zoom) +- Check our [Zoom MCP Server documentation](/mcp-servers/social-communication/zoom) - [Contact our support team](/home/contact-us) diff --git a/app/en/toolkits/social-communication/zoom/install/zoom-auth-link.tsx b/app/en/mcp-servers/social-communication/zoom/install/zoom-auth-link.tsx similarity index 100% rename from app/en/toolkits/social-communication/zoom/install/zoom-auth-link.tsx rename to app/en/mcp-servers/social-communication/zoom/install/zoom-auth-link.tsx diff --git a/app/en/toolkits/social-communication/zoom/page.mdx b/app/en/mcp-servers/social-communication/zoom/page.mdx similarity index 84% rename from app/en/toolkits/social-communication/zoom/page.mdx rename to app/en/mcp-servers/social-communication/zoom/page.mdx index 1f51ba022..18e9dbc9b 100644 --- a/app/en/toolkits/social-communication/zoom/page.mdx +++ b/app/en/mcp-servers/social-communication/zoom/page.mdx @@ -1,6 +1,7 @@ --- asIndexPage: true --- + # Zoom import ToolInfo from "@/app/_components/tool-info"; @@ -20,14 +21,14 @@ import { Callout } from "nextra/components"; -The Arcade Zoom toolkit provides tools for interacting with Zoom. With these tools, you can build agents and AI applications that can: +The Arcade Zoom MCP Server provides tools for interacting with Zoom. With these tools, you can build agents and AI applications that can: - List upcoming meetings - Retrieve meeting invitation details ## Available Tools -These tools are currently available in the Arcade Zoom toolkit. +These tools are currently available in the Arcade Zoom MCP Sever. 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-toolkit) with the [Zoom auth + tools](/home/build-tools/create-a-mcp-server) with the [Zoom auth provider](/home/auth-providers/zoom#using-zoom-auth-in-custom-tools). @@ -72,11 +73,10 @@ Retrieve the invitation note for a specific Zoom meeting. ## Auth -The Arcade Zoom toolkit uses the [Zoom auth provider](/home/auth-providers/zoom) to connect to users' Zoom accounts. +The Arcade Zoom MCP Sever uses the [Zoom auth provider](/home/auth-providers/zoom) to connect to users' Zoom accounts. With the Arcade Cloud Platform, there's nothing to configure. Your users will see `Arcade ` as the name of the application that's requesting permission. - With a self-hosted installation of Arcade, you need to [configure the Zoom auth provider](/home/auth-providers/zoom#configuring-zoom-auth) with your own Zoom app credentials. diff --git a/public/examples/integrations/toolkits/linear/get_teams_example_call_tool.js b/app/en/mcp-servers/toolkits-config.ts similarity index 100% rename from public/examples/integrations/toolkits/linear/get_teams_example_call_tool.js rename to app/en/mcp-servers/toolkits-config.ts diff --git a/app/en/toolkits/community-toolkit-template/page.mdx b/app/en/toolkits/community-toolkit-template/page.mdx deleted file mode 100644 index 0be62d321..000000000 --- a/app/en/toolkits/community-toolkit-template/page.mdx +++ /dev/null @@ -1,3 +0,0 @@ -# Arcade YOUR-TOOLKIT-NAME Toolkit - -The Arcade YOUR-TOOLKIT-NAME Toolkit is a community contributed toolkit meaning that it is created and maintained by the community. To learn more about the toolkit, please visit the [Arcade YOUR-TOOLKIT-NAME GitHub repository](https://github.com/YOUR-GITHUB-USERNAME/YOUR-TOOLKIT-REPO-NAME). diff --git a/app/en/toolkits/contribute-a-toolkit/page.mdx b/app/en/toolkits/contribute-a-toolkit/page.mdx deleted file mode 100644 index 9726fb7d6..000000000 --- a/app/en/toolkits/contribute-a-toolkit/page.mdx +++ /dev/null @@ -1,18 +0,0 @@ -# How to contribute a toolkit - -Arcade welcomes your toolkit contributions. By adding your toolkit to the Arcade documentation, you help other developers discover and use your tools. Follow these steps to submit your own toolkit. - -## Prerequisites - -- Build your toolkit. See [build a toolkit](/home/build-tools/create-a-toolkit) for guidance. -- Publish your toolkit on PyPI. - -## Submit your toolkit -Open a pull request in the [Arcade Documentation GitHub repository](https://github.com/ArcadeAI/docs) that completes the [community toolkit checklist](https://github.com/ArcadeAI/docs/blob/main/.github/PULL_REQUEST_TEMPLATE/community_contributed_toolkit.md). The checklist will guide you through the necessary steps to ensure your toolkit contribution is successful. - -## Review and merge - -After submitting your pull request: -- Double-check all checklist items have been completed. -- Address any feedback from the reviewers. -- Once approved, your toolkit will be added to the Arcade documentation for other developers to discover and use! diff --git a/app/en/toolkits/page.mdx b/app/en/toolkits/page.mdx deleted file mode 100644 index a8a1cf01e..000000000 --- a/app/en/toolkits/page.mdx +++ /dev/null @@ -1,12 +0,0 @@ ---- -title: Toolkits -description: Registry of all toolkits available in the Arcade ecosystem ---- - -import { - tools, - categories, -} from "@/app/_components/custom/toolkits/toolkits-config"; -import Toolkits from "@/app/_components/custom/toolkits/toolkits"; - - diff --git a/app/en/toolkits/productivity/clickup/_meta.js b/app/en/toolkits/productivity/clickup/_meta.js deleted file mode 100644 index 92008123f..000000000 --- a/app/en/toolkits/productivity/clickup/_meta.js +++ /dev/null @@ -1,7 +0,0 @@ -const meta = { - reference: { - title: "Reference", - }, -}; - -export default meta; diff --git a/app/en/toolkits/productivity/gmail/_meta.js b/app/en/toolkits/productivity/gmail/_meta.js deleted file mode 100644 index 92008123f..000000000 --- a/app/en/toolkits/productivity/gmail/_meta.js +++ /dev/null @@ -1,7 +0,0 @@ -const meta = { - reference: { - title: "Reference", - }, -}; - -export default meta; diff --git a/app/en/toolkits/productivity/obsidian/page.mdx b/app/en/toolkits/productivity/obsidian/page.mdx deleted file mode 100644 index d3c2e369c..000000000 --- a/app/en/toolkits/productivity/obsidian/page.mdx +++ /dev/null @@ -1,3 +0,0 @@ -# Obsidian - -The Arcade Obsidian Toolkit is a community contributed toolkit verified by the Arcade team. To learn more about the toolkit, please visit the [Arcade Obsidian GitHub repository](https://github.com/spartee/arcade-obsidian). diff --git a/app/en/toolkits/social-communication/teams/_meta.js b/app/en/toolkits/social-communication/teams/_meta.js deleted file mode 100644 index bd13949bb..000000000 --- a/app/en/toolkits/social-communication/teams/_meta.js +++ /dev/null @@ -1,5 +0,0 @@ -export default { - reference: { - title: "Reference", - }, -}; diff --git a/app/en/toolkits/social-communication/teams/_meta.tsx b/app/en/toolkits/social-communication/teams/_meta.tsx deleted file mode 100644 index bd13949bb..000000000 --- a/app/en/toolkits/social-communication/teams/_meta.tsx +++ /dev/null @@ -1,5 +0,0 @@ -export default { - reference: { - title: "Reference", - }, -}; diff --git a/app/not-found.tsx b/app/not-found.tsx new file mode 100644 index 000000000..8d3a00376 --- /dev/null +++ b/app/not-found.tsx @@ -0,0 +1,128 @@ +"use client"; + +import Link from "next/link"; +import "@/app/globals.css"; +import { + Button, + buttonVariants, + Card, + CardContent, + CardFooter, + CardHeader, +} from "@arcadeai/design-system"; +import { cn } from "@arcadeai/design-system/lib/utils"; +import { Home, SearchX } from "lucide-react"; +import { usePathname } from "next/navigation"; +import { use, useMemo } from "react"; +import { getDictionaryClient } from "@/_dictionaries/get-dictionary-client"; +import { BackButton } from "@/app/_components/back-button"; + +const LOCALE_PATH_REGEX = /^\/([a-z]{2}(?:-[A-Z]{2})?)(?:\/.+|$)/; +const LOCALE_PREFIX_REGEX = /^\/[a-z]{2}(?:-[A-Z]{2})?/; + +export default function NotFound() { + const pathname = usePathname() || "/"; + + const { currentLocale, englishPath, showEnglishLink } = useMemo(() => { + const locale = pathname.match(LOCALE_PATH_REGEX)?.[1] || "en"; + const enPath = `/en${pathname.replace(LOCALE_PREFIX_REGEX, "") || "/"}`; + const showEnLink = locale !== "en"; + + return { + currentLocale: locale, + englishPath: enPath, + showEnglishLink: showEnLink, + }; + }, [pathname]); + + const dict = use(getDictionaryClient(currentLocale)); + + return ( +
+
+ + + {/* Illustration */} +
+ +
+
+ + + {/* Content */} +
+

+ {dict.notFoundPage.title} +

+

+ {dict.notFoundPage.description} +

+
+ + {/* English fallback */} + {showEnglishLink && ( +
+ {dict.notFoundPage.translationHint} + + {dict.notFoundPage.viewOriginalEnglish} + + . +
+ )} + + {/* Actions */} +
+ + +
+
+ + +
+

+ {dict.notFoundPage.needHelp} +

+
+ + {dict.notFoundPage.quickstart} + + + {dict.notFoundPage.toolkits} + + + {dict.notFoundPage.createToolkit} + +
+
+
+
+
+
+ ); +} diff --git a/examples/code/guides/agentauth/auth_with_google.js b/examples/code/guides/agentauth/auth_with_google.js index 2cf340cc3..47ea008e4 100644 --- a/examples/code/guides/agentauth/auth_with_google.js +++ b/examples/code/guides/agentauth/auth_with_google.js @@ -5,7 +5,7 @@ import { google } from "googleapis"; * In this example, we will use Arcade to authenticate with Google and * retrieve Gmail messages. * - * Consider using the Arcade Gmail toolkit, which simplifies the process for + * Consider using the Arcade Gmail MCP Server, which simplifies the process for * retrieving email messages even further! * * Below we are just showing how to use Arcade as an auth provider, if you need to directly get a token to use with Google. diff --git a/examples/code/guides/agentauth/auth_with_google.py b/examples/code/guides/agentauth/auth_with_google.py index d7d599306..0e28e0aec 100644 --- a/examples/code/guides/agentauth/auth_with_google.py +++ b/examples/code/guides/agentauth/auth_with_google.py @@ -8,7 +8,7 @@ In this example, we will use Arcade to authenticate with Google and retrieve Gmail messages. -Consider using the Arcade Gmail toolkit, which simplifies the process for +Consider using the Arcade Gmail MCP Server, which simplifies the process for retrieving email messages even further! Below we are just showing how to use Arcade as an auth provider, if you need to directly get a token to use with Google. diff --git a/middleware.ts b/middleware.ts index 07c6574c5..b1a9bd750 100644 --- a/middleware.ts +++ b/middleware.ts @@ -1,34 +1,105 @@ import { type NextRequest, NextResponse } from "next/server"; -export function middleware(request: NextRequest) { - const pathname = request.nextUrl.pathname; +const SUPPORTED_LOCALES = ["en", "es", "pt-BR"]; + +/** + * Parse Accept-Language header and normalize locale codes + */ +function parseAcceptLanguageHeader(acceptLanguage: string): string[] { + return acceptLanguage + .split(",") + .map((lang) => lang.split(";")[0].trim()) + .map((lang) => { + // Handle both 'es' and 'es-ES' format + if (lang.startsWith("es")) { + return "es"; + } + if (lang.startsWith("pt")) { + return "pt-BR"; + } + return lang; + }); +} + +/** + * Get the preferred locale from cookie or Accept-Language header + */ +function getPreferredLocale(request: NextRequest): string { + const cookieLocale = request.cookies.get("NEXT_LOCALE")?.value; + + // First priority: check if user has a saved locale preference in cookie + if (cookieLocale && SUPPORTED_LOCALES.includes(cookieLocale)) { + return cookieLocale; + } - // Check if the pathname starts with a supported locale - const pathnameIsMissingLocale = ["en", "es", "pt-BR"].every( + // Second priority: check browser's Accept-Language header + const acceptLanguage = request.headers.get("accept-language"); + if (acceptLanguage) { + const languages = parseAcceptLanguageHeader(acceptLanguage); + const preferredLocale = languages.find((lang) => + SUPPORTED_LOCALES.includes(lang) + ); + if (preferredLocale) { + return preferredLocale; + } + } + + // Default fallback + return "en"; +} + +/** + * Check if the pathname is missing a locale prefix + */ +function pathnameIsMissingLocale(pathname: string): boolean { + return SUPPORTED_LOCALES.every( (locale) => !pathname.startsWith(`/${locale}/`) && pathname !== `/${locale}` ); +} + +export function middleware(request: NextRequest) { + const pathname = request.nextUrl.pathname; // Redirect if there is no locale - if (pathnameIsMissingLocale) { - const locale = "en"; // Default to English - // If it's the root path, redirect to /{locale}/home - if (pathname === "/") { - return NextResponse.redirect(new URL(`/${locale}/home`, request.url)); - } - return NextResponse.redirect(new URL(`/${locale}${pathname}`, request.url)); + if (pathnameIsMissingLocale(pathname)) { + const locale = getPreferredLocale(request); + const redirectPath = + pathname === "/" ? `/${locale}/home` : `/${locale}${pathname}`; + return NextResponse.redirect(new URL(redirectPath, request.url)); } // Handle direct locale access (e.g., /en -> /en/home) - const supportedLocales = ["en", "es", "pt-BR"]; - for (const locale of supportedLocales) { + for (const locale of SUPPORTED_LOCALES) { if (pathname === `/${locale}`) { return NextResponse.redirect(new URL(`/${locale}/home`, request.url)); } } - // Add the pathname to headers so the layout can access it const response = NextResponse.next(); + + // Add pathname to headers for server components response.headers.set("x-pathname", pathname); + + // Persist locale preference from URL if present + const currentLocale = SUPPORTED_LOCALES.find( + (locale) => pathname.startsWith(`/${locale}/`) || pathname === `/${locale}` + ); + if (currentLocale) { + response.cookies.set("NEXT_LOCALE", currentLocale, { + maxAge: 31_536_000, // 1 year + path: "/", + sameSite: "lax", + httpOnly: false, + }); + } + + // Redirect /toolkit routes to /mcp-server routes + if (pathname.includes("/toolkits/")) { + return NextResponse.redirect( + new URL(pathname.replace("/toolkits/", "/mcp-servers/"), request.url) + ); + } + return response; } diff --git a/package.json b/package.json index 20e019b78..423dba5fc 100644 --- a/package.json +++ b/package.json @@ -10,8 +10,8 @@ "lint": "pnpm dlx ultracite check", "format": "pnpm dlx ultracite fix", "prepare": "husky install", - "postbuild": "pagefind --site .next/server/app --output-path public/_pagefind", - "translate": "pnpm dlx tsx scripts/i18n-sync.ts && pnpm format", + "postbuild": "pagefind --site .next/server/app --output-path public/_pagefind && next-sitemap", + "translate": "pnpm dlx tsx scripts/i18n-sync/index.ts && pnpm format", "sync:metas": "pnpm dlx tsx scripts/sync-metas.ts app/en", "llmstxt": "./scripts/generate-llmstxt.sh", "test": "vitest --run", @@ -42,7 +42,7 @@ "next-sitemap": "^4.2.3", "nextra": "^4.5.1", "nextra-theme-docs": "^4.5.1", - "posthog-js": "^1.268.6", + "posthog-js": "^1.268.9", "react": "^19.1.1", "react-dom": "^19.1.1", "react-hook-form": "7.63.0", @@ -53,22 +53,25 @@ "@biomejs/biome": "2.2.4", "@tailwindcss/postcss": "^4.1.13", "@types/mdx": "^2.0.13", - "@types/node": "24.5.2", - "@types/react": "^19.1.14", + "@types/node": "24.6.0", + "@types/react": "^19.1.16", "@types/react-dom": "^19.1.9", "@types/react-syntax-highlighter": "^15.5.13", + "commander": "^14.0.1", "fast-glob": "^3.3.3", "husky": "^9.1.7", - "lint-staged": "^16.2.1", + "lint-staged": "^16.2.3", "next-validate-link": "^1.6.3", - "openai": "^5.23.1", + "openai": "^6.0.0", + "ora": "^9.0.0", "pagefind": "^1.4.0", "picocolors": "^1.1.1", "postcss": "^8.5.6", "tailwindcss": "^4.1.13", "typescript": "5.9.2", - "ultracite": "5.4.5", - "vitest": "^3.2.4" + "ultracite": "5.4.6", + "vitest": "^3.2.4", + "zod": "^4.1.11" }, "engines": { "node": "22.x", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 824bf8c26..d6f8fb9ef 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -10,7 +10,7 @@ importers: dependencies: '@arcadeai/design-system': specifier: ^2.3.0 - version: 2.3.0(@hookform/resolvers@5.1.1(react-hook-form@7.63.0(react@19.1.1)))(@types/react-dom@19.1.9(@types/react@19.1.14))(@types/react@19.1.14)(lucide-react@0.544.0(react@19.1.1))(react-dom@19.1.1(react@19.1.1))(react-hook-form@7.63.0(react@19.1.1))(react@19.1.1)(recharts@3.1.0(@types/react@19.1.14)(react-dom@19.1.1(react@19.1.1))(react-is@19.1.1)(react@19.1.1)(redux@5.0.1))(tailwindcss@4.1.13)(vite@7.1.7(@types/node@24.5.2)(jiti@2.6.0)(lightningcss@1.30.1)(yaml@2.8.1)) + version: 2.3.0(@hookform/resolvers@5.1.1(react-hook-form@7.63.0(react@19.1.1)))(@types/react-dom@19.1.9(@types/react@19.1.16))(@types/react@19.1.16)(lucide-react@0.544.0(react@19.1.1))(react-dom@19.1.1(react@19.1.1))(react-hook-form@7.63.0(react@19.1.1))(react@19.1.1)(recharts@3.1.0(@types/react@19.1.16)(react-dom@19.1.1(react@19.1.1))(react-is@19.1.1)(react@19.1.1)(redux@5.0.1))(tailwindcss@4.1.13)(vite@7.1.7(@types/node@24.6.0)(jiti@2.6.0)(lightningcss@1.30.1)(yaml@2.8.1)) '@next/third-parties': specifier: ^15.5.4 version: 15.5.4(next@15.5.4(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(react@19.1.1) @@ -40,10 +40,10 @@ importers: version: 4.5.1(next@15.5.4(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(typescript@5.9.2) nextra-theme-docs: specifier: ^4.5.1 - version: 4.5.1(@types/react@19.1.14)(immer@10.1.3)(next@15.5.4(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(nextra@4.5.1(next@15.5.4(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(typescript@5.9.2))(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(use-sync-external-store@1.5.0(react@19.1.1)) + version: 4.5.1(@types/react@19.1.16)(immer@10.1.3)(next@15.5.4(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(nextra@4.5.1(next@15.5.4(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(typescript@5.9.2))(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(use-sync-external-store@1.5.0(react@19.1.1)) posthog-js: - specifier: ^1.268.6 - version: 1.268.6 + specifier: ^1.268.9 + version: 1.268.9 react: specifier: ^19.1.1 version: 19.1.1 @@ -70,17 +70,20 @@ importers: specifier: ^2.0.13 version: 2.0.13 '@types/node': - specifier: 24.5.2 - version: 24.5.2 + specifier: 24.6.0 + version: 24.6.0 '@types/react': - specifier: ^19.1.14 - version: 19.1.14 + specifier: ^19.1.16 + version: 19.1.16 '@types/react-dom': specifier: ^19.1.9 - version: 19.1.9(@types/react@19.1.14) + version: 19.1.9(@types/react@19.1.16) '@types/react-syntax-highlighter': specifier: ^15.5.13 version: 15.5.13 + commander: + specifier: ^14.0.1 + version: 14.0.1 fast-glob: specifier: ^3.3.3 version: 3.3.3 @@ -88,14 +91,17 @@ importers: specifier: ^9.1.7 version: 9.1.7 lint-staged: - specifier: ^16.2.1 - version: 16.2.1 + specifier: ^16.2.3 + version: 16.2.3 next-validate-link: specifier: ^1.6.3 version: 1.6.3 openai: - specifier: ^5.23.1 - version: 5.23.1(zod@4.1.11) + specifier: ^6.0.0 + version: 6.0.0(zod@4.1.11) + ora: + specifier: ^9.0.0 + version: 9.0.0 pagefind: specifier: ^1.4.0 version: 1.4.0 @@ -112,11 +118,14 @@ importers: specifier: 5.9.2 version: 5.9.2 ultracite: - specifier: 5.4.5 - version: 5.4.5(@types/debug@4.1.12)(@types/node@24.5.2)(jiti@2.6.0)(lightningcss@1.30.1)(typescript@5.9.2)(yaml@2.8.1) + specifier: 5.4.6 + version: 5.4.6(@types/debug@4.1.12)(@types/node@24.6.0)(jiti@2.6.0)(lightningcss@1.30.1)(typescript@5.9.2)(yaml@2.8.1) vitest: specifier: ^3.2.4 - version: 3.2.4(@types/debug@4.1.12)(@types/node@24.5.2)(jiti@2.6.0)(lightningcss@1.30.1)(yaml@2.8.1) + version: 3.2.4(@types/debug@4.1.12)(@types/node@24.6.0)(jiti@2.6.0)(lightningcss@1.30.1)(yaml@2.8.1) + zod: + specifier: ^4.1.11 + version: 4.1.11 packages: @@ -789,8 +798,8 @@ packages: cpu: [x64] os: [win32] - '@posthog/core@1.2.1': - resolution: {integrity: sha512-zNw96BipqM5/Tf161Q8/K5zpwGY3ezfb2wz+Yc3fIT5OQHW8eEzkQldPgtFKMUkqImc73ukEa2IdUpS6vEGH7w==} + '@posthog/core@1.2.2': + resolution: {integrity: sha512-f16Ozx6LIigRG+HsJdt+7kgSxZTHeX5f1JlCGKI1lXcvlZgfsCR338FuMI2QRYXGl+jg/vYFzGOTQBxl90lnBg==} '@radix-ui/number@1.1.1': resolution: {integrity: sha512-MkKCwxlXTgz6CFoJx3pCwn07GKp36+aZyu/u2Ln2VrA5DcdyCZkASEDBTd8x5whTQQL5CiYf4prXKLcgQdv29g==} @@ -1788,11 +1797,11 @@ packages: '@types/node-fetch@2.6.13': resolution: {integrity: sha512-QGpRVpzSaUs30JBSGPjOg4Uveu384erbHBoT1zeONvyCfwQxIkUshLAOqN/k9EjGviPRmWTTe6aH2qySWKTVSw==} - '@types/node@18.19.127': - resolution: {integrity: sha512-gSjxjrnKXML/yo0BO099uPixMqfpJU0TKYjpfLU7TrtA2WWDki412Np/RSTPRil1saKBhvVVKzVx/p/6p94nVA==} + '@types/node@18.19.128': + resolution: {integrity: sha512-m7wxXGpPpqxp2QDi/rpih5O772APRuBIa/6XiGqLNoM1txkjI8Sz1V4oSXJxQLTz/yP5mgy9z6UXEO6/lP70Gg==} - '@types/node@24.5.2': - resolution: {integrity: sha512-FYxk1I7wPv3K2XBaoyH2cTnocQEu8AOZ60hPbsyukMPLv5/5qr7V1i8PLHdl6Zf87I+xZXFvPCXYjiTFq+YSDQ==} + '@types/node@24.6.0': + resolution: {integrity: sha512-F1CBxgqwOMc4GKJ7eY22hWhBVQuMYTtqI8L0FcszYcpYX0fzfDGpez22Xau8Mgm7O9fI+zA/TYIdq3tGWfweBA==} '@types/react-dom@19.1.9': resolution: {integrity: sha512-qXRuZaOsAdXKFyOhRBg6Lqqc0yay13vN7KrIg4L7N4aaHN68ma9OK3NE1BoDFgFOTfM7zg+3/8+2n8rLUH3OKQ==} @@ -1802,8 +1811,8 @@ packages: '@types/react-syntax-highlighter@15.5.13': resolution: {integrity: sha512-uLGJ87j6Sz8UaBAooU0T6lWJ0dBmjZgN1PZTrj05TNql2/XpC6+4HhMT5syIdFUUt+FASfCeLLv4kBygNU+8qA==} - '@types/react@19.1.14': - resolution: {integrity: sha512-ukd93VGzaNPMAUPy0gRDSC57UuQbnH9Kussp7HBjM06YFi9uZTFhOvMSO2OKqXm1rSgzOE+pVx1k1PYHGwlc8Q==} + '@types/react@19.1.16': + resolution: {integrity: sha512-WBM/nDbEZmDUORKnh5i1bTnAz6vTohUf9b8esSMu+b24+srbaxa04UbJgWx78CVfNXA20sNu0odEIluZDFdCog==} '@types/trusted-types@2.0.7': resolution: {integrity: sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==} @@ -1945,8 +1954,8 @@ packages: resolution: {integrity: sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==} engines: {node: '>= 0.4'} - caniuse-lite@1.0.30001745: - resolution: {integrity: sha512-ywt6i8FzvdgrrrGbr1jZVObnVv6adj+0if2/omv9cmR2oiZs30zL4DIyaptKcbOrBdOIc74QTMoJvSE2QHh5UQ==} + caniuse-lite@1.0.30001746: + resolution: {integrity: sha512-eA7Ys/DGw+pnkWWSE/id29f2IcPHVoE8wxtvE5JdvD2V28VTDPy1yEeo11Guz0sJ4ZeGRcm3uaTcAqK1LXaphA==} ccount@2.0.1: resolution: {integrity: sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==} @@ -2006,6 +2015,10 @@ packages: resolution: {integrity: sha512-aCj4O5wKyszjMmDT4tZj93kxyydN/K5zPWSCe6/0AV/AA1pqe5ZBIw0a2ZfPQV7lL5/yb5HsUreJ6UFAF1tEQw==} engines: {node: '>=18'} + cli-spinners@3.3.0: + resolution: {integrity: sha512-/+40ljC3ONVnYIttjMWrlL51nItDAbBrq2upN8BPyvGU/2n5Oxw3tbNwORCaNuNqLJnxGqOfjUuhsv7l5Q4IsQ==} + engines: {node: '>=18.20'} + cli-truncate@5.1.0: resolution: {integrity: sha512-7JDGG+4Zp0CsknDCedl0DYdaeOhc46QNpXi3NLQblkZpXXgA6LncLDUUyvrjSvZeF3VRQa+KiMGomazQrC1V8g==} engines: {node: '>=20'} @@ -2685,6 +2698,10 @@ packages: engines: {node: '>=14.16'} hasBin: true + is-interactive@2.0.0: + resolution: {integrity: sha512-qP1vozQRI+BMOPcjFzrjXuQvdak2pHNUMZoeG2eRbiSqyvbEf/wQtEOTOX1guk6E3t36RkaqiSt8A/6YElNxLQ==} + engines: {node: '>=12'} + is-number@7.0.0: resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} engines: {node: '>=0.12.0'} @@ -2697,6 +2714,10 @@ packages: resolution: {integrity: sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + is-unicode-supported@2.1.0: + resolution: {integrity: sha512-mE00Gnza5EEB3Ds0HfMyllZzbBrmLOX3vfWoj9A9PEnTfratQ/BcaJOuMhnkhjXvb2+FkY3VuHqtAGpTPmglFQ==} + engines: {node: '>=18'} + is-wsl@3.1.0: resolution: {integrity: sha512-UcVfVfaK4Sc4m7X3dUSoHoozQGBEFeDC+zVo06t98xe8CzHSZZBekNXH+tu0NalHolcJ/QAGqS46Hef7QXBIMw==} engines: {node: '>=16'} @@ -2810,8 +2831,8 @@ packages: resolution: {integrity: sha512-xi6IyHML+c9+Q3W0S4fCQJOym42pyurFiJUHEcEyHS0CeKzia4yZDEsLlqOFykxOdHpNy0NmvVO31vcSqAxJCg==} engines: {node: '>= 12.0.0'} - lint-staged@16.2.1: - resolution: {integrity: sha512-KMeYmH9wKvHsXdUp+z6w7HN3fHKHXwT1pSTQTYxB9kI6ekK1rlL3kLZEoXZCppRPXFK9PFW/wfQctV7XUqMrPQ==} + lint-staged@16.2.3: + resolution: {integrity: sha512-1OnJEESB9zZqsp61XHH2fvpS1es3hRCxMplF/AJUDa8Ho8VrscYDIuxGrj3m8KPXbcWZ8fT9XTMUhEQmOVKpKw==} engines: {node: '>=20.17'} hasBin: true @@ -2826,6 +2847,10 @@ packages: lodash-es@4.17.21: resolution: {integrity: sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==} + log-symbols@7.0.1: + resolution: {integrity: sha512-ja1E3yCr9i/0hmBVaM0bfwDjnGy8I/s6PP4DFp+yP+a+mrHO4Rm7DtmnqROTUkHIkqffC84YY7AeqX6oFk0WFg==} + engines: {node: '>=18'} + log-update@6.1.0: resolution: {integrity: sha512-9ie8ItPR6tjY5uYJh8K/Zrv/RMZ5VOlOWvtZdEHYSTFKZfIBPQa9tOAEeAWhd+AnIneLJ22w5fjOYtoutpWq5w==} engines: {node: '>=18'} @@ -3218,18 +3243,22 @@ packages: oniguruma-to-es@4.3.3: resolution: {integrity: sha512-rPiZhzC3wXwE59YQMRDodUwwT9FZ9nNBwQQfsd1wfdtlKEyCdRV0avrTcSZ5xlIvGRVPd/cx6ZN45ECmS39xvg==} - openai@5.23.1: - resolution: {integrity: sha512-APxMtm5mln4jhKhAr0d5zP9lNsClx4QwJtg8RUvYSSyxYCTHLNJnLEcSHbJ6t0ori8Pbr9HZGfcPJ7LEy73rvQ==} + openai@6.0.0: + resolution: {integrity: sha512-J7LEmTn3WLZnbyEmMYcMPyT5A0fGzhPwSvVUcNRKy6j2hJIbqSFrJERnUHYNkcoCCalRumypnj9AVoe5bVHd3Q==} hasBin: true peerDependencies: ws: ^8.18.0 - zod: ^3.23.8 + zod: ^3.25 || ^4.0 peerDependenciesMeta: ws: optional: true zod: optional: true + ora@9.0.0: + resolution: {integrity: sha512-m0pg2zscbYgWbqRR6ABga5c3sZdEon7bSgjnlXC64kxtxLOyjRcbbUkLj7HFyy/FTD+P2xdBWu8snGhYI0jc4A==} + engines: {node: '>=20'} + package-manager-detector@1.3.0: resolution: {integrity: sha512-ZsEbbZORsyHuO00lY1kV3/t72yp6Ysay6Pd17ZAlNGuGwmWDLCJxFpRs0IzfXfj1o4icJOkUEioexFHzyPurSQ==} @@ -3309,8 +3338,8 @@ packages: resolution: {integrity: sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==} engines: {node: ^10 || ^12 || >=14} - posthog-js@1.268.6: - resolution: {integrity: sha512-3IWd5dbs/Bs6akesiDNn+QhN7QBU6xdYV31KG8ive/6srSV7DBcH0W+UgclNvlZanVqpwPTg3mbOgNKa7mEPrQ==} + posthog-js@1.268.9: + resolution: {integrity: sha512-ejK5/i0TUQ8I1SzaIn7xWNf5TzOjWquawpgjKit8DyucD3Z1yf7LTMtgCYZN8oRx9VjiPcP34fSk8YsWQmmkTQ==} peerDependencies: '@rrweb/types': 2.0.0-alpha.17 rrweb-snapshot: 2.0.0-alpha.17 @@ -3649,6 +3678,10 @@ packages: std-env@3.9.0: resolution: {integrity: sha512-UGvjygr6F6tpH7o2qyqR6QYpwraIjKSdtzyBdyytFOHmPZY917kwdwLG0RbOjWOnKmnm3PeHjaoLLMie7kPLQw==} + stdin-discarder@0.2.2: + resolution: {integrity: sha512-UhDfHmA92YAlNnCfhmq0VeNL5bDbiZGg7sZ2IvPsXubGkiNa9EC+tUTsjBRsYUAz87btI6/1wf4XoVvQ3uRnmQ==} + engines: {node: '>=18'} + string-argv@0.3.2: resolution: {integrity: sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q==} engines: {node: '>=0.6.19'} @@ -3826,15 +3859,15 @@ packages: ufo@1.6.1: resolution: {integrity: sha512-9a4/uxlTWJ4+a5i0ooc1rU7C7YOw3wT+UGqdeNNHWnOF9qcMBgLRS+4IYUqbczewFx4mLEig6gawh7X6mFlEkA==} - ultracite@5.4.5: - resolution: {integrity: sha512-UWny94qR2w4I/hzX6zsAdK9GosnL3aNr7Yq21Ltgub/GmU9mriU8Us2M9AtiPCiGPVx1Ijn8hgn8/btDLDROTg==} + ultracite@5.4.6: + resolution: {integrity: sha512-Pobs6baOEl8pZ4dUQONWww8XqCiPH4LVeiBE9JoX2XBUQSZpVNMpbk4dnXaVrilLcAfHs86kFZ+XexrxIAqA4w==} hasBin: true undici-types@5.26.5: resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==} - undici-types@7.12.0: - resolution: {integrity: sha512-goOacqME2GYyOZZfb5Lgtu+1IDmAlAEu5xnD3+xTzS10hT0vzpf0SPjkXwAw9Jm+4n/mQGDP3LO8CPbYROeBfQ==} + undici-types@7.13.0: + resolution: {integrity: sha512-Ov2Rr9Sx+fRgagJ5AX0qvItZG/JKKoBRAVITs1zk7IqZGTJUwgUr7qoYBpWwakpWilTZFM98rG/AFRocu10iIQ==} unified@11.0.5: resolution: {integrity: sha512-xKvGhPWw3k84Qjh8bI3ZeJjqnyadK+GEFtazSfZv/rKeTkTjOJho6mFqh2SM96iIcZokxiOpg78GazTSg8+KHA==} @@ -4061,6 +4094,10 @@ packages: engines: {node: '>= 14.6'} hasBin: true + yoctocolors@2.1.2: + resolution: {integrity: sha512-CzhO+pFNo8ajLM2d2IW/R93ipy99LWjtwblvC1RsoSUMZgyLbYFr221TnSNT7GjGdYui6P459mw9JH/g/zW2ug==} + engines: {node: '>=18'} + zod@3.25.76: resolution: {integrity: sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==} @@ -4104,7 +4141,7 @@ snapshots: '@arcadeai/arcadejs@1.10.0': dependencies: - '@types/node': 18.19.127 + '@types/node': 18.19.128 '@types/node-fetch': 2.6.13 abort-controller: 3.0.0 agentkeepalive: 4.6.0 @@ -4115,41 +4152,41 @@ snapshots: transitivePeerDependencies: - encoding - '@arcadeai/design-system@2.3.0(@hookform/resolvers@5.1.1(react-hook-form@7.63.0(react@19.1.1)))(@types/react-dom@19.1.9(@types/react@19.1.14))(@types/react@19.1.14)(lucide-react@0.544.0(react@19.1.1))(react-dom@19.1.1(react@19.1.1))(react-hook-form@7.63.0(react@19.1.1))(react@19.1.1)(recharts@3.1.0(@types/react@19.1.14)(react-dom@19.1.1(react@19.1.1))(react-is@19.1.1)(react@19.1.1)(redux@5.0.1))(tailwindcss@4.1.13)(vite@7.1.7(@types/node@24.5.2)(jiti@2.6.0)(lightningcss@1.30.1)(yaml@2.8.1))': + '@arcadeai/design-system@2.3.0(@hookform/resolvers@5.1.1(react-hook-form@7.63.0(react@19.1.1)))(@types/react-dom@19.1.9(@types/react@19.1.16))(@types/react@19.1.16)(lucide-react@0.544.0(react@19.1.1))(react-dom@19.1.1(react@19.1.1))(react-hook-form@7.63.0(react@19.1.1))(react@19.1.1)(recharts@3.1.0(@types/react@19.1.16)(react-dom@19.1.1(react@19.1.1))(react-is@19.1.1)(react@19.1.1)(redux@5.0.1))(tailwindcss@4.1.13)(vite@7.1.7(@types/node@24.6.0)(jiti@2.6.0)(lightningcss@1.30.1)(yaml@2.8.1))': dependencies: '@arcadeai/arcadejs': 1.10.0 '@hookform/resolvers': 5.1.1(react-hook-form@7.63.0(react@19.1.1)) - '@radix-ui/react-accordion': 1.2.12(@types/react-dom@19.1.9(@types/react@19.1.14))(@types/react@19.1.14)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) - '@radix-ui/react-alert-dialog': 1.1.15(@types/react-dom@19.1.9(@types/react@19.1.14))(@types/react@19.1.14)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) - '@radix-ui/react-avatar': 1.1.10(@types/react-dom@19.1.9(@types/react@19.1.14))(@types/react@19.1.14)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) - '@radix-ui/react-checkbox': 1.3.3(@types/react-dom@19.1.9(@types/react@19.1.14))(@types/react@19.1.14)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) - '@radix-ui/react-collapsible': 1.1.12(@types/react-dom@19.1.9(@types/react@19.1.14))(@types/react@19.1.14)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) - '@radix-ui/react-dialog': 1.1.15(@types/react-dom@19.1.9(@types/react@19.1.14))(@types/react@19.1.14)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) - '@radix-ui/react-dropdown-menu': 2.1.16(@types/react-dom@19.1.9(@types/react@19.1.14))(@types/react@19.1.14)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) - '@radix-ui/react-hover-card': 1.1.15(@types/react-dom@19.1.9(@types/react@19.1.14))(@types/react@19.1.14)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) - '@radix-ui/react-label': 2.1.7(@types/react-dom@19.1.9(@types/react@19.1.14))(@types/react@19.1.14)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) - '@radix-ui/react-popover': 1.1.15(@types/react-dom@19.1.9(@types/react@19.1.14))(@types/react@19.1.14)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) - '@radix-ui/react-progress': 1.1.7(@types/react-dom@19.1.9(@types/react@19.1.14))(@types/react@19.1.14)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) - '@radix-ui/react-radio-group': 1.3.8(@types/react-dom@19.1.9(@types/react@19.1.14))(@types/react@19.1.14)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) - '@radix-ui/react-scroll-area': 1.2.10(@types/react-dom@19.1.9(@types/react@19.1.14))(@types/react@19.1.14)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) - '@radix-ui/react-select': 2.2.6(@types/react-dom@19.1.9(@types/react@19.1.14))(@types/react@19.1.14)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) - '@radix-ui/react-separator': 1.1.7(@types/react-dom@19.1.9(@types/react@19.1.14))(@types/react@19.1.14)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) - '@radix-ui/react-slider': 1.3.6(@types/react-dom@19.1.9(@types/react@19.1.14))(@types/react@19.1.14)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) - '@radix-ui/react-slot': 1.2.3(@types/react@19.1.14)(react@19.1.1) - '@radix-ui/react-switch': 1.2.6(@types/react-dom@19.1.9(@types/react@19.1.14))(@types/react@19.1.14)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) - '@radix-ui/react-tabs': 1.1.13(@types/react-dom@19.1.9(@types/react@19.1.14))(@types/react@19.1.14)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) - '@radix-ui/react-toggle': 1.1.10(@types/react-dom@19.1.9(@types/react@19.1.14))(@types/react@19.1.14)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) - '@radix-ui/react-tooltip': 1.2.8(@types/react-dom@19.1.9(@types/react@19.1.14))(@types/react@19.1.14)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) - '@tailwindcss/vite': 4.1.13(vite@7.1.7(@types/node@24.5.2)(jiti@2.6.0)(lightningcss@1.30.1)(yaml@2.8.1)) + '@radix-ui/react-accordion': 1.2.12(@types/react-dom@19.1.9(@types/react@19.1.16))(@types/react@19.1.16)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-alert-dialog': 1.1.15(@types/react-dom@19.1.9(@types/react@19.1.16))(@types/react@19.1.16)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-avatar': 1.1.10(@types/react-dom@19.1.9(@types/react@19.1.16))(@types/react@19.1.16)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-checkbox': 1.3.3(@types/react-dom@19.1.9(@types/react@19.1.16))(@types/react@19.1.16)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-collapsible': 1.1.12(@types/react-dom@19.1.9(@types/react@19.1.16))(@types/react@19.1.16)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-dialog': 1.1.15(@types/react-dom@19.1.9(@types/react@19.1.16))(@types/react@19.1.16)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-dropdown-menu': 2.1.16(@types/react-dom@19.1.9(@types/react@19.1.16))(@types/react@19.1.16)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-hover-card': 1.1.15(@types/react-dom@19.1.9(@types/react@19.1.16))(@types/react@19.1.16)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-label': 2.1.7(@types/react-dom@19.1.9(@types/react@19.1.16))(@types/react@19.1.16)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-popover': 1.1.15(@types/react-dom@19.1.9(@types/react@19.1.16))(@types/react@19.1.16)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-progress': 1.1.7(@types/react-dom@19.1.9(@types/react@19.1.16))(@types/react@19.1.16)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-radio-group': 1.3.8(@types/react-dom@19.1.9(@types/react@19.1.16))(@types/react@19.1.16)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-scroll-area': 1.2.10(@types/react-dom@19.1.9(@types/react@19.1.16))(@types/react@19.1.16)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-select': 2.2.6(@types/react-dom@19.1.9(@types/react@19.1.16))(@types/react@19.1.16)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-separator': 1.1.7(@types/react-dom@19.1.9(@types/react@19.1.16))(@types/react@19.1.16)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-slider': 1.3.6(@types/react-dom@19.1.9(@types/react@19.1.16))(@types/react@19.1.16)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-slot': 1.2.3(@types/react@19.1.16)(react@19.1.1) + '@radix-ui/react-switch': 1.2.6(@types/react-dom@19.1.9(@types/react@19.1.16))(@types/react@19.1.16)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-tabs': 1.1.13(@types/react-dom@19.1.9(@types/react@19.1.16))(@types/react@19.1.16)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-toggle': 1.1.10(@types/react-dom@19.1.9(@types/react@19.1.16))(@types/react@19.1.16)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-tooltip': 1.2.8(@types/react-dom@19.1.9(@types/react@19.1.16))(@types/react@19.1.16)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@tailwindcss/vite': 4.1.13(vite@7.1.7(@types/node@24.6.0)(jiti@2.6.0)(lightningcss@1.30.1)(yaml@2.8.1)) class-variance-authority: 0.7.1 clsx: 2.1.1 - cmdk: 1.1.1(@types/react-dom@19.1.9(@types/react@19.1.14))(@types/react@19.1.14)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + cmdk: 1.1.1(@types/react-dom@19.1.9(@types/react@19.1.16))(@types/react@19.1.16)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) lucide-react: 0.544.0(react@19.1.1) react: 19.1.1 react-dom: 19.1.1(react@19.1.1) react-hook-form: 7.63.0(react@19.1.1) react-resizable-panels: 3.0.5(react-dom@19.1.1(react@19.1.1))(react@19.1.1) - recharts: 3.1.0(@types/react@19.1.14)(react-dom@19.1.1(react@19.1.1))(react-is@19.1.1)(react@19.1.1)(redux@5.0.1) + recharts: 3.1.0(@types/react@19.1.16)(react-dom@19.1.1(react@19.1.1))(react-is@19.1.1)(react@19.1.1)(redux@5.0.1) tailwind-merge: 3.3.1 tailwindcss: 4.1.13 transitivePeerDependencies: @@ -4654,580 +4691,580 @@ snapshots: '@pagefind/windows-x64@1.4.0': optional: true - '@posthog/core@1.2.1': {} + '@posthog/core@1.2.2': {} '@radix-ui/number@1.1.1': {} '@radix-ui/primitive@1.1.3': {} - '@radix-ui/react-accordion@1.2.12(@types/react-dom@19.1.9(@types/react@19.1.14))(@types/react@19.1.14)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': + '@radix-ui/react-accordion@1.2.12(@types/react-dom@19.1.9(@types/react@19.1.16))(@types/react@19.1.16)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': dependencies: '@radix-ui/primitive': 1.1.3 - '@radix-ui/react-collapsible': 1.1.12(@types/react-dom@19.1.9(@types/react@19.1.14))(@types/react@19.1.14)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) - '@radix-ui/react-collection': 1.1.7(@types/react-dom@19.1.9(@types/react@19.1.14))(@types/react@19.1.14)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.14)(react@19.1.1) - '@radix-ui/react-context': 1.1.2(@types/react@19.1.14)(react@19.1.1) - '@radix-ui/react-direction': 1.1.1(@types/react@19.1.14)(react@19.1.1) - '@radix-ui/react-id': 1.1.1(@types/react@19.1.14)(react@19.1.1) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.9(@types/react@19.1.14))(@types/react@19.1.14)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) - '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.1.14)(react@19.1.1) + '@radix-ui/react-collapsible': 1.1.12(@types/react-dom@19.1.9(@types/react@19.1.16))(@types/react@19.1.16)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-collection': 1.1.7(@types/react-dom@19.1.9(@types/react@19.1.16))(@types/react@19.1.16)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.16)(react@19.1.1) + '@radix-ui/react-context': 1.1.2(@types/react@19.1.16)(react@19.1.1) + '@radix-ui/react-direction': 1.1.1(@types/react@19.1.16)(react@19.1.1) + '@radix-ui/react-id': 1.1.1(@types/react@19.1.16)(react@19.1.1) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.9(@types/react@19.1.16))(@types/react@19.1.16)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.1.16)(react@19.1.1) react: 19.1.1 react-dom: 19.1.1(react@19.1.1) optionalDependencies: - '@types/react': 19.1.14 - '@types/react-dom': 19.1.9(@types/react@19.1.14) + '@types/react': 19.1.16 + '@types/react-dom': 19.1.9(@types/react@19.1.16) - '@radix-ui/react-alert-dialog@1.1.15(@types/react-dom@19.1.9(@types/react@19.1.14))(@types/react@19.1.14)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': + '@radix-ui/react-alert-dialog@1.1.15(@types/react-dom@19.1.9(@types/react@19.1.16))(@types/react@19.1.16)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': dependencies: '@radix-ui/primitive': 1.1.3 - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.14)(react@19.1.1) - '@radix-ui/react-context': 1.1.2(@types/react@19.1.14)(react@19.1.1) - '@radix-ui/react-dialog': 1.1.15(@types/react-dom@19.1.9(@types/react@19.1.14))(@types/react@19.1.14)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.9(@types/react@19.1.14))(@types/react@19.1.14)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) - '@radix-ui/react-slot': 1.2.3(@types/react@19.1.14)(react@19.1.1) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.16)(react@19.1.1) + '@radix-ui/react-context': 1.1.2(@types/react@19.1.16)(react@19.1.1) + '@radix-ui/react-dialog': 1.1.15(@types/react-dom@19.1.9(@types/react@19.1.16))(@types/react@19.1.16)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.9(@types/react@19.1.16))(@types/react@19.1.16)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-slot': 1.2.3(@types/react@19.1.16)(react@19.1.1) react: 19.1.1 react-dom: 19.1.1(react@19.1.1) optionalDependencies: - '@types/react': 19.1.14 - '@types/react-dom': 19.1.9(@types/react@19.1.14) + '@types/react': 19.1.16 + '@types/react-dom': 19.1.9(@types/react@19.1.16) - '@radix-ui/react-arrow@1.1.7(@types/react-dom@19.1.9(@types/react@19.1.14))(@types/react@19.1.14)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': + '@radix-ui/react-arrow@1.1.7(@types/react-dom@19.1.9(@types/react@19.1.16))(@types/react@19.1.16)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': dependencies: - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.9(@types/react@19.1.14))(@types/react@19.1.14)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.9(@types/react@19.1.16))(@types/react@19.1.16)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) react: 19.1.1 react-dom: 19.1.1(react@19.1.1) optionalDependencies: - '@types/react': 19.1.14 - '@types/react-dom': 19.1.9(@types/react@19.1.14) + '@types/react': 19.1.16 + '@types/react-dom': 19.1.9(@types/react@19.1.16) - '@radix-ui/react-avatar@1.1.10(@types/react-dom@19.1.9(@types/react@19.1.14))(@types/react@19.1.14)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': + '@radix-ui/react-avatar@1.1.10(@types/react-dom@19.1.9(@types/react@19.1.16))(@types/react@19.1.16)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': dependencies: - '@radix-ui/react-context': 1.1.2(@types/react@19.1.14)(react@19.1.1) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.9(@types/react@19.1.14))(@types/react@19.1.14)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) - '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.1.14)(react@19.1.1) - '@radix-ui/react-use-is-hydrated': 0.1.0(@types/react@19.1.14)(react@19.1.1) - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.14)(react@19.1.1) + '@radix-ui/react-context': 1.1.2(@types/react@19.1.16)(react@19.1.1) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.9(@types/react@19.1.16))(@types/react@19.1.16)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.1.16)(react@19.1.1) + '@radix-ui/react-use-is-hydrated': 0.1.0(@types/react@19.1.16)(react@19.1.1) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.16)(react@19.1.1) react: 19.1.1 react-dom: 19.1.1(react@19.1.1) optionalDependencies: - '@types/react': 19.1.14 - '@types/react-dom': 19.1.9(@types/react@19.1.14) + '@types/react': 19.1.16 + '@types/react-dom': 19.1.9(@types/react@19.1.16) - '@radix-ui/react-checkbox@1.3.3(@types/react-dom@19.1.9(@types/react@19.1.14))(@types/react@19.1.14)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': + '@radix-ui/react-checkbox@1.3.3(@types/react-dom@19.1.9(@types/react@19.1.16))(@types/react@19.1.16)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': dependencies: '@radix-ui/primitive': 1.1.3 - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.14)(react@19.1.1) - '@radix-ui/react-context': 1.1.2(@types/react@19.1.14)(react@19.1.1) - '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.1.9(@types/react@19.1.14))(@types/react@19.1.14)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.9(@types/react@19.1.14))(@types/react@19.1.14)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) - '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.1.14)(react@19.1.1) - '@radix-ui/react-use-previous': 1.1.1(@types/react@19.1.14)(react@19.1.1) - '@radix-ui/react-use-size': 1.1.1(@types/react@19.1.14)(react@19.1.1) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.16)(react@19.1.1) + '@radix-ui/react-context': 1.1.2(@types/react@19.1.16)(react@19.1.1) + '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.1.9(@types/react@19.1.16))(@types/react@19.1.16)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.9(@types/react@19.1.16))(@types/react@19.1.16)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.1.16)(react@19.1.1) + '@radix-ui/react-use-previous': 1.1.1(@types/react@19.1.16)(react@19.1.1) + '@radix-ui/react-use-size': 1.1.1(@types/react@19.1.16)(react@19.1.1) react: 19.1.1 react-dom: 19.1.1(react@19.1.1) optionalDependencies: - '@types/react': 19.1.14 - '@types/react-dom': 19.1.9(@types/react@19.1.14) + '@types/react': 19.1.16 + '@types/react-dom': 19.1.9(@types/react@19.1.16) - '@radix-ui/react-collapsible@1.1.12(@types/react-dom@19.1.9(@types/react@19.1.14))(@types/react@19.1.14)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': + '@radix-ui/react-collapsible@1.1.12(@types/react-dom@19.1.9(@types/react@19.1.16))(@types/react@19.1.16)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': dependencies: '@radix-ui/primitive': 1.1.3 - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.14)(react@19.1.1) - '@radix-ui/react-context': 1.1.2(@types/react@19.1.14)(react@19.1.1) - '@radix-ui/react-id': 1.1.1(@types/react@19.1.14)(react@19.1.1) - '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.1.9(@types/react@19.1.14))(@types/react@19.1.14)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.9(@types/react@19.1.14))(@types/react@19.1.14)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) - '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.1.14)(react@19.1.1) - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.14)(react@19.1.1) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.16)(react@19.1.1) + '@radix-ui/react-context': 1.1.2(@types/react@19.1.16)(react@19.1.1) + '@radix-ui/react-id': 1.1.1(@types/react@19.1.16)(react@19.1.1) + '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.1.9(@types/react@19.1.16))(@types/react@19.1.16)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.9(@types/react@19.1.16))(@types/react@19.1.16)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.1.16)(react@19.1.1) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.16)(react@19.1.1) react: 19.1.1 react-dom: 19.1.1(react@19.1.1) optionalDependencies: - '@types/react': 19.1.14 - '@types/react-dom': 19.1.9(@types/react@19.1.14) + '@types/react': 19.1.16 + '@types/react-dom': 19.1.9(@types/react@19.1.16) - '@radix-ui/react-collection@1.1.7(@types/react-dom@19.1.9(@types/react@19.1.14))(@types/react@19.1.14)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': + '@radix-ui/react-collection@1.1.7(@types/react-dom@19.1.9(@types/react@19.1.16))(@types/react@19.1.16)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': dependencies: - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.14)(react@19.1.1) - '@radix-ui/react-context': 1.1.2(@types/react@19.1.14)(react@19.1.1) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.9(@types/react@19.1.14))(@types/react@19.1.14)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) - '@radix-ui/react-slot': 1.2.3(@types/react@19.1.14)(react@19.1.1) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.16)(react@19.1.1) + '@radix-ui/react-context': 1.1.2(@types/react@19.1.16)(react@19.1.1) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.9(@types/react@19.1.16))(@types/react@19.1.16)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-slot': 1.2.3(@types/react@19.1.16)(react@19.1.1) react: 19.1.1 react-dom: 19.1.1(react@19.1.1) optionalDependencies: - '@types/react': 19.1.14 - '@types/react-dom': 19.1.9(@types/react@19.1.14) + '@types/react': 19.1.16 + '@types/react-dom': 19.1.9(@types/react@19.1.16) - '@radix-ui/react-compose-refs@1.1.2(@types/react@19.1.14)(react@19.1.1)': + '@radix-ui/react-compose-refs@1.1.2(@types/react@19.1.16)(react@19.1.1)': dependencies: react: 19.1.1 optionalDependencies: - '@types/react': 19.1.14 + '@types/react': 19.1.16 - '@radix-ui/react-context@1.1.2(@types/react@19.1.14)(react@19.1.1)': + '@radix-ui/react-context@1.1.2(@types/react@19.1.16)(react@19.1.1)': dependencies: react: 19.1.1 optionalDependencies: - '@types/react': 19.1.14 + '@types/react': 19.1.16 - '@radix-ui/react-dialog@1.1.15(@types/react-dom@19.1.9(@types/react@19.1.14))(@types/react@19.1.14)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': + '@radix-ui/react-dialog@1.1.15(@types/react-dom@19.1.9(@types/react@19.1.16))(@types/react@19.1.16)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': dependencies: '@radix-ui/primitive': 1.1.3 - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.14)(react@19.1.1) - '@radix-ui/react-context': 1.1.2(@types/react@19.1.14)(react@19.1.1) - '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@19.1.9(@types/react@19.1.14))(@types/react@19.1.14)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) - '@radix-ui/react-focus-guards': 1.1.3(@types/react@19.1.14)(react@19.1.1) - '@radix-ui/react-focus-scope': 1.1.7(@types/react-dom@19.1.9(@types/react@19.1.14))(@types/react@19.1.14)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) - '@radix-ui/react-id': 1.1.1(@types/react@19.1.14)(react@19.1.1) - '@radix-ui/react-portal': 1.1.9(@types/react-dom@19.1.9(@types/react@19.1.14))(@types/react@19.1.14)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) - '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.1.9(@types/react@19.1.14))(@types/react@19.1.14)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.9(@types/react@19.1.14))(@types/react@19.1.14)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) - '@radix-ui/react-slot': 1.2.3(@types/react@19.1.14)(react@19.1.1) - '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.1.14)(react@19.1.1) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.16)(react@19.1.1) + '@radix-ui/react-context': 1.1.2(@types/react@19.1.16)(react@19.1.1) + '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@19.1.9(@types/react@19.1.16))(@types/react@19.1.16)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-focus-guards': 1.1.3(@types/react@19.1.16)(react@19.1.1) + '@radix-ui/react-focus-scope': 1.1.7(@types/react-dom@19.1.9(@types/react@19.1.16))(@types/react@19.1.16)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-id': 1.1.1(@types/react@19.1.16)(react@19.1.1) + '@radix-ui/react-portal': 1.1.9(@types/react-dom@19.1.9(@types/react@19.1.16))(@types/react@19.1.16)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.1.9(@types/react@19.1.16))(@types/react@19.1.16)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.9(@types/react@19.1.16))(@types/react@19.1.16)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-slot': 1.2.3(@types/react@19.1.16)(react@19.1.1) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.1.16)(react@19.1.1) aria-hidden: 1.2.6 react: 19.1.1 react-dom: 19.1.1(react@19.1.1) - react-remove-scroll: 2.7.1(@types/react@19.1.14)(react@19.1.1) + react-remove-scroll: 2.7.1(@types/react@19.1.16)(react@19.1.1) optionalDependencies: - '@types/react': 19.1.14 - '@types/react-dom': 19.1.9(@types/react@19.1.14) + '@types/react': 19.1.16 + '@types/react-dom': 19.1.9(@types/react@19.1.16) - '@radix-ui/react-direction@1.1.1(@types/react@19.1.14)(react@19.1.1)': + '@radix-ui/react-direction@1.1.1(@types/react@19.1.16)(react@19.1.1)': dependencies: react: 19.1.1 optionalDependencies: - '@types/react': 19.1.14 + '@types/react': 19.1.16 - '@radix-ui/react-dismissable-layer@1.1.11(@types/react-dom@19.1.9(@types/react@19.1.14))(@types/react@19.1.14)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': + '@radix-ui/react-dismissable-layer@1.1.11(@types/react-dom@19.1.9(@types/react@19.1.16))(@types/react@19.1.16)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': dependencies: '@radix-ui/primitive': 1.1.3 - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.14)(react@19.1.1) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.9(@types/react@19.1.14))(@types/react@19.1.14)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) - '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.1.14)(react@19.1.1) - '@radix-ui/react-use-escape-keydown': 1.1.1(@types/react@19.1.14)(react@19.1.1) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.16)(react@19.1.1) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.9(@types/react@19.1.16))(@types/react@19.1.16)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.1.16)(react@19.1.1) + '@radix-ui/react-use-escape-keydown': 1.1.1(@types/react@19.1.16)(react@19.1.1) react: 19.1.1 react-dom: 19.1.1(react@19.1.1) optionalDependencies: - '@types/react': 19.1.14 - '@types/react-dom': 19.1.9(@types/react@19.1.14) + '@types/react': 19.1.16 + '@types/react-dom': 19.1.9(@types/react@19.1.16) - '@radix-ui/react-dropdown-menu@2.1.16(@types/react-dom@19.1.9(@types/react@19.1.14))(@types/react@19.1.14)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': + '@radix-ui/react-dropdown-menu@2.1.16(@types/react-dom@19.1.9(@types/react@19.1.16))(@types/react@19.1.16)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': dependencies: '@radix-ui/primitive': 1.1.3 - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.14)(react@19.1.1) - '@radix-ui/react-context': 1.1.2(@types/react@19.1.14)(react@19.1.1) - '@radix-ui/react-id': 1.1.1(@types/react@19.1.14)(react@19.1.1) - '@radix-ui/react-menu': 2.1.16(@types/react-dom@19.1.9(@types/react@19.1.14))(@types/react@19.1.14)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.9(@types/react@19.1.14))(@types/react@19.1.14)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) - '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.1.14)(react@19.1.1) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.16)(react@19.1.1) + '@radix-ui/react-context': 1.1.2(@types/react@19.1.16)(react@19.1.1) + '@radix-ui/react-id': 1.1.1(@types/react@19.1.16)(react@19.1.1) + '@radix-ui/react-menu': 2.1.16(@types/react-dom@19.1.9(@types/react@19.1.16))(@types/react@19.1.16)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.9(@types/react@19.1.16))(@types/react@19.1.16)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.1.16)(react@19.1.1) react: 19.1.1 react-dom: 19.1.1(react@19.1.1) optionalDependencies: - '@types/react': 19.1.14 - '@types/react-dom': 19.1.9(@types/react@19.1.14) + '@types/react': 19.1.16 + '@types/react-dom': 19.1.9(@types/react@19.1.16) - '@radix-ui/react-focus-guards@1.1.3(@types/react@19.1.14)(react@19.1.1)': + '@radix-ui/react-focus-guards@1.1.3(@types/react@19.1.16)(react@19.1.1)': dependencies: react: 19.1.1 optionalDependencies: - '@types/react': 19.1.14 + '@types/react': 19.1.16 - '@radix-ui/react-focus-scope@1.1.7(@types/react-dom@19.1.9(@types/react@19.1.14))(@types/react@19.1.14)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': + '@radix-ui/react-focus-scope@1.1.7(@types/react-dom@19.1.9(@types/react@19.1.16))(@types/react@19.1.16)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': dependencies: - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.14)(react@19.1.1) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.9(@types/react@19.1.14))(@types/react@19.1.14)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) - '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.1.14)(react@19.1.1) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.16)(react@19.1.1) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.9(@types/react@19.1.16))(@types/react@19.1.16)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.1.16)(react@19.1.1) react: 19.1.1 react-dom: 19.1.1(react@19.1.1) optionalDependencies: - '@types/react': 19.1.14 - '@types/react-dom': 19.1.9(@types/react@19.1.14) + '@types/react': 19.1.16 + '@types/react-dom': 19.1.9(@types/react@19.1.16) - '@radix-ui/react-hover-card@1.1.15(@types/react-dom@19.1.9(@types/react@19.1.14))(@types/react@19.1.14)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': + '@radix-ui/react-hover-card@1.1.15(@types/react-dom@19.1.9(@types/react@19.1.16))(@types/react@19.1.16)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': dependencies: '@radix-ui/primitive': 1.1.3 - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.14)(react@19.1.1) - '@radix-ui/react-context': 1.1.2(@types/react@19.1.14)(react@19.1.1) - '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@19.1.9(@types/react@19.1.14))(@types/react@19.1.14)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) - '@radix-ui/react-popper': 1.2.8(@types/react-dom@19.1.9(@types/react@19.1.14))(@types/react@19.1.14)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) - '@radix-ui/react-portal': 1.1.9(@types/react-dom@19.1.9(@types/react@19.1.14))(@types/react@19.1.14)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) - '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.1.9(@types/react@19.1.14))(@types/react@19.1.14)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.9(@types/react@19.1.14))(@types/react@19.1.14)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) - '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.1.14)(react@19.1.1) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.16)(react@19.1.1) + '@radix-ui/react-context': 1.1.2(@types/react@19.1.16)(react@19.1.1) + '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@19.1.9(@types/react@19.1.16))(@types/react@19.1.16)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-popper': 1.2.8(@types/react-dom@19.1.9(@types/react@19.1.16))(@types/react@19.1.16)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-portal': 1.1.9(@types/react-dom@19.1.9(@types/react@19.1.16))(@types/react@19.1.16)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.1.9(@types/react@19.1.16))(@types/react@19.1.16)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.9(@types/react@19.1.16))(@types/react@19.1.16)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.1.16)(react@19.1.1) react: 19.1.1 react-dom: 19.1.1(react@19.1.1) optionalDependencies: - '@types/react': 19.1.14 - '@types/react-dom': 19.1.9(@types/react@19.1.14) + '@types/react': 19.1.16 + '@types/react-dom': 19.1.9(@types/react@19.1.16) - '@radix-ui/react-id@1.1.1(@types/react@19.1.14)(react@19.1.1)': + '@radix-ui/react-id@1.1.1(@types/react@19.1.16)(react@19.1.1)': dependencies: - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.14)(react@19.1.1) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.16)(react@19.1.1) react: 19.1.1 optionalDependencies: - '@types/react': 19.1.14 + '@types/react': 19.1.16 - '@radix-ui/react-label@2.1.7(@types/react-dom@19.1.9(@types/react@19.1.14))(@types/react@19.1.14)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': + '@radix-ui/react-label@2.1.7(@types/react-dom@19.1.9(@types/react@19.1.16))(@types/react@19.1.16)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': dependencies: - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.9(@types/react@19.1.14))(@types/react@19.1.14)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.9(@types/react@19.1.16))(@types/react@19.1.16)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) react: 19.1.1 react-dom: 19.1.1(react@19.1.1) optionalDependencies: - '@types/react': 19.1.14 - '@types/react-dom': 19.1.9(@types/react@19.1.14) + '@types/react': 19.1.16 + '@types/react-dom': 19.1.9(@types/react@19.1.16) - '@radix-ui/react-menu@2.1.16(@types/react-dom@19.1.9(@types/react@19.1.14))(@types/react@19.1.14)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': + '@radix-ui/react-menu@2.1.16(@types/react-dom@19.1.9(@types/react@19.1.16))(@types/react@19.1.16)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': dependencies: '@radix-ui/primitive': 1.1.3 - '@radix-ui/react-collection': 1.1.7(@types/react-dom@19.1.9(@types/react@19.1.14))(@types/react@19.1.14)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.14)(react@19.1.1) - '@radix-ui/react-context': 1.1.2(@types/react@19.1.14)(react@19.1.1) - '@radix-ui/react-direction': 1.1.1(@types/react@19.1.14)(react@19.1.1) - '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@19.1.9(@types/react@19.1.14))(@types/react@19.1.14)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) - '@radix-ui/react-focus-guards': 1.1.3(@types/react@19.1.14)(react@19.1.1) - '@radix-ui/react-focus-scope': 1.1.7(@types/react-dom@19.1.9(@types/react@19.1.14))(@types/react@19.1.14)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) - '@radix-ui/react-id': 1.1.1(@types/react@19.1.14)(react@19.1.1) - '@radix-ui/react-popper': 1.2.8(@types/react-dom@19.1.9(@types/react@19.1.14))(@types/react@19.1.14)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) - '@radix-ui/react-portal': 1.1.9(@types/react-dom@19.1.9(@types/react@19.1.14))(@types/react@19.1.14)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) - '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.1.9(@types/react@19.1.14))(@types/react@19.1.14)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.9(@types/react@19.1.14))(@types/react@19.1.14)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) - '@radix-ui/react-roving-focus': 1.1.11(@types/react-dom@19.1.9(@types/react@19.1.14))(@types/react@19.1.14)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) - '@radix-ui/react-slot': 1.2.3(@types/react@19.1.14)(react@19.1.1) - '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.1.14)(react@19.1.1) + '@radix-ui/react-collection': 1.1.7(@types/react-dom@19.1.9(@types/react@19.1.16))(@types/react@19.1.16)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.16)(react@19.1.1) + '@radix-ui/react-context': 1.1.2(@types/react@19.1.16)(react@19.1.1) + '@radix-ui/react-direction': 1.1.1(@types/react@19.1.16)(react@19.1.1) + '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@19.1.9(@types/react@19.1.16))(@types/react@19.1.16)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-focus-guards': 1.1.3(@types/react@19.1.16)(react@19.1.1) + '@radix-ui/react-focus-scope': 1.1.7(@types/react-dom@19.1.9(@types/react@19.1.16))(@types/react@19.1.16)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-id': 1.1.1(@types/react@19.1.16)(react@19.1.1) + '@radix-ui/react-popper': 1.2.8(@types/react-dom@19.1.9(@types/react@19.1.16))(@types/react@19.1.16)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-portal': 1.1.9(@types/react-dom@19.1.9(@types/react@19.1.16))(@types/react@19.1.16)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.1.9(@types/react@19.1.16))(@types/react@19.1.16)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.9(@types/react@19.1.16))(@types/react@19.1.16)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-roving-focus': 1.1.11(@types/react-dom@19.1.9(@types/react@19.1.16))(@types/react@19.1.16)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-slot': 1.2.3(@types/react@19.1.16)(react@19.1.1) + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.1.16)(react@19.1.1) aria-hidden: 1.2.6 react: 19.1.1 react-dom: 19.1.1(react@19.1.1) - react-remove-scroll: 2.7.1(@types/react@19.1.14)(react@19.1.1) + react-remove-scroll: 2.7.1(@types/react@19.1.16)(react@19.1.1) optionalDependencies: - '@types/react': 19.1.14 - '@types/react-dom': 19.1.9(@types/react@19.1.14) + '@types/react': 19.1.16 + '@types/react-dom': 19.1.9(@types/react@19.1.16) - '@radix-ui/react-popover@1.1.15(@types/react-dom@19.1.9(@types/react@19.1.14))(@types/react@19.1.14)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': + '@radix-ui/react-popover@1.1.15(@types/react-dom@19.1.9(@types/react@19.1.16))(@types/react@19.1.16)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': dependencies: '@radix-ui/primitive': 1.1.3 - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.14)(react@19.1.1) - '@radix-ui/react-context': 1.1.2(@types/react@19.1.14)(react@19.1.1) - '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@19.1.9(@types/react@19.1.14))(@types/react@19.1.14)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) - '@radix-ui/react-focus-guards': 1.1.3(@types/react@19.1.14)(react@19.1.1) - '@radix-ui/react-focus-scope': 1.1.7(@types/react-dom@19.1.9(@types/react@19.1.14))(@types/react@19.1.14)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) - '@radix-ui/react-id': 1.1.1(@types/react@19.1.14)(react@19.1.1) - '@radix-ui/react-popper': 1.2.8(@types/react-dom@19.1.9(@types/react@19.1.14))(@types/react@19.1.14)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) - '@radix-ui/react-portal': 1.1.9(@types/react-dom@19.1.9(@types/react@19.1.14))(@types/react@19.1.14)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) - '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.1.9(@types/react@19.1.14))(@types/react@19.1.14)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.9(@types/react@19.1.14))(@types/react@19.1.14)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) - '@radix-ui/react-slot': 1.2.3(@types/react@19.1.14)(react@19.1.1) - '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.1.14)(react@19.1.1) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.16)(react@19.1.1) + '@radix-ui/react-context': 1.1.2(@types/react@19.1.16)(react@19.1.1) + '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@19.1.9(@types/react@19.1.16))(@types/react@19.1.16)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-focus-guards': 1.1.3(@types/react@19.1.16)(react@19.1.1) + '@radix-ui/react-focus-scope': 1.1.7(@types/react-dom@19.1.9(@types/react@19.1.16))(@types/react@19.1.16)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-id': 1.1.1(@types/react@19.1.16)(react@19.1.1) + '@radix-ui/react-popper': 1.2.8(@types/react-dom@19.1.9(@types/react@19.1.16))(@types/react@19.1.16)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-portal': 1.1.9(@types/react-dom@19.1.9(@types/react@19.1.16))(@types/react@19.1.16)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.1.9(@types/react@19.1.16))(@types/react@19.1.16)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.9(@types/react@19.1.16))(@types/react@19.1.16)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-slot': 1.2.3(@types/react@19.1.16)(react@19.1.1) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.1.16)(react@19.1.1) aria-hidden: 1.2.6 react: 19.1.1 react-dom: 19.1.1(react@19.1.1) - react-remove-scroll: 2.7.1(@types/react@19.1.14)(react@19.1.1) + react-remove-scroll: 2.7.1(@types/react@19.1.16)(react@19.1.1) optionalDependencies: - '@types/react': 19.1.14 - '@types/react-dom': 19.1.9(@types/react@19.1.14) + '@types/react': 19.1.16 + '@types/react-dom': 19.1.9(@types/react@19.1.16) - '@radix-ui/react-popper@1.2.8(@types/react-dom@19.1.9(@types/react@19.1.14))(@types/react@19.1.14)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': + '@radix-ui/react-popper@1.2.8(@types/react-dom@19.1.9(@types/react@19.1.16))(@types/react@19.1.16)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': dependencies: '@floating-ui/react-dom': 2.1.6(react-dom@19.1.1(react@19.1.1))(react@19.1.1) - '@radix-ui/react-arrow': 1.1.7(@types/react-dom@19.1.9(@types/react@19.1.14))(@types/react@19.1.14)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.14)(react@19.1.1) - '@radix-ui/react-context': 1.1.2(@types/react@19.1.14)(react@19.1.1) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.9(@types/react@19.1.14))(@types/react@19.1.14)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) - '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.1.14)(react@19.1.1) - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.14)(react@19.1.1) - '@radix-ui/react-use-rect': 1.1.1(@types/react@19.1.14)(react@19.1.1) - '@radix-ui/react-use-size': 1.1.1(@types/react@19.1.14)(react@19.1.1) + '@radix-ui/react-arrow': 1.1.7(@types/react-dom@19.1.9(@types/react@19.1.16))(@types/react@19.1.16)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.16)(react@19.1.1) + '@radix-ui/react-context': 1.1.2(@types/react@19.1.16)(react@19.1.1) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.9(@types/react@19.1.16))(@types/react@19.1.16)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.1.16)(react@19.1.1) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.16)(react@19.1.1) + '@radix-ui/react-use-rect': 1.1.1(@types/react@19.1.16)(react@19.1.1) + '@radix-ui/react-use-size': 1.1.1(@types/react@19.1.16)(react@19.1.1) '@radix-ui/rect': 1.1.1 react: 19.1.1 react-dom: 19.1.1(react@19.1.1) optionalDependencies: - '@types/react': 19.1.14 - '@types/react-dom': 19.1.9(@types/react@19.1.14) + '@types/react': 19.1.16 + '@types/react-dom': 19.1.9(@types/react@19.1.16) - '@radix-ui/react-portal@1.1.9(@types/react-dom@19.1.9(@types/react@19.1.14))(@types/react@19.1.14)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': + '@radix-ui/react-portal@1.1.9(@types/react-dom@19.1.9(@types/react@19.1.16))(@types/react@19.1.16)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': dependencies: - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.9(@types/react@19.1.14))(@types/react@19.1.14)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.14)(react@19.1.1) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.9(@types/react@19.1.16))(@types/react@19.1.16)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.16)(react@19.1.1) react: 19.1.1 react-dom: 19.1.1(react@19.1.1) optionalDependencies: - '@types/react': 19.1.14 - '@types/react-dom': 19.1.9(@types/react@19.1.14) + '@types/react': 19.1.16 + '@types/react-dom': 19.1.9(@types/react@19.1.16) - '@radix-ui/react-presence@1.1.5(@types/react-dom@19.1.9(@types/react@19.1.14))(@types/react@19.1.14)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': + '@radix-ui/react-presence@1.1.5(@types/react-dom@19.1.9(@types/react@19.1.16))(@types/react@19.1.16)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': dependencies: - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.14)(react@19.1.1) - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.14)(react@19.1.1) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.16)(react@19.1.1) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.16)(react@19.1.1) react: 19.1.1 react-dom: 19.1.1(react@19.1.1) optionalDependencies: - '@types/react': 19.1.14 - '@types/react-dom': 19.1.9(@types/react@19.1.14) + '@types/react': 19.1.16 + '@types/react-dom': 19.1.9(@types/react@19.1.16) - '@radix-ui/react-primitive@2.1.3(@types/react-dom@19.1.9(@types/react@19.1.14))(@types/react@19.1.14)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': + '@radix-ui/react-primitive@2.1.3(@types/react-dom@19.1.9(@types/react@19.1.16))(@types/react@19.1.16)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': dependencies: - '@radix-ui/react-slot': 1.2.3(@types/react@19.1.14)(react@19.1.1) + '@radix-ui/react-slot': 1.2.3(@types/react@19.1.16)(react@19.1.1) react: 19.1.1 react-dom: 19.1.1(react@19.1.1) optionalDependencies: - '@types/react': 19.1.14 - '@types/react-dom': 19.1.9(@types/react@19.1.14) + '@types/react': 19.1.16 + '@types/react-dom': 19.1.9(@types/react@19.1.16) - '@radix-ui/react-progress@1.1.7(@types/react-dom@19.1.9(@types/react@19.1.14))(@types/react@19.1.14)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': + '@radix-ui/react-progress@1.1.7(@types/react-dom@19.1.9(@types/react@19.1.16))(@types/react@19.1.16)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': dependencies: - '@radix-ui/react-context': 1.1.2(@types/react@19.1.14)(react@19.1.1) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.9(@types/react@19.1.14))(@types/react@19.1.14)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-context': 1.1.2(@types/react@19.1.16)(react@19.1.1) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.9(@types/react@19.1.16))(@types/react@19.1.16)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) react: 19.1.1 react-dom: 19.1.1(react@19.1.1) optionalDependencies: - '@types/react': 19.1.14 - '@types/react-dom': 19.1.9(@types/react@19.1.14) + '@types/react': 19.1.16 + '@types/react-dom': 19.1.9(@types/react@19.1.16) - '@radix-ui/react-radio-group@1.3.8(@types/react-dom@19.1.9(@types/react@19.1.14))(@types/react@19.1.14)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': + '@radix-ui/react-radio-group@1.3.8(@types/react-dom@19.1.9(@types/react@19.1.16))(@types/react@19.1.16)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': dependencies: '@radix-ui/primitive': 1.1.3 - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.14)(react@19.1.1) - '@radix-ui/react-context': 1.1.2(@types/react@19.1.14)(react@19.1.1) - '@radix-ui/react-direction': 1.1.1(@types/react@19.1.14)(react@19.1.1) - '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.1.9(@types/react@19.1.14))(@types/react@19.1.14)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.9(@types/react@19.1.14))(@types/react@19.1.14)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) - '@radix-ui/react-roving-focus': 1.1.11(@types/react-dom@19.1.9(@types/react@19.1.14))(@types/react@19.1.14)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) - '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.1.14)(react@19.1.1) - '@radix-ui/react-use-previous': 1.1.1(@types/react@19.1.14)(react@19.1.1) - '@radix-ui/react-use-size': 1.1.1(@types/react@19.1.14)(react@19.1.1) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.16)(react@19.1.1) + '@radix-ui/react-context': 1.1.2(@types/react@19.1.16)(react@19.1.1) + '@radix-ui/react-direction': 1.1.1(@types/react@19.1.16)(react@19.1.1) + '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.1.9(@types/react@19.1.16))(@types/react@19.1.16)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.9(@types/react@19.1.16))(@types/react@19.1.16)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-roving-focus': 1.1.11(@types/react-dom@19.1.9(@types/react@19.1.16))(@types/react@19.1.16)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.1.16)(react@19.1.1) + '@radix-ui/react-use-previous': 1.1.1(@types/react@19.1.16)(react@19.1.1) + '@radix-ui/react-use-size': 1.1.1(@types/react@19.1.16)(react@19.1.1) react: 19.1.1 react-dom: 19.1.1(react@19.1.1) optionalDependencies: - '@types/react': 19.1.14 - '@types/react-dom': 19.1.9(@types/react@19.1.14) + '@types/react': 19.1.16 + '@types/react-dom': 19.1.9(@types/react@19.1.16) - '@radix-ui/react-roving-focus@1.1.11(@types/react-dom@19.1.9(@types/react@19.1.14))(@types/react@19.1.14)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': + '@radix-ui/react-roving-focus@1.1.11(@types/react-dom@19.1.9(@types/react@19.1.16))(@types/react@19.1.16)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': dependencies: '@radix-ui/primitive': 1.1.3 - '@radix-ui/react-collection': 1.1.7(@types/react-dom@19.1.9(@types/react@19.1.14))(@types/react@19.1.14)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.14)(react@19.1.1) - '@radix-ui/react-context': 1.1.2(@types/react@19.1.14)(react@19.1.1) - '@radix-ui/react-direction': 1.1.1(@types/react@19.1.14)(react@19.1.1) - '@radix-ui/react-id': 1.1.1(@types/react@19.1.14)(react@19.1.1) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.9(@types/react@19.1.14))(@types/react@19.1.14)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) - '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.1.14)(react@19.1.1) - '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.1.14)(react@19.1.1) + '@radix-ui/react-collection': 1.1.7(@types/react-dom@19.1.9(@types/react@19.1.16))(@types/react@19.1.16)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.16)(react@19.1.1) + '@radix-ui/react-context': 1.1.2(@types/react@19.1.16)(react@19.1.1) + '@radix-ui/react-direction': 1.1.1(@types/react@19.1.16)(react@19.1.1) + '@radix-ui/react-id': 1.1.1(@types/react@19.1.16)(react@19.1.1) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.9(@types/react@19.1.16))(@types/react@19.1.16)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.1.16)(react@19.1.1) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.1.16)(react@19.1.1) react: 19.1.1 react-dom: 19.1.1(react@19.1.1) optionalDependencies: - '@types/react': 19.1.14 - '@types/react-dom': 19.1.9(@types/react@19.1.14) + '@types/react': 19.1.16 + '@types/react-dom': 19.1.9(@types/react@19.1.16) - '@radix-ui/react-scroll-area@1.2.10(@types/react-dom@19.1.9(@types/react@19.1.14))(@types/react@19.1.14)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': + '@radix-ui/react-scroll-area@1.2.10(@types/react-dom@19.1.9(@types/react@19.1.16))(@types/react@19.1.16)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': dependencies: '@radix-ui/number': 1.1.1 '@radix-ui/primitive': 1.1.3 - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.14)(react@19.1.1) - '@radix-ui/react-context': 1.1.2(@types/react@19.1.14)(react@19.1.1) - '@radix-ui/react-direction': 1.1.1(@types/react@19.1.14)(react@19.1.1) - '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.1.9(@types/react@19.1.14))(@types/react@19.1.14)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.9(@types/react@19.1.14))(@types/react@19.1.14)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) - '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.1.14)(react@19.1.1) - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.14)(react@19.1.1) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.16)(react@19.1.1) + '@radix-ui/react-context': 1.1.2(@types/react@19.1.16)(react@19.1.1) + '@radix-ui/react-direction': 1.1.1(@types/react@19.1.16)(react@19.1.1) + '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.1.9(@types/react@19.1.16))(@types/react@19.1.16)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.9(@types/react@19.1.16))(@types/react@19.1.16)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.1.16)(react@19.1.1) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.16)(react@19.1.1) react: 19.1.1 react-dom: 19.1.1(react@19.1.1) optionalDependencies: - '@types/react': 19.1.14 - '@types/react-dom': 19.1.9(@types/react@19.1.14) + '@types/react': 19.1.16 + '@types/react-dom': 19.1.9(@types/react@19.1.16) - '@radix-ui/react-select@2.2.6(@types/react-dom@19.1.9(@types/react@19.1.14))(@types/react@19.1.14)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': + '@radix-ui/react-select@2.2.6(@types/react-dom@19.1.9(@types/react@19.1.16))(@types/react@19.1.16)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': dependencies: '@radix-ui/number': 1.1.1 '@radix-ui/primitive': 1.1.3 - '@radix-ui/react-collection': 1.1.7(@types/react-dom@19.1.9(@types/react@19.1.14))(@types/react@19.1.14)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.14)(react@19.1.1) - '@radix-ui/react-context': 1.1.2(@types/react@19.1.14)(react@19.1.1) - '@radix-ui/react-direction': 1.1.1(@types/react@19.1.14)(react@19.1.1) - '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@19.1.9(@types/react@19.1.14))(@types/react@19.1.14)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) - '@radix-ui/react-focus-guards': 1.1.3(@types/react@19.1.14)(react@19.1.1) - '@radix-ui/react-focus-scope': 1.1.7(@types/react-dom@19.1.9(@types/react@19.1.14))(@types/react@19.1.14)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) - '@radix-ui/react-id': 1.1.1(@types/react@19.1.14)(react@19.1.1) - '@radix-ui/react-popper': 1.2.8(@types/react-dom@19.1.9(@types/react@19.1.14))(@types/react@19.1.14)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) - '@radix-ui/react-portal': 1.1.9(@types/react-dom@19.1.9(@types/react@19.1.14))(@types/react@19.1.14)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.9(@types/react@19.1.14))(@types/react@19.1.14)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) - '@radix-ui/react-slot': 1.2.3(@types/react@19.1.14)(react@19.1.1) - '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.1.14)(react@19.1.1) - '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.1.14)(react@19.1.1) - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.14)(react@19.1.1) - '@radix-ui/react-use-previous': 1.1.1(@types/react@19.1.14)(react@19.1.1) - '@radix-ui/react-visually-hidden': 1.2.3(@types/react-dom@19.1.9(@types/react@19.1.14))(@types/react@19.1.14)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-collection': 1.1.7(@types/react-dom@19.1.9(@types/react@19.1.16))(@types/react@19.1.16)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.16)(react@19.1.1) + '@radix-ui/react-context': 1.1.2(@types/react@19.1.16)(react@19.1.1) + '@radix-ui/react-direction': 1.1.1(@types/react@19.1.16)(react@19.1.1) + '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@19.1.9(@types/react@19.1.16))(@types/react@19.1.16)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-focus-guards': 1.1.3(@types/react@19.1.16)(react@19.1.1) + '@radix-ui/react-focus-scope': 1.1.7(@types/react-dom@19.1.9(@types/react@19.1.16))(@types/react@19.1.16)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-id': 1.1.1(@types/react@19.1.16)(react@19.1.1) + '@radix-ui/react-popper': 1.2.8(@types/react-dom@19.1.9(@types/react@19.1.16))(@types/react@19.1.16)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-portal': 1.1.9(@types/react-dom@19.1.9(@types/react@19.1.16))(@types/react@19.1.16)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.9(@types/react@19.1.16))(@types/react@19.1.16)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-slot': 1.2.3(@types/react@19.1.16)(react@19.1.1) + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.1.16)(react@19.1.1) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.1.16)(react@19.1.1) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.16)(react@19.1.1) + '@radix-ui/react-use-previous': 1.1.1(@types/react@19.1.16)(react@19.1.1) + '@radix-ui/react-visually-hidden': 1.2.3(@types/react-dom@19.1.9(@types/react@19.1.16))(@types/react@19.1.16)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) aria-hidden: 1.2.6 react: 19.1.1 react-dom: 19.1.1(react@19.1.1) - react-remove-scroll: 2.7.1(@types/react@19.1.14)(react@19.1.1) + react-remove-scroll: 2.7.1(@types/react@19.1.16)(react@19.1.1) optionalDependencies: - '@types/react': 19.1.14 - '@types/react-dom': 19.1.9(@types/react@19.1.14) + '@types/react': 19.1.16 + '@types/react-dom': 19.1.9(@types/react@19.1.16) - '@radix-ui/react-separator@1.1.7(@types/react-dom@19.1.9(@types/react@19.1.14))(@types/react@19.1.14)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': + '@radix-ui/react-separator@1.1.7(@types/react-dom@19.1.9(@types/react@19.1.16))(@types/react@19.1.16)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': dependencies: - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.9(@types/react@19.1.14))(@types/react@19.1.14)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.9(@types/react@19.1.16))(@types/react@19.1.16)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) react: 19.1.1 react-dom: 19.1.1(react@19.1.1) optionalDependencies: - '@types/react': 19.1.14 - '@types/react-dom': 19.1.9(@types/react@19.1.14) + '@types/react': 19.1.16 + '@types/react-dom': 19.1.9(@types/react@19.1.16) - '@radix-ui/react-slider@1.3.6(@types/react-dom@19.1.9(@types/react@19.1.14))(@types/react@19.1.14)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': + '@radix-ui/react-slider@1.3.6(@types/react-dom@19.1.9(@types/react@19.1.16))(@types/react@19.1.16)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': dependencies: '@radix-ui/number': 1.1.1 '@radix-ui/primitive': 1.1.3 - '@radix-ui/react-collection': 1.1.7(@types/react-dom@19.1.9(@types/react@19.1.14))(@types/react@19.1.14)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.14)(react@19.1.1) - '@radix-ui/react-context': 1.1.2(@types/react@19.1.14)(react@19.1.1) - '@radix-ui/react-direction': 1.1.1(@types/react@19.1.14)(react@19.1.1) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.9(@types/react@19.1.14))(@types/react@19.1.14)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) - '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.1.14)(react@19.1.1) - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.14)(react@19.1.1) - '@radix-ui/react-use-previous': 1.1.1(@types/react@19.1.14)(react@19.1.1) - '@radix-ui/react-use-size': 1.1.1(@types/react@19.1.14)(react@19.1.1) + '@radix-ui/react-collection': 1.1.7(@types/react-dom@19.1.9(@types/react@19.1.16))(@types/react@19.1.16)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.16)(react@19.1.1) + '@radix-ui/react-context': 1.1.2(@types/react@19.1.16)(react@19.1.1) + '@radix-ui/react-direction': 1.1.1(@types/react@19.1.16)(react@19.1.1) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.9(@types/react@19.1.16))(@types/react@19.1.16)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.1.16)(react@19.1.1) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.16)(react@19.1.1) + '@radix-ui/react-use-previous': 1.1.1(@types/react@19.1.16)(react@19.1.1) + '@radix-ui/react-use-size': 1.1.1(@types/react@19.1.16)(react@19.1.1) react: 19.1.1 react-dom: 19.1.1(react@19.1.1) optionalDependencies: - '@types/react': 19.1.14 - '@types/react-dom': 19.1.9(@types/react@19.1.14) + '@types/react': 19.1.16 + '@types/react-dom': 19.1.9(@types/react@19.1.16) - '@radix-ui/react-slot@1.2.3(@types/react@19.1.14)(react@19.1.1)': + '@radix-ui/react-slot@1.2.3(@types/react@19.1.16)(react@19.1.1)': dependencies: - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.14)(react@19.1.1) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.16)(react@19.1.1) react: 19.1.1 optionalDependencies: - '@types/react': 19.1.14 + '@types/react': 19.1.16 - '@radix-ui/react-switch@1.2.6(@types/react-dom@19.1.9(@types/react@19.1.14))(@types/react@19.1.14)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': + '@radix-ui/react-switch@1.2.6(@types/react-dom@19.1.9(@types/react@19.1.16))(@types/react@19.1.16)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': dependencies: '@radix-ui/primitive': 1.1.3 - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.14)(react@19.1.1) - '@radix-ui/react-context': 1.1.2(@types/react@19.1.14)(react@19.1.1) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.9(@types/react@19.1.14))(@types/react@19.1.14)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) - '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.1.14)(react@19.1.1) - '@radix-ui/react-use-previous': 1.1.1(@types/react@19.1.14)(react@19.1.1) - '@radix-ui/react-use-size': 1.1.1(@types/react@19.1.14)(react@19.1.1) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.16)(react@19.1.1) + '@radix-ui/react-context': 1.1.2(@types/react@19.1.16)(react@19.1.1) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.9(@types/react@19.1.16))(@types/react@19.1.16)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.1.16)(react@19.1.1) + '@radix-ui/react-use-previous': 1.1.1(@types/react@19.1.16)(react@19.1.1) + '@radix-ui/react-use-size': 1.1.1(@types/react@19.1.16)(react@19.1.1) react: 19.1.1 react-dom: 19.1.1(react@19.1.1) optionalDependencies: - '@types/react': 19.1.14 - '@types/react-dom': 19.1.9(@types/react@19.1.14) + '@types/react': 19.1.16 + '@types/react-dom': 19.1.9(@types/react@19.1.16) - '@radix-ui/react-tabs@1.1.13(@types/react-dom@19.1.9(@types/react@19.1.14))(@types/react@19.1.14)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': + '@radix-ui/react-tabs@1.1.13(@types/react-dom@19.1.9(@types/react@19.1.16))(@types/react@19.1.16)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': dependencies: '@radix-ui/primitive': 1.1.3 - '@radix-ui/react-context': 1.1.2(@types/react@19.1.14)(react@19.1.1) - '@radix-ui/react-direction': 1.1.1(@types/react@19.1.14)(react@19.1.1) - '@radix-ui/react-id': 1.1.1(@types/react@19.1.14)(react@19.1.1) - '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.1.9(@types/react@19.1.14))(@types/react@19.1.14)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.9(@types/react@19.1.14))(@types/react@19.1.14)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) - '@radix-ui/react-roving-focus': 1.1.11(@types/react-dom@19.1.9(@types/react@19.1.14))(@types/react@19.1.14)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) - '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.1.14)(react@19.1.1) + '@radix-ui/react-context': 1.1.2(@types/react@19.1.16)(react@19.1.1) + '@radix-ui/react-direction': 1.1.1(@types/react@19.1.16)(react@19.1.1) + '@radix-ui/react-id': 1.1.1(@types/react@19.1.16)(react@19.1.1) + '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.1.9(@types/react@19.1.16))(@types/react@19.1.16)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.9(@types/react@19.1.16))(@types/react@19.1.16)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-roving-focus': 1.1.11(@types/react-dom@19.1.9(@types/react@19.1.16))(@types/react@19.1.16)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.1.16)(react@19.1.1) react: 19.1.1 react-dom: 19.1.1(react@19.1.1) optionalDependencies: - '@types/react': 19.1.14 - '@types/react-dom': 19.1.9(@types/react@19.1.14) + '@types/react': 19.1.16 + '@types/react-dom': 19.1.9(@types/react@19.1.16) - '@radix-ui/react-toggle@1.1.10(@types/react-dom@19.1.9(@types/react@19.1.14))(@types/react@19.1.14)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': + '@radix-ui/react-toggle@1.1.10(@types/react-dom@19.1.9(@types/react@19.1.16))(@types/react@19.1.16)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': dependencies: '@radix-ui/primitive': 1.1.3 - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.9(@types/react@19.1.14))(@types/react@19.1.14)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) - '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.1.14)(react@19.1.1) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.9(@types/react@19.1.16))(@types/react@19.1.16)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.1.16)(react@19.1.1) react: 19.1.1 react-dom: 19.1.1(react@19.1.1) optionalDependencies: - '@types/react': 19.1.14 - '@types/react-dom': 19.1.9(@types/react@19.1.14) + '@types/react': 19.1.16 + '@types/react-dom': 19.1.9(@types/react@19.1.16) - '@radix-ui/react-tooltip@1.2.8(@types/react-dom@19.1.9(@types/react@19.1.14))(@types/react@19.1.14)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': + '@radix-ui/react-tooltip@1.2.8(@types/react-dom@19.1.9(@types/react@19.1.16))(@types/react@19.1.16)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': dependencies: '@radix-ui/primitive': 1.1.3 - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.14)(react@19.1.1) - '@radix-ui/react-context': 1.1.2(@types/react@19.1.14)(react@19.1.1) - '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@19.1.9(@types/react@19.1.14))(@types/react@19.1.14)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) - '@radix-ui/react-id': 1.1.1(@types/react@19.1.14)(react@19.1.1) - '@radix-ui/react-popper': 1.2.8(@types/react-dom@19.1.9(@types/react@19.1.14))(@types/react@19.1.14)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) - '@radix-ui/react-portal': 1.1.9(@types/react-dom@19.1.9(@types/react@19.1.14))(@types/react@19.1.14)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) - '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.1.9(@types/react@19.1.14))(@types/react@19.1.14)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.9(@types/react@19.1.14))(@types/react@19.1.14)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) - '@radix-ui/react-slot': 1.2.3(@types/react@19.1.14)(react@19.1.1) - '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.1.14)(react@19.1.1) - '@radix-ui/react-visually-hidden': 1.2.3(@types/react-dom@19.1.9(@types/react@19.1.14))(@types/react@19.1.14)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.16)(react@19.1.1) + '@radix-ui/react-context': 1.1.2(@types/react@19.1.16)(react@19.1.1) + '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@19.1.9(@types/react@19.1.16))(@types/react@19.1.16)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-id': 1.1.1(@types/react@19.1.16)(react@19.1.1) + '@radix-ui/react-popper': 1.2.8(@types/react-dom@19.1.9(@types/react@19.1.16))(@types/react@19.1.16)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-portal': 1.1.9(@types/react-dom@19.1.9(@types/react@19.1.16))(@types/react@19.1.16)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.1.9(@types/react@19.1.16))(@types/react@19.1.16)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.9(@types/react@19.1.16))(@types/react@19.1.16)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-slot': 1.2.3(@types/react@19.1.16)(react@19.1.1) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.1.16)(react@19.1.1) + '@radix-ui/react-visually-hidden': 1.2.3(@types/react-dom@19.1.9(@types/react@19.1.16))(@types/react@19.1.16)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) react: 19.1.1 react-dom: 19.1.1(react@19.1.1) optionalDependencies: - '@types/react': 19.1.14 - '@types/react-dom': 19.1.9(@types/react@19.1.14) + '@types/react': 19.1.16 + '@types/react-dom': 19.1.9(@types/react@19.1.16) - '@radix-ui/react-use-callback-ref@1.1.1(@types/react@19.1.14)(react@19.1.1)': + '@radix-ui/react-use-callback-ref@1.1.1(@types/react@19.1.16)(react@19.1.1)': dependencies: react: 19.1.1 optionalDependencies: - '@types/react': 19.1.14 + '@types/react': 19.1.16 - '@radix-ui/react-use-controllable-state@1.2.2(@types/react@19.1.14)(react@19.1.1)': + '@radix-ui/react-use-controllable-state@1.2.2(@types/react@19.1.16)(react@19.1.1)': dependencies: - '@radix-ui/react-use-effect-event': 0.0.2(@types/react@19.1.14)(react@19.1.1) - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.14)(react@19.1.1) + '@radix-ui/react-use-effect-event': 0.0.2(@types/react@19.1.16)(react@19.1.1) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.16)(react@19.1.1) react: 19.1.1 optionalDependencies: - '@types/react': 19.1.14 + '@types/react': 19.1.16 - '@radix-ui/react-use-effect-event@0.0.2(@types/react@19.1.14)(react@19.1.1)': + '@radix-ui/react-use-effect-event@0.0.2(@types/react@19.1.16)(react@19.1.1)': dependencies: - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.14)(react@19.1.1) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.16)(react@19.1.1) react: 19.1.1 optionalDependencies: - '@types/react': 19.1.14 + '@types/react': 19.1.16 - '@radix-ui/react-use-escape-keydown@1.1.1(@types/react@19.1.14)(react@19.1.1)': + '@radix-ui/react-use-escape-keydown@1.1.1(@types/react@19.1.16)(react@19.1.1)': dependencies: - '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.1.14)(react@19.1.1) + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.1.16)(react@19.1.1) react: 19.1.1 optionalDependencies: - '@types/react': 19.1.14 + '@types/react': 19.1.16 - '@radix-ui/react-use-is-hydrated@0.1.0(@types/react@19.1.14)(react@19.1.1)': + '@radix-ui/react-use-is-hydrated@0.1.0(@types/react@19.1.16)(react@19.1.1)': dependencies: react: 19.1.1 use-sync-external-store: 1.5.0(react@19.1.1) optionalDependencies: - '@types/react': 19.1.14 + '@types/react': 19.1.16 - '@radix-ui/react-use-layout-effect@1.1.1(@types/react@19.1.14)(react@19.1.1)': + '@radix-ui/react-use-layout-effect@1.1.1(@types/react@19.1.16)(react@19.1.1)': dependencies: react: 19.1.1 optionalDependencies: - '@types/react': 19.1.14 + '@types/react': 19.1.16 - '@radix-ui/react-use-previous@1.1.1(@types/react@19.1.14)(react@19.1.1)': + '@radix-ui/react-use-previous@1.1.1(@types/react@19.1.16)(react@19.1.1)': dependencies: react: 19.1.1 optionalDependencies: - '@types/react': 19.1.14 + '@types/react': 19.1.16 - '@radix-ui/react-use-rect@1.1.1(@types/react@19.1.14)(react@19.1.1)': + '@radix-ui/react-use-rect@1.1.1(@types/react@19.1.16)(react@19.1.1)': dependencies: '@radix-ui/rect': 1.1.1 react: 19.1.1 optionalDependencies: - '@types/react': 19.1.14 + '@types/react': 19.1.16 - '@radix-ui/react-use-size@1.1.1(@types/react@19.1.14)(react@19.1.1)': + '@radix-ui/react-use-size@1.1.1(@types/react@19.1.16)(react@19.1.1)': dependencies: - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.14)(react@19.1.1) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.16)(react@19.1.1) react: 19.1.1 optionalDependencies: - '@types/react': 19.1.14 + '@types/react': 19.1.16 - '@radix-ui/react-visually-hidden@1.2.3(@types/react-dom@19.1.9(@types/react@19.1.14))(@types/react@19.1.14)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': + '@radix-ui/react-visually-hidden@1.2.3(@types/react-dom@19.1.9(@types/react@19.1.16))(@types/react@19.1.16)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': dependencies: - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.9(@types/react@19.1.14))(@types/react@19.1.14)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.9(@types/react@19.1.16))(@types/react@19.1.16)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) react: 19.1.1 react-dom: 19.1.1(react@19.1.1) optionalDependencies: - '@types/react': 19.1.14 - '@types/react-dom': 19.1.9(@types/react@19.1.14) + '@types/react': 19.1.16 + '@types/react-dom': 19.1.9(@types/react@19.1.16) '@radix-ui/rect@1.1.1': {} @@ -5280,7 +5317,7 @@ snapshots: dependencies: react: 19.1.1 - '@reduxjs/toolkit@2.9.0(react-redux@9.2.0(@types/react@19.1.14)(react@19.1.1)(redux@5.0.1))(react@19.1.1)': + '@reduxjs/toolkit@2.9.0(react-redux@9.2.0(@types/react@19.1.16)(react@19.1.1)(redux@5.0.1))(react@19.1.1)': dependencies: '@standard-schema/spec': 1.0.0 '@standard-schema/utils': 0.3.0 @@ -5290,7 +5327,7 @@ snapshots: reselect: 5.1.1 optionalDependencies: react: 19.1.1 - react-redux: 9.2.0(@types/react@19.1.14)(react@19.1.1)(redux@5.0.1) + react-redux: 9.2.0(@types/react@19.1.16)(react@19.1.1)(redux@5.0.1) '@rollup/rollup-android-arm-eabi@4.52.3': optional: true @@ -5484,12 +5521,12 @@ snapshots: postcss: 8.5.6 tailwindcss: 4.1.13 - '@tailwindcss/vite@4.1.13(vite@7.1.7(@types/node@24.5.2)(jiti@2.6.0)(lightningcss@1.30.1)(yaml@2.8.1))': + '@tailwindcss/vite@4.1.13(vite@7.1.7(@types/node@24.6.0)(jiti@2.6.0)(lightningcss@1.30.1)(yaml@2.8.1))': dependencies: '@tailwindcss/node': 4.1.13 '@tailwindcss/oxide': 4.1.13 tailwindcss: 4.1.13 - vite: 7.1.7(@types/node@24.5.2)(jiti@2.6.0)(lightningcss@1.30.1)(yaml@2.8.1) + vite: 7.1.7(@types/node@24.6.0)(jiti@2.6.0)(lightningcss@1.30.1)(yaml@2.8.1) '@tanstack/react-virtual@3.13.12(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': dependencies: @@ -5681,26 +5718,26 @@ snapshots: '@types/node-fetch@2.6.13': dependencies: - '@types/node': 24.5.2 + '@types/node': 24.6.0 form-data: 4.0.4 - '@types/node@18.19.127': + '@types/node@18.19.128': dependencies: undici-types: 5.26.5 - '@types/node@24.5.2': + '@types/node@24.6.0': dependencies: - undici-types: 7.12.0 + undici-types: 7.13.0 - '@types/react-dom@19.1.9(@types/react@19.1.14)': + '@types/react-dom@19.1.9(@types/react@19.1.16)': dependencies: - '@types/react': 19.1.14 + '@types/react': 19.1.16 '@types/react-syntax-highlighter@15.5.13': dependencies: - '@types/react': 19.1.14 + '@types/react': 19.1.16 - '@types/react@19.1.14': + '@types/react@19.1.16': dependencies: csstype: 3.1.3 @@ -5735,13 +5772,13 @@ snapshots: chai: 5.3.3 tinyrainbow: 2.0.0 - '@vitest/mocker@3.2.4(vite@7.1.7(@types/node@24.5.2)(jiti@2.6.0)(lightningcss@1.30.1)(yaml@2.8.1))': + '@vitest/mocker@3.2.4(vite@7.1.7(@types/node@24.6.0)(jiti@2.6.0)(lightningcss@1.30.1)(yaml@2.8.1))': dependencies: '@vitest/spy': 3.2.4 estree-walker: 3.0.3 magic-string: 0.30.19 optionalDependencies: - vite: 7.1.7(@types/node@24.5.2)(jiti@2.6.0)(lightningcss@1.30.1)(yaml@2.8.1) + vite: 7.1.7(@types/node@24.6.0)(jiti@2.6.0)(lightningcss@1.30.1)(yaml@2.8.1) '@vitest/pretty-format@3.2.4': dependencies: @@ -5839,7 +5876,7 @@ snapshots: es-errors: 1.3.0 function-bind: 1.1.2 - caniuse-lite@1.0.30001745: {} + caniuse-lite@1.0.30001746: {} ccount@2.0.1: {} @@ -5897,6 +5934,8 @@ snapshots: dependencies: restore-cursor: 5.1.0 + cli-spinners@3.3.0: {} + cli-truncate@5.1.0: dependencies: slice-ansi: 7.1.2 @@ -5912,12 +5951,12 @@ snapshots: clsx@2.1.1: {} - cmdk@1.1.1(@types/react-dom@19.1.9(@types/react@19.1.14))(@types/react@19.1.14)(react-dom@19.1.1(react@19.1.1))(react@19.1.1): + cmdk@1.1.1(@types/react-dom@19.1.9(@types/react@19.1.16))(@types/react@19.1.16)(react-dom@19.1.1(react@19.1.1))(react@19.1.1): dependencies: - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.14)(react@19.1.1) - '@radix-ui/react-dialog': 1.1.15(@types/react-dom@19.1.9(@types/react@19.1.14))(@types/react@19.1.14)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) - '@radix-ui/react-id': 1.1.1(@types/react@19.1.14)(react@19.1.1) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.9(@types/react@19.1.14))(@types/react@19.1.14)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.16)(react@19.1.1) + '@radix-ui/react-dialog': 1.1.15(@types/react-dom@19.1.9(@types/react@19.1.16))(@types/react@19.1.16)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-id': 1.1.1(@types/react@19.1.16)(react@19.1.1) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.9(@types/react@19.1.16))(@types/react@19.1.16)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) react: 19.1.1 react-dom: 19.1.1(react@19.1.1) transitivePeerDependencies: @@ -6681,12 +6720,16 @@ snapshots: dependencies: is-docker: 3.0.0 + is-interactive@2.0.0: {} + is-number@7.0.0: {} is-plain-obj@4.1.0: {} is-stream@3.0.0: {} + is-unicode-supported@2.1.0: {} + is-wsl@3.1.0: dependencies: is-inside-container: 1.0.0 @@ -6775,7 +6818,7 @@ snapshots: lightningcss-win32-arm64-msvc: 1.30.1 lightningcss-win32-x64-msvc: 1.30.1 - lint-staged@16.2.1: + lint-staged@16.2.3: dependencies: commander: 14.0.1 listr2: 9.0.4 @@ -6802,6 +6845,11 @@ snapshots: lodash-es@4.17.21: {} + log-symbols@7.0.1: + dependencies: + is-unicode-supported: 2.1.0 + yoctocolors: 2.1.2 + log-update@6.1.0: dependencies: ansi-escapes: 7.1.1 @@ -7427,7 +7475,7 @@ snapshots: dependencies: '@next/env': 15.5.4 '@swc/helpers': 0.5.15 - caniuse-lite: 1.0.30001745 + caniuse-lite: 1.0.30001746 postcss: 8.4.31 react: 19.1.1 react-dom: 19.1.1(react@19.1.1) @@ -7446,7 +7494,7 @@ snapshots: - '@babel/core' - babel-plugin-macros - nextra-theme-docs@4.5.1(@types/react@19.1.14)(immer@10.1.3)(next@15.5.4(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(nextra@4.5.1(next@15.5.4(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(typescript@5.9.2))(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(use-sync-external-store@1.5.0(react@19.1.1)): + nextra-theme-docs@4.5.1(@types/react@19.1.16)(immer@10.1.3)(next@15.5.4(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(nextra@4.5.1(next@15.5.4(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(typescript@5.9.2))(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(use-sync-external-store@1.5.0(react@19.1.1)): dependencies: '@headlessui/react': 2.2.9(react-dom@19.1.1(react@19.1.1))(react@19.1.1) clsx: 2.1.1 @@ -7458,7 +7506,7 @@ snapshots: react-dom: 19.1.1(react@19.1.1) scroll-into-view-if-needed: 3.1.0 zod: 4.0.0-beta.20250424T163858 - zustand: 5.0.8(@types/react@19.1.14)(immer@10.1.3)(react@19.1.1)(use-sync-external-store@1.5.0(react@19.1.1)) + zustand: 5.0.8(@types/react@19.1.16)(immer@10.1.3)(react@19.1.1)(use-sync-external-store@1.5.0(react@19.1.1)) transitivePeerDependencies: - '@types/react' - immer @@ -7552,10 +7600,22 @@ snapshots: regex: 6.0.1 regex-recursion: 6.0.2 - openai@5.23.1(zod@4.1.11): + openai@6.0.0(zod@4.1.11): optionalDependencies: zod: 4.1.11 + ora@9.0.0: + dependencies: + chalk: 5.6.2 + cli-cursor: 5.0.0 + cli-spinners: 3.3.0 + is-interactive: 2.0.0 + is-unicode-supported: 2.1.0 + log-symbols: 7.0.1 + stdin-discarder: 0.2.2 + string-width: 8.1.0 + strip-ansi: 7.1.2 + package-manager-detector@1.3.0: {} pagefind@1.4.0: @@ -7652,9 +7712,9 @@ snapshots: picocolors: 1.1.1 source-map-js: 1.2.1 - posthog-js@1.268.6: + posthog-js@1.268.9: dependencies: - '@posthog/core': 1.2.1 + '@posthog/core': 1.2.2 core-js: 3.45.1 fflate: 0.4.8 preact: 10.27.2 @@ -7700,46 +7760,46 @@ snapshots: react: 19.1.1 react-dom: 19.1.1(react@19.1.1) - react-redux@9.2.0(@types/react@19.1.14)(react@19.1.1)(redux@5.0.1): + react-redux@9.2.0(@types/react@19.1.16)(react@19.1.1)(redux@5.0.1): dependencies: '@types/use-sync-external-store': 0.0.6 react: 19.1.1 use-sync-external-store: 1.5.0(react@19.1.1) optionalDependencies: - '@types/react': 19.1.14 + '@types/react': 19.1.16 redux: 5.0.1 - react-remove-scroll-bar@2.3.8(@types/react@19.1.14)(react@19.1.1): + react-remove-scroll-bar@2.3.8(@types/react@19.1.16)(react@19.1.1): dependencies: react: 19.1.1 - react-style-singleton: 2.2.3(@types/react@19.1.14)(react@19.1.1) + react-style-singleton: 2.2.3(@types/react@19.1.16)(react@19.1.1) tslib: 2.8.1 optionalDependencies: - '@types/react': 19.1.14 + '@types/react': 19.1.16 - react-remove-scroll@2.7.1(@types/react@19.1.14)(react@19.1.1): + react-remove-scroll@2.7.1(@types/react@19.1.16)(react@19.1.1): dependencies: react: 19.1.1 - react-remove-scroll-bar: 2.3.8(@types/react@19.1.14)(react@19.1.1) - react-style-singleton: 2.2.3(@types/react@19.1.14)(react@19.1.1) + react-remove-scroll-bar: 2.3.8(@types/react@19.1.16)(react@19.1.1) + react-style-singleton: 2.2.3(@types/react@19.1.16)(react@19.1.1) tslib: 2.8.1 - use-callback-ref: 1.3.3(@types/react@19.1.14)(react@19.1.1) - use-sidecar: 1.1.3(@types/react@19.1.14)(react@19.1.1) + use-callback-ref: 1.3.3(@types/react@19.1.16)(react@19.1.1) + use-sidecar: 1.1.3(@types/react@19.1.16)(react@19.1.1) optionalDependencies: - '@types/react': 19.1.14 + '@types/react': 19.1.16 react-resizable-panels@3.0.5(react-dom@19.1.1(react@19.1.1))(react@19.1.1): dependencies: react: 19.1.1 react-dom: 19.1.1(react@19.1.1) - react-style-singleton@2.2.3(@types/react@19.1.14)(react@19.1.1): + react-style-singleton@2.2.3(@types/react@19.1.16)(react@19.1.1): dependencies: get-nonce: 1.0.1 react: 19.1.1 tslib: 2.8.1 optionalDependencies: - '@types/react': 19.1.14 + '@types/react': 19.1.16 react-syntax-highlighter@15.6.6(react@19.1.1): dependencies: @@ -7755,9 +7815,9 @@ snapshots: reading-time@1.5.0: {} - recharts@3.1.0(@types/react@19.1.14)(react-dom@19.1.1(react@19.1.1))(react-is@19.1.1)(react@19.1.1)(redux@5.0.1): + recharts@3.1.0(@types/react@19.1.16)(react-dom@19.1.1(react@19.1.1))(react-is@19.1.1)(react@19.1.1)(redux@5.0.1): dependencies: - '@reduxjs/toolkit': 2.9.0(react-redux@9.2.0(@types/react@19.1.14)(react@19.1.1)(redux@5.0.1))(react@19.1.1) + '@reduxjs/toolkit': 2.9.0(react-redux@9.2.0(@types/react@19.1.16)(react@19.1.1)(redux@5.0.1))(react@19.1.1) clsx: 2.1.1 decimal.js-light: 2.5.1 es-toolkit: 1.39.10 @@ -7766,7 +7826,7 @@ snapshots: react: 19.1.1 react-dom: 19.1.1(react@19.1.1) react-is: 19.1.1 - react-redux: 9.2.0(@types/react@19.1.14)(react@19.1.1)(redux@5.0.1) + react-redux: 9.2.0(@types/react@19.1.16)(react@19.1.1)(redux@5.0.1) reselect: 5.1.1 tiny-invariant: 1.3.3 use-sync-external-store: 1.5.0(react@19.1.1) @@ -8125,6 +8185,8 @@ snapshots: std-env@3.9.0: {} + stdin-discarder@0.2.2: {} + string-argv@0.3.2: {} string-width@7.2.0: @@ -8259,7 +8321,7 @@ snapshots: ufo@1.6.1: {} - ultracite@5.4.5(@types/debug@4.1.12)(@types/node@24.5.2)(jiti@2.6.0)(lightningcss@1.30.1)(typescript@5.9.2)(yaml@2.8.1): + ultracite@5.4.6(@types/debug@4.1.12)(@types/node@24.6.0)(jiti@2.6.0)(lightningcss@1.30.1)(typescript@5.9.2)(yaml@2.8.1): dependencies: '@clack/prompts': 0.11.0 '@trpc/server': 11.6.0(typescript@5.9.2) @@ -8267,7 +8329,7 @@ snapshots: jsonc-parser: 3.3.1 nypm: 0.6.2 trpc-cli: 0.11.0(@trpc/server@11.6.0(typescript@5.9.2))(zod@4.1.11) - vitest: 3.2.4(@types/debug@4.1.12)(@types/node@24.5.2)(jiti@2.6.0)(lightningcss@1.30.1)(yaml@2.8.1) + vitest: 3.2.4(@types/debug@4.1.12)(@types/node@24.6.0)(jiti@2.6.0)(lightningcss@1.30.1)(yaml@2.8.1) zod: 4.1.11 transitivePeerDependencies: - '@edge-runtime/vm' @@ -8297,7 +8359,7 @@ snapshots: undici-types@5.26.5: {} - undici-types@7.12.0: {} + undici-types@7.13.0: {} unified@11.0.5: dependencies: @@ -8376,20 +8438,20 @@ snapshots: unist-util-is: 6.0.0 unist-util-visit-parents: 6.0.1 - use-callback-ref@1.3.3(@types/react@19.1.14)(react@19.1.1): + use-callback-ref@1.3.3(@types/react@19.1.16)(react@19.1.1): dependencies: react: 19.1.1 tslib: 2.8.1 optionalDependencies: - '@types/react': 19.1.14 + '@types/react': 19.1.16 - use-sidecar@1.1.3(@types/react@19.1.14)(react@19.1.1): + use-sidecar@1.1.3(@types/react@19.1.16)(react@19.1.1): dependencies: detect-node-es: 1.1.0 react: 19.1.1 tslib: 2.8.1 optionalDependencies: - '@types/react': 19.1.14 + '@types/react': 19.1.16 use-sync-external-store@1.5.0(react@19.1.1): dependencies: @@ -8429,13 +8491,13 @@ snapshots: d3-time: 3.1.0 d3-timer: 3.0.1 - vite-node@3.2.4(@types/node@24.5.2)(jiti@2.6.0)(lightningcss@1.30.1)(yaml@2.8.1): + vite-node@3.2.4(@types/node@24.6.0)(jiti@2.6.0)(lightningcss@1.30.1)(yaml@2.8.1): dependencies: cac: 6.7.14 debug: 4.4.3 es-module-lexer: 1.7.0 pathe: 2.0.3 - vite: 7.1.7(@types/node@24.5.2)(jiti@2.6.0)(lightningcss@1.30.1)(yaml@2.8.1) + vite: 7.1.7(@types/node@24.6.0)(jiti@2.6.0)(lightningcss@1.30.1)(yaml@2.8.1) transitivePeerDependencies: - '@types/node' - jiti @@ -8450,7 +8512,7 @@ snapshots: - tsx - yaml - vite@7.1.7(@types/node@24.5.2)(jiti@2.6.0)(lightningcss@1.30.1)(yaml@2.8.1): + vite@7.1.7(@types/node@24.6.0)(jiti@2.6.0)(lightningcss@1.30.1)(yaml@2.8.1): dependencies: esbuild: 0.25.10 fdir: 6.5.0(picomatch@4.0.3) @@ -8459,17 +8521,17 @@ snapshots: rollup: 4.52.3 tinyglobby: 0.2.15 optionalDependencies: - '@types/node': 24.5.2 + '@types/node': 24.6.0 fsevents: 2.3.3 jiti: 2.6.0 lightningcss: 1.30.1 yaml: 2.8.1 - vitest@3.2.4(@types/debug@4.1.12)(@types/node@24.5.2)(jiti@2.6.0)(lightningcss@1.30.1)(yaml@2.8.1): + vitest@3.2.4(@types/debug@4.1.12)(@types/node@24.6.0)(jiti@2.6.0)(lightningcss@1.30.1)(yaml@2.8.1): dependencies: '@types/chai': 5.2.2 '@vitest/expect': 3.2.4 - '@vitest/mocker': 3.2.4(vite@7.1.7(@types/node@24.5.2)(jiti@2.6.0)(lightningcss@1.30.1)(yaml@2.8.1)) + '@vitest/mocker': 3.2.4(vite@7.1.7(@types/node@24.6.0)(jiti@2.6.0)(lightningcss@1.30.1)(yaml@2.8.1)) '@vitest/pretty-format': 3.2.4 '@vitest/runner': 3.2.4 '@vitest/snapshot': 3.2.4 @@ -8487,12 +8549,12 @@ snapshots: tinyglobby: 0.2.15 tinypool: 1.1.1 tinyrainbow: 2.0.0 - vite: 7.1.7(@types/node@24.5.2)(jiti@2.6.0)(lightningcss@1.30.1)(yaml@2.8.1) - vite-node: 3.2.4(@types/node@24.5.2)(jiti@2.6.0)(lightningcss@1.30.1)(yaml@2.8.1) + vite: 7.1.7(@types/node@24.6.0)(jiti@2.6.0)(lightningcss@1.30.1)(yaml@2.8.1) + vite-node: 3.2.4(@types/node@24.6.0)(jiti@2.6.0)(lightningcss@1.30.1)(yaml@2.8.1) why-is-node-running: 2.3.0 optionalDependencies: '@types/debug': 4.1.12 - '@types/node': 24.5.2 + '@types/node': 24.6.0 transitivePeerDependencies: - jiti - less @@ -8560,6 +8622,8 @@ snapshots: yaml@2.8.1: {} + yoctocolors@2.1.2: {} + zod@3.25.76: {} zod@4.0.0-beta.20250424T163858: @@ -8568,9 +8632,9 @@ snapshots: zod@4.1.11: {} - zustand@5.0.8(@types/react@19.1.14)(immer@10.1.3)(react@19.1.1)(use-sync-external-store@1.5.0(react@19.1.1)): + zustand@5.0.8(@types/react@19.1.16)(immer@10.1.3)(react@19.1.1)(use-sync-external-store@1.5.0(react@19.1.1)): optionalDependencies: - '@types/react': 19.1.14 + '@types/react': 19.1.16 immer: 10.1.3 react: 19.1.1 use-sync-external-store: 1.5.0(react@19.1.1) diff --git a/public/examples/integrations/toolkits/asana/projects/get_project_by_id_example_call_tool.js b/public/examples/integrations/mcp-servers/asana/projects/get_project_by_id_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/asana/projects/get_project_by_id_example_call_tool.js rename to public/examples/integrations/mcp-servers/asana/projects/get_project_by_id_example_call_tool.js diff --git a/public/examples/integrations/toolkits/asana/projects/get_project_by_id_example_call_tool.py b/public/examples/integrations/mcp-servers/asana/projects/get_project_by_id_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/asana/projects/get_project_by_id_example_call_tool.py rename to public/examples/integrations/mcp-servers/asana/projects/get_project_by_id_example_call_tool.py diff --git a/public/examples/integrations/toolkits/asana/projects/list_projects_example_call_tool.js b/public/examples/integrations/mcp-servers/asana/projects/list_projects_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/asana/projects/list_projects_example_call_tool.js rename to public/examples/integrations/mcp-servers/asana/projects/list_projects_example_call_tool.js diff --git a/public/examples/integrations/toolkits/asana/projects/list_projects_example_call_tool.py b/public/examples/integrations/mcp-servers/asana/projects/list_projects_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/asana/projects/list_projects_example_call_tool.py rename to public/examples/integrations/mcp-servers/asana/projects/list_projects_example_call_tool.py diff --git a/public/examples/integrations/toolkits/asana/tags/create_tag_example_call_tool.js b/public/examples/integrations/mcp-servers/asana/tags/create_tag_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/asana/tags/create_tag_example_call_tool.js rename to public/examples/integrations/mcp-servers/asana/tags/create_tag_example_call_tool.js diff --git a/public/examples/integrations/toolkits/asana/tags/create_tag_example_call_tool.py b/public/examples/integrations/mcp-servers/asana/tags/create_tag_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/asana/tags/create_tag_example_call_tool.py rename to public/examples/integrations/mcp-servers/asana/tags/create_tag_example_call_tool.py diff --git a/public/examples/integrations/toolkits/asana/tags/list_tags_example_call_tool.js b/public/examples/integrations/mcp-servers/asana/tags/list_tags_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/asana/tags/list_tags_example_call_tool.js rename to public/examples/integrations/mcp-servers/asana/tags/list_tags_example_call_tool.js diff --git a/public/examples/integrations/toolkits/asana/tags/list_tags_example_call_tool.py b/public/examples/integrations/mcp-servers/asana/tags/list_tags_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/asana/tags/list_tags_example_call_tool.py rename to public/examples/integrations/mcp-servers/asana/tags/list_tags_example_call_tool.py diff --git a/public/examples/integrations/toolkits/asana/tasks/attach_file_to_task_example_call_tool.js b/public/examples/integrations/mcp-servers/asana/tasks/attach_file_to_task_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/asana/tasks/attach_file_to_task_example_call_tool.js rename to public/examples/integrations/mcp-servers/asana/tasks/attach_file_to_task_example_call_tool.js diff --git a/public/examples/integrations/toolkits/asana/tasks/attach_file_to_task_example_call_tool.py b/public/examples/integrations/mcp-servers/asana/tasks/attach_file_to_task_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/asana/tasks/attach_file_to_task_example_call_tool.py rename to public/examples/integrations/mcp-servers/asana/tasks/attach_file_to_task_example_call_tool.py diff --git a/public/examples/integrations/toolkits/asana/tasks/create_task_example_call_tool.js b/public/examples/integrations/mcp-servers/asana/tasks/create_task_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/asana/tasks/create_task_example_call_tool.js rename to public/examples/integrations/mcp-servers/asana/tasks/create_task_example_call_tool.js diff --git a/public/examples/integrations/toolkits/asana/tasks/create_task_example_call_tool.py b/public/examples/integrations/mcp-servers/asana/tasks/create_task_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/asana/tasks/create_task_example_call_tool.py rename to public/examples/integrations/mcp-servers/asana/tasks/create_task_example_call_tool.py diff --git a/public/examples/integrations/toolkits/asana/tasks/get_subtasks_from_a_task_example_call_tool.js b/public/examples/integrations/mcp-servers/asana/tasks/get_subtasks_from_a_task_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/asana/tasks/get_subtasks_from_a_task_example_call_tool.js rename to public/examples/integrations/mcp-servers/asana/tasks/get_subtasks_from_a_task_example_call_tool.js diff --git a/public/examples/integrations/toolkits/asana/tasks/get_subtasks_from_a_task_example_call_tool.py b/public/examples/integrations/mcp-servers/asana/tasks/get_subtasks_from_a_task_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/asana/tasks/get_subtasks_from_a_task_example_call_tool.py rename to public/examples/integrations/mcp-servers/asana/tasks/get_subtasks_from_a_task_example_call_tool.py diff --git a/public/examples/integrations/toolkits/asana/tasks/get_task_by_id_example_call_tool.js b/public/examples/integrations/mcp-servers/asana/tasks/get_task_by_id_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/asana/tasks/get_task_by_id_example_call_tool.js rename to public/examples/integrations/mcp-servers/asana/tasks/get_task_by_id_example_call_tool.js diff --git a/public/examples/integrations/toolkits/asana/tasks/get_task_by_id_example_call_tool.py b/public/examples/integrations/mcp-servers/asana/tasks/get_task_by_id_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/asana/tasks/get_task_by_id_example_call_tool.py rename to public/examples/integrations/mcp-servers/asana/tasks/get_task_by_id_example_call_tool.py diff --git a/public/examples/integrations/toolkits/asana/tasks/get_tasks_without_id_example_call_tool.js b/public/examples/integrations/mcp-servers/asana/tasks/get_tasks_without_id_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/asana/tasks/get_tasks_without_id_example_call_tool.js rename to public/examples/integrations/mcp-servers/asana/tasks/get_tasks_without_id_example_call_tool.js diff --git a/public/examples/integrations/toolkits/asana/tasks/get_tasks_without_id_example_call_tool.py b/public/examples/integrations/mcp-servers/asana/tasks/get_tasks_without_id_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/asana/tasks/get_tasks_without_id_example_call_tool.py rename to public/examples/integrations/mcp-servers/asana/tasks/get_tasks_without_id_example_call_tool.py diff --git a/public/examples/integrations/toolkits/asana/tasks/mark_task_as_completed_example_call_tool copy.py b/public/examples/integrations/mcp-servers/asana/tasks/mark_task_as_completed_example_call_tool copy.py similarity index 100% rename from public/examples/integrations/toolkits/asana/tasks/mark_task_as_completed_example_call_tool copy.py rename to public/examples/integrations/mcp-servers/asana/tasks/mark_task_as_completed_example_call_tool copy.py diff --git a/public/examples/integrations/toolkits/asana/tasks/mark_task_as_completed_example_call_tool.js b/public/examples/integrations/mcp-servers/asana/tasks/mark_task_as_completed_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/asana/tasks/mark_task_as_completed_example_call_tool.js rename to public/examples/integrations/mcp-servers/asana/tasks/mark_task_as_completed_example_call_tool.js diff --git a/public/examples/integrations/toolkits/asana/tasks/update_task_example_call_tool.js b/public/examples/integrations/mcp-servers/asana/tasks/update_task_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/asana/tasks/update_task_example_call_tool.js rename to public/examples/integrations/mcp-servers/asana/tasks/update_task_example_call_tool.js diff --git a/public/examples/integrations/toolkits/asana/tasks/update_task_example_call_tool.py b/public/examples/integrations/mcp-servers/asana/tasks/update_task_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/asana/tasks/update_task_example_call_tool.py rename to public/examples/integrations/mcp-servers/asana/tasks/update_task_example_call_tool.py diff --git a/public/examples/integrations/toolkits/asana/teams/get_team_by_id_example_call_tool.js b/public/examples/integrations/mcp-servers/asana/teams/get_team_by_id_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/asana/teams/get_team_by_id_example_call_tool.js rename to public/examples/integrations/mcp-servers/asana/teams/get_team_by_id_example_call_tool.js diff --git a/public/examples/integrations/toolkits/asana/teams/get_team_by_id_example_call_tool.py b/public/examples/integrations/mcp-servers/asana/teams/get_team_by_id_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/asana/teams/get_team_by_id_example_call_tool.py rename to public/examples/integrations/mcp-servers/asana/teams/get_team_by_id_example_call_tool.py diff --git a/public/examples/integrations/toolkits/asana/teams/list_teams_the_current_user_is_a_member_of_example_call_tool.js b/public/examples/integrations/mcp-servers/asana/teams/list_teams_the_current_user_is_a_member_of_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/asana/teams/list_teams_the_current_user_is_a_member_of_example_call_tool.js rename to public/examples/integrations/mcp-servers/asana/teams/list_teams_the_current_user_is_a_member_of_example_call_tool.js diff --git a/public/examples/integrations/toolkits/asana/teams/list_teams_the_current_user_is_a_member_of_example_call_tool.py b/public/examples/integrations/mcp-servers/asana/teams/list_teams_the_current_user_is_a_member_of_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/asana/teams/list_teams_the_current_user_is_a_member_of_example_call_tool.py rename to public/examples/integrations/mcp-servers/asana/teams/list_teams_the_current_user_is_a_member_of_example_call_tool.py diff --git a/public/examples/integrations/toolkits/asana/users/get_user_by_id_example_call_tool.js b/public/examples/integrations/mcp-servers/asana/users/get_user_by_id_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/asana/users/get_user_by_id_example_call_tool.js rename to public/examples/integrations/mcp-servers/asana/users/get_user_by_id_example_call_tool.js diff --git a/public/examples/integrations/toolkits/asana/users/get_user_by_id_example_call_tool.py b/public/examples/integrations/mcp-servers/asana/users/get_user_by_id_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/asana/users/get_user_by_id_example_call_tool.py rename to public/examples/integrations/mcp-servers/asana/users/get_user_by_id_example_call_tool.py diff --git a/public/examples/integrations/toolkits/asana/users/list_users_example_call_tool.js b/public/examples/integrations/mcp-servers/asana/users/list_users_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/asana/users/list_users_example_call_tool.js rename to public/examples/integrations/mcp-servers/asana/users/list_users_example_call_tool.js diff --git a/public/examples/integrations/toolkits/asana/users/list_users_example_call_tool.py b/public/examples/integrations/mcp-servers/asana/users/list_users_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/asana/users/list_users_example_call_tool.py rename to public/examples/integrations/mcp-servers/asana/users/list_users_example_call_tool.py diff --git a/public/examples/integrations/toolkits/clickhouse/discover_databases_example_call_tool.js b/public/examples/integrations/mcp-servers/clickhouse/discover_databases_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/clickhouse/discover_databases_example_call_tool.js rename to public/examples/integrations/mcp-servers/clickhouse/discover_databases_example_call_tool.js diff --git a/public/examples/integrations/toolkits/clickhouse/discover_databases_example_call_tool.py b/public/examples/integrations/mcp-servers/clickhouse/discover_databases_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/clickhouse/discover_databases_example_call_tool.py rename to public/examples/integrations/mcp-servers/clickhouse/discover_databases_example_call_tool.py diff --git a/public/examples/integrations/toolkits/clickhouse/discover_schemas_example_call_tool.js b/public/examples/integrations/mcp-servers/clickhouse/discover_schemas_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/clickhouse/discover_schemas_example_call_tool.js rename to public/examples/integrations/mcp-servers/clickhouse/discover_schemas_example_call_tool.js diff --git a/public/examples/integrations/toolkits/clickhouse/discover_schemas_example_call_tool.py b/public/examples/integrations/mcp-servers/clickhouse/discover_schemas_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/clickhouse/discover_schemas_example_call_tool.py rename to public/examples/integrations/mcp-servers/clickhouse/discover_schemas_example_call_tool.py diff --git a/public/examples/integrations/toolkits/clickhouse/discover_tables_example_call_tool.js b/public/examples/integrations/mcp-servers/clickhouse/discover_tables_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/clickhouse/discover_tables_example_call_tool.js rename to public/examples/integrations/mcp-servers/clickhouse/discover_tables_example_call_tool.js diff --git a/public/examples/integrations/toolkits/clickhouse/discover_tables_example_call_tool.py b/public/examples/integrations/mcp-servers/clickhouse/discover_tables_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/clickhouse/discover_tables_example_call_tool.py rename to public/examples/integrations/mcp-servers/clickhouse/discover_tables_example_call_tool.py diff --git a/public/examples/integrations/toolkits/clickhouse/execute_select_query_example_call_tool.js b/public/examples/integrations/mcp-servers/clickhouse/execute_select_query_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/clickhouse/execute_select_query_example_call_tool.js rename to public/examples/integrations/mcp-servers/clickhouse/execute_select_query_example_call_tool.js diff --git a/public/examples/integrations/toolkits/clickhouse/execute_select_query_example_call_tool.py b/public/examples/integrations/mcp-servers/clickhouse/execute_select_query_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/clickhouse/execute_select_query_example_call_tool.py rename to public/examples/integrations/mcp-servers/clickhouse/execute_select_query_example_call_tool.py diff --git a/public/examples/integrations/toolkits/clickhouse/get_table_schema_example_call_tool.js b/public/examples/integrations/mcp-servers/clickhouse/get_table_schema_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/clickhouse/get_table_schema_example_call_tool.js rename to public/examples/integrations/mcp-servers/clickhouse/get_table_schema_example_call_tool.js diff --git a/public/examples/integrations/toolkits/clickhouse/get_table_schema_example_call_tool.py b/public/examples/integrations/mcp-servers/clickhouse/get_table_schema_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/clickhouse/get_table_schema_example_call_tool.py rename to public/examples/integrations/mcp-servers/clickhouse/get_table_schema_example_call_tool.py diff --git a/public/examples/integrations/toolkits/clickup/create_comment_example_call_tool.js b/public/examples/integrations/mcp-servers/clickup/create_comment_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/clickup/create_comment_example_call_tool.js rename to public/examples/integrations/mcp-servers/clickup/create_comment_example_call_tool.js diff --git a/public/examples/integrations/toolkits/clickup/create_comment_example_call_tool.py b/public/examples/integrations/mcp-servers/clickup/create_comment_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/clickup/create_comment_example_call_tool.py rename to public/examples/integrations/mcp-servers/clickup/create_comment_example_call_tool.py diff --git a/public/examples/integrations/toolkits/clickup/create_comment_reply_example_call_tool.js b/public/examples/integrations/mcp-servers/clickup/create_comment_reply_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/clickup/create_comment_reply_example_call_tool.js rename to public/examples/integrations/mcp-servers/clickup/create_comment_reply_example_call_tool.js diff --git a/public/examples/integrations/toolkits/clickup/create_comment_reply_example_call_tool.py b/public/examples/integrations/mcp-servers/clickup/create_comment_reply_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/clickup/create_comment_reply_example_call_tool.py rename to public/examples/integrations/mcp-servers/clickup/create_comment_reply_example_call_tool.py diff --git a/public/examples/integrations/toolkits/clickup/create_task_comment_example_call_tool.js b/public/examples/integrations/mcp-servers/clickup/create_task_comment_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/clickup/create_task_comment_example_call_tool.js rename to public/examples/integrations/mcp-servers/clickup/create_task_comment_example_call_tool.js diff --git a/public/examples/integrations/toolkits/clickup/create_task_comment_example_call_tool.py b/public/examples/integrations/mcp-servers/clickup/create_task_comment_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/clickup/create_task_comment_example_call_tool.py rename to public/examples/integrations/mcp-servers/clickup/create_task_comment_example_call_tool.py diff --git a/public/examples/integrations/toolkits/clickup/create_task_comment_reply_example_call_tool.js b/public/examples/integrations/mcp-servers/clickup/create_task_comment_reply_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/clickup/create_task_comment_reply_example_call_tool.js rename to public/examples/integrations/mcp-servers/clickup/create_task_comment_reply_example_call_tool.js diff --git a/public/examples/integrations/toolkits/clickup/create_task_comment_reply_example_call_tool.py b/public/examples/integrations/mcp-servers/clickup/create_task_comment_reply_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/clickup/create_task_comment_reply_example_call_tool.py rename to public/examples/integrations/mcp-servers/clickup/create_task_comment_reply_example_call_tool.py diff --git a/public/examples/integrations/toolkits/clickup/create_task_example_call_tool.js b/public/examples/integrations/mcp-servers/clickup/create_task_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/clickup/create_task_example_call_tool.js rename to public/examples/integrations/mcp-servers/clickup/create_task_example_call_tool.js diff --git a/public/examples/integrations/toolkits/clickup/create_task_example_call_tool.py b/public/examples/integrations/mcp-servers/clickup/create_task_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/clickup/create_task_example_call_tool.py rename to public/examples/integrations/mcp-servers/clickup/create_task_example_call_tool.py diff --git a/public/examples/integrations/toolkits/clickup/fuzzy_search_folders_by_name_example_call_tool.js b/public/examples/integrations/mcp-servers/clickup/fuzzy_search_folders_by_name_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/clickup/fuzzy_search_folders_by_name_example_call_tool.js rename to public/examples/integrations/mcp-servers/clickup/fuzzy_search_folders_by_name_example_call_tool.js diff --git a/public/examples/integrations/toolkits/clickup/fuzzy_search_folders_by_name_example_call_tool.py b/public/examples/integrations/mcp-servers/clickup/fuzzy_search_folders_by_name_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/clickup/fuzzy_search_folders_by_name_example_call_tool.py rename to public/examples/integrations/mcp-servers/clickup/fuzzy_search_folders_by_name_example_call_tool.py diff --git a/public/examples/integrations/toolkits/clickup/fuzzy_search_lists_by_name_example_call_tool.js b/public/examples/integrations/mcp-servers/clickup/fuzzy_search_lists_by_name_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/clickup/fuzzy_search_lists_by_name_example_call_tool.js rename to public/examples/integrations/mcp-servers/clickup/fuzzy_search_lists_by_name_example_call_tool.js diff --git a/public/examples/integrations/toolkits/clickup/fuzzy_search_lists_by_name_example_call_tool.py b/public/examples/integrations/mcp-servers/clickup/fuzzy_search_lists_by_name_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/clickup/fuzzy_search_lists_by_name_example_call_tool.py rename to public/examples/integrations/mcp-servers/clickup/fuzzy_search_lists_by_name_example_call_tool.py diff --git a/public/examples/integrations/toolkits/clickup/fuzzy_search_members_by_name_example_call_tool.js b/public/examples/integrations/mcp-servers/clickup/fuzzy_search_members_by_name_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/clickup/fuzzy_search_members_by_name_example_call_tool.js rename to public/examples/integrations/mcp-servers/clickup/fuzzy_search_members_by_name_example_call_tool.js diff --git a/public/examples/integrations/toolkits/clickup/fuzzy_search_members_by_name_example_call_tool.py b/public/examples/integrations/mcp-servers/clickup/fuzzy_search_members_by_name_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/clickup/fuzzy_search_members_by_name_example_call_tool.py rename to public/examples/integrations/mcp-servers/clickup/fuzzy_search_members_by_name_example_call_tool.py diff --git a/public/examples/integrations/toolkits/clickup/fuzzy_search_tasks_by_name_example_call_tool.js b/public/examples/integrations/mcp-servers/clickup/fuzzy_search_tasks_by_name_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/clickup/fuzzy_search_tasks_by_name_example_call_tool.js rename to public/examples/integrations/mcp-servers/clickup/fuzzy_search_tasks_by_name_example_call_tool.js diff --git a/public/examples/integrations/toolkits/clickup/fuzzy_search_tasks_by_name_example_call_tool.py b/public/examples/integrations/mcp-servers/clickup/fuzzy_search_tasks_by_name_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/clickup/fuzzy_search_tasks_by_name_example_call_tool.py rename to public/examples/integrations/mcp-servers/clickup/fuzzy_search_tasks_by_name_example_call_tool.py diff --git a/public/examples/integrations/toolkits/clickup/get_comment_replies_example_call_tool.js b/public/examples/integrations/mcp-servers/clickup/get_comment_replies_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/clickup/get_comment_replies_example_call_tool.js rename to public/examples/integrations/mcp-servers/clickup/get_comment_replies_example_call_tool.js diff --git a/public/examples/integrations/toolkits/clickup/get_comment_replies_example_call_tool.py b/public/examples/integrations/mcp-servers/clickup/get_comment_replies_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/clickup/get_comment_replies_example_call_tool.py rename to public/examples/integrations/mcp-servers/clickup/get_comment_replies_example_call_tool.py diff --git a/public/examples/integrations/toolkits/clickup/get_folders_for_space_example_call_tool.js b/public/examples/integrations/mcp-servers/clickup/get_folders_for_space_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/clickup/get_folders_for_space_example_call_tool.js rename to public/examples/integrations/mcp-servers/clickup/get_folders_for_space_example_call_tool.js diff --git a/public/examples/integrations/toolkits/clickup/get_folders_for_space_example_call_tool.py b/public/examples/integrations/mcp-servers/clickup/get_folders_for_space_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/clickup/get_folders_for_space_example_call_tool.py rename to public/examples/integrations/mcp-servers/clickup/get_folders_for_space_example_call_tool.py diff --git a/public/examples/integrations/toolkits/clickup/get_lists_for_folder_example_call_tool.js b/public/examples/integrations/mcp-servers/clickup/get_lists_for_folder_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/clickup/get_lists_for_folder_example_call_tool.js rename to public/examples/integrations/mcp-servers/clickup/get_lists_for_folder_example_call_tool.js diff --git a/public/examples/integrations/toolkits/clickup/get_lists_for_folder_example_call_tool.py b/public/examples/integrations/mcp-servers/clickup/get_lists_for_folder_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/clickup/get_lists_for_folder_example_call_tool.py rename to public/examples/integrations/mcp-servers/clickup/get_lists_for_folder_example_call_tool.py diff --git a/public/examples/integrations/toolkits/clickup/get_lists_for_space_example_call_tool.js b/public/examples/integrations/mcp-servers/clickup/get_lists_for_space_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/clickup/get_lists_for_space_example_call_tool.js rename to public/examples/integrations/mcp-servers/clickup/get_lists_for_space_example_call_tool.js diff --git a/public/examples/integrations/toolkits/clickup/get_lists_for_space_example_call_tool.py b/public/examples/integrations/mcp-servers/clickup/get_lists_for_space_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/clickup/get_lists_for_space_example_call_tool.py rename to public/examples/integrations/mcp-servers/clickup/get_lists_for_space_example_call_tool.py diff --git a/public/examples/integrations/toolkits/clickup/get_members_for_workspace_example_call_tool.js b/public/examples/integrations/mcp-servers/clickup/get_members_for_workspace_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/clickup/get_members_for_workspace_example_call_tool.js rename to public/examples/integrations/mcp-servers/clickup/get_members_for_workspace_example_call_tool.js diff --git a/public/examples/integrations/toolkits/clickup/get_members_for_workspace_example_call_tool.py b/public/examples/integrations/mcp-servers/clickup/get_members_for_workspace_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/clickup/get_members_for_workspace_example_call_tool.py rename to public/examples/integrations/mcp-servers/clickup/get_members_for_workspace_example_call_tool.py diff --git a/public/examples/integrations/toolkits/clickup/get_spaces_example_call_tool.js b/public/examples/integrations/mcp-servers/clickup/get_spaces_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/clickup/get_spaces_example_call_tool.js rename to public/examples/integrations/mcp-servers/clickup/get_spaces_example_call_tool.js diff --git a/public/examples/integrations/toolkits/clickup/get_spaces_example_call_tool.py b/public/examples/integrations/mcp-servers/clickup/get_spaces_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/clickup/get_spaces_example_call_tool.py rename to public/examples/integrations/mcp-servers/clickup/get_spaces_example_call_tool.py diff --git a/public/examples/integrations/toolkits/clickup/get_statuses_for_list_example_call_tool.js b/public/examples/integrations/mcp-servers/clickup/get_statuses_for_list_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/clickup/get_statuses_for_list_example_call_tool.js rename to public/examples/integrations/mcp-servers/clickup/get_statuses_for_list_example_call_tool.js diff --git a/public/examples/integrations/toolkits/clickup/get_statuses_for_list_example_call_tool.py b/public/examples/integrations/mcp-servers/clickup/get_statuses_for_list_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/clickup/get_statuses_for_list_example_call_tool.py rename to public/examples/integrations/mcp-servers/clickup/get_statuses_for_list_example_call_tool.py diff --git a/public/examples/integrations/toolkits/clickup/get_system_guidance_example_call_tool.js b/public/examples/integrations/mcp-servers/clickup/get_system_guidance_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/clickup/get_system_guidance_example_call_tool.js rename to public/examples/integrations/mcp-servers/clickup/get_system_guidance_example_call_tool.js diff --git a/public/examples/integrations/toolkits/clickup/get_system_guidance_example_call_tool.py b/public/examples/integrations/mcp-servers/clickup/get_system_guidance_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/clickup/get_system_guidance_example_call_tool.py rename to public/examples/integrations/mcp-servers/clickup/get_system_guidance_example_call_tool.py diff --git a/public/examples/integrations/toolkits/clickup/get_task_by_id_example_call_tool.js b/public/examples/integrations/mcp-servers/clickup/get_task_by_id_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/clickup/get_task_by_id_example_call_tool.js rename to public/examples/integrations/mcp-servers/clickup/get_task_by_id_example_call_tool.js diff --git a/public/examples/integrations/toolkits/clickup/get_task_by_id_example_call_tool.py b/public/examples/integrations/mcp-servers/clickup/get_task_by_id_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/clickup/get_task_by_id_example_call_tool.py rename to public/examples/integrations/mcp-servers/clickup/get_task_by_id_example_call_tool.py diff --git a/public/examples/integrations/toolkits/clickup/get_task_comment_replies_example_call_tool.js b/public/examples/integrations/mcp-servers/clickup/get_task_comment_replies_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/clickup/get_task_comment_replies_example_call_tool.js rename to public/examples/integrations/mcp-servers/clickup/get_task_comment_replies_example_call_tool.js diff --git a/public/examples/integrations/toolkits/clickup/get_task_comment_replies_example_call_tool.py b/public/examples/integrations/mcp-servers/clickup/get_task_comment_replies_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/clickup/get_task_comment_replies_example_call_tool.py rename to public/examples/integrations/mcp-servers/clickup/get_task_comment_replies_example_call_tool.py diff --git a/public/examples/integrations/toolkits/clickup/get_task_comments_example_call_tool.js b/public/examples/integrations/mcp-servers/clickup/get_task_comments_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/clickup/get_task_comments_example_call_tool.js rename to public/examples/integrations/mcp-servers/clickup/get_task_comments_example_call_tool.js diff --git a/public/examples/integrations/toolkits/clickup/get_task_comments_example_call_tool.py b/public/examples/integrations/mcp-servers/clickup/get_task_comments_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/clickup/get_task_comments_example_call_tool.py rename to public/examples/integrations/mcp-servers/clickup/get_task_comments_example_call_tool.py diff --git a/public/examples/integrations/toolkits/clickup/get_tasks_by_assignees_example_call_tool.js b/public/examples/integrations/mcp-servers/clickup/get_tasks_by_assignees_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/clickup/get_tasks_by_assignees_example_call_tool.js rename to public/examples/integrations/mcp-servers/clickup/get_tasks_by_assignees_example_call_tool.js diff --git a/public/examples/integrations/toolkits/clickup/get_tasks_by_assignees_example_call_tool.py b/public/examples/integrations/mcp-servers/clickup/get_tasks_by_assignees_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/clickup/get_tasks_by_assignees_example_call_tool.py rename to public/examples/integrations/mcp-servers/clickup/get_tasks_by_assignees_example_call_tool.py diff --git a/public/examples/integrations/toolkits/clickup/get_tasks_by_scope_example_call_tool.js b/public/examples/integrations/mcp-servers/clickup/get_tasks_by_scope_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/clickup/get_tasks_by_scope_example_call_tool.js rename to public/examples/integrations/mcp-servers/clickup/get_tasks_by_scope_example_call_tool.js diff --git a/public/examples/integrations/toolkits/clickup/get_tasks_by_scope_example_call_tool.py b/public/examples/integrations/mcp-servers/clickup/get_tasks_by_scope_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/clickup/get_tasks_by_scope_example_call_tool.py rename to public/examples/integrations/mcp-servers/clickup/get_tasks_by_scope_example_call_tool.py diff --git a/public/examples/integrations/toolkits/clickup/get_workspace_insights_example_call_tool.js b/public/examples/integrations/mcp-servers/clickup/get_workspace_insights_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/clickup/get_workspace_insights_example_call_tool.js rename to public/examples/integrations/mcp-servers/clickup/get_workspace_insights_example_call_tool.js diff --git a/public/examples/integrations/toolkits/clickup/get_workspace_insights_example_call_tool.py b/public/examples/integrations/mcp-servers/clickup/get_workspace_insights_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/clickup/get_workspace_insights_example_call_tool.py rename to public/examples/integrations/mcp-servers/clickup/get_workspace_insights_example_call_tool.py diff --git a/public/examples/integrations/toolkits/clickup/update_comment_example_call_tool.js b/public/examples/integrations/mcp-servers/clickup/update_comment_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/clickup/update_comment_example_call_tool.js rename to public/examples/integrations/mcp-servers/clickup/update_comment_example_call_tool.js diff --git a/public/examples/integrations/toolkits/clickup/update_comment_example_call_tool.py b/public/examples/integrations/mcp-servers/clickup/update_comment_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/clickup/update_comment_example_call_tool.py rename to public/examples/integrations/mcp-servers/clickup/update_comment_example_call_tool.py diff --git a/public/examples/integrations/toolkits/clickup/update_task_assignees_example_call_tool.js b/public/examples/integrations/mcp-servers/clickup/update_task_assignees_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/clickup/update_task_assignees_example_call_tool.js rename to public/examples/integrations/mcp-servers/clickup/update_task_assignees_example_call_tool.js diff --git a/public/examples/integrations/toolkits/clickup/update_task_assignees_example_call_tool.py b/public/examples/integrations/mcp-servers/clickup/update_task_assignees_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/clickup/update_task_assignees_example_call_tool.py rename to public/examples/integrations/mcp-servers/clickup/update_task_assignees_example_call_tool.py diff --git a/public/examples/integrations/toolkits/clickup/update_task_comment_example_call_tool.js b/public/examples/integrations/mcp-servers/clickup/update_task_comment_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/clickup/update_task_comment_example_call_tool.js rename to public/examples/integrations/mcp-servers/clickup/update_task_comment_example_call_tool.js diff --git a/public/examples/integrations/toolkits/clickup/update_task_comment_example_call_tool.py b/public/examples/integrations/mcp-servers/clickup/update_task_comment_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/clickup/update_task_comment_example_call_tool.py rename to public/examples/integrations/mcp-servers/clickup/update_task_comment_example_call_tool.py diff --git a/public/examples/integrations/toolkits/clickup/update_task_example_call_tool.js b/public/examples/integrations/mcp-servers/clickup/update_task_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/clickup/update_task_example_call_tool.js rename to public/examples/integrations/mcp-servers/clickup/update_task_example_call_tool.js diff --git a/public/examples/integrations/toolkits/clickup/update_task_example_call_tool.py b/public/examples/integrations/mcp-servers/clickup/update_task_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/clickup/update_task_example_call_tool.py rename to public/examples/integrations/mcp-servers/clickup/update_task_example_call_tool.py diff --git a/public/examples/integrations/toolkits/clickup/who_am_i_example_call_tool.js b/public/examples/integrations/mcp-servers/clickup/who_am_i_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/clickup/who_am_i_example_call_tool.js rename to public/examples/integrations/mcp-servers/clickup/who_am_i_example_call_tool.js diff --git a/public/examples/integrations/toolkits/clickup/who_am_i_example_call_tool.py b/public/examples/integrations/mcp-servers/clickup/who_am_i_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/clickup/who_am_i_example_call_tool.py rename to public/examples/integrations/mcp-servers/clickup/who_am_i_example_call_tool.py diff --git a/public/examples/integrations/toolkits/clickup/who_i_am_example_call_tool.js b/public/examples/integrations/mcp-servers/clickup/who_i_am_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/clickup/who_i_am_example_call_tool.js rename to public/examples/integrations/mcp-servers/clickup/who_i_am_example_call_tool.js diff --git a/public/examples/integrations/toolkits/clickup/who_i_am_example_call_tool.py b/public/examples/integrations/mcp-servers/clickup/who_i_am_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/clickup/who_i_am_example_call_tool.py rename to public/examples/integrations/mcp-servers/clickup/who_i_am_example_call_tool.py diff --git a/public/examples/integrations/toolkits/confluence/create_page_example_call_tool.js b/public/examples/integrations/mcp-servers/confluence/create_page_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/confluence/create_page_example_call_tool.js rename to public/examples/integrations/mcp-servers/confluence/create_page_example_call_tool.js diff --git a/public/examples/integrations/toolkits/confluence/create_page_example_call_tool.py b/public/examples/integrations/mcp-servers/confluence/create_page_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/confluence/create_page_example_call_tool.py rename to public/examples/integrations/mcp-servers/confluence/create_page_example_call_tool.py diff --git a/public/examples/integrations/toolkits/confluence/get_attachments_for_page_example_call_tool.js b/public/examples/integrations/mcp-servers/confluence/get_attachments_for_page_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/confluence/get_attachments_for_page_example_call_tool.js rename to public/examples/integrations/mcp-servers/confluence/get_attachments_for_page_example_call_tool.js diff --git a/public/examples/integrations/toolkits/confluence/get_attachments_for_page_example_call_tool.py b/public/examples/integrations/mcp-servers/confluence/get_attachments_for_page_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/confluence/get_attachments_for_page_example_call_tool.py rename to public/examples/integrations/mcp-servers/confluence/get_attachments_for_page_example_call_tool.py diff --git a/public/examples/integrations/toolkits/confluence/get_page_example_call_tool.js b/public/examples/integrations/mcp-servers/confluence/get_page_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/confluence/get_page_example_call_tool.js rename to public/examples/integrations/mcp-servers/confluence/get_page_example_call_tool.js diff --git a/public/examples/integrations/toolkits/confluence/get_page_example_call_tool.py b/public/examples/integrations/mcp-servers/confluence/get_page_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/confluence/get_page_example_call_tool.py rename to public/examples/integrations/mcp-servers/confluence/get_page_example_call_tool.py diff --git a/public/examples/integrations/toolkits/confluence/get_pages_by_id_example_call_tool.js b/public/examples/integrations/mcp-servers/confluence/get_pages_by_id_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/confluence/get_pages_by_id_example_call_tool.js rename to public/examples/integrations/mcp-servers/confluence/get_pages_by_id_example_call_tool.js diff --git a/public/examples/integrations/toolkits/confluence/get_pages_by_id_example_call_tool.py b/public/examples/integrations/mcp-servers/confluence/get_pages_by_id_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/confluence/get_pages_by_id_example_call_tool.py rename to public/examples/integrations/mcp-servers/confluence/get_pages_by_id_example_call_tool.py diff --git a/public/examples/integrations/toolkits/confluence/get_space_example_call_tool.js b/public/examples/integrations/mcp-servers/confluence/get_space_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/confluence/get_space_example_call_tool.js rename to public/examples/integrations/mcp-servers/confluence/get_space_example_call_tool.js diff --git a/public/examples/integrations/toolkits/confluence/get_space_example_call_tool.py b/public/examples/integrations/mcp-servers/confluence/get_space_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/confluence/get_space_example_call_tool.py rename to public/examples/integrations/mcp-servers/confluence/get_space_example_call_tool.py diff --git a/public/examples/integrations/toolkits/confluence/get_space_hierarchy_example_call_tool.js b/public/examples/integrations/mcp-servers/confluence/get_space_hierarchy_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/confluence/get_space_hierarchy_example_call_tool.js rename to public/examples/integrations/mcp-servers/confluence/get_space_hierarchy_example_call_tool.js diff --git a/public/examples/integrations/toolkits/confluence/get_space_hierarchy_example_call_tool.py b/public/examples/integrations/mcp-servers/confluence/get_space_hierarchy_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/confluence/get_space_hierarchy_example_call_tool.py rename to public/examples/integrations/mcp-servers/confluence/get_space_hierarchy_example_call_tool.py diff --git a/public/examples/integrations/toolkits/confluence/list_attachments_example_call_tool.js b/public/examples/integrations/mcp-servers/confluence/list_attachments_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/confluence/list_attachments_example_call_tool.js rename to public/examples/integrations/mcp-servers/confluence/list_attachments_example_call_tool.js diff --git a/public/examples/integrations/toolkits/confluence/list_attachments_example_call_tool.py b/public/examples/integrations/mcp-servers/confluence/list_attachments_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/confluence/list_attachments_example_call_tool.py rename to public/examples/integrations/mcp-servers/confluence/list_attachments_example_call_tool.py diff --git a/public/examples/integrations/toolkits/confluence/list_pages_example_call_tool.js b/public/examples/integrations/mcp-servers/confluence/list_pages_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/confluence/list_pages_example_call_tool.js rename to public/examples/integrations/mcp-servers/confluence/list_pages_example_call_tool.js diff --git a/public/examples/integrations/toolkits/confluence/list_pages_example_call_tool.py b/public/examples/integrations/mcp-servers/confluence/list_pages_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/confluence/list_pages_example_call_tool.py rename to public/examples/integrations/mcp-servers/confluence/list_pages_example_call_tool.py diff --git a/public/examples/integrations/toolkits/confluence/list_spaces_example_call_tool.js b/public/examples/integrations/mcp-servers/confluence/list_spaces_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/confluence/list_spaces_example_call_tool.js rename to public/examples/integrations/mcp-servers/confluence/list_spaces_example_call_tool.js diff --git a/public/examples/integrations/toolkits/confluence/list_spaces_example_call_tool.py b/public/examples/integrations/mcp-servers/confluence/list_spaces_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/confluence/list_spaces_example_call_tool.py rename to public/examples/integrations/mcp-servers/confluence/list_spaces_example_call_tool.py diff --git a/public/examples/integrations/toolkits/confluence/rename_page_example_call_tool.js b/public/examples/integrations/mcp-servers/confluence/rename_page_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/confluence/rename_page_example_call_tool.js rename to public/examples/integrations/mcp-servers/confluence/rename_page_example_call_tool.js diff --git a/public/examples/integrations/toolkits/confluence/rename_page_example_call_tool.py b/public/examples/integrations/mcp-servers/confluence/rename_page_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/confluence/rename_page_example_call_tool.py rename to public/examples/integrations/mcp-servers/confluence/rename_page_example_call_tool.py diff --git a/public/examples/integrations/toolkits/confluence/search_content_example_call_tool.js b/public/examples/integrations/mcp-servers/confluence/search_content_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/confluence/search_content_example_call_tool.js rename to public/examples/integrations/mcp-servers/confluence/search_content_example_call_tool.js diff --git a/public/examples/integrations/toolkits/confluence/search_content_example_call_tool.py b/public/examples/integrations/mcp-servers/confluence/search_content_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/confluence/search_content_example_call_tool.py rename to public/examples/integrations/mcp-servers/confluence/search_content_example_call_tool.py diff --git a/public/examples/integrations/toolkits/confluence/update_page_content_example_call_tool.js b/public/examples/integrations/mcp-servers/confluence/update_page_content_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/confluence/update_page_content_example_call_tool.js rename to public/examples/integrations/mcp-servers/confluence/update_page_content_example_call_tool.js diff --git a/public/examples/integrations/toolkits/confluence/update_page_content_example_call_tool.py b/public/examples/integrations/mcp-servers/confluence/update_page_content_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/confluence/update_page_content_example_call_tool.py rename to public/examples/integrations/mcp-servers/confluence/update_page_content_example_call_tool.py diff --git a/public/examples/integrations/toolkits/dropbox/download_file_example_call_tool.js b/public/examples/integrations/mcp-servers/dropbox/download_file_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/dropbox/download_file_example_call_tool.js rename to public/examples/integrations/mcp-servers/dropbox/download_file_example_call_tool.js diff --git a/public/examples/integrations/toolkits/dropbox/download_file_example_call_tool.py b/public/examples/integrations/mcp-servers/dropbox/download_file_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/dropbox/download_file_example_call_tool.py rename to public/examples/integrations/mcp-servers/dropbox/download_file_example_call_tool.py diff --git a/public/examples/integrations/toolkits/dropbox/list_items_in_folder_example_call_tool.js b/public/examples/integrations/mcp-servers/dropbox/list_items_in_folder_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/dropbox/list_items_in_folder_example_call_tool.js rename to public/examples/integrations/mcp-servers/dropbox/list_items_in_folder_example_call_tool.js diff --git a/public/examples/integrations/toolkits/dropbox/list_items_in_folder_example_call_tool.py b/public/examples/integrations/mcp-servers/dropbox/list_items_in_folder_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/dropbox/list_items_in_folder_example_call_tool.py rename to public/examples/integrations/mcp-servers/dropbox/list_items_in_folder_example_call_tool.py diff --git a/public/examples/integrations/toolkits/dropbox/search_files_and_folders_example_call_tool.js b/public/examples/integrations/mcp-servers/dropbox/search_files_and_folders_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/dropbox/search_files_and_folders_example_call_tool.js rename to public/examples/integrations/mcp-servers/dropbox/search_files_and_folders_example_call_tool.js diff --git a/public/examples/integrations/toolkits/dropbox/search_files_and_folders_example_call_tool.py b/public/examples/integrations/mcp-servers/dropbox/search_files_and_folders_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/dropbox/search_files_and_folders_example_call_tool.py rename to public/examples/integrations/mcp-servers/dropbox/search_files_and_folders_example_call_tool.py diff --git a/public/examples/integrations/toolkits/e2b/create_static_matplotlib_chart_example_call_tool.js b/public/examples/integrations/mcp-servers/e2b/create_static_matplotlib_chart_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/e2b/create_static_matplotlib_chart_example_call_tool.js rename to public/examples/integrations/mcp-servers/e2b/create_static_matplotlib_chart_example_call_tool.js diff --git a/public/examples/integrations/toolkits/e2b/create_static_matplotlib_chart_example_call_tool.py b/public/examples/integrations/mcp-servers/e2b/create_static_matplotlib_chart_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/e2b/create_static_matplotlib_chart_example_call_tool.py rename to public/examples/integrations/mcp-servers/e2b/create_static_matplotlib_chart_example_call_tool.py diff --git a/public/examples/integrations/toolkits/e2b/run_code_example_call_tool.js b/public/examples/integrations/mcp-servers/e2b/run_code_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/e2b/run_code_example_call_tool.js rename to public/examples/integrations/mcp-servers/e2b/run_code_example_call_tool.js diff --git a/public/examples/integrations/toolkits/e2b/run_code_example_call_tool.py b/public/examples/integrations/mcp-servers/e2b/run_code_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/e2b/run_code_example_call_tool.py rename to public/examples/integrations/mcp-servers/e2b/run_code_example_call_tool.py diff --git a/public/examples/integrations/toolkits/firecrawl/cancel_crawl_example_call_tool.js b/public/examples/integrations/mcp-servers/firecrawl/cancel_crawl_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/firecrawl/cancel_crawl_example_call_tool.js rename to public/examples/integrations/mcp-servers/firecrawl/cancel_crawl_example_call_tool.js diff --git a/public/examples/integrations/toolkits/firecrawl/cancel_crawl_example_call_tool.py b/public/examples/integrations/mcp-servers/firecrawl/cancel_crawl_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/firecrawl/cancel_crawl_example_call_tool.py rename to public/examples/integrations/mcp-servers/firecrawl/cancel_crawl_example_call_tool.py diff --git a/public/examples/integrations/toolkits/firecrawl/crawl_website_example_call_tool.js b/public/examples/integrations/mcp-servers/firecrawl/crawl_website_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/firecrawl/crawl_website_example_call_tool.js rename to public/examples/integrations/mcp-servers/firecrawl/crawl_website_example_call_tool.js diff --git a/public/examples/integrations/toolkits/firecrawl/crawl_website_example_call_tool.py b/public/examples/integrations/mcp-servers/firecrawl/crawl_website_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/firecrawl/crawl_website_example_call_tool.py rename to public/examples/integrations/mcp-servers/firecrawl/crawl_website_example_call_tool.py diff --git a/public/examples/integrations/toolkits/firecrawl/get_crawl_data_example_call_tool.js b/public/examples/integrations/mcp-servers/firecrawl/get_crawl_data_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/firecrawl/get_crawl_data_example_call_tool.js rename to public/examples/integrations/mcp-servers/firecrawl/get_crawl_data_example_call_tool.js diff --git a/public/examples/integrations/toolkits/firecrawl/get_crawl_data_example_call_tool.py b/public/examples/integrations/mcp-servers/firecrawl/get_crawl_data_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/firecrawl/get_crawl_data_example_call_tool.py rename to public/examples/integrations/mcp-servers/firecrawl/get_crawl_data_example_call_tool.py diff --git a/public/examples/integrations/toolkits/firecrawl/get_crawl_status_example_call_tool.js b/public/examples/integrations/mcp-servers/firecrawl/get_crawl_status_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/firecrawl/get_crawl_status_example_call_tool.js rename to public/examples/integrations/mcp-servers/firecrawl/get_crawl_status_example_call_tool.js diff --git a/public/examples/integrations/toolkits/firecrawl/get_crawl_status_example_call_tool.py b/public/examples/integrations/mcp-servers/firecrawl/get_crawl_status_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/firecrawl/get_crawl_status_example_call_tool.py rename to public/examples/integrations/mcp-servers/firecrawl/get_crawl_status_example_call_tool.py diff --git a/public/examples/integrations/toolkits/firecrawl/map_website_example_call_tool.js b/public/examples/integrations/mcp-servers/firecrawl/map_website_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/firecrawl/map_website_example_call_tool.js rename to public/examples/integrations/mcp-servers/firecrawl/map_website_example_call_tool.js diff --git a/public/examples/integrations/toolkits/firecrawl/map_website_example_call_tool.py b/public/examples/integrations/mcp-servers/firecrawl/map_website_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/firecrawl/map_website_example_call_tool.py rename to public/examples/integrations/mcp-servers/firecrawl/map_website_example_call_tool.py diff --git a/public/examples/integrations/toolkits/firecrawl/scrape_url_example_call_tool.js b/public/examples/integrations/mcp-servers/firecrawl/scrape_url_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/firecrawl/scrape_url_example_call_tool.js rename to public/examples/integrations/mcp-servers/firecrawl/scrape_url_example_call_tool.js diff --git a/public/examples/integrations/toolkits/firecrawl/scrape_url_example_call_tool.py b/public/examples/integrations/mcp-servers/firecrawl/scrape_url_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/firecrawl/scrape_url_example_call_tool.py rename to public/examples/integrations/mcp-servers/firecrawl/scrape_url_example_call_tool.py diff --git a/public/examples/integrations/toolkits/github/count_stargazers_example_call_tool.js b/public/examples/integrations/mcp-servers/github/count_stargazers_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/github/count_stargazers_example_call_tool.js rename to public/examples/integrations/mcp-servers/github/count_stargazers_example_call_tool.js diff --git a/public/examples/integrations/toolkits/github/count_stargazers_example_call_tool.py b/public/examples/integrations/mcp-servers/github/count_stargazers_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/github/count_stargazers_example_call_tool.py rename to public/examples/integrations/mcp-servers/github/count_stargazers_example_call_tool.py diff --git a/public/examples/integrations/toolkits/github/create_issue_comment_example_call_tool.js b/public/examples/integrations/mcp-servers/github/create_issue_comment_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/github/create_issue_comment_example_call_tool.js rename to public/examples/integrations/mcp-servers/github/create_issue_comment_example_call_tool.js diff --git a/public/examples/integrations/toolkits/github/create_issue_comment_example_call_tool.py b/public/examples/integrations/mcp-servers/github/create_issue_comment_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/github/create_issue_comment_example_call_tool.py rename to public/examples/integrations/mcp-servers/github/create_issue_comment_example_call_tool.py diff --git a/public/examples/integrations/toolkits/github/create_issue_example_call_tool.js b/public/examples/integrations/mcp-servers/github/create_issue_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/github/create_issue_example_call_tool.js rename to public/examples/integrations/mcp-servers/github/create_issue_example_call_tool.js diff --git a/public/examples/integrations/toolkits/github/create_issue_example_call_tool.py b/public/examples/integrations/mcp-servers/github/create_issue_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/github/create_issue_example_call_tool.py rename to public/examples/integrations/mcp-servers/github/create_issue_example_call_tool.py diff --git a/public/examples/integrations/toolkits/github/create_reply_for_review_comment_example_call_tool.js b/public/examples/integrations/mcp-servers/github/create_reply_for_review_comment_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/github/create_reply_for_review_comment_example_call_tool.js rename to public/examples/integrations/mcp-servers/github/create_reply_for_review_comment_example_call_tool.js diff --git a/public/examples/integrations/toolkits/github/create_reply_for_review_comment_example_call_tool.py b/public/examples/integrations/mcp-servers/github/create_reply_for_review_comment_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/github/create_reply_for_review_comment_example_call_tool.py rename to public/examples/integrations/mcp-servers/github/create_reply_for_review_comment_example_call_tool.py diff --git a/public/examples/integrations/toolkits/github/create_review_comment_example_call_tool.js b/public/examples/integrations/mcp-servers/github/create_review_comment_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/github/create_review_comment_example_call_tool.js rename to public/examples/integrations/mcp-servers/github/create_review_comment_example_call_tool.js diff --git a/public/examples/integrations/toolkits/github/create_review_comment_example_call_tool.py b/public/examples/integrations/mcp-servers/github/create_review_comment_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/github/create_review_comment_example_call_tool.py rename to public/examples/integrations/mcp-servers/github/create_review_comment_example_call_tool.py diff --git a/public/examples/integrations/toolkits/github/get_pull_request_example_call_tool.js b/public/examples/integrations/mcp-servers/github/get_pull_request_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/github/get_pull_request_example_call_tool.js rename to public/examples/integrations/mcp-servers/github/get_pull_request_example_call_tool.js diff --git a/public/examples/integrations/toolkits/github/get_pull_request_example_call_tool.py b/public/examples/integrations/mcp-servers/github/get_pull_request_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/github/get_pull_request_example_call_tool.py rename to public/examples/integrations/mcp-servers/github/get_pull_request_example_call_tool.py diff --git a/public/examples/integrations/toolkits/github/get_repository_example_call_tool.js b/public/examples/integrations/mcp-servers/github/get_repository_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/github/get_repository_example_call_tool.js rename to public/examples/integrations/mcp-servers/github/get_repository_example_call_tool.js diff --git a/public/examples/integrations/toolkits/github/get_repository_example_call_tool.py b/public/examples/integrations/mcp-servers/github/get_repository_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/github/get_repository_example_call_tool.py rename to public/examples/integrations/mcp-servers/github/get_repository_example_call_tool.py diff --git a/public/examples/integrations/toolkits/github/list_org_repositories_example_call_tool.js b/public/examples/integrations/mcp-servers/github/list_org_repositories_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/github/list_org_repositories_example_call_tool.js rename to public/examples/integrations/mcp-servers/github/list_org_repositories_example_call_tool.js diff --git a/public/examples/integrations/toolkits/github/list_org_repositories_example_call_tool.py b/public/examples/integrations/mcp-servers/github/list_org_repositories_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/github/list_org_repositories_example_call_tool.py rename to public/examples/integrations/mcp-servers/github/list_org_repositories_example_call_tool.py diff --git a/public/examples/integrations/toolkits/github/list_pull_request_commits_example_call_tool.js b/public/examples/integrations/mcp-servers/github/list_pull_request_commits_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/github/list_pull_request_commits_example_call_tool.js rename to public/examples/integrations/mcp-servers/github/list_pull_request_commits_example_call_tool.js diff --git a/public/examples/integrations/toolkits/github/list_pull_request_commits_example_call_tool.py b/public/examples/integrations/mcp-servers/github/list_pull_request_commits_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/github/list_pull_request_commits_example_call_tool.py rename to public/examples/integrations/mcp-servers/github/list_pull_request_commits_example_call_tool.py diff --git a/public/examples/integrations/toolkits/github/list_pull_requests_example_call_tool.js b/public/examples/integrations/mcp-servers/github/list_pull_requests_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/github/list_pull_requests_example_call_tool.js rename to public/examples/integrations/mcp-servers/github/list_pull_requests_example_call_tool.js diff --git a/public/examples/integrations/toolkits/github/list_pull_requests_example_call_tool.py b/public/examples/integrations/mcp-servers/github/list_pull_requests_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/github/list_pull_requests_example_call_tool.py rename to public/examples/integrations/mcp-servers/github/list_pull_requests_example_call_tool.py diff --git a/public/examples/integrations/toolkits/github/list_repository_activities_example_call_tool.js b/public/examples/integrations/mcp-servers/github/list_repository_activities_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/github/list_repository_activities_example_call_tool.js rename to public/examples/integrations/mcp-servers/github/list_repository_activities_example_call_tool.js diff --git a/public/examples/integrations/toolkits/github/list_repository_activities_example_call_tool.py b/public/examples/integrations/mcp-servers/github/list_repository_activities_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/github/list_repository_activities_example_call_tool.py rename to public/examples/integrations/mcp-servers/github/list_repository_activities_example_call_tool.py diff --git a/public/examples/integrations/toolkits/github/list_review_comments_in_a_repository_example_call_tool.js b/public/examples/integrations/mcp-servers/github/list_review_comments_in_a_repository_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/github/list_review_comments_in_a_repository_example_call_tool.js rename to public/examples/integrations/mcp-servers/github/list_review_comments_in_a_repository_example_call_tool.js diff --git a/public/examples/integrations/toolkits/github/list_review_comments_in_a_repository_example_call_tool.py b/public/examples/integrations/mcp-servers/github/list_review_comments_in_a_repository_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/github/list_review_comments_in_a_repository_example_call_tool.py rename to public/examples/integrations/mcp-servers/github/list_review_comments_in_a_repository_example_call_tool.py diff --git a/public/examples/integrations/toolkits/github/list_review_comments_on_pull_request_example_call_tool.js b/public/examples/integrations/mcp-servers/github/list_review_comments_on_pull_request_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/github/list_review_comments_on_pull_request_example_call_tool.js rename to public/examples/integrations/mcp-servers/github/list_review_comments_on_pull_request_example_call_tool.js diff --git a/public/examples/integrations/toolkits/github/list_review_comments_on_pull_request_example_call_tool.py b/public/examples/integrations/mcp-servers/github/list_review_comments_on_pull_request_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/github/list_review_comments_on_pull_request_example_call_tool.py rename to public/examples/integrations/mcp-servers/github/list_review_comments_on_pull_request_example_call_tool.py diff --git a/public/examples/integrations/toolkits/github/list_stargazers_example_call_tool.js b/public/examples/integrations/mcp-servers/github/list_stargazers_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/github/list_stargazers_example_call_tool.js rename to public/examples/integrations/mcp-servers/github/list_stargazers_example_call_tool.js diff --git a/public/examples/integrations/toolkits/github/list_stargazers_example_call_tool.py b/public/examples/integrations/mcp-servers/github/list_stargazers_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/github/list_stargazers_example_call_tool.py rename to public/examples/integrations/mcp-servers/github/list_stargazers_example_call_tool.py diff --git a/public/examples/integrations/toolkits/github/set_starred_example_call_tool.js b/public/examples/integrations/mcp-servers/github/set_starred_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/github/set_starred_example_call_tool.js rename to public/examples/integrations/mcp-servers/github/set_starred_example_call_tool.js diff --git a/public/examples/integrations/toolkits/github/set_starred_example_call_tool.py b/public/examples/integrations/mcp-servers/github/set_starred_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/github/set_starred_example_call_tool.py rename to public/examples/integrations/mcp-servers/github/set_starred_example_call_tool.py diff --git a/public/examples/integrations/toolkits/github/update_pull_request_example_call_tool.js b/public/examples/integrations/mcp-servers/github/update_pull_request_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/github/update_pull_request_example_call_tool.js rename to public/examples/integrations/mcp-servers/github/update_pull_request_example_call_tool.js diff --git a/public/examples/integrations/toolkits/github/update_pull_request_example_call_tool.py b/public/examples/integrations/mcp-servers/github/update_pull_request_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/github/update_pull_request_example_call_tool.py rename to public/examples/integrations/mcp-servers/github/update_pull_request_example_call_tool.py diff --git a/public/examples/integrations/toolkits/gmail/who_am_i_example_call_tool.js b/public/examples/integrations/mcp-servers/gmail/who_am_i_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/gmail/who_am_i_example_call_tool.js rename to public/examples/integrations/mcp-servers/gmail/who_am_i_example_call_tool.js diff --git a/public/examples/integrations/toolkits/gmail/who_am_i_example_call_tool.py b/public/examples/integrations/mcp-servers/gmail/who_am_i_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/gmail/who_am_i_example_call_tool.py rename to public/examples/integrations/mcp-servers/gmail/who_am_i_example_call_tool.py diff --git a/public/examples/integrations/toolkits/google/contacts/create_contact_example_call_tool.js b/public/examples/integrations/mcp-servers/google/contacts/create_contact_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/google/contacts/create_contact_example_call_tool.js rename to public/examples/integrations/mcp-servers/google/contacts/create_contact_example_call_tool.js diff --git a/public/examples/integrations/toolkits/google/contacts/create_contact_example_call_tool.py b/public/examples/integrations/mcp-servers/google/contacts/create_contact_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/google/contacts/create_contact_example_call_tool.py rename to public/examples/integrations/mcp-servers/google/contacts/create_contact_example_call_tool.py diff --git a/public/examples/integrations/toolkits/google/contacts/search_contacts_by_email_example_call_tool.js b/public/examples/integrations/mcp-servers/google/contacts/search_contacts_by_email_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/google/contacts/search_contacts_by_email_example_call_tool.js rename to public/examples/integrations/mcp-servers/google/contacts/search_contacts_by_email_example_call_tool.js diff --git a/public/examples/integrations/toolkits/google/contacts/search_contacts_by_email_example_call_tool.py b/public/examples/integrations/mcp-servers/google/contacts/search_contacts_by_email_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/google/contacts/search_contacts_by_email_example_call_tool.py rename to public/examples/integrations/mcp-servers/google/contacts/search_contacts_by_email_example_call_tool.py diff --git a/public/examples/integrations/toolkits/google/contacts/search_contacts_by_name_example_call_tool.js b/public/examples/integrations/mcp-servers/google/contacts/search_contacts_by_name_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/google/contacts/search_contacts_by_name_example_call_tool.js rename to public/examples/integrations/mcp-servers/google/contacts/search_contacts_by_name_example_call_tool.js diff --git a/public/examples/integrations/toolkits/google/contacts/search_contacts_by_name_example_call_tool.py b/public/examples/integrations/mcp-servers/google/contacts/search_contacts_by_name_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/google/contacts/search_contacts_by_name_example_call_tool.py rename to public/examples/integrations/mcp-servers/google/contacts/search_contacts_by_name_example_call_tool.py diff --git a/public/examples/integrations/toolkits/google/docs/comment_on_document_example_call_tool.js b/public/examples/integrations/mcp-servers/google/docs/comment_on_document_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/google/docs/comment_on_document_example_call_tool.js rename to public/examples/integrations/mcp-servers/google/docs/comment_on_document_example_call_tool.js diff --git a/public/examples/integrations/toolkits/google/docs/comment_on_document_example_call_tool.py b/public/examples/integrations/mcp-servers/google/docs/comment_on_document_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/google/docs/comment_on_document_example_call_tool.py rename to public/examples/integrations/mcp-servers/google/docs/comment_on_document_example_call_tool.py diff --git a/public/examples/integrations/toolkits/google/docs/create_blank_document_example_call_tool.js b/public/examples/integrations/mcp-servers/google/docs/create_blank_document_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/google/docs/create_blank_document_example_call_tool.js rename to public/examples/integrations/mcp-servers/google/docs/create_blank_document_example_call_tool.js diff --git a/public/examples/integrations/toolkits/google/docs/create_blank_document_example_call_tool.py b/public/examples/integrations/mcp-servers/google/docs/create_blank_document_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/google/docs/create_blank_document_example_call_tool.py rename to public/examples/integrations/mcp-servers/google/docs/create_blank_document_example_call_tool.py diff --git a/public/examples/integrations/toolkits/google/docs/create_document_from_text_example_call_tool.js b/public/examples/integrations/mcp-servers/google/docs/create_document_from_text_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/google/docs/create_document_from_text_example_call_tool.js rename to public/examples/integrations/mcp-servers/google/docs/create_document_from_text_example_call_tool.js diff --git a/public/examples/integrations/toolkits/google/docs/create_document_from_text_example_call_tool.py b/public/examples/integrations/mcp-servers/google/docs/create_document_from_text_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/google/docs/create_document_from_text_example_call_tool.py rename to public/examples/integrations/mcp-servers/google/docs/create_document_from_text_example_call_tool.py diff --git a/public/examples/integrations/toolkits/google/docs/edit_document_example_call_tool.js b/public/examples/integrations/mcp-servers/google/docs/edit_document_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/google/docs/edit_document_example_call_tool.js rename to public/examples/integrations/mcp-servers/google/docs/edit_document_example_call_tool.js diff --git a/public/examples/integrations/toolkits/google/docs/edit_document_example_call_tool.py b/public/examples/integrations/mcp-servers/google/docs/edit_document_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/google/docs/edit_document_example_call_tool.py rename to public/examples/integrations/mcp-servers/google/docs/edit_document_example_call_tool.py diff --git a/public/examples/integrations/toolkits/google/docs/get_document_as_doc_md_example_call_tool.js b/public/examples/integrations/mcp-servers/google/docs/get_document_as_doc_md_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/google/docs/get_document_as_doc_md_example_call_tool.js rename to public/examples/integrations/mcp-servers/google/docs/get_document_as_doc_md_example_call_tool.js diff --git a/public/examples/integrations/toolkits/google/docs/get_document_as_doc_md_example_call_tool.py b/public/examples/integrations/mcp-servers/google/docs/get_document_as_doc_md_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/google/docs/get_document_as_doc_md_example_call_tool.py rename to public/examples/integrations/mcp-servers/google/docs/get_document_as_doc_md_example_call_tool.py diff --git a/public/examples/integrations/toolkits/google/docs/get_document_by_id_example_call_tool.js b/public/examples/integrations/mcp-servers/google/docs/get_document_by_id_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/google/docs/get_document_by_id_example_call_tool.js rename to public/examples/integrations/mcp-servers/google/docs/get_document_by_id_example_call_tool.js diff --git a/public/examples/integrations/toolkits/google/docs/get_document_by_id_example_call_tool.py b/public/examples/integrations/mcp-servers/google/docs/get_document_by_id_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/google/docs/get_document_by_id_example_call_tool.py rename to public/examples/integrations/mcp-servers/google/docs/get_document_by_id_example_call_tool.py diff --git a/public/examples/integrations/toolkits/google/docs/insert_text_at_end_of_document_example_call_tool.js b/public/examples/integrations/mcp-servers/google/docs/insert_text_at_end_of_document_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/google/docs/insert_text_at_end_of_document_example_call_tool.js rename to public/examples/integrations/mcp-servers/google/docs/insert_text_at_end_of_document_example_call_tool.js diff --git a/public/examples/integrations/toolkits/google/docs/insert_text_at_end_of_document_example_call_tool.py b/public/examples/integrations/mcp-servers/google/docs/insert_text_at_end_of_document_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/google/docs/insert_text_at_end_of_document_example_call_tool.py rename to public/examples/integrations/mcp-servers/google/docs/insert_text_at_end_of_document_example_call_tool.py diff --git a/public/examples/integrations/toolkits/google/docs/list_document_comments_example_call_tool.js b/public/examples/integrations/mcp-servers/google/docs/list_document_comments_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/google/docs/list_document_comments_example_call_tool.js rename to public/examples/integrations/mcp-servers/google/docs/list_document_comments_example_call_tool.js diff --git a/public/examples/integrations/toolkits/google/docs/list_document_comments_example_call_tool.py b/public/examples/integrations/mcp-servers/google/docs/list_document_comments_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/google/docs/list_document_comments_example_call_tool.py rename to public/examples/integrations/mcp-servers/google/docs/list_document_comments_example_call_tool.py diff --git a/public/examples/integrations/toolkits/google/docs/search_and_retrieve_documents_example_call_tool.js b/public/examples/integrations/mcp-servers/google/docs/search_and_retrieve_documents_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/google/docs/search_and_retrieve_documents_example_call_tool.js rename to public/examples/integrations/mcp-servers/google/docs/search_and_retrieve_documents_example_call_tool.js diff --git a/public/examples/integrations/toolkits/google/docs/search_and_retrieve_documents_example_call_tool.py b/public/examples/integrations/mcp-servers/google/docs/search_and_retrieve_documents_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/google/docs/search_and_retrieve_documents_example_call_tool.py rename to public/examples/integrations/mcp-servers/google/docs/search_and_retrieve_documents_example_call_tool.py diff --git a/public/examples/integrations/toolkits/google/docs/search_documents_example_call_tool.js b/public/examples/integrations/mcp-servers/google/docs/search_documents_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/google/docs/search_documents_example_call_tool.js rename to public/examples/integrations/mcp-servers/google/docs/search_documents_example_call_tool.js diff --git a/public/examples/integrations/toolkits/google/docs/search_documents_example_call_tool.py b/public/examples/integrations/mcp-servers/google/docs/search_documents_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/google/docs/search_documents_example_call_tool.py rename to public/examples/integrations/mcp-servers/google/docs/search_documents_example_call_tool.py diff --git a/public/examples/integrations/toolkits/google/gmail/delete_draft_email_example_call_tool.js b/public/examples/integrations/mcp-servers/google/gmail/delete_draft_email_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/google/gmail/delete_draft_email_example_call_tool.js rename to public/examples/integrations/mcp-servers/google/gmail/delete_draft_email_example_call_tool.js diff --git a/public/examples/integrations/toolkits/google/gmail/delete_draft_email_example_call_tool.py b/public/examples/integrations/mcp-servers/google/gmail/delete_draft_email_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/google/gmail/delete_draft_email_example_call_tool.py rename to public/examples/integrations/mcp-servers/google/gmail/delete_draft_email_example_call_tool.py diff --git a/public/examples/integrations/toolkits/google/gmail/get_thread_example_call_tool.js b/public/examples/integrations/mcp-servers/google/gmail/get_thread_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/google/gmail/get_thread_example_call_tool.js rename to public/examples/integrations/mcp-servers/google/gmail/get_thread_example_call_tool.js diff --git a/public/examples/integrations/toolkits/google/gmail/get_thread_example_call_tool.py b/public/examples/integrations/mcp-servers/google/gmail/get_thread_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/google/gmail/get_thread_example_call_tool.py rename to public/examples/integrations/mcp-servers/google/gmail/get_thread_example_call_tool.py diff --git a/public/examples/integrations/toolkits/google/gmail/list_draft_emails_example_call_tool.js b/public/examples/integrations/mcp-servers/google/gmail/list_draft_emails_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/google/gmail/list_draft_emails_example_call_tool.js rename to public/examples/integrations/mcp-servers/google/gmail/list_draft_emails_example_call_tool.js diff --git a/public/examples/integrations/toolkits/google/gmail/list_draft_emails_example_call_tool.py b/public/examples/integrations/mcp-servers/google/gmail/list_draft_emails_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/google/gmail/list_draft_emails_example_call_tool.py rename to public/examples/integrations/mcp-servers/google/gmail/list_draft_emails_example_call_tool.py diff --git a/public/examples/integrations/toolkits/google/gmail/list_emails_by_header_example_call_tool.js b/public/examples/integrations/mcp-servers/google/gmail/list_emails_by_header_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/google/gmail/list_emails_by_header_example_call_tool.js rename to public/examples/integrations/mcp-servers/google/gmail/list_emails_by_header_example_call_tool.js diff --git a/public/examples/integrations/toolkits/google/gmail/list_emails_by_header_example_call_tool.py b/public/examples/integrations/mcp-servers/google/gmail/list_emails_by_header_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/google/gmail/list_emails_by_header_example_call_tool.py rename to public/examples/integrations/mcp-servers/google/gmail/list_emails_by_header_example_call_tool.py diff --git a/public/examples/integrations/toolkits/google/gmail/list_emails_example_call_tool.js b/public/examples/integrations/mcp-servers/google/gmail/list_emails_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/google/gmail/list_emails_example_call_tool.js rename to public/examples/integrations/mcp-servers/google/gmail/list_emails_example_call_tool.js diff --git a/public/examples/integrations/toolkits/google/gmail/list_emails_example_call_tool.py b/public/examples/integrations/mcp-servers/google/gmail/list_emails_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/google/gmail/list_emails_example_call_tool.py rename to public/examples/integrations/mcp-servers/google/gmail/list_emails_example_call_tool.py diff --git a/public/examples/integrations/toolkits/google/gmail/list_threads_example_call_tool.js b/public/examples/integrations/mcp-servers/google/gmail/list_threads_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/google/gmail/list_threads_example_call_tool.js rename to public/examples/integrations/mcp-servers/google/gmail/list_threads_example_call_tool.js diff --git a/public/examples/integrations/toolkits/google/gmail/list_threads_example_call_tool.py b/public/examples/integrations/mcp-servers/google/gmail/list_threads_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/google/gmail/list_threads_example_call_tool.py rename to public/examples/integrations/mcp-servers/google/gmail/list_threads_example_call_tool.py diff --git a/public/examples/integrations/toolkits/google/gmail/search_threads_example_call_tool.js b/public/examples/integrations/mcp-servers/google/gmail/search_threads_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/google/gmail/search_threads_example_call_tool.js rename to public/examples/integrations/mcp-servers/google/gmail/search_threads_example_call_tool.js diff --git a/public/examples/integrations/toolkits/google/gmail/search_threads_example_call_tool.py b/public/examples/integrations/mcp-servers/google/gmail/search_threads_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/google/gmail/search_threads_example_call_tool.py rename to public/examples/integrations/mcp-servers/google/gmail/search_threads_example_call_tool.py diff --git a/public/examples/integrations/toolkits/google/gmail/send_draft_email_example_call_tool.js b/public/examples/integrations/mcp-servers/google/gmail/send_draft_email_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/google/gmail/send_draft_email_example_call_tool.js rename to public/examples/integrations/mcp-servers/google/gmail/send_draft_email_example_call_tool.js diff --git a/public/examples/integrations/toolkits/google/gmail/send_draft_email_example_call_tool.py b/public/examples/integrations/mcp-servers/google/gmail/send_draft_email_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/google/gmail/send_draft_email_example_call_tool.py rename to public/examples/integrations/mcp-servers/google/gmail/send_draft_email_example_call_tool.py diff --git a/public/examples/integrations/toolkits/google/gmail/send_email_example_call_tool.js b/public/examples/integrations/mcp-servers/google/gmail/send_email_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/google/gmail/send_email_example_call_tool.js rename to public/examples/integrations/mcp-servers/google/gmail/send_email_example_call_tool.js diff --git a/public/examples/integrations/toolkits/google/gmail/send_email_example_call_tool.py b/public/examples/integrations/mcp-servers/google/gmail/send_email_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/google/gmail/send_email_example_call_tool.py rename to public/examples/integrations/mcp-servers/google/gmail/send_email_example_call_tool.py diff --git a/public/examples/integrations/toolkits/google/gmail/trash_email_example_call_tool.js b/public/examples/integrations/mcp-servers/google/gmail/trash_email_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/google/gmail/trash_email_example_call_tool.js rename to public/examples/integrations/mcp-servers/google/gmail/trash_email_example_call_tool.js diff --git a/public/examples/integrations/toolkits/google/gmail/trash_email_example_call_tool.py b/public/examples/integrations/mcp-servers/google/gmail/trash_email_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/google/gmail/trash_email_example_call_tool.py rename to public/examples/integrations/mcp-servers/google/gmail/trash_email_example_call_tool.py diff --git a/public/examples/integrations/toolkits/google/gmail/update_draft_email_example_call_tool.js b/public/examples/integrations/mcp-servers/google/gmail/update_draft_email_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/google/gmail/update_draft_email_example_call_tool.js rename to public/examples/integrations/mcp-servers/google/gmail/update_draft_email_example_call_tool.js diff --git a/public/examples/integrations/toolkits/google/gmail/update_draft_email_example_call_tool.py b/public/examples/integrations/mcp-servers/google/gmail/update_draft_email_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/google/gmail/update_draft_email_example_call_tool.py rename to public/examples/integrations/mcp-servers/google/gmail/update_draft_email_example_call_tool.py diff --git a/public/examples/integrations/toolkits/google/gmail/write_draft_email_example_call_tool.js b/public/examples/integrations/mcp-servers/google/gmail/write_draft_email_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/google/gmail/write_draft_email_example_call_tool.js rename to public/examples/integrations/mcp-servers/google/gmail/write_draft_email_example_call_tool.js diff --git a/public/examples/integrations/toolkits/google/gmail/write_draft_email_example_call_tool.py b/public/examples/integrations/mcp-servers/google/gmail/write_draft_email_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/google/gmail/write_draft_email_example_call_tool.py rename to public/examples/integrations/mcp-servers/google/gmail/write_draft_email_example_call_tool.py diff --git a/public/examples/integrations/toolkits/google/slides/comment_on_presentation_example_call_tool.js b/public/examples/integrations/mcp-servers/google/slides/comment_on_presentation_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/google/slides/comment_on_presentation_example_call_tool.js rename to public/examples/integrations/mcp-servers/google/slides/comment_on_presentation_example_call_tool.js diff --git a/public/examples/integrations/toolkits/google/slides/comment_on_presentation_example_call_tool.py b/public/examples/integrations/mcp-servers/google/slides/comment_on_presentation_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/google/slides/comment_on_presentation_example_call_tool.py rename to public/examples/integrations/mcp-servers/google/slides/comment_on_presentation_example_call_tool.py diff --git a/public/examples/integrations/toolkits/google/slides/create_presentation_example_call_tool.js b/public/examples/integrations/mcp-servers/google/slides/create_presentation_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/google/slides/create_presentation_example_call_tool.js rename to public/examples/integrations/mcp-servers/google/slides/create_presentation_example_call_tool.js diff --git a/public/examples/integrations/toolkits/google/slides/create_presentation_example_call_tool.py b/public/examples/integrations/mcp-servers/google/slides/create_presentation_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/google/slides/create_presentation_example_call_tool.py rename to public/examples/integrations/mcp-servers/google/slides/create_presentation_example_call_tool.py diff --git a/public/examples/integrations/toolkits/google/slides/create_slide_example_call_tool.js b/public/examples/integrations/mcp-servers/google/slides/create_slide_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/google/slides/create_slide_example_call_tool.js rename to public/examples/integrations/mcp-servers/google/slides/create_slide_example_call_tool.js diff --git a/public/examples/integrations/toolkits/google/slides/create_slide_example_call_tool.py b/public/examples/integrations/mcp-servers/google/slides/create_slide_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/google/slides/create_slide_example_call_tool.py rename to public/examples/integrations/mcp-servers/google/slides/create_slide_example_call_tool.py diff --git a/public/examples/integrations/toolkits/google/slides/generate_google_file_picker_url_example_call_tool.js b/public/examples/integrations/mcp-servers/google/slides/generate_google_file_picker_url_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/google/slides/generate_google_file_picker_url_example_call_tool.js rename to public/examples/integrations/mcp-servers/google/slides/generate_google_file_picker_url_example_call_tool.js diff --git a/public/examples/integrations/toolkits/google/slides/generate_google_file_picker_url_example_call_tool.py b/public/examples/integrations/mcp-servers/google/slides/generate_google_file_picker_url_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/google/slides/generate_google_file_picker_url_example_call_tool.py rename to public/examples/integrations/mcp-servers/google/slides/generate_google_file_picker_url_example_call_tool.py diff --git a/public/examples/integrations/toolkits/google/slides/get_presentation_as_markdown_example_call_tool.js b/public/examples/integrations/mcp-servers/google/slides/get_presentation_as_markdown_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/google/slides/get_presentation_as_markdown_example_call_tool.js rename to public/examples/integrations/mcp-servers/google/slides/get_presentation_as_markdown_example_call_tool.js diff --git a/public/examples/integrations/toolkits/google/slides/get_presentation_as_markdown_example_call_tool.py b/public/examples/integrations/mcp-servers/google/slides/get_presentation_as_markdown_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/google/slides/get_presentation_as_markdown_example_call_tool.py rename to public/examples/integrations/mcp-servers/google/slides/get_presentation_as_markdown_example_call_tool.py diff --git a/public/examples/integrations/toolkits/google/slides/list_presentation_comments_example_call_tool.js b/public/examples/integrations/mcp-servers/google/slides/list_presentation_comments_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/google/slides/list_presentation_comments_example_call_tool.js rename to public/examples/integrations/mcp-servers/google/slides/list_presentation_comments_example_call_tool.js diff --git a/public/examples/integrations/toolkits/google/slides/list_presentation_comments_example_call_tool.py b/public/examples/integrations/mcp-servers/google/slides/list_presentation_comments_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/google/slides/list_presentation_comments_example_call_tool.py rename to public/examples/integrations/mcp-servers/google/slides/list_presentation_comments_example_call_tool.py diff --git a/public/examples/integrations/toolkits/google/slides/search_presentations_example_call_tool.js b/public/examples/integrations/mcp-servers/google/slides/search_presentations_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/google/slides/search_presentations_example_call_tool.js rename to public/examples/integrations/mcp-servers/google/slides/search_presentations_example_call_tool.js diff --git a/public/examples/integrations/toolkits/google/slides/search_presentations_example_call_tool.py b/public/examples/integrations/mcp-servers/google/slides/search_presentations_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/google/slides/search_presentations_example_call_tool.py rename to public/examples/integrations/mcp-servers/google/slides/search_presentations_example_call_tool.py diff --git a/public/examples/integrations/toolkits/google/slides/who_am_i_example_call_tool.js b/public/examples/integrations/mcp-servers/google/slides/who_am_i_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/google/slides/who_am_i_example_call_tool.js rename to public/examples/integrations/mcp-servers/google/slides/who_am_i_example_call_tool.js diff --git a/public/examples/integrations/toolkits/google/slides/who_am_i_example_call_tool.py b/public/examples/integrations/mcp-servers/google/slides/who_am_i_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/google/slides/who_am_i_example_call_tool.py rename to public/examples/integrations/mcp-servers/google/slides/who_am_i_example_call_tool.py diff --git a/public/examples/integrations/toolkits/google_calendar/create_event_example_call_tool.js b/public/examples/integrations/mcp-servers/google_calendar/create_event_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/google_calendar/create_event_example_call_tool.js rename to public/examples/integrations/mcp-servers/google_calendar/create_event_example_call_tool.js diff --git a/public/examples/integrations/toolkits/google_calendar/create_event_example_call_tool.py b/public/examples/integrations/mcp-servers/google_calendar/create_event_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/google_calendar/create_event_example_call_tool.py rename to public/examples/integrations/mcp-servers/google_calendar/create_event_example_call_tool.py diff --git a/public/examples/integrations/toolkits/google_calendar/delete_event_example_call_tool.js b/public/examples/integrations/mcp-servers/google_calendar/delete_event_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/google_calendar/delete_event_example_call_tool.js rename to public/examples/integrations/mcp-servers/google_calendar/delete_event_example_call_tool.js diff --git a/public/examples/integrations/toolkits/google_calendar/delete_event_example_call_tool.py b/public/examples/integrations/mcp-servers/google_calendar/delete_event_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/google_calendar/delete_event_example_call_tool.py rename to public/examples/integrations/mcp-servers/google_calendar/delete_event_example_call_tool.py diff --git a/public/examples/integrations/toolkits/google_calendar/find_time_slots_when_everyone_is_free_example_call_tool.js b/public/examples/integrations/mcp-servers/google_calendar/find_time_slots_when_everyone_is_free_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/google_calendar/find_time_slots_when_everyone_is_free_example_call_tool.js rename to public/examples/integrations/mcp-servers/google_calendar/find_time_slots_when_everyone_is_free_example_call_tool.js diff --git a/public/examples/integrations/toolkits/google_calendar/find_time_slots_when_everyone_is_free_example_call_tool.py b/public/examples/integrations/mcp-servers/google_calendar/find_time_slots_when_everyone_is_free_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/google_calendar/find_time_slots_when_everyone_is_free_example_call_tool.py rename to public/examples/integrations/mcp-servers/google_calendar/find_time_slots_when_everyone_is_free_example_call_tool.py diff --git a/public/examples/integrations/toolkits/google_calendar/list_calendars_example_call_tool.js b/public/examples/integrations/mcp-servers/google_calendar/list_calendars_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/google_calendar/list_calendars_example_call_tool.js rename to public/examples/integrations/mcp-servers/google_calendar/list_calendars_example_call_tool.js diff --git a/public/examples/integrations/toolkits/google_calendar/list_calendars_example_call_tool.py b/public/examples/integrations/mcp-servers/google_calendar/list_calendars_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/google_calendar/list_calendars_example_call_tool.py rename to public/examples/integrations/mcp-servers/google_calendar/list_calendars_example_call_tool.py diff --git a/public/examples/integrations/toolkits/google_calendar/list_events_example_call_tool.js b/public/examples/integrations/mcp-servers/google_calendar/list_events_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/google_calendar/list_events_example_call_tool.js rename to public/examples/integrations/mcp-servers/google_calendar/list_events_example_call_tool.js diff --git a/public/examples/integrations/toolkits/google_calendar/list_events_example_call_tool.py b/public/examples/integrations/mcp-servers/google_calendar/list_events_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/google_calendar/list_events_example_call_tool.py rename to public/examples/integrations/mcp-servers/google_calendar/list_events_example_call_tool.py diff --git a/public/examples/integrations/toolkits/google_calendar/update_event_example_call_tool.js b/public/examples/integrations/mcp-servers/google_calendar/update_event_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/google_calendar/update_event_example_call_tool.js rename to public/examples/integrations/mcp-servers/google_calendar/update_event_example_call_tool.js diff --git a/public/examples/integrations/toolkits/google_calendar/update_event_example_call_tool.py b/public/examples/integrations/mcp-servers/google_calendar/update_event_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/google_calendar/update_event_example_call_tool.py rename to public/examples/integrations/mcp-servers/google_calendar/update_event_example_call_tool.py diff --git a/public/examples/integrations/toolkits/google_calendar/who_am_i_example_call_tool.js b/public/examples/integrations/mcp-servers/google_calendar/who_am_i_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/google_calendar/who_am_i_example_call_tool.js rename to public/examples/integrations/mcp-servers/google_calendar/who_am_i_example_call_tool.js diff --git a/public/examples/integrations/toolkits/google_calendar/who_am_i_example_call_tool.py b/public/examples/integrations/mcp-servers/google_calendar/who_am_i_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/google_calendar/who_am_i_example_call_tool.py rename to public/examples/integrations/mcp-servers/google_calendar/who_am_i_example_call_tool.py diff --git a/public/examples/integrations/toolkits/google_contacts/who_am_i_example_call_tool.js b/public/examples/integrations/mcp-servers/google_contacts/who_am_i_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/google_contacts/who_am_i_example_call_tool.js rename to public/examples/integrations/mcp-servers/google_contacts/who_am_i_example_call_tool.js diff --git a/public/examples/integrations/toolkits/google_contacts/who_am_i_example_call_tool.py b/public/examples/integrations/mcp-servers/google_contacts/who_am_i_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/google_contacts/who_am_i_example_call_tool.py rename to public/examples/integrations/mcp-servers/google_contacts/who_am_i_example_call_tool.py diff --git a/public/examples/integrations/toolkits/google_docs/generate_google_file_picker_url_example_call_tool.js b/public/examples/integrations/mcp-servers/google_docs/generate_google_file_picker_url_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/google_docs/generate_google_file_picker_url_example_call_tool.js rename to public/examples/integrations/mcp-servers/google_docs/generate_google_file_picker_url_example_call_tool.js diff --git a/public/examples/integrations/toolkits/google_docs/generate_google_file_picker_url_example_call_tool.py b/public/examples/integrations/mcp-servers/google_docs/generate_google_file_picker_url_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/google_docs/generate_google_file_picker_url_example_call_tool.py rename to public/examples/integrations/mcp-servers/google_docs/generate_google_file_picker_url_example_call_tool.py diff --git a/public/examples/integrations/toolkits/google_docs/who_am_i_example_call_tool.js b/public/examples/integrations/mcp-servers/google_docs/who_am_i_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/google_docs/who_am_i_example_call_tool.js rename to public/examples/integrations/mcp-servers/google_docs/who_am_i_example_call_tool.js diff --git a/public/examples/integrations/toolkits/google_docs/who_am_i_example_call_tool.py b/public/examples/integrations/mcp-servers/google_docs/who_am_i_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/google_docs/who_am_i_example_call_tool.py rename to public/examples/integrations/mcp-servers/google_docs/who_am_i_example_call_tool.py diff --git a/public/examples/integrations/toolkits/google_drive/generate_google_file_picker_url_example_call_tool.js b/public/examples/integrations/mcp-servers/google_drive/generate_google_file_picker_url_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/google_drive/generate_google_file_picker_url_example_call_tool.js rename to public/examples/integrations/mcp-servers/google_drive/generate_google_file_picker_url_example_call_tool.js diff --git a/public/examples/integrations/toolkits/google_drive/generate_google_file_picker_url_example_call_tool.py b/public/examples/integrations/mcp-servers/google_drive/generate_google_file_picker_url_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/google_drive/generate_google_file_picker_url_example_call_tool.py rename to public/examples/integrations/mcp-servers/google_drive/generate_google_file_picker_url_example_call_tool.py diff --git a/public/examples/integrations/toolkits/google_drive/get_file_tree_structure_example_call_tool.js b/public/examples/integrations/mcp-servers/google_drive/get_file_tree_structure_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/google_drive/get_file_tree_structure_example_call_tool.js rename to public/examples/integrations/mcp-servers/google_drive/get_file_tree_structure_example_call_tool.js diff --git a/public/examples/integrations/toolkits/google_drive/get_file_tree_structure_example_call_tool.py b/public/examples/integrations/mcp-servers/google_drive/get_file_tree_structure_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/google_drive/get_file_tree_structure_example_call_tool.py rename to public/examples/integrations/mcp-servers/google_drive/get_file_tree_structure_example_call_tool.py diff --git a/public/examples/integrations/toolkits/google_drive/search_files_example_call_tool.js b/public/examples/integrations/mcp-servers/google_drive/search_files_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/google_drive/search_files_example_call_tool.js rename to public/examples/integrations/mcp-servers/google_drive/search_files_example_call_tool.js diff --git a/public/examples/integrations/toolkits/google_drive/search_files_example_call_tool.py b/public/examples/integrations/mcp-servers/google_drive/search_files_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/google_drive/search_files_example_call_tool.py rename to public/examples/integrations/mcp-servers/google_drive/search_files_example_call_tool.py diff --git a/public/examples/integrations/toolkits/google_drive/who_am_i_example_call_tool.js b/public/examples/integrations/mcp-servers/google_drive/who_am_i_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/google_drive/who_am_i_example_call_tool.js rename to public/examples/integrations/mcp-servers/google_drive/who_am_i_example_call_tool.js diff --git a/public/examples/integrations/toolkits/google_drive/who_am_i_example_call_tool.py b/public/examples/integrations/mcp-servers/google_drive/who_am_i_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/google_drive/who_am_i_example_call_tool.py rename to public/examples/integrations/mcp-servers/google_drive/who_am_i_example_call_tool.py diff --git a/public/examples/integrations/toolkits/google_sheets/add_note_to_cell_example_call_tool.js b/public/examples/integrations/mcp-servers/google_sheets/add_note_to_cell_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/google_sheets/add_note_to_cell_example_call_tool.js rename to public/examples/integrations/mcp-servers/google_sheets/add_note_to_cell_example_call_tool.js diff --git a/public/examples/integrations/toolkits/google_sheets/add_note_to_cell_example_call_tool.py b/public/examples/integrations/mcp-servers/google_sheets/add_note_to_cell_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/google_sheets/add_note_to_cell_example_call_tool.py rename to public/examples/integrations/mcp-servers/google_sheets/add_note_to_cell_example_call_tool.py diff --git a/public/examples/integrations/toolkits/google_sheets/create_spreadsheet_example_call_tool.js b/public/examples/integrations/mcp-servers/google_sheets/create_spreadsheet_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/google_sheets/create_spreadsheet_example_call_tool.js rename to public/examples/integrations/mcp-servers/google_sheets/create_spreadsheet_example_call_tool.js diff --git a/public/examples/integrations/toolkits/google_sheets/create_spreadsheet_example_call_tool.py b/public/examples/integrations/mcp-servers/google_sheets/create_spreadsheet_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/google_sheets/create_spreadsheet_example_call_tool.py rename to public/examples/integrations/mcp-servers/google_sheets/create_spreadsheet_example_call_tool.py diff --git a/public/examples/integrations/toolkits/google_sheets/generate_google_file_picker_url_example_call_tool.js b/public/examples/integrations/mcp-servers/google_sheets/generate_google_file_picker_url_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/google_sheets/generate_google_file_picker_url_example_call_tool.js rename to public/examples/integrations/mcp-servers/google_sheets/generate_google_file_picker_url_example_call_tool.js diff --git a/public/examples/integrations/toolkits/google_sheets/generate_google_file_picker_url_example_call_tool.py b/public/examples/integrations/mcp-servers/google_sheets/generate_google_file_picker_url_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/google_sheets/generate_google_file_picker_url_example_call_tool.py rename to public/examples/integrations/mcp-servers/google_sheets/generate_google_file_picker_url_example_call_tool.py diff --git a/public/examples/integrations/toolkits/google_sheets/get_spreadsheet_example_call_tool.js b/public/examples/integrations/mcp-servers/google_sheets/get_spreadsheet_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/google_sheets/get_spreadsheet_example_call_tool.js rename to public/examples/integrations/mcp-servers/google_sheets/get_spreadsheet_example_call_tool.js diff --git a/public/examples/integrations/toolkits/google_sheets/get_spreadsheet_example_call_tool.py b/public/examples/integrations/mcp-servers/google_sheets/get_spreadsheet_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/google_sheets/get_spreadsheet_example_call_tool.py rename to public/examples/integrations/mcp-servers/google_sheets/get_spreadsheet_example_call_tool.py diff --git a/public/examples/integrations/toolkits/google_sheets/get_spreadsheet_metadata_example_call_tool.js b/public/examples/integrations/mcp-servers/google_sheets/get_spreadsheet_metadata_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/google_sheets/get_spreadsheet_metadata_example_call_tool.js rename to public/examples/integrations/mcp-servers/google_sheets/get_spreadsheet_metadata_example_call_tool.js diff --git a/public/examples/integrations/toolkits/google_sheets/get_spreadsheet_metadata_example_call_tool.py b/public/examples/integrations/mcp-servers/google_sheets/get_spreadsheet_metadata_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/google_sheets/get_spreadsheet_metadata_example_call_tool.py rename to public/examples/integrations/mcp-servers/google_sheets/get_spreadsheet_metadata_example_call_tool.py diff --git a/public/examples/integrations/toolkits/google_sheets/search_spreadsheets_example_call_tool.js b/public/examples/integrations/mcp-servers/google_sheets/search_spreadsheets_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/google_sheets/search_spreadsheets_example_call_tool.js rename to public/examples/integrations/mcp-servers/google_sheets/search_spreadsheets_example_call_tool.js diff --git a/public/examples/integrations/toolkits/google_sheets/search_spreadsheets_example_call_tool.py b/public/examples/integrations/mcp-servers/google_sheets/search_spreadsheets_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/google_sheets/search_spreadsheets_example_call_tool.py rename to public/examples/integrations/mcp-servers/google_sheets/search_spreadsheets_example_call_tool.py diff --git a/public/examples/integrations/toolkits/google_sheets/update_cells_example_call_tool.js b/public/examples/integrations/mcp-servers/google_sheets/update_cells_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/google_sheets/update_cells_example_call_tool.js rename to public/examples/integrations/mcp-servers/google_sheets/update_cells_example_call_tool.js diff --git a/public/examples/integrations/toolkits/google_sheets/update_cells_example_call_tool.py b/public/examples/integrations/mcp-servers/google_sheets/update_cells_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/google_sheets/update_cells_example_call_tool.py rename to public/examples/integrations/mcp-servers/google_sheets/update_cells_example_call_tool.py diff --git a/public/examples/integrations/toolkits/google_sheets/who_am_i_example_call_tool.js b/public/examples/integrations/mcp-servers/google_sheets/who_am_i_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/google_sheets/who_am_i_example_call_tool.js rename to public/examples/integrations/mcp-servers/google_sheets/who_am_i_example_call_tool.js diff --git a/public/examples/integrations/toolkits/google_sheets/who_am_i_example_call_tool.py b/public/examples/integrations/mcp-servers/google_sheets/who_am_i_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/google_sheets/who_am_i_example_call_tool.py rename to public/examples/integrations/mcp-servers/google_sheets/who_am_i_example_call_tool.py diff --git a/public/examples/integrations/toolkits/google_sheets/write_to_cell_example_call_tool.js b/public/examples/integrations/mcp-servers/google_sheets/write_to_cell_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/google_sheets/write_to_cell_example_call_tool.js rename to public/examples/integrations/mcp-servers/google_sheets/write_to_cell_example_call_tool.js diff --git a/public/examples/integrations/toolkits/google_sheets/write_to_cell_example_call_tool.py b/public/examples/integrations/mcp-servers/google_sheets/write_to_cell_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/google_sheets/write_to_cell_example_call_tool.py rename to public/examples/integrations/mcp-servers/google_sheets/write_to_cell_example_call_tool.py diff --git a/public/examples/integrations/toolkits/hubspot/associate_activity_to_deal_example_call_tool.js b/public/examples/integrations/mcp-servers/hubspot/associate_activity_to_deal_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/hubspot/associate_activity_to_deal_example_call_tool.js rename to public/examples/integrations/mcp-servers/hubspot/associate_activity_to_deal_example_call_tool.js diff --git a/public/examples/integrations/toolkits/hubspot/associate_activity_to_deal_example_call_tool.py b/public/examples/integrations/mcp-servers/hubspot/associate_activity_to_deal_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/hubspot/associate_activity_to_deal_example_call_tool.py rename to public/examples/integrations/mcp-servers/hubspot/associate_activity_to_deal_example_call_tool.py diff --git a/public/examples/integrations/toolkits/hubspot/associate_contact_to_deal_example_call_tool.js b/public/examples/integrations/mcp-servers/hubspot/associate_contact_to_deal_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/hubspot/associate_contact_to_deal_example_call_tool.js rename to public/examples/integrations/mcp-servers/hubspot/associate_contact_to_deal_example_call_tool.js diff --git a/public/examples/integrations/toolkits/hubspot/associate_contact_to_deal_example_call_tool.py b/public/examples/integrations/mcp-servers/hubspot/associate_contact_to_deal_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/hubspot/associate_contact_to_deal_example_call_tool.py rename to public/examples/integrations/mcp-servers/hubspot/associate_contact_to_deal_example_call_tool.py diff --git a/public/examples/integrations/toolkits/hubspot/create_call_activity_example_call_tool.js b/public/examples/integrations/mcp-servers/hubspot/create_call_activity_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/hubspot/create_call_activity_example_call_tool.js rename to public/examples/integrations/mcp-servers/hubspot/create_call_activity_example_call_tool.js diff --git a/public/examples/integrations/toolkits/hubspot/create_call_activity_example_call_tool.py b/public/examples/integrations/mcp-servers/hubspot/create_call_activity_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/hubspot/create_call_activity_example_call_tool.py rename to public/examples/integrations/mcp-servers/hubspot/create_call_activity_example_call_tool.py diff --git a/public/examples/integrations/toolkits/hubspot/create_communication_activity_example_call_tool.js b/public/examples/integrations/mcp-servers/hubspot/create_communication_activity_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/hubspot/create_communication_activity_example_call_tool.js rename to public/examples/integrations/mcp-servers/hubspot/create_communication_activity_example_call_tool.js diff --git a/public/examples/integrations/toolkits/hubspot/create_communication_activity_example_call_tool.py b/public/examples/integrations/mcp-servers/hubspot/create_communication_activity_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/hubspot/create_communication_activity_example_call_tool.py rename to public/examples/integrations/mcp-servers/hubspot/create_communication_activity_example_call_tool.py diff --git a/public/examples/integrations/toolkits/hubspot/create_company_example_call_tool.js b/public/examples/integrations/mcp-servers/hubspot/create_company_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/hubspot/create_company_example_call_tool.js rename to public/examples/integrations/mcp-servers/hubspot/create_company_example_call_tool.js diff --git a/public/examples/integrations/toolkits/hubspot/create_company_example_call_tool.py b/public/examples/integrations/mcp-servers/hubspot/create_company_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/hubspot/create_company_example_call_tool.py rename to public/examples/integrations/mcp-servers/hubspot/create_company_example_call_tool.py diff --git a/public/examples/integrations/toolkits/hubspot/create_contact_example_call_tool.js b/public/examples/integrations/mcp-servers/hubspot/create_contact_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/hubspot/create_contact_example_call_tool.js rename to public/examples/integrations/mcp-servers/hubspot/create_contact_example_call_tool.js diff --git a/public/examples/integrations/toolkits/hubspot/create_contact_example_call_tool.py b/public/examples/integrations/mcp-servers/hubspot/create_contact_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/hubspot/create_contact_example_call_tool.py rename to public/examples/integrations/mcp-servers/hubspot/create_contact_example_call_tool.py diff --git a/public/examples/integrations/toolkits/hubspot/create_deal_example_call_tool.js b/public/examples/integrations/mcp-servers/hubspot/create_deal_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/hubspot/create_deal_example_call_tool.js rename to public/examples/integrations/mcp-servers/hubspot/create_deal_example_call_tool.js diff --git a/public/examples/integrations/toolkits/hubspot/create_deal_example_call_tool.py b/public/examples/integrations/mcp-servers/hubspot/create_deal_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/hubspot/create_deal_example_call_tool.py rename to public/examples/integrations/mcp-servers/hubspot/create_deal_example_call_tool.py diff --git a/public/examples/integrations/toolkits/hubspot/create_email_activity_example_call_tool.js b/public/examples/integrations/mcp-servers/hubspot/create_email_activity_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/hubspot/create_email_activity_example_call_tool.js rename to public/examples/integrations/mcp-servers/hubspot/create_email_activity_example_call_tool.js diff --git a/public/examples/integrations/toolkits/hubspot/create_email_activity_example_call_tool.py b/public/examples/integrations/mcp-servers/hubspot/create_email_activity_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/hubspot/create_email_activity_example_call_tool.py rename to public/examples/integrations/mcp-servers/hubspot/create_email_activity_example_call_tool.py diff --git a/public/examples/integrations/toolkits/hubspot/create_meeting_activity_example_call_tool.js b/public/examples/integrations/mcp-servers/hubspot/create_meeting_activity_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/hubspot/create_meeting_activity_example_call_tool.js rename to public/examples/integrations/mcp-servers/hubspot/create_meeting_activity_example_call_tool.js diff --git a/public/examples/integrations/toolkits/hubspot/create_meeting_activity_example_call_tool.py b/public/examples/integrations/mcp-servers/hubspot/create_meeting_activity_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/hubspot/create_meeting_activity_example_call_tool.py rename to public/examples/integrations/mcp-servers/hubspot/create_meeting_activity_example_call_tool.py diff --git a/public/examples/integrations/toolkits/hubspot/create_note_activity_example_call_tool.js b/public/examples/integrations/mcp-servers/hubspot/create_note_activity_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/hubspot/create_note_activity_example_call_tool.js rename to public/examples/integrations/mcp-servers/hubspot/create_note_activity_example_call_tool.js diff --git a/public/examples/integrations/toolkits/hubspot/create_note_activity_example_call_tool.py b/public/examples/integrations/mcp-servers/hubspot/create_note_activity_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/hubspot/create_note_activity_example_call_tool.py rename to public/examples/integrations/mcp-servers/hubspot/create_note_activity_example_call_tool.py diff --git a/public/examples/integrations/toolkits/hubspot/get_all_users_example_call_tool.js b/public/examples/integrations/mcp-servers/hubspot/get_all_users_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/hubspot/get_all_users_example_call_tool.js rename to public/examples/integrations/mcp-servers/hubspot/get_all_users_example_call_tool.js diff --git a/public/examples/integrations/toolkits/hubspot/get_all_users_example_call_tool.py b/public/examples/integrations/mcp-servers/hubspot/get_all_users_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/hubspot/get_all_users_example_call_tool.py rename to public/examples/integrations/mcp-servers/hubspot/get_all_users_example_call_tool.py diff --git a/public/examples/integrations/toolkits/hubspot/get_available_industry_types_example_call_tool.js b/public/examples/integrations/mcp-servers/hubspot/get_available_industry_types_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/hubspot/get_available_industry_types_example_call_tool.js rename to public/examples/integrations/mcp-servers/hubspot/get_available_industry_types_example_call_tool.js diff --git a/public/examples/integrations/toolkits/hubspot/get_available_industry_types_example_call_tool.py b/public/examples/integrations/mcp-servers/hubspot/get_available_industry_types_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/hubspot/get_available_industry_types_example_call_tool.py rename to public/examples/integrations/mcp-servers/hubspot/get_available_industry_types_example_call_tool.py diff --git a/public/examples/integrations/toolkits/hubspot/get_call_data_by_keywords_example_call_tool.js b/public/examples/integrations/mcp-servers/hubspot/get_call_data_by_keywords_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/hubspot/get_call_data_by_keywords_example_call_tool.js rename to public/examples/integrations/mcp-servers/hubspot/get_call_data_by_keywords_example_call_tool.js diff --git a/public/examples/integrations/toolkits/hubspot/get_call_data_by_keywords_example_call_tool.py b/public/examples/integrations/mcp-servers/hubspot/get_call_data_by_keywords_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/hubspot/get_call_data_by_keywords_example_call_tool.py rename to public/examples/integrations/mcp-servers/hubspot/get_call_data_by_keywords_example_call_tool.py diff --git a/public/examples/integrations/toolkits/hubspot/get_communication_data_by_keywords_example_call_tool.js b/public/examples/integrations/mcp-servers/hubspot/get_communication_data_by_keywords_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/hubspot/get_communication_data_by_keywords_example_call_tool.js rename to public/examples/integrations/mcp-servers/hubspot/get_communication_data_by_keywords_example_call_tool.js diff --git a/public/examples/integrations/toolkits/hubspot/get_communication_data_by_keywords_example_call_tool.py b/public/examples/integrations/mcp-servers/hubspot/get_communication_data_by_keywords_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/hubspot/get_communication_data_by_keywords_example_call_tool.py rename to public/examples/integrations/mcp-servers/hubspot/get_communication_data_by_keywords_example_call_tool.py diff --git a/public/examples/integrations/toolkits/hubspot/get_company_data_by_keywords_example_call_tool.js b/public/examples/integrations/mcp-servers/hubspot/get_company_data_by_keywords_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/hubspot/get_company_data_by_keywords_example_call_tool.js rename to public/examples/integrations/mcp-servers/hubspot/get_company_data_by_keywords_example_call_tool.js diff --git a/public/examples/integrations/toolkits/hubspot/get_company_data_by_keywords_example_call_tool.py b/public/examples/integrations/mcp-servers/hubspot/get_company_data_by_keywords_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/hubspot/get_company_data_by_keywords_example_call_tool.py rename to public/examples/integrations/mcp-servers/hubspot/get_company_data_by_keywords_example_call_tool.py diff --git a/public/examples/integrations/toolkits/hubspot/get_contact_data_by_keywords_example_call_tool.js b/public/examples/integrations/mcp-servers/hubspot/get_contact_data_by_keywords_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/hubspot/get_contact_data_by_keywords_example_call_tool.js rename to public/examples/integrations/mcp-servers/hubspot/get_contact_data_by_keywords_example_call_tool.js diff --git a/public/examples/integrations/toolkits/hubspot/get_contact_data_by_keywords_example_call_tool.py b/public/examples/integrations/mcp-servers/hubspot/get_contact_data_by_keywords_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/hubspot/get_contact_data_by_keywords_example_call_tool.py rename to public/examples/integrations/mcp-servers/hubspot/get_contact_data_by_keywords_example_call_tool.py diff --git a/public/examples/integrations/toolkits/hubspot/get_deal_by_id_example_call_tool.js b/public/examples/integrations/mcp-servers/hubspot/get_deal_by_id_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/hubspot/get_deal_by_id_example_call_tool.js rename to public/examples/integrations/mcp-servers/hubspot/get_deal_by_id_example_call_tool.js diff --git a/public/examples/integrations/toolkits/hubspot/get_deal_by_id_example_call_tool.py b/public/examples/integrations/mcp-servers/hubspot/get_deal_by_id_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/hubspot/get_deal_by_id_example_call_tool.py rename to public/examples/integrations/mcp-servers/hubspot/get_deal_by_id_example_call_tool.py diff --git a/public/examples/integrations/toolkits/hubspot/get_deal_data_by_keywords_example_call_tool.js b/public/examples/integrations/mcp-servers/hubspot/get_deal_data_by_keywords_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/hubspot/get_deal_data_by_keywords_example_call_tool.js rename to public/examples/integrations/mcp-servers/hubspot/get_deal_data_by_keywords_example_call_tool.js diff --git a/public/examples/integrations/toolkits/hubspot/get_deal_data_by_keywords_example_call_tool.py b/public/examples/integrations/mcp-servers/hubspot/get_deal_data_by_keywords_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/hubspot/get_deal_data_by_keywords_example_call_tool.py rename to public/examples/integrations/mcp-servers/hubspot/get_deal_data_by_keywords_example_call_tool.py diff --git a/public/examples/integrations/toolkits/hubspot/get_deal_pipeline_stages_example_call_tool.js b/public/examples/integrations/mcp-servers/hubspot/get_deal_pipeline_stages_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/hubspot/get_deal_pipeline_stages_example_call_tool.js rename to public/examples/integrations/mcp-servers/hubspot/get_deal_pipeline_stages_example_call_tool.js diff --git a/public/examples/integrations/toolkits/hubspot/get_deal_pipeline_stages_example_call_tool.py b/public/examples/integrations/mcp-servers/hubspot/get_deal_pipeline_stages_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/hubspot/get_deal_pipeline_stages_example_call_tool.py rename to public/examples/integrations/mcp-servers/hubspot/get_deal_pipeline_stages_example_call_tool.py diff --git a/public/examples/integrations/toolkits/hubspot/get_deal_pipelines_example_call_tool.js b/public/examples/integrations/mcp-servers/hubspot/get_deal_pipelines_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/hubspot/get_deal_pipelines_example_call_tool.js rename to public/examples/integrations/mcp-servers/hubspot/get_deal_pipelines_example_call_tool.js diff --git a/public/examples/integrations/toolkits/hubspot/get_deal_pipelines_example_call_tool.py b/public/examples/integrations/mcp-servers/hubspot/get_deal_pipelines_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/hubspot/get_deal_pipelines_example_call_tool.py rename to public/examples/integrations/mcp-servers/hubspot/get_deal_pipelines_example_call_tool.py diff --git a/public/examples/integrations/toolkits/hubspot/get_email_data_by_keywords_example_call_tool.js b/public/examples/integrations/mcp-servers/hubspot/get_email_data_by_keywords_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/hubspot/get_email_data_by_keywords_example_call_tool.js rename to public/examples/integrations/mcp-servers/hubspot/get_email_data_by_keywords_example_call_tool.js diff --git a/public/examples/integrations/toolkits/hubspot/get_email_data_by_keywords_example_call_tool.py b/public/examples/integrations/mcp-servers/hubspot/get_email_data_by_keywords_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/hubspot/get_email_data_by_keywords_example_call_tool.py rename to public/examples/integrations/mcp-servers/hubspot/get_email_data_by_keywords_example_call_tool.py diff --git a/public/examples/integrations/toolkits/hubspot/get_meeting_data_by_keywords_example_call_tool.js b/public/examples/integrations/mcp-servers/hubspot/get_meeting_data_by_keywords_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/hubspot/get_meeting_data_by_keywords_example_call_tool.js rename to public/examples/integrations/mcp-servers/hubspot/get_meeting_data_by_keywords_example_call_tool.js diff --git a/public/examples/integrations/toolkits/hubspot/get_meeting_data_by_keywords_example_call_tool.py b/public/examples/integrations/mcp-servers/hubspot/get_meeting_data_by_keywords_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/hubspot/get_meeting_data_by_keywords_example_call_tool.py rename to public/examples/integrations/mcp-servers/hubspot/get_meeting_data_by_keywords_example_call_tool.py diff --git a/public/examples/integrations/toolkits/hubspot/get_note_data_by_keywords_example_call_tool.js b/public/examples/integrations/mcp-servers/hubspot/get_note_data_by_keywords_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/hubspot/get_note_data_by_keywords_example_call_tool.js rename to public/examples/integrations/mcp-servers/hubspot/get_note_data_by_keywords_example_call_tool.js diff --git a/public/examples/integrations/toolkits/hubspot/get_note_data_by_keywords_example_call_tool.py b/public/examples/integrations/mcp-servers/hubspot/get_note_data_by_keywords_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/hubspot/get_note_data_by_keywords_example_call_tool.py rename to public/examples/integrations/mcp-servers/hubspot/get_note_data_by_keywords_example_call_tool.py diff --git a/public/examples/integrations/toolkits/hubspot/get_task_data_by_keywords_example_call_tool.js b/public/examples/integrations/mcp-servers/hubspot/get_task_data_by_keywords_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/hubspot/get_task_data_by_keywords_example_call_tool.js rename to public/examples/integrations/mcp-servers/hubspot/get_task_data_by_keywords_example_call_tool.js diff --git a/public/examples/integrations/toolkits/hubspot/get_task_data_by_keywords_example_call_tool.py b/public/examples/integrations/mcp-servers/hubspot/get_task_data_by_keywords_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/hubspot/get_task_data_by_keywords_example_call_tool.py rename to public/examples/integrations/mcp-servers/hubspot/get_task_data_by_keywords_example_call_tool.py diff --git a/public/examples/integrations/toolkits/hubspot/get_user_by_id_example_call_tool.js b/public/examples/integrations/mcp-servers/hubspot/get_user_by_id_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/hubspot/get_user_by_id_example_call_tool.js rename to public/examples/integrations/mcp-servers/hubspot/get_user_by_id_example_call_tool.js diff --git a/public/examples/integrations/toolkits/hubspot/get_user_by_id_example_call_tool.py b/public/examples/integrations/mcp-servers/hubspot/get_user_by_id_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/hubspot/get_user_by_id_example_call_tool.py rename to public/examples/integrations/mcp-servers/hubspot/get_user_by_id_example_call_tool.py diff --git a/public/examples/integrations/toolkits/hubspot/list_companies_example_call_tool.js b/public/examples/integrations/mcp-servers/hubspot/list_companies_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/hubspot/list_companies_example_call_tool.js rename to public/examples/integrations/mcp-servers/hubspot/list_companies_example_call_tool.js diff --git a/public/examples/integrations/toolkits/hubspot/list_companies_example_call_tool.py b/public/examples/integrations/mcp-servers/hubspot/list_companies_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/hubspot/list_companies_example_call_tool.py rename to public/examples/integrations/mcp-servers/hubspot/list_companies_example_call_tool.py diff --git a/public/examples/integrations/toolkits/hubspot/list_contacts_example_call_tool.js b/public/examples/integrations/mcp-servers/hubspot/list_contacts_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/hubspot/list_contacts_example_call_tool.js rename to public/examples/integrations/mcp-servers/hubspot/list_contacts_example_call_tool.js diff --git a/public/examples/integrations/toolkits/hubspot/list_contacts_example_call_tool.py b/public/examples/integrations/mcp-servers/hubspot/list_contacts_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/hubspot/list_contacts_example_call_tool.py rename to public/examples/integrations/mcp-servers/hubspot/list_contacts_example_call_tool.py diff --git a/public/examples/integrations/toolkits/hubspot/list_deals_example_call_tool.js b/public/examples/integrations/mcp-servers/hubspot/list_deals_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/hubspot/list_deals_example_call_tool.js rename to public/examples/integrations/mcp-servers/hubspot/list_deals_example_call_tool.js diff --git a/public/examples/integrations/toolkits/hubspot/list_deals_example_call_tool.py b/public/examples/integrations/mcp-servers/hubspot/list_deals_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/hubspot/list_deals_example_call_tool.py rename to public/examples/integrations/mcp-servers/hubspot/list_deals_example_call_tool.py diff --git a/public/examples/integrations/toolkits/hubspot/toolkit_enviroment_guidance_example_call_tool.js b/public/examples/integrations/mcp-servers/hubspot/toolkit_enviroment_guidance_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/hubspot/toolkit_enviroment_guidance_example_call_tool.js rename to public/examples/integrations/mcp-servers/hubspot/toolkit_enviroment_guidance_example_call_tool.js diff --git a/public/examples/integrations/toolkits/hubspot/toolkit_enviroment_guidance_example_call_tool.py b/public/examples/integrations/mcp-servers/hubspot/toolkit_enviroment_guidance_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/hubspot/toolkit_enviroment_guidance_example_call_tool.py rename to public/examples/integrations/mcp-servers/hubspot/toolkit_enviroment_guidance_example_call_tool.py diff --git a/public/examples/integrations/toolkits/hubspot/update_deal_close_date_example_call_tool.js b/public/examples/integrations/mcp-servers/hubspot/update_deal_close_date_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/hubspot/update_deal_close_date_example_call_tool.js rename to public/examples/integrations/mcp-servers/hubspot/update_deal_close_date_example_call_tool.js diff --git a/public/examples/integrations/toolkits/hubspot/update_deal_close_date_example_call_tool.py b/public/examples/integrations/mcp-servers/hubspot/update_deal_close_date_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/hubspot/update_deal_close_date_example_call_tool.py rename to public/examples/integrations/mcp-servers/hubspot/update_deal_close_date_example_call_tool.py diff --git a/public/examples/integrations/toolkits/hubspot/update_deal_stage_example_call_tool.js b/public/examples/integrations/mcp-servers/hubspot/update_deal_stage_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/hubspot/update_deal_stage_example_call_tool.js rename to public/examples/integrations/mcp-servers/hubspot/update_deal_stage_example_call_tool.js diff --git a/public/examples/integrations/toolkits/hubspot/update_deal_stage_example_call_tool.py b/public/examples/integrations/mcp-servers/hubspot/update_deal_stage_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/hubspot/update_deal_stage_example_call_tool.py rename to public/examples/integrations/mcp-servers/hubspot/update_deal_stage_example_call_tool.py diff --git a/public/examples/integrations/toolkits/hubspot/who_am_i_example_call_tool.js b/public/examples/integrations/mcp-servers/hubspot/who_am_i_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/hubspot/who_am_i_example_call_tool.js rename to public/examples/integrations/mcp-servers/hubspot/who_am_i_example_call_tool.js diff --git a/public/examples/integrations/toolkits/hubspot/who_am_i_example_call_tool.py b/public/examples/integrations/mcp-servers/hubspot/who_am_i_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/hubspot/who_am_i_example_call_tool.py rename to public/examples/integrations/mcp-servers/hubspot/who_am_i_example_call_tool.py diff --git a/public/examples/integrations/toolkits/imgflip/create_meme_example_call_tool.js b/public/examples/integrations/mcp-servers/imgflip/create_meme_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/imgflip/create_meme_example_call_tool.js rename to public/examples/integrations/mcp-servers/imgflip/create_meme_example_call_tool.js diff --git a/public/examples/integrations/toolkits/imgflip/create_meme_example_call_tool.py b/public/examples/integrations/mcp-servers/imgflip/create_meme_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/imgflip/create_meme_example_call_tool.py rename to public/examples/integrations/mcp-servers/imgflip/create_meme_example_call_tool.py diff --git a/public/examples/integrations/toolkits/imgflip/get_popular_memes_example_call_tool.js b/public/examples/integrations/mcp-servers/imgflip/get_popular_memes_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/imgflip/get_popular_memes_example_call_tool.js rename to public/examples/integrations/mcp-servers/imgflip/get_popular_memes_example_call_tool.js diff --git a/public/examples/integrations/toolkits/imgflip/get_popular_memes_example_call_tool.py b/public/examples/integrations/mcp-servers/imgflip/get_popular_memes_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/imgflip/get_popular_memes_example_call_tool.py rename to public/examples/integrations/mcp-servers/imgflip/get_popular_memes_example_call_tool.py diff --git a/public/examples/integrations/toolkits/imgflip/search_memes_example_call_tool.js b/public/examples/integrations/mcp-servers/imgflip/search_memes_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/imgflip/search_memes_example_call_tool.js rename to public/examples/integrations/mcp-servers/imgflip/search_memes_example_call_tool.js diff --git a/public/examples/integrations/toolkits/imgflip/search_memes_example_call_tool.py b/public/examples/integrations/mcp-servers/imgflip/search_memes_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/imgflip/search_memes_example_call_tool.py rename to public/examples/integrations/mcp-servers/imgflip/search_memes_example_call_tool.py diff --git a/public/examples/integrations/toolkits/jira/add_comment_to_issue_example_call_tool.js b/public/examples/integrations/mcp-servers/jira/add_comment_to_issue_example_call_tool.js similarity index 92% rename from public/examples/integrations/toolkits/jira/add_comment_to_issue_example_call_tool.js rename to public/examples/integrations/mcp-servers/jira/add_comment_to_issue_example_call_tool.js index 99cbc2e34..46a4a1386 100644 --- a/public/examples/integrations/toolkits/jira/add_comment_to_issue_example_call_tool.js +++ b/public/examples/integrations/mcp-servers/jira/add_comment_to_issue_example_call_tool.js @@ -24,7 +24,7 @@ const toolInput = { "jane.smith@example.com" ], // Important: about the atlassian_cloud_id argument, please refer to the documentation at - // https://docs.arcade.dev/toolkits/productivity/jira#handling-multiple-atlassian-clouds + // https://docs.arcade.dev/mcp-servers/productivity/jira#handling-multiple-atlassian-clouds "atlassian_cloud_id": "13516a07-1725-4dc0-9ae7-13b5749dd747" }; diff --git a/public/examples/integrations/toolkits/jira/add_comment_to_issue_example_call_tool.py b/public/examples/integrations/mcp-servers/jira/add_comment_to_issue_example_call_tool.py similarity index 91% rename from public/examples/integrations/toolkits/jira/add_comment_to_issue_example_call_tool.py rename to public/examples/integrations/mcp-servers/jira/add_comment_to_issue_example_call_tool.py index 22fa2777b..c641067bc 100644 --- a/public/examples/integrations/toolkits/jira/add_comment_to_issue_example_call_tool.py +++ b/public/examples/integrations/mcp-servers/jira/add_comment_to_issue_example_call_tool.py @@ -23,7 +23,7 @@ "jane.smith@example.com" ], # Important: about the atlassian_cloud_id argument, please refer to the documentation at - # https://docs.arcade.dev/toolkits/productivity/jira#handling-multiple-atlassian-clouds + # https://docs.arcade.dev/mcp-servers/productivity/jira#handling-multiple-atlassian-clouds "atlassian_cloud_id": "13516a07-1725-4dc0-9ae7-13b5749dd747" } diff --git a/public/examples/integrations/toolkits/jira/add_issues_to_sprint_example_call_tool.js b/public/examples/integrations/mcp-servers/jira/add_issues_to_sprint_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/jira/add_issues_to_sprint_example_call_tool.js rename to public/examples/integrations/mcp-servers/jira/add_issues_to_sprint_example_call_tool.js diff --git a/public/examples/integrations/toolkits/jira/add_issues_to_sprint_example_call_tool.py b/public/examples/integrations/mcp-servers/jira/add_issues_to_sprint_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/jira/add_issues_to_sprint_example_call_tool.py rename to public/examples/integrations/mcp-servers/jira/add_issues_to_sprint_example_call_tool.py diff --git a/public/examples/integrations/toolkits/jira/add_labels_to_issue_example_call_tool.js b/public/examples/integrations/mcp-servers/jira/add_labels_to_issue_example_call_tool.js similarity index 91% rename from public/examples/integrations/toolkits/jira/add_labels_to_issue_example_call_tool.js rename to public/examples/integrations/mcp-servers/jira/add_labels_to_issue_example_call_tool.js index 3eb050a07..5b01586d6 100644 --- a/public/examples/integrations/toolkits/jira/add_labels_to_issue_example_call_tool.js +++ b/public/examples/integrations/mcp-servers/jira/add_labels_to_issue_example_call_tool.js @@ -23,7 +23,7 @@ const toolInput = { ], "notify_watchers": true, // Important: about the atlassian_cloud_id argument, please refer to the documentation at - // https://docs.arcade.dev/toolkits/productivity/jira#handling-multiple-atlassian-clouds + // https://docs.arcade.dev/mcp-servers/productivity/jira#handling-multiple-atlassian-clouds "atlassian_cloud_id": "13516a07-1725-4dc0-9ae7-13b5749dd747" }; diff --git a/public/examples/integrations/toolkits/jira/add_labels_to_issue_example_call_tool.py b/public/examples/integrations/mcp-servers/jira/add_labels_to_issue_example_call_tool.py similarity index 90% rename from public/examples/integrations/toolkits/jira/add_labels_to_issue_example_call_tool.py rename to public/examples/integrations/mcp-servers/jira/add_labels_to_issue_example_call_tool.py index 890f242f8..78ad9c516 100644 --- a/public/examples/integrations/toolkits/jira/add_labels_to_issue_example_call_tool.py +++ b/public/examples/integrations/mcp-servers/jira/add_labels_to_issue_example_call_tool.py @@ -22,7 +22,7 @@ ], "notify_watchers": True, # Important: about the atlassian_cloud_id argument, please refer to the documentation at - # https://docs.arcade.dev/toolkits/productivity/jira#handling-multiple-atlassian-clouds + # https://docs.arcade.dev/mcp-servers/productivity/jira#handling-multiple-atlassian-clouds "atlassian_cloud_id": "13516a07-1725-4dc0-9ae7-13b5749dd747" } diff --git a/public/examples/integrations/toolkits/jira/attach_file_to_issue_example_call_tool.js b/public/examples/integrations/mcp-servers/jira/attach_file_to_issue_example_call_tool.js similarity index 91% rename from public/examples/integrations/toolkits/jira/attach_file_to_issue_example_call_tool.js rename to public/examples/integrations/mcp-servers/jira/attach_file_to_issue_example_call_tool.js index 6a6d86bfd..f302a101d 100644 --- a/public/examples/integrations/toolkits/jira/attach_file_to_issue_example_call_tool.js +++ b/public/examples/integrations/mcp-servers/jira/attach_file_to_issue_example_call_tool.js @@ -20,7 +20,7 @@ const toolInput = { "filename": "report.pdf", "file_content_base64": "[base64_encoded_content]", // Important: about the atlassian_cloud_id argument, please refer to the documentation at - // https://docs.arcade.dev/toolkits/productivity/jira#handling-multiple-atlassian-clouds + // https://docs.arcade.dev/mcp-servers/productivity/jira#handling-multiple-atlassian-clouds "atlassian_cloud_id": "13516a07-1725-4dc0-9ae7-13b5749dd747" }; diff --git a/public/examples/integrations/toolkits/jira/attach_file_to_issue_example_call_tool.py b/public/examples/integrations/mcp-servers/jira/attach_file_to_issue_example_call_tool.py similarity index 90% rename from public/examples/integrations/toolkits/jira/attach_file_to_issue_example_call_tool.py rename to public/examples/integrations/mcp-servers/jira/attach_file_to_issue_example_call_tool.py index 7e539a087..a8dcf9bb0 100644 --- a/public/examples/integrations/toolkits/jira/attach_file_to_issue_example_call_tool.py +++ b/public/examples/integrations/mcp-servers/jira/attach_file_to_issue_example_call_tool.py @@ -19,7 +19,7 @@ "filename": "report.pdf", "file_content_base64": "[base64_encoded_content]", # Important: about the atlassian_cloud_id argument, please refer to the documentation at - # https://docs.arcade.dev/toolkits/productivity/jira#handling-multiple-atlassian-clouds + # https://docs.arcade.dev/mcp-servers/productivity/jira#handling-multiple-atlassian-clouds "atlassian_cloud_id": "13516a07-1725-4dc0-9ae7-13b5749dd747" } diff --git a/public/examples/integrations/toolkits/jira/create_issue_example_call_tool.js b/public/examples/integrations/mcp-servers/jira/create_issue_example_call_tool.js similarity index 92% rename from public/examples/integrations/toolkits/jira/create_issue_example_call_tool.js rename to public/examples/integrations/mcp-servers/jira/create_issue_example_call_tool.js index ad41e276d..4ba073b38 100644 --- a/public/examples/integrations/toolkits/jira/create_issue_example_call_tool.js +++ b/public/examples/integrations/mcp-servers/jira/create_issue_example_call_tool.js @@ -27,7 +27,7 @@ const toolInput = { ], "assignee": "john.doe@example.com", // Important: about the atlassian_cloud_id argument, please refer to the documentation at - // https://docs.arcade.dev/toolkits/productivity/jira#handling-multiple-atlassian-clouds + // https://docs.arcade.dev/mcp-servers/productivity/jira#handling-multiple-atlassian-clouds "atlassian_cloud_id": "13516a07-1725-4dc0-9ae7-13b5749dd747" }; diff --git a/public/examples/integrations/toolkits/jira/create_issue_example_call_tool.py b/public/examples/integrations/mcp-servers/jira/create_issue_example_call_tool.py similarity index 92% rename from public/examples/integrations/toolkits/jira/create_issue_example_call_tool.py rename to public/examples/integrations/mcp-servers/jira/create_issue_example_call_tool.py index 34243ab25..c0318deea 100644 --- a/public/examples/integrations/toolkits/jira/create_issue_example_call_tool.py +++ b/public/examples/integrations/mcp-servers/jira/create_issue_example_call_tool.py @@ -26,7 +26,7 @@ ], "assignee": "john.doe@example.com", # Important: about the atlassian_cloud_id argument, please refer to the documentation at - # https://docs.arcade.dev/toolkits/productivity/jira#handling-multiple-atlassian-clouds + # https://docs.arcade.dev/mcp-servers/productivity/jira#handling-multiple-atlassian-clouds "atlassian_cloud_id": "13516a07-1725-4dc0-9ae7-13b5749dd747" } diff --git a/public/examples/integrations/toolkits/jira/download_attachment_example_call_tool.js b/public/examples/integrations/mcp-servers/jira/download_attachment_example_call_tool.js similarity index 91% rename from public/examples/integrations/toolkits/jira/download_attachment_example_call_tool.js rename to public/examples/integrations/mcp-servers/jira/download_attachment_example_call_tool.js index 124ce6e86..38487feac 100644 --- a/public/examples/integrations/toolkits/jira/download_attachment_example_call_tool.js +++ b/public/examples/integrations/mcp-servers/jira/download_attachment_example_call_tool.js @@ -18,7 +18,7 @@ await client.auth.waitForCompletion(authResponse); const toolInput = { "attachment_id": "12345", // Important: about the atlassian_cloud_id argument, please refer to the documentation at - // https://docs.arcade.dev/toolkits/productivity/jira#handling-multiple-atlassian-clouds + // https://docs.arcade.dev/mcp-servers/productivity/jira#handling-multiple-atlassian-clouds "atlassian_cloud_id": "13516a07-1725-4dc0-9ae7-13b5749dd747" }; diff --git a/public/examples/integrations/toolkits/jira/download_attachment_example_call_tool.py b/public/examples/integrations/mcp-servers/jira/download_attachment_example_call_tool.py similarity index 90% rename from public/examples/integrations/toolkits/jira/download_attachment_example_call_tool.py rename to public/examples/integrations/mcp-servers/jira/download_attachment_example_call_tool.py index 35409914e..5c9a7b8c9 100644 --- a/public/examples/integrations/toolkits/jira/download_attachment_example_call_tool.py +++ b/public/examples/integrations/mcp-servers/jira/download_attachment_example_call_tool.py @@ -17,7 +17,7 @@ tool_input = { "attachment_id": "12345", # Important: about the atlassian_cloud_id argument, please refer to the documentation at - # https://docs.arcade.dev/toolkits/productivity/jira#handling-multiple-atlassian-clouds + # https://docs.arcade.dev/mcp-servers/productivity/jira#handling-multiple-atlassian-clouds "atlassian_cloud_id": "13516a07-1725-4dc0-9ae7-13b5749dd747" } diff --git a/public/examples/integrations/toolkits/jira/get_attachment_metadata_example_call_tool.js b/public/examples/integrations/mcp-servers/jira/get_attachment_metadata_example_call_tool.js similarity index 91% rename from public/examples/integrations/toolkits/jira/get_attachment_metadata_example_call_tool.js rename to public/examples/integrations/mcp-servers/jira/get_attachment_metadata_example_call_tool.js index 60fea30f6..cb71e0890 100644 --- a/public/examples/integrations/toolkits/jira/get_attachment_metadata_example_call_tool.js +++ b/public/examples/integrations/mcp-servers/jira/get_attachment_metadata_example_call_tool.js @@ -18,7 +18,7 @@ await client.auth.waitForCompletion(authResponse); const toolInput = { "attachment_id": "att_12345", // Important: about the atlassian_cloud_id argument, please refer to the documentation at - // https://docs.arcade.dev/toolkits/productivity/jira#handling-multiple-atlassian-clouds + // https://docs.arcade.dev/mcp-servers/productivity/jira#handling-multiple-atlassian-clouds "atlassian_cloud_id": "13516a07-1725-4dc0-9ae7-13b5749dd747" }; diff --git a/public/examples/integrations/toolkits/jira/get_attachment_metadata_example_call_tool.py b/public/examples/integrations/mcp-servers/jira/get_attachment_metadata_example_call_tool.py similarity index 90% rename from public/examples/integrations/toolkits/jira/get_attachment_metadata_example_call_tool.py rename to public/examples/integrations/mcp-servers/jira/get_attachment_metadata_example_call_tool.py index 25ca97baa..807d08ebb 100644 --- a/public/examples/integrations/toolkits/jira/get_attachment_metadata_example_call_tool.py +++ b/public/examples/integrations/mcp-servers/jira/get_attachment_metadata_example_call_tool.py @@ -17,7 +17,7 @@ tool_input = { "attachment_id": "att_12345", # Important: about the atlassian_cloud_id argument, please refer to the documentation at - # https://docs.arcade.dev/toolkits/productivity/jira#handling-multiple-atlassian-clouds + # https://docs.arcade.dev/mcp-servers/productivity/jira#handling-multiple-atlassian-clouds "atlassian_cloud_id": "13516a07-1725-4dc0-9ae7-13b5749dd747" } diff --git a/public/examples/integrations/toolkits/jira/get_available_atlassian_clouds_example_call_tool.js b/public/examples/integrations/mcp-servers/jira/get_available_atlassian_clouds_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/jira/get_available_atlassian_clouds_example_call_tool.js rename to public/examples/integrations/mcp-servers/jira/get_available_atlassian_clouds_example_call_tool.js diff --git a/public/examples/integrations/toolkits/jira/get_available_atlassian_clouds_example_call_tool.py b/public/examples/integrations/mcp-servers/jira/get_available_atlassian_clouds_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/jira/get_available_atlassian_clouds_example_call_tool.py rename to public/examples/integrations/mcp-servers/jira/get_available_atlassian_clouds_example_call_tool.py diff --git a/public/examples/integrations/toolkits/jira/get_board_backlog_issues_example_call_tool.js b/public/examples/integrations/mcp-servers/jira/get_board_backlog_issues_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/jira/get_board_backlog_issues_example_call_tool.js rename to public/examples/integrations/mcp-servers/jira/get_board_backlog_issues_example_call_tool.js diff --git a/public/examples/integrations/toolkits/jira/get_board_backlog_issues_example_call_tool.py b/public/examples/integrations/mcp-servers/jira/get_board_backlog_issues_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/jira/get_board_backlog_issues_example_call_tool.py rename to public/examples/integrations/mcp-servers/jira/get_board_backlog_issues_example_call_tool.py diff --git a/public/examples/integrations/toolkits/jira/get_boards_example_call_tool.js b/public/examples/integrations/mcp-servers/jira/get_boards_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/jira/get_boards_example_call_tool.js rename to public/examples/integrations/mcp-servers/jira/get_boards_example_call_tool.js diff --git a/public/examples/integrations/toolkits/jira/get_boards_example_call_tool.py b/public/examples/integrations/mcp-servers/jira/get_boards_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/jira/get_boards_example_call_tool.py rename to public/examples/integrations/mcp-servers/jira/get_boards_example_call_tool.py diff --git a/public/examples/integrations/toolkits/jira/get_comment_by_id_example_call_tool.js b/public/examples/integrations/mcp-servers/jira/get_comment_by_id_example_call_tool.js similarity index 91% rename from public/examples/integrations/toolkits/jira/get_comment_by_id_example_call_tool.js rename to public/examples/integrations/mcp-servers/jira/get_comment_by_id_example_call_tool.js index 81f3f0869..150d22276 100644 --- a/public/examples/integrations/toolkits/jira/get_comment_by_id_example_call_tool.js +++ b/public/examples/integrations/mcp-servers/jira/get_comment_by_id_example_call_tool.js @@ -20,7 +20,7 @@ const toolInput = { "comment_id": "COMMENT-456", "include_adf_content": true, // Important: about the atlassian_cloud_id argument, please refer to the documentation at - // https://docs.arcade.dev/toolkits/productivity/jira#handling-multiple-atlassian-clouds + // https://docs.arcade.dev/mcp-servers/productivity/jira#handling-multiple-atlassian-clouds "atlassian_cloud_id": "13516a07-1725-4dc0-9ae7-13b5749dd747" }; diff --git a/public/examples/integrations/toolkits/jira/get_comment_by_id_example_call_tool.py b/public/examples/integrations/mcp-servers/jira/get_comment_by_id_example_call_tool.py similarity index 90% rename from public/examples/integrations/toolkits/jira/get_comment_by_id_example_call_tool.py rename to public/examples/integrations/mcp-servers/jira/get_comment_by_id_example_call_tool.py index 15c9a0468..e9411017b 100644 --- a/public/examples/integrations/toolkits/jira/get_comment_by_id_example_call_tool.py +++ b/public/examples/integrations/mcp-servers/jira/get_comment_by_id_example_call_tool.py @@ -19,7 +19,7 @@ "comment_id": "COMMENT-456", "include_adf_content": True, # Important: about the atlassian_cloud_id argument, please refer to the documentation at - # https://docs.arcade.dev/toolkits/productivity/jira#handling-multiple-atlassian-clouds + # https://docs.arcade.dev/mcp-servers/productivity/jira#handling-multiple-atlassian-clouds "atlassian_cloud_id": "13516a07-1725-4dc0-9ae7-13b5749dd747" } diff --git a/public/examples/integrations/toolkits/jira/get_issue_by_id_example_call_tool.js b/public/examples/integrations/mcp-servers/jira/get_issue_by_id_example_call_tool.js similarity index 91% rename from public/examples/integrations/toolkits/jira/get_issue_by_id_example_call_tool.js rename to public/examples/integrations/mcp-servers/jira/get_issue_by_id_example_call_tool.js index b8c95fa30..f682c0284 100644 --- a/public/examples/integrations/toolkits/jira/get_issue_by_id_example_call_tool.js +++ b/public/examples/integrations/mcp-servers/jira/get_issue_by_id_example_call_tool.js @@ -18,7 +18,7 @@ await client.auth.waitForCompletion(authResponse); const toolInput = { "issue": "JIRA-123", // Important: about the atlassian_cloud_id argument, please refer to the documentation at - // https://docs.arcade.dev/toolkits/productivity/jira#handling-multiple-atlassian-clouds + // https://docs.arcade.dev/mcp-servers/productivity/jira#handling-multiple-atlassian-clouds "atlassian_cloud_id": "13516a07-1725-4dc0-9ae7-13b5749dd747" }; diff --git a/public/examples/integrations/toolkits/jira/get_issue_by_id_example_call_tool.py b/public/examples/integrations/mcp-servers/jira/get_issue_by_id_example_call_tool.py similarity index 90% rename from public/examples/integrations/toolkits/jira/get_issue_by_id_example_call_tool.py rename to public/examples/integrations/mcp-servers/jira/get_issue_by_id_example_call_tool.py index ab34ea38f..bf06f71ee 100644 --- a/public/examples/integrations/toolkits/jira/get_issue_by_id_example_call_tool.py +++ b/public/examples/integrations/mcp-servers/jira/get_issue_by_id_example_call_tool.py @@ -17,7 +17,7 @@ tool_input = { "issue": "JIRA-123", # Important: about the atlassian_cloud_id argument, please refer to the documentation at - # https://docs.arcade.dev/toolkits/productivity/jira#handling-multiple-atlassian-clouds + # https://docs.arcade.dev/mcp-servers/productivity/jira#handling-multiple-atlassian-clouds "atlassian_cloud_id": "13516a07-1725-4dc0-9ae7-13b5749dd747" } diff --git a/public/examples/integrations/toolkits/jira/get_issue_comments_example_call_tool.js b/public/examples/integrations/mcp-servers/jira/get_issue_comments_example_call_tool.js similarity index 91% rename from public/examples/integrations/toolkits/jira/get_issue_comments_example_call_tool.js rename to public/examples/integrations/mcp-servers/jira/get_issue_comments_example_call_tool.js index 25613c651..efc220505 100644 --- a/public/examples/integrations/toolkits/jira/get_issue_comments_example_call_tool.js +++ b/public/examples/integrations/mcp-servers/jira/get_issue_comments_example_call_tool.js @@ -21,7 +21,7 @@ const toolInput = { "order_by": "created_date_descending", "include_adf_content": true, // Important: about the atlassian_cloud_id argument, please refer to the documentation at - // https://docs.arcade.dev/toolkits/productivity/jira#handling-multiple-atlassian-clouds + // https://docs.arcade.dev/mcp-servers/productivity/jira#handling-multiple-atlassian-clouds "atlassian_cloud_id": "13516a07-1725-4dc0-9ae7-13b5749dd747" }; diff --git a/public/examples/integrations/toolkits/jira/get_issue_comments_example_call_tool.py b/public/examples/integrations/mcp-servers/jira/get_issue_comments_example_call_tool.py similarity index 90% rename from public/examples/integrations/toolkits/jira/get_issue_comments_example_call_tool.py rename to public/examples/integrations/mcp-servers/jira/get_issue_comments_example_call_tool.py index 82c1d0f8b..384d06010 100644 --- a/public/examples/integrations/toolkits/jira/get_issue_comments_example_call_tool.py +++ b/public/examples/integrations/mcp-servers/jira/get_issue_comments_example_call_tool.py @@ -20,7 +20,7 @@ "order_by": "created_date_descending", "include_adf_content": True, # Important: about the atlassian_cloud_id argument, please refer to the documentation at - # https://docs.arcade.dev/toolkits/productivity/jira#handling-multiple-atlassian-clouds + # https://docs.arcade.dev/mcp-servers/productivity/jira#handling-multiple-atlassian-clouds "atlassian_cloud_id": "13516a07-1725-4dc0-9ae7-13b5749dd747" } diff --git a/public/examples/integrations/toolkits/jira/get_issue_type_by_id_example_call_tool.js b/public/examples/integrations/mcp-servers/jira/get_issue_type_by_id_example_call_tool.js similarity index 91% rename from public/examples/integrations/toolkits/jira/get_issue_type_by_id_example_call_tool.js rename to public/examples/integrations/mcp-servers/jira/get_issue_type_by_id_example_call_tool.js index ec1139b68..bfbbf3caa 100644 --- a/public/examples/integrations/toolkits/jira/get_issue_type_by_id_example_call_tool.js +++ b/public/examples/integrations/mcp-servers/jira/get_issue_type_by_id_example_call_tool.js @@ -18,7 +18,7 @@ await client.auth.waitForCompletion(authResponse); const toolInput = { "issue_type_id": "12345", // Important: about the atlassian_cloud_id argument, please refer to the documentation at - // https://docs.arcade.dev/toolkits/productivity/jira#handling-multiple-atlassian-clouds + // https://docs.arcade.dev/mcp-servers/productivity/jira#handling-multiple-atlassian-clouds "atlassian_cloud_id": "13516a07-1725-4dc0-9ae7-13b5749dd747" }; diff --git a/public/examples/integrations/toolkits/jira/get_issue_type_by_id_example_call_tool.py b/public/examples/integrations/mcp-servers/jira/get_issue_type_by_id_example_call_tool.py similarity index 90% rename from public/examples/integrations/toolkits/jira/get_issue_type_by_id_example_call_tool.py rename to public/examples/integrations/mcp-servers/jira/get_issue_type_by_id_example_call_tool.py index 725a4b60f..fbdf91eeb 100644 --- a/public/examples/integrations/toolkits/jira/get_issue_type_by_id_example_call_tool.py +++ b/public/examples/integrations/mcp-servers/jira/get_issue_type_by_id_example_call_tool.py @@ -17,7 +17,7 @@ tool_input = { "issue_type_id": "12345", # Important: about the atlassian_cloud_id argument, please refer to the documentation at - # https://docs.arcade.dev/toolkits/productivity/jira#handling-multiple-atlassian-clouds + # https://docs.arcade.dev/mcp-servers/productivity/jira#handling-multiple-atlassian-clouds "atlassian_cloud_id": "13516a07-1725-4dc0-9ae7-13b5749dd747" } diff --git a/public/examples/integrations/toolkits/jira/get_issues_without_id_example_call_tool.js b/public/examples/integrations/mcp-servers/jira/get_issues_without_id_example_call_tool.js similarity index 92% rename from public/examples/integrations/toolkits/jira/get_issues_without_id_example_call_tool.js rename to public/examples/integrations/mcp-servers/jira/get_issues_without_id_example_call_tool.js index 6c49e2306..a598ace6a 100644 --- a/public/examples/integrations/toolkits/jira/get_issues_without_id_example_call_tool.js +++ b/public/examples/integrations/mcp-servers/jira/get_issues_without_id_example_call_tool.js @@ -23,7 +23,7 @@ const toolInput = { "project": "ProjectX", "limit": 10, // Important: about the atlassian_cloud_id argument, please refer to the documentation at - // https://docs.arcade.dev/toolkits/productivity/jira#handling-multiple-atlassian-clouds + // https://docs.arcade.dev/mcp-servers/productivity/jira#handling-multiple-atlassian-clouds "atlassian_cloud_id": "13516a07-1725-4dc0-9ae7-13b5749dd747" }; diff --git a/public/examples/integrations/toolkits/jira/get_issues_without_id_example_call_tool.py b/public/examples/integrations/mcp-servers/jira/get_issues_without_id_example_call_tool.py similarity index 91% rename from public/examples/integrations/toolkits/jira/get_issues_without_id_example_call_tool.py rename to public/examples/integrations/mcp-servers/jira/get_issues_without_id_example_call_tool.py index 495a7a3a8..f6366fa2c 100644 --- a/public/examples/integrations/toolkits/jira/get_issues_without_id_example_call_tool.py +++ b/public/examples/integrations/mcp-servers/jira/get_issues_without_id_example_call_tool.py @@ -22,7 +22,7 @@ "project": "ProjectX", "limit": 10, # Important: about the atlassian_cloud_id argument, please refer to the documentation at - # https://docs.arcade.dev/toolkits/productivity/jira#handling-multiple-atlassian-clouds + # https://docs.arcade.dev/mcp-servers/productivity/jira#handling-multiple-atlassian-clouds "atlassian_cloud_id": "13516a07-1725-4dc0-9ae7-13b5749dd747" } diff --git a/public/examples/integrations/toolkits/jira/get_priority_by_id_example_call_tool.js b/public/examples/integrations/mcp-servers/jira/get_priority_by_id_example_call_tool.js similarity index 91% rename from public/examples/integrations/toolkits/jira/get_priority_by_id_example_call_tool.js rename to public/examples/integrations/mcp-servers/jira/get_priority_by_id_example_call_tool.js index fa76c5cb9..8b9bfd119 100644 --- a/public/examples/integrations/toolkits/jira/get_priority_by_id_example_call_tool.js +++ b/public/examples/integrations/mcp-servers/jira/get_priority_by_id_example_call_tool.js @@ -18,7 +18,7 @@ await client.auth.waitForCompletion(authResponse); const toolInput = { "priority_id": "12345", // Important: about the atlassian_cloud_id argument, please refer to the documentation at - // https://docs.arcade.dev/toolkits/productivity/jira#handling-multiple-atlassian-clouds + // https://docs.arcade.dev/mcp-servers/productivity/jira#handling-multiple-atlassian-clouds "atlassian_cloud_id": "13516a07-1725-4dc0-9ae7-13b5749dd747" }; diff --git a/public/examples/integrations/toolkits/jira/get_priority_by_id_example_call_tool.py b/public/examples/integrations/mcp-servers/jira/get_priority_by_id_example_call_tool.py similarity index 90% rename from public/examples/integrations/toolkits/jira/get_priority_by_id_example_call_tool.py rename to public/examples/integrations/mcp-servers/jira/get_priority_by_id_example_call_tool.py index 7da0d902a..31ace286f 100644 --- a/public/examples/integrations/toolkits/jira/get_priority_by_id_example_call_tool.py +++ b/public/examples/integrations/mcp-servers/jira/get_priority_by_id_example_call_tool.py @@ -17,7 +17,7 @@ tool_input = { "priority_id": "12345", # Important: about the atlassian_cloud_id argument, please refer to the documentation at - # https://docs.arcade.dev/toolkits/productivity/jira#handling-multiple-atlassian-clouds + # https://docs.arcade.dev/mcp-servers/productivity/jira#handling-multiple-atlassian-clouds "atlassian_cloud_id": "13516a07-1725-4dc0-9ae7-13b5749dd747" } diff --git a/public/examples/integrations/toolkits/jira/get_project_by_id_example_call_tool.js b/public/examples/integrations/mcp-servers/jira/get_project_by_id_example_call_tool.js similarity index 91% rename from public/examples/integrations/toolkits/jira/get_project_by_id_example_call_tool.js rename to public/examples/integrations/mcp-servers/jira/get_project_by_id_example_call_tool.js index 37c5bd7a5..f8d8394d6 100644 --- a/public/examples/integrations/toolkits/jira/get_project_by_id_example_call_tool.js +++ b/public/examples/integrations/mcp-servers/jira/get_project_by_id_example_call_tool.js @@ -18,7 +18,7 @@ await client.auth.waitForCompletion(authResponse); const toolInput = { "project": "PROJ-123", // Important: about the atlassian_cloud_id argument, please refer to the documentation at - // https://docs.arcade.dev/toolkits/productivity/jira#handling-multiple-atlassian-clouds + // https://docs.arcade.dev/mcp-servers/productivity/jira#handling-multiple-atlassian-clouds "atlassian_cloud_id": "13516a07-1725-4dc0-9ae7-13b5749dd747" }; diff --git a/public/examples/integrations/toolkits/jira/get_project_by_id_example_call_tool.py b/public/examples/integrations/mcp-servers/jira/get_project_by_id_example_call_tool.py similarity index 90% rename from public/examples/integrations/toolkits/jira/get_project_by_id_example_call_tool.py rename to public/examples/integrations/mcp-servers/jira/get_project_by_id_example_call_tool.py index 5b4c90eb5..5db5c95e0 100644 --- a/public/examples/integrations/toolkits/jira/get_project_by_id_example_call_tool.py +++ b/public/examples/integrations/mcp-servers/jira/get_project_by_id_example_call_tool.py @@ -17,7 +17,7 @@ tool_input = { "project": "PROJ-123", # Important: about the atlassian_cloud_id argument, please refer to the documentation at - # https://docs.arcade.dev/toolkits/productivity/jira#handling-multiple-atlassian-clouds + # https://docs.arcade.dev/mcp-servers/productivity/jira#handling-multiple-atlassian-clouds "atlassian_cloud_id": "13516a07-1725-4dc0-9ae7-13b5749dd747" } diff --git a/public/examples/integrations/toolkits/jira/get_sprint_issues_example_call_tool.js b/public/examples/integrations/mcp-servers/jira/get_sprint_issues_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/jira/get_sprint_issues_example_call_tool.js rename to public/examples/integrations/mcp-servers/jira/get_sprint_issues_example_call_tool.js diff --git a/public/examples/integrations/toolkits/jira/get_sprint_issues_example_call_tool.py b/public/examples/integrations/mcp-servers/jira/get_sprint_issues_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/jira/get_sprint_issues_example_call_tool.py rename to public/examples/integrations/mcp-servers/jira/get_sprint_issues_example_call_tool.py diff --git a/public/examples/integrations/toolkits/jira/get_transition_by_id_example_call_tool.js b/public/examples/integrations/mcp-servers/jira/get_transition_by_id_example_call_tool.js similarity index 91% rename from public/examples/integrations/toolkits/jira/get_transition_by_id_example_call_tool.js rename to public/examples/integrations/mcp-servers/jira/get_transition_by_id_example_call_tool.js index 842267d2f..dfc06c1ac 100644 --- a/public/examples/integrations/toolkits/jira/get_transition_by_id_example_call_tool.js +++ b/public/examples/integrations/mcp-servers/jira/get_transition_by_id_example_call_tool.js @@ -19,7 +19,7 @@ const toolInput = { "issue": "ISSUE-123", "transition_id": "TRANS-456", // Important: about the atlassian_cloud_id argument, please refer to the documentation at - // https://docs.arcade.dev/toolkits/productivity/jira#handling-multiple-atlassian-clouds + // https://docs.arcade.dev/mcp-servers/productivity/jira#handling-multiple-atlassian-clouds "atlassian_cloud_id": "13516a07-1725-4dc0-9ae7-13b5749dd747" }; diff --git a/public/examples/integrations/toolkits/jira/get_transition_by_id_example_call_tool.py b/public/examples/integrations/mcp-servers/jira/get_transition_by_id_example_call_tool.py similarity index 90% rename from public/examples/integrations/toolkits/jira/get_transition_by_id_example_call_tool.py rename to public/examples/integrations/mcp-servers/jira/get_transition_by_id_example_call_tool.py index 8a959b31d..71515e188 100644 --- a/public/examples/integrations/toolkits/jira/get_transition_by_id_example_call_tool.py +++ b/public/examples/integrations/mcp-servers/jira/get_transition_by_id_example_call_tool.py @@ -18,7 +18,7 @@ "issue": "ISSUE-123", "transition_id": "TRANS-456", # Important: about the atlassian_cloud_id argument, please refer to the documentation at - # https://docs.arcade.dev/toolkits/productivity/jira#handling-multiple-atlassian-clouds + # https://docs.arcade.dev/mcp-servers/productivity/jira#handling-multiple-atlassian-clouds "atlassian_cloud_id": "13516a07-1725-4dc0-9ae7-13b5749dd747" } diff --git a/public/examples/integrations/toolkits/jira/get_transition_by_status_name_example_call_tool.js b/public/examples/integrations/mcp-servers/jira/get_transition_by_status_name_example_call_tool.js similarity index 91% rename from public/examples/integrations/toolkits/jira/get_transition_by_status_name_example_call_tool.js rename to public/examples/integrations/mcp-servers/jira/get_transition_by_status_name_example_call_tool.js index ab3bd5ccf..f5c2063c1 100644 --- a/public/examples/integrations/toolkits/jira/get_transition_by_status_name_example_call_tool.js +++ b/public/examples/integrations/mcp-servers/jira/get_transition_by_status_name_example_call_tool.js @@ -19,7 +19,7 @@ const toolInput = { "issue": "ISSUE-123", "transition": "In Progress", // Important: about the atlassian_cloud_id argument, please refer to the documentation at - // https://docs.arcade.dev/toolkits/productivity/jira#handling-multiple-atlassian-clouds + // https://docs.arcade.dev/mcp-servers/productivity/jira#handling-multiple-atlassian-clouds "atlassian_cloud_id": "13516a07-1725-4dc0-9ae7-13b5749dd747" }; diff --git a/public/examples/integrations/toolkits/jira/get_transition_by_status_name_example_call_tool.py b/public/examples/integrations/mcp-servers/jira/get_transition_by_status_name_example_call_tool.py similarity index 90% rename from public/examples/integrations/toolkits/jira/get_transition_by_status_name_example_call_tool.py rename to public/examples/integrations/mcp-servers/jira/get_transition_by_status_name_example_call_tool.py index c85527ef2..0b3bdbfde 100644 --- a/public/examples/integrations/toolkits/jira/get_transition_by_status_name_example_call_tool.py +++ b/public/examples/integrations/mcp-servers/jira/get_transition_by_status_name_example_call_tool.py @@ -18,7 +18,7 @@ "issue": "ISSUE-123", "transition": "In Progress", # Important: about the atlassian_cloud_id argument, please refer to the documentation at - # https://docs.arcade.dev/toolkits/productivity/jira#handling-multiple-atlassian-clouds + # https://docs.arcade.dev/mcp-servers/productivity/jira#handling-multiple-atlassian-clouds "atlassian_cloud_id": "13516a07-1725-4dc0-9ae7-13b5749dd747" } diff --git a/public/examples/integrations/toolkits/jira/get_transitions_available_for_issue_example_call_tool.js b/public/examples/integrations/mcp-servers/jira/get_transitions_available_for_issue_example_call_tool.js similarity index 91% rename from public/examples/integrations/toolkits/jira/get_transitions_available_for_issue_example_call_tool.js rename to public/examples/integrations/mcp-servers/jira/get_transitions_available_for_issue_example_call_tool.js index 765998397..4b8ae088c 100644 --- a/public/examples/integrations/toolkits/jira/get_transitions_available_for_issue_example_call_tool.js +++ b/public/examples/integrations/mcp-servers/jira/get_transitions_available_for_issue_example_call_tool.js @@ -18,7 +18,7 @@ await client.auth.waitForCompletion(authResponse); const toolInput = { "issue": "JIRA-123", // Important: about the atlassian_cloud_id argument, please refer to the documentation at - // https://docs.arcade.dev/toolkits/productivity/jira#handling-multiple-atlassian-clouds + // https://docs.arcade.dev/mcp-servers/productivity/jira#handling-multiple-atlassian-clouds "atlassian_cloud_id": "13516a07-1725-4dc0-9ae7-13b5749dd747" }; diff --git a/public/examples/integrations/toolkits/jira/get_transitions_available_for_issue_example_call_tool.py b/public/examples/integrations/mcp-servers/jira/get_transitions_available_for_issue_example_call_tool.py similarity index 90% rename from public/examples/integrations/toolkits/jira/get_transitions_available_for_issue_example_call_tool.py rename to public/examples/integrations/mcp-servers/jira/get_transitions_available_for_issue_example_call_tool.py index 91eff4919..8e222d69e 100644 --- a/public/examples/integrations/toolkits/jira/get_transitions_available_for_issue_example_call_tool.py +++ b/public/examples/integrations/mcp-servers/jira/get_transitions_available_for_issue_example_call_tool.py @@ -17,7 +17,7 @@ tool_input = { "issue": "JIRA-123", # Important: about the atlassian_cloud_id argument, please refer to the documentation at - # https://docs.arcade.dev/toolkits/productivity/jira#handling-multiple-atlassian-clouds + # https://docs.arcade.dev/mcp-servers/productivity/jira#handling-multiple-atlassian-clouds "atlassian_cloud_id": "13516a07-1725-4dc0-9ae7-13b5749dd747" } diff --git a/public/examples/integrations/toolkits/jira/get_user_by_id_example_call_tool.js b/public/examples/integrations/mcp-servers/jira/get_user_by_id_example_call_tool.js similarity index 91% rename from public/examples/integrations/toolkits/jira/get_user_by_id_example_call_tool.js rename to public/examples/integrations/mcp-servers/jira/get_user_by_id_example_call_tool.js index 1d10a98a9..3cf01ceec 100644 --- a/public/examples/integrations/toolkits/jira/get_user_by_id_example_call_tool.js +++ b/public/examples/integrations/mcp-servers/jira/get_user_by_id_example_call_tool.js @@ -18,7 +18,7 @@ await client.auth.waitForCompletion(authResponse); const toolInput = { "user_id": "12345", // Important: about the atlassian_cloud_id argument, please refer to the documentation at - // https://docs.arcade.dev/toolkits/productivity/jira#handling-multiple-atlassian-clouds + // https://docs.arcade.dev/mcp-servers/productivity/jira#handling-multiple-atlassian-clouds "atlassian_cloud_id": "13516a07-1725-4dc0-9ae7-13b5749dd747" }; diff --git a/public/examples/integrations/toolkits/jira/get_user_by_id_example_call_tool.py b/public/examples/integrations/mcp-servers/jira/get_user_by_id_example_call_tool.py similarity index 90% rename from public/examples/integrations/toolkits/jira/get_user_by_id_example_call_tool.py rename to public/examples/integrations/mcp-servers/jira/get_user_by_id_example_call_tool.py index b6ebc402a..6ac01c0eb 100644 --- a/public/examples/integrations/toolkits/jira/get_user_by_id_example_call_tool.py +++ b/public/examples/integrations/mcp-servers/jira/get_user_by_id_example_call_tool.py @@ -17,7 +17,7 @@ tool_input = { "user_id": "12345", # Important: about the atlassian_cloud_id argument, please refer to the documentation at - # https://docs.arcade.dev/toolkits/productivity/jira#handling-multiple-atlassian-clouds + # https://docs.arcade.dev/mcp-servers/productivity/jira#handling-multiple-atlassian-clouds "atlassian_cloud_id": "13516a07-1725-4dc0-9ae7-13b5749dd747" } diff --git a/public/examples/integrations/toolkits/jira/get_users_without_id_example_call_tool.js b/public/examples/integrations/mcp-servers/jira/get_users_without_id_example_call_tool.js similarity index 91% rename from public/examples/integrations/toolkits/jira/get_users_without_id_example_call_tool.js rename to public/examples/integrations/mcp-servers/jira/get_users_without_id_example_call_tool.js index 1e4e5fa9b..7d53c29b1 100644 --- a/public/examples/integrations/toolkits/jira/get_users_without_id_example_call_tool.js +++ b/public/examples/integrations/mcp-servers/jira/get_users_without_id_example_call_tool.js @@ -20,7 +20,7 @@ const toolInput = { "enforce_exact_match": false, "limit": 10, // Important: about the atlassian_cloud_id argument, please refer to the documentation at - // https://docs.arcade.dev/toolkits/productivity/jira#handling-multiple-atlassian-clouds + // https://docs.arcade.dev/mcp-servers/productivity/jira#handling-multiple-atlassian-clouds "atlassian_cloud_id": "13516a07-1725-4dc0-9ae7-13b5749dd747" }; diff --git a/public/examples/integrations/toolkits/jira/get_users_without_id_example_call_tool.py b/public/examples/integrations/mcp-servers/jira/get_users_without_id_example_call_tool.py similarity index 90% rename from public/examples/integrations/toolkits/jira/get_users_without_id_example_call_tool.py rename to public/examples/integrations/mcp-servers/jira/get_users_without_id_example_call_tool.py index 34998adf1..e7f8b4397 100644 --- a/public/examples/integrations/toolkits/jira/get_users_without_id_example_call_tool.py +++ b/public/examples/integrations/mcp-servers/jira/get_users_without_id_example_call_tool.py @@ -19,7 +19,7 @@ "enforce_exact_match": False, "limit": 10, # Important: about the atlassian_cloud_id argument, please refer to the documentation at - # https://docs.arcade.dev/toolkits/productivity/jira#handling-multiple-atlassian-clouds + # https://docs.arcade.dev/mcp-servers/productivity/jira#handling-multiple-atlassian-clouds "atlassian_cloud_id": "13516a07-1725-4dc0-9ae7-13b5749dd747" } diff --git a/public/examples/integrations/toolkits/jira/list_issue_attachments_metadata_example_call_tool.js b/public/examples/integrations/mcp-servers/jira/list_issue_attachments_metadata_example_call_tool.js similarity index 91% rename from public/examples/integrations/toolkits/jira/list_issue_attachments_metadata_example_call_tool.js rename to public/examples/integrations/mcp-servers/jira/list_issue_attachments_metadata_example_call_tool.js index b3dfa3090..a0ee91e77 100644 --- a/public/examples/integrations/toolkits/jira/list_issue_attachments_metadata_example_call_tool.js +++ b/public/examples/integrations/mcp-servers/jira/list_issue_attachments_metadata_example_call_tool.js @@ -18,7 +18,7 @@ await client.auth.waitForCompletion(authResponse); const toolInput = { "issue": "ISSUE-123", // Important: about the atlassian_cloud_id argument, please refer to the documentation at - // https://docs.arcade.dev/toolkits/productivity/jira#handling-multiple-atlassian-clouds + // https://docs.arcade.dev/mcp-servers/productivity/jira#handling-multiple-atlassian-clouds "atlassian_cloud_id": "13516a07-1725-4dc0-9ae7-13b5749dd747" }; diff --git a/public/examples/integrations/toolkits/jira/list_issue_attachments_metadata_example_call_tool.py b/public/examples/integrations/mcp-servers/jira/list_issue_attachments_metadata_example_call_tool.py similarity index 90% rename from public/examples/integrations/toolkits/jira/list_issue_attachments_metadata_example_call_tool.py rename to public/examples/integrations/mcp-servers/jira/list_issue_attachments_metadata_example_call_tool.py index 091a75e75..089989ab9 100644 --- a/public/examples/integrations/toolkits/jira/list_issue_attachments_metadata_example_call_tool.py +++ b/public/examples/integrations/mcp-servers/jira/list_issue_attachments_metadata_example_call_tool.py @@ -17,7 +17,7 @@ tool_input = { "issue": "ISSUE-123", # Important: about the atlassian_cloud_id argument, please refer to the documentation at - # https://docs.arcade.dev/toolkits/productivity/jira#handling-multiple-atlassian-clouds + # https://docs.arcade.dev/mcp-servers/productivity/jira#handling-multiple-atlassian-clouds "atlassian_cloud_id": "13516a07-1725-4dc0-9ae7-13b5749dd747" } diff --git a/public/examples/integrations/toolkits/jira/list_issue_types_by_project_example_call_tool.js b/public/examples/integrations/mcp-servers/jira/list_issue_types_by_project_example_call_tool.js similarity index 91% rename from public/examples/integrations/toolkits/jira/list_issue_types_by_project_example_call_tool.js rename to public/examples/integrations/mcp-servers/jira/list_issue_types_by_project_example_call_tool.js index 511b83d76..ec913a9ce 100644 --- a/public/examples/integrations/toolkits/jira/list_issue_types_by_project_example_call_tool.js +++ b/public/examples/integrations/mcp-servers/jira/list_issue_types_by_project_example_call_tool.js @@ -19,7 +19,7 @@ const toolInput = { "project": "ProjectX", "limit": 10, // Important: about the atlassian_cloud_id argument, please refer to the documentation at - // https://docs.arcade.dev/toolkits/productivity/jira#handling-multiple-atlassian-clouds + // https://docs.arcade.dev/mcp-servers/productivity/jira#handling-multiple-atlassian-clouds "atlassian_cloud_id": "13516a07-1725-4dc0-9ae7-13b5749dd747" }; diff --git a/public/examples/integrations/toolkits/jira/list_issue_types_by_project_example_call_tool.py b/public/examples/integrations/mcp-servers/jira/list_issue_types_by_project_example_call_tool.py similarity index 90% rename from public/examples/integrations/toolkits/jira/list_issue_types_by_project_example_call_tool.py rename to public/examples/integrations/mcp-servers/jira/list_issue_types_by_project_example_call_tool.py index 246846f1c..bf22c406e 100644 --- a/public/examples/integrations/toolkits/jira/list_issue_types_by_project_example_call_tool.py +++ b/public/examples/integrations/mcp-servers/jira/list_issue_types_by_project_example_call_tool.py @@ -18,7 +18,7 @@ "project": "ProjectX", "limit": 10, # Important: about the atlassian_cloud_id argument, please refer to the documentation at - # https://docs.arcade.dev/toolkits/productivity/jira#handling-multiple-atlassian-clouds + # https://docs.arcade.dev/mcp-servers/productivity/jira#handling-multiple-atlassian-clouds "atlassian_cloud_id": "13516a07-1725-4dc0-9ae7-13b5749dd747" } diff --git a/public/examples/integrations/toolkits/jira/list_issues_example_call_tool.js b/public/examples/integrations/mcp-servers/jira/list_issues_example_call_tool.js similarity index 91% rename from public/examples/integrations/toolkits/jira/list_issues_example_call_tool.js rename to public/examples/integrations/mcp-servers/jira/list_issues_example_call_tool.js index cd806b07c..6a545b32d 100644 --- a/public/examples/integrations/toolkits/jira/list_issues_example_call_tool.js +++ b/public/examples/integrations/mcp-servers/jira/list_issues_example_call_tool.js @@ -19,7 +19,7 @@ const toolInput = { "project": "12345", "limit": 10, // Important: about the atlassian_cloud_id argument, please refer to the documentation at - // https://docs.arcade.dev/toolkits/productivity/jira#handling-multiple-atlassian-clouds + // https://docs.arcade.dev/mcp-servers/productivity/jira#handling-multiple-atlassian-clouds "atlassian_cloud_id": "13516a07-1725-4dc0-9ae7-13b5749dd747" }; diff --git a/public/examples/integrations/toolkits/jira/list_issues_example_call_tool.py b/public/examples/integrations/mcp-servers/jira/list_issues_example_call_tool.py similarity index 90% rename from public/examples/integrations/toolkits/jira/list_issues_example_call_tool.py rename to public/examples/integrations/mcp-servers/jira/list_issues_example_call_tool.py index 7a79ac9d5..7923cf9fe 100644 --- a/public/examples/integrations/toolkits/jira/list_issues_example_call_tool.py +++ b/public/examples/integrations/mcp-servers/jira/list_issues_example_call_tool.py @@ -18,7 +18,7 @@ "project": "12345", "limit": 10, # Important: about the atlassian_cloud_id argument, please refer to the documentation at - # https://docs.arcade.dev/toolkits/productivity/jira#handling-multiple-atlassian-clouds + # https://docs.arcade.dev/mcp-servers/productivity/jira#handling-multiple-atlassian-clouds "atlassian_cloud_id": "13516a07-1725-4dc0-9ae7-13b5749dd747" } diff --git a/public/examples/integrations/toolkits/jira/list_labels_example_call_tool.js b/public/examples/integrations/mcp-servers/jira/list_labels_example_call_tool.js similarity index 91% rename from public/examples/integrations/toolkits/jira/list_labels_example_call_tool.js rename to public/examples/integrations/mcp-servers/jira/list_labels_example_call_tool.js index 237f0df7e..07c7d6a4b 100644 --- a/public/examples/integrations/toolkits/jira/list_labels_example_call_tool.js +++ b/public/examples/integrations/mcp-servers/jira/list_labels_example_call_tool.js @@ -19,7 +19,7 @@ const toolInput = { "limit": 50, "offset": 10, // Important: about the atlassian_cloud_id argument, please refer to the documentation at - // https://docs.arcade.dev/toolkits/productivity/jira#handling-multiple-atlassian-clouds + // https://docs.arcade.dev/mcp-servers/productivity/jira#handling-multiple-atlassian-clouds "atlassian_cloud_id": "13516a07-1725-4dc0-9ae7-13b5749dd747" }; diff --git a/public/examples/integrations/toolkits/jira/list_labels_example_call_tool.py b/public/examples/integrations/mcp-servers/jira/list_labels_example_call_tool.py similarity index 90% rename from public/examples/integrations/toolkits/jira/list_labels_example_call_tool.py rename to public/examples/integrations/mcp-servers/jira/list_labels_example_call_tool.py index f43c21733..9016c6d5d 100644 --- a/public/examples/integrations/toolkits/jira/list_labels_example_call_tool.py +++ b/public/examples/integrations/mcp-servers/jira/list_labels_example_call_tool.py @@ -18,7 +18,7 @@ "limit": 50, "offset": 10, # Important: about the atlassian_cloud_id argument, please refer to the documentation at - # https://docs.arcade.dev/toolkits/productivity/jira#handling-multiple-atlassian-clouds + # https://docs.arcade.dev/mcp-servers/productivity/jira#handling-multiple-atlassian-clouds "atlassian_cloud_id": "13516a07-1725-4dc0-9ae7-13b5749dd747" } diff --git a/public/examples/integrations/toolkits/jira/list_priorities_associated_with_a_priority_scheme_example_call_tool.js b/public/examples/integrations/mcp-servers/jira/list_priorities_associated_with_a_priority_scheme_example_call_tool.js similarity index 91% rename from public/examples/integrations/toolkits/jira/list_priorities_associated_with_a_priority_scheme_example_call_tool.js rename to public/examples/integrations/mcp-servers/jira/list_priorities_associated_with_a_priority_scheme_example_call_tool.js index 8cb2b5d10..3ce05822d 100644 --- a/public/examples/integrations/toolkits/jira/list_priorities_associated_with_a_priority_scheme_example_call_tool.js +++ b/public/examples/integrations/mcp-servers/jira/list_priorities_associated_with_a_priority_scheme_example_call_tool.js @@ -19,7 +19,7 @@ const toolInput = { "scheme_id": "12345", "limit": 10, // Important: about the atlassian_cloud_id argument, please refer to the documentation at - // https://docs.arcade.dev/toolkits/productivity/jira#handling-multiple-atlassian-clouds + // https://docs.arcade.dev/mcp-servers/productivity/jira#handling-multiple-atlassian-clouds "atlassian_cloud_id": "13516a07-1725-4dc0-9ae7-13b5749dd747" }; diff --git a/public/examples/integrations/toolkits/jira/list_priorities_associated_with_a_priority_scheme_example_call_tool.py b/public/examples/integrations/mcp-servers/jira/list_priorities_associated_with_a_priority_scheme_example_call_tool.py similarity index 90% rename from public/examples/integrations/toolkits/jira/list_priorities_associated_with_a_priority_scheme_example_call_tool.py rename to public/examples/integrations/mcp-servers/jira/list_priorities_associated_with_a_priority_scheme_example_call_tool.py index e7c5d414d..289bc4131 100644 --- a/public/examples/integrations/toolkits/jira/list_priorities_associated_with_a_priority_scheme_example_call_tool.py +++ b/public/examples/integrations/mcp-servers/jira/list_priorities_associated_with_a_priority_scheme_example_call_tool.py @@ -18,7 +18,7 @@ "scheme_id": "12345", "limit": 10, # Important: about the atlassian_cloud_id argument, please refer to the documentation at - # https://docs.arcade.dev/toolkits/productivity/jira#handling-multiple-atlassian-clouds + # https://docs.arcade.dev/mcp-servers/productivity/jira#handling-multiple-atlassian-clouds "atlassian_cloud_id": "13516a07-1725-4dc0-9ae7-13b5749dd747" } diff --git a/public/examples/integrations/toolkits/jira/list_priorities_available_to_a_project_example_call_tool.js b/public/examples/integrations/mcp-servers/jira/list_priorities_available_to_a_project_example_call_tool.js similarity index 91% rename from public/examples/integrations/toolkits/jira/list_priorities_available_to_a_project_example_call_tool.js rename to public/examples/integrations/mcp-servers/jira/list_priorities_available_to_a_project_example_call_tool.js index 67cafa783..dc870405e 100644 --- a/public/examples/integrations/toolkits/jira/list_priorities_available_to_a_project_example_call_tool.js +++ b/public/examples/integrations/mcp-servers/jira/list_priorities_available_to_a_project_example_call_tool.js @@ -18,7 +18,7 @@ await client.auth.waitForCompletion(authResponse); const toolInput = { "project": "PROJ123", // Important: about the atlassian_cloud_id argument, please refer to the documentation at - // https://docs.arcade.dev/toolkits/productivity/jira#handling-multiple-atlassian-clouds + // https://docs.arcade.dev/mcp-servers/productivity/jira#handling-multiple-atlassian-clouds "atlassian_cloud_id": "13516a07-1725-4dc0-9ae7-13b5749dd747" }; diff --git a/public/examples/integrations/toolkits/jira/list_priorities_available_to_a_project_example_call_tool.py b/public/examples/integrations/mcp-servers/jira/list_priorities_available_to_a_project_example_call_tool.py similarity index 90% rename from public/examples/integrations/toolkits/jira/list_priorities_available_to_a_project_example_call_tool.py rename to public/examples/integrations/mcp-servers/jira/list_priorities_available_to_a_project_example_call_tool.py index 7b42759de..51563605d 100644 --- a/public/examples/integrations/toolkits/jira/list_priorities_available_to_a_project_example_call_tool.py +++ b/public/examples/integrations/mcp-servers/jira/list_priorities_available_to_a_project_example_call_tool.py @@ -17,7 +17,7 @@ tool_input = { "project": "PROJ123", # Important: about the atlassian_cloud_id argument, please refer to the documentation at - # https://docs.arcade.dev/toolkits/productivity/jira#handling-multiple-atlassian-clouds + # https://docs.arcade.dev/mcp-servers/productivity/jira#handling-multiple-atlassian-clouds "atlassian_cloud_id": "13516a07-1725-4dc0-9ae7-13b5749dd747" } diff --git a/public/examples/integrations/toolkits/jira/list_priorities_available_to_an_issue_example_call_tool.js b/public/examples/integrations/mcp-servers/jira/list_priorities_available_to_an_issue_example_call_tool.js similarity index 91% rename from public/examples/integrations/toolkits/jira/list_priorities_available_to_an_issue_example_call_tool.js rename to public/examples/integrations/mcp-servers/jira/list_priorities_available_to_an_issue_example_call_tool.js index effc89ef6..4bec115fa 100644 --- a/public/examples/integrations/toolkits/jira/list_priorities_available_to_an_issue_example_call_tool.js +++ b/public/examples/integrations/mcp-servers/jira/list_priorities_available_to_an_issue_example_call_tool.js @@ -18,7 +18,7 @@ await client.auth.waitForCompletion(authResponse); const toolInput = { "issue": "JIRA-123", // Important: about the atlassian_cloud_id argument, please refer to the documentation at - // https://docs.arcade.dev/toolkits/productivity/jira#handling-multiple-atlassian-clouds + // https://docs.arcade.dev/mcp-servers/productivity/jira#handling-multiple-atlassian-clouds "atlassian_cloud_id": "13516a07-1725-4dc0-9ae7-13b5749dd747" }; diff --git a/public/examples/integrations/toolkits/jira/list_priorities_available_to_an_issue_example_call_tool.py b/public/examples/integrations/mcp-servers/jira/list_priorities_available_to_an_issue_example_call_tool.py similarity index 90% rename from public/examples/integrations/toolkits/jira/list_priorities_available_to_an_issue_example_call_tool.py rename to public/examples/integrations/mcp-servers/jira/list_priorities_available_to_an_issue_example_call_tool.py index 4e85b66f9..cebf234dc 100644 --- a/public/examples/integrations/toolkits/jira/list_priorities_available_to_an_issue_example_call_tool.py +++ b/public/examples/integrations/mcp-servers/jira/list_priorities_available_to_an_issue_example_call_tool.py @@ -17,7 +17,7 @@ tool_input = { "issue": "JIRA-123", # Important: about the atlassian_cloud_id argument, please refer to the documentation at - # https://docs.arcade.dev/toolkits/productivity/jira#handling-multiple-atlassian-clouds + # https://docs.arcade.dev/mcp-servers/productivity/jira#handling-multiple-atlassian-clouds "atlassian_cloud_id": "13516a07-1725-4dc0-9ae7-13b5749dd747" } diff --git a/public/examples/integrations/toolkits/jira/list_priority_schemes_example_call_tool.js b/public/examples/integrations/mcp-servers/jira/list_priority_schemes_example_call_tool.js similarity index 91% rename from public/examples/integrations/toolkits/jira/list_priority_schemes_example_call_tool.js rename to public/examples/integrations/mcp-servers/jira/list_priority_schemes_example_call_tool.js index 6ac209231..8ce8f8b18 100644 --- a/public/examples/integrations/toolkits/jira/list_priority_schemes_example_call_tool.js +++ b/public/examples/integrations/mcp-servers/jira/list_priority_schemes_example_call_tool.js @@ -21,7 +21,7 @@ const toolInput = { "offset": 0, "order_by": "name ascending", // Important: about the atlassian_cloud_id argument, please refer to the documentation at - // https://docs.arcade.dev/toolkits/productivity/jira#handling-multiple-atlassian-clouds + // https://docs.arcade.dev/mcp-servers/productivity/jira#handling-multiple-atlassian-clouds "atlassian_cloud_id": "13516a07-1725-4dc0-9ae7-13b5749dd747" }; diff --git a/public/examples/integrations/toolkits/jira/list_priority_schemes_example_call_tool.py b/public/examples/integrations/mcp-servers/jira/list_priority_schemes_example_call_tool.py similarity index 90% rename from public/examples/integrations/toolkits/jira/list_priority_schemes_example_call_tool.py rename to public/examples/integrations/mcp-servers/jira/list_priority_schemes_example_call_tool.py index 0e62d5d98..07b327ada 100644 --- a/public/examples/integrations/toolkits/jira/list_priority_schemes_example_call_tool.py +++ b/public/examples/integrations/mcp-servers/jira/list_priority_schemes_example_call_tool.py @@ -20,7 +20,7 @@ "offset": 0, "order_by": "name ascending", # Important: about the atlassian_cloud_id argument, please refer to the documentation at - # https://docs.arcade.dev/toolkits/productivity/jira#handling-multiple-atlassian-clouds + # https://docs.arcade.dev/mcp-servers/productivity/jira#handling-multiple-atlassian-clouds "atlassian_cloud_id": "13516a07-1725-4dc0-9ae7-13b5749dd747" } diff --git a/public/examples/integrations/toolkits/jira/list_projects_associated_with_a_priority_scheme_example_call_tool.js b/public/examples/integrations/mcp-servers/jira/list_projects_associated_with_a_priority_scheme_example_call_tool.js similarity index 91% rename from public/examples/integrations/toolkits/jira/list_projects_associated_with_a_priority_scheme_example_call_tool.js rename to public/examples/integrations/mcp-servers/jira/list_projects_associated_with_a_priority_scheme_example_call_tool.js index 4d8342bc5..5f95fa9dd 100644 --- a/public/examples/integrations/toolkits/jira/list_projects_associated_with_a_priority_scheme_example_call_tool.js +++ b/public/examples/integrations/mcp-servers/jira/list_projects_associated_with_a_priority_scheme_example_call_tool.js @@ -21,7 +21,7 @@ const toolInput = { "limit": 10, "offset": 0, // Important: about the atlassian_cloud_id argument, please refer to the documentation at - // https://docs.arcade.dev/toolkits/productivity/jira#handling-multiple-atlassian-clouds + // https://docs.arcade.dev/mcp-servers/productivity/jira#handling-multiple-atlassian-clouds "atlassian_cloud_id": "13516a07-1725-4dc0-9ae7-13b5749dd747" }; diff --git a/public/examples/integrations/toolkits/jira/list_projects_associated_with_a_priority_scheme_example_call_tool.py b/public/examples/integrations/mcp-servers/jira/list_projects_associated_with_a_priority_scheme_example_call_tool.py similarity index 90% rename from public/examples/integrations/toolkits/jira/list_projects_associated_with_a_priority_scheme_example_call_tool.py rename to public/examples/integrations/mcp-servers/jira/list_projects_associated_with_a_priority_scheme_example_call_tool.py index f59570e1c..d0c2805c0 100644 --- a/public/examples/integrations/toolkits/jira/list_projects_associated_with_a_priority_scheme_example_call_tool.py +++ b/public/examples/integrations/mcp-servers/jira/list_projects_associated_with_a_priority_scheme_example_call_tool.py @@ -20,7 +20,7 @@ "limit": 10, "offset": 0, # Important: about the atlassian_cloud_id argument, please refer to the documentation at - # https://docs.arcade.dev/toolkits/productivity/jira#handling-multiple-atlassian-clouds + # https://docs.arcade.dev/mcp-servers/productivity/jira#handling-multiple-atlassian-clouds "atlassian_cloud_id": "13516a07-1725-4dc0-9ae7-13b5749dd747" } diff --git a/public/examples/integrations/toolkits/jira/list_projects_example_call_tool.js b/public/examples/integrations/mcp-servers/jira/list_projects_example_call_tool.js similarity index 91% rename from public/examples/integrations/toolkits/jira/list_projects_example_call_tool.js rename to public/examples/integrations/mcp-servers/jira/list_projects_example_call_tool.js index 0d8de0a6c..5f41978e3 100644 --- a/public/examples/integrations/toolkits/jira/list_projects_example_call_tool.js +++ b/public/examples/integrations/mcp-servers/jira/list_projects_example_call_tool.js @@ -19,7 +19,7 @@ const toolInput = { "limit": 10, "offset": 5, // Important: about the atlassian_cloud_id argument, please refer to the documentation at - // https://docs.arcade.dev/toolkits/productivity/jira#handling-multiple-atlassian-clouds + // https://docs.arcade.dev/mcp-servers/productivity/jira#handling-multiple-atlassian-clouds "atlassian_cloud_id": "13516a07-1725-4dc0-9ae7-13b5749dd747" }; diff --git a/public/examples/integrations/toolkits/jira/list_projects_example_call_tool.py b/public/examples/integrations/mcp-servers/jira/list_projects_example_call_tool.py similarity index 90% rename from public/examples/integrations/toolkits/jira/list_projects_example_call_tool.py rename to public/examples/integrations/mcp-servers/jira/list_projects_example_call_tool.py index 14a212d8e..92bcbba3b 100644 --- a/public/examples/integrations/toolkits/jira/list_projects_example_call_tool.py +++ b/public/examples/integrations/mcp-servers/jira/list_projects_example_call_tool.py @@ -18,7 +18,7 @@ "limit": 10, "offset": 5, # Important: about the atlassian_cloud_id argument, please refer to the documentation at - # https://docs.arcade.dev/toolkits/productivity/jira#handling-multiple-atlassian-clouds + # https://docs.arcade.dev/mcp-servers/productivity/jira#handling-multiple-atlassian-clouds "atlassian_cloud_id": "13516a07-1725-4dc0-9ae7-13b5749dd747" } diff --git a/public/examples/integrations/toolkits/jira/list_sprints_for_boards_example_call_tool.js b/public/examples/integrations/mcp-servers/jira/list_sprints_for_boards_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/jira/list_sprints_for_boards_example_call_tool.js rename to public/examples/integrations/mcp-servers/jira/list_sprints_for_boards_example_call_tool.js diff --git a/public/examples/integrations/toolkits/jira/list_sprints_for_boards_example_call_tool.py b/public/examples/integrations/mcp-servers/jira/list_sprints_for_boards_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/jira/list_sprints_for_boards_example_call_tool.py rename to public/examples/integrations/mcp-servers/jira/list_sprints_for_boards_example_call_tool.py diff --git a/public/examples/integrations/toolkits/jira/list_users_example_call_tool.js b/public/examples/integrations/mcp-servers/jira/list_users_example_call_tool.js similarity index 91% rename from public/examples/integrations/toolkits/jira/list_users_example_call_tool.js rename to public/examples/integrations/mcp-servers/jira/list_users_example_call_tool.js index bd4c1fd60..052718bc4 100644 --- a/public/examples/integrations/toolkits/jira/list_users_example_call_tool.js +++ b/public/examples/integrations/mcp-servers/jira/list_users_example_call_tool.js @@ -20,7 +20,7 @@ const toolInput = { "limit": 10, "offset": 0, // Important: about the atlassian_cloud_id argument, please refer to the documentation at - // https://docs.arcade.dev/toolkits/productivity/jira#handling-multiple-atlassian-clouds + // https://docs.arcade.dev/mcp-servers/productivity/jira#handling-multiple-atlassian-clouds "atlassian_cloud_id": "13516a07-1725-4dc0-9ae7-13b5749dd747" }; diff --git a/public/examples/integrations/toolkits/jira/list_users_example_call_tool.py b/public/examples/integrations/mcp-servers/jira/list_users_example_call_tool.py similarity index 90% rename from public/examples/integrations/toolkits/jira/list_users_example_call_tool.py rename to public/examples/integrations/mcp-servers/jira/list_users_example_call_tool.py index 7f2f4110a..704affc40 100644 --- a/public/examples/integrations/toolkits/jira/list_users_example_call_tool.py +++ b/public/examples/integrations/mcp-servers/jira/list_users_example_call_tool.py @@ -19,7 +19,7 @@ "limit": 10, "offset": 0, # Important: about the atlassian_cloud_id argument, please refer to the documentation at - # https://docs.arcade.dev/toolkits/productivity/jira#handling-multiple-atlassian-clouds + # https://docs.arcade.dev/mcp-servers/productivity/jira#handling-multiple-atlassian-clouds "atlassian_cloud_id": "13516a07-1725-4dc0-9ae7-13b5749dd747" } diff --git a/public/examples/integrations/toolkits/jira/move_issues_from_sprint_to_backlog_example_call_tool.js b/public/examples/integrations/mcp-servers/jira/move_issues_from_sprint_to_backlog_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/jira/move_issues_from_sprint_to_backlog_example_call_tool.js rename to public/examples/integrations/mcp-servers/jira/move_issues_from_sprint_to_backlog_example_call_tool.js diff --git a/public/examples/integrations/toolkits/jira/move_issues_from_sprint_to_backlog_example_call_tool.py b/public/examples/integrations/mcp-servers/jira/move_issues_from_sprint_to_backlog_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/jira/move_issues_from_sprint_to_backlog_example_call_tool.py rename to public/examples/integrations/mcp-servers/jira/move_issues_from_sprint_to_backlog_example_call_tool.py diff --git a/public/examples/integrations/toolkits/jira/remove_labels_from_issue_example_call_tool.js b/public/examples/integrations/mcp-servers/jira/remove_labels_from_issue_example_call_tool.js similarity index 91% rename from public/examples/integrations/toolkits/jira/remove_labels_from_issue_example_call_tool.js rename to public/examples/integrations/mcp-servers/jira/remove_labels_from_issue_example_call_tool.js index 2a8eecb21..8cf9ba361 100644 --- a/public/examples/integrations/toolkits/jira/remove_labels_from_issue_example_call_tool.js +++ b/public/examples/integrations/mcp-servers/jira/remove_labels_from_issue_example_call_tool.js @@ -23,7 +23,7 @@ const toolInput = { ], "notify_watchers": true, // Important: about the atlassian_cloud_id argument, please refer to the documentation at - // https://docs.arcade.dev/toolkits/productivity/jira#handling-multiple-atlassian-clouds + // https://docs.arcade.dev/mcp-servers/productivity/jira#handling-multiple-atlassian-clouds "atlassian_cloud_id": "13516a07-1725-4dc0-9ae7-13b5749dd747" }; diff --git a/public/examples/integrations/toolkits/jira/remove_labels_from_issue_example_call_tool.py b/public/examples/integrations/mcp-servers/jira/remove_labels_from_issue_example_call_tool.py similarity index 90% rename from public/examples/integrations/toolkits/jira/remove_labels_from_issue_example_call_tool.py rename to public/examples/integrations/mcp-servers/jira/remove_labels_from_issue_example_call_tool.py index 552689f3b..942be6c17 100644 --- a/public/examples/integrations/toolkits/jira/remove_labels_from_issue_example_call_tool.py +++ b/public/examples/integrations/mcp-servers/jira/remove_labels_from_issue_example_call_tool.py @@ -22,7 +22,7 @@ ], "notify_watchers": True, # Important: about the atlassian_cloud_id argument, please refer to the documentation at - # https://docs.arcade.dev/toolkits/productivity/jira#handling-multiple-atlassian-clouds + # https://docs.arcade.dev/mcp-servers/productivity/jira#handling-multiple-atlassian-clouds "atlassian_cloud_id": "13516a07-1725-4dc0-9ae7-13b5749dd747" } diff --git a/public/examples/integrations/toolkits/jira/search_issues_with_jql_example_call_tool.js b/public/examples/integrations/mcp-servers/jira/search_issues_with_jql_example_call_tool.js similarity index 91% rename from public/examples/integrations/toolkits/jira/search_issues_with_jql_example_call_tool.js rename to public/examples/integrations/mcp-servers/jira/search_issues_with_jql_example_call_tool.js index db6f5298c..55443a418 100644 --- a/public/examples/integrations/toolkits/jira/search_issues_with_jql_example_call_tool.js +++ b/public/examples/integrations/mcp-servers/jira/search_issues_with_jql_example_call_tool.js @@ -19,7 +19,7 @@ const toolInput = { "jql": "project = MYPROJECT AND status = 'Open'", "limit": 10, // Important: about the atlassian_cloud_id argument, please refer to the documentation at - // https://docs.arcade.dev/toolkits/productivity/jira#handling-multiple-atlassian-clouds + // https://docs.arcade.dev/mcp-servers/productivity/jira#handling-multiple-atlassian-clouds "atlassian_cloud_id": "13516a07-1725-4dc0-9ae7-13b5749dd747" }; diff --git a/public/examples/integrations/toolkits/jira/search_issues_with_jql_example_call_tool.py b/public/examples/integrations/mcp-servers/jira/search_issues_with_jql_example_call_tool.py similarity index 90% rename from public/examples/integrations/toolkits/jira/search_issues_with_jql_example_call_tool.py rename to public/examples/integrations/mcp-servers/jira/search_issues_with_jql_example_call_tool.py index d61f93692..4a8dcea64 100644 --- a/public/examples/integrations/toolkits/jira/search_issues_with_jql_example_call_tool.py +++ b/public/examples/integrations/mcp-servers/jira/search_issues_with_jql_example_call_tool.py @@ -18,7 +18,7 @@ "jql": "project = MYPROJECT AND status = 'Open'", "limit": 10, # Important: about the atlassian_cloud_id argument, please refer to the documentation at - # https://docs.arcade.dev/toolkits/productivity/jira#handling-multiple-atlassian-clouds + # https://docs.arcade.dev/mcp-servers/productivity/jira#handling-multiple-atlassian-clouds "atlassian_cloud_id": "13516a07-1725-4dc0-9ae7-13b5749dd747" } diff --git a/public/examples/integrations/toolkits/jira/search_issues_without_jql_example_call_tool.js b/public/examples/integrations/mcp-servers/jira/search_issues_without_jql_example_call_tool.js similarity index 92% rename from public/examples/integrations/toolkits/jira/search_issues_without_jql_example_call_tool.js rename to public/examples/integrations/mcp-servers/jira/search_issues_without_jql_example_call_tool.js index 9839341ce..727a20fd1 100644 --- a/public/examples/integrations/toolkits/jira/search_issues_without_jql_example_call_tool.js +++ b/public/examples/integrations/mcp-servers/jira/search_issues_without_jql_example_call_tool.js @@ -29,7 +29,7 @@ const toolInput = { ], "limit": 10, // Important: about the atlassian_cloud_id argument, please refer to the documentation at - // https://docs.arcade.dev/toolkits/productivity/jira#handling-multiple-atlassian-clouds + // https://docs.arcade.dev/mcp-servers/productivity/jira#handling-multiple-atlassian-clouds "atlassian_cloud_id": "13516a07-1725-4dc0-9ae7-13b5749dd747" }; diff --git a/public/examples/integrations/toolkits/jira/search_issues_without_jql_example_call_tool.py b/public/examples/integrations/mcp-servers/jira/search_issues_without_jql_example_call_tool.py similarity index 92% rename from public/examples/integrations/toolkits/jira/search_issues_without_jql_example_call_tool.py rename to public/examples/integrations/mcp-servers/jira/search_issues_without_jql_example_call_tool.py index 16aa850fe..a50c14660 100644 --- a/public/examples/integrations/toolkits/jira/search_issues_without_jql_example_call_tool.py +++ b/public/examples/integrations/mcp-servers/jira/search_issues_without_jql_example_call_tool.py @@ -28,7 +28,7 @@ ], "limit": 10, # Important: about the atlassian_cloud_id argument, please refer to the documentation at - # https://docs.arcade.dev/toolkits/productivity/jira#handling-multiple-atlassian-clouds + # https://docs.arcade.dev/mcp-servers/productivity/jira#handling-multiple-atlassian-clouds "atlassian_cloud_id": "13516a07-1725-4dc0-9ae7-13b5749dd747" } diff --git a/public/examples/integrations/toolkits/jira/search_projects_example_call_tool.js b/public/examples/integrations/mcp-servers/jira/search_projects_example_call_tool.js similarity index 91% rename from public/examples/integrations/toolkits/jira/search_projects_example_call_tool.js rename to public/examples/integrations/mcp-servers/jira/search_projects_example_call_tool.js index 86e818d3b..493762d9b 100644 --- a/public/examples/integrations/toolkits/jira/search_projects_example_call_tool.js +++ b/public/examples/integrations/mcp-servers/jira/search_projects_example_call_tool.js @@ -20,7 +20,7 @@ const toolInput = { "limit": 10, "offset": 0, // Important: about the atlassian_cloud_id argument, please refer to the documentation at - // https://docs.arcade.dev/toolkits/productivity/jira#handling-multiple-atlassian-clouds + // https://docs.arcade.dev/mcp-servers/productivity/jira#handling-multiple-atlassian-clouds "atlassian_cloud_id": "13516a07-1725-4dc0-9ae7-13b5749dd747" }; diff --git a/public/examples/integrations/toolkits/jira/search_projects_example_call_tool.py b/public/examples/integrations/mcp-servers/jira/search_projects_example_call_tool.py similarity index 90% rename from public/examples/integrations/toolkits/jira/search_projects_example_call_tool.py rename to public/examples/integrations/mcp-servers/jira/search_projects_example_call_tool.py index d0b01b884..89ca2ddae 100644 --- a/public/examples/integrations/toolkits/jira/search_projects_example_call_tool.py +++ b/public/examples/integrations/mcp-servers/jira/search_projects_example_call_tool.py @@ -19,7 +19,7 @@ "limit": 10, "offset": 0, # Important: about the atlassian_cloud_id argument, please refer to the documentation at - # https://docs.arcade.dev/toolkits/productivity/jira#handling-multiple-atlassian-clouds + # https://docs.arcade.dev/mcp-servers/productivity/jira#handling-multiple-atlassian-clouds "atlassian_cloud_id": "13516a07-1725-4dc0-9ae7-13b5749dd747" } diff --git a/public/examples/integrations/toolkits/jira/transition_issue_to_new_status_example_call_tool.js b/public/examples/integrations/mcp-servers/jira/transition_issue_to_new_status_example_call_tool.js similarity index 91% rename from public/examples/integrations/toolkits/jira/transition_issue_to_new_status_example_call_tool.js rename to public/examples/integrations/mcp-servers/jira/transition_issue_to_new_status_example_call_tool.js index b13a4eb46..ba733f79a 100644 --- a/public/examples/integrations/toolkits/jira/transition_issue_to_new_status_example_call_tool.js +++ b/public/examples/integrations/mcp-servers/jira/transition_issue_to_new_status_example_call_tool.js @@ -19,7 +19,7 @@ const toolInput = { "issue": "PROJ-123", "transition": "In Progress", // Important: about the atlassian_cloud_id argument, please refer to the documentation at - // https://docs.arcade.dev/toolkits/productivity/jira#handling-multiple-atlassian-clouds + // https://docs.arcade.dev/mcp-servers/productivity/jira#handling-multiple-atlassian-clouds "atlassian_cloud_id": "13516a07-1725-4dc0-9ae7-13b5749dd747" }; diff --git a/public/examples/integrations/toolkits/jira/transition_issue_to_new_status_example_call_tool.py b/public/examples/integrations/mcp-servers/jira/transition_issue_to_new_status_example_call_tool.py similarity index 90% rename from public/examples/integrations/toolkits/jira/transition_issue_to_new_status_example_call_tool.py rename to public/examples/integrations/mcp-servers/jira/transition_issue_to_new_status_example_call_tool.py index a98603fb7..80581c0ff 100644 --- a/public/examples/integrations/toolkits/jira/transition_issue_to_new_status_example_call_tool.py +++ b/public/examples/integrations/mcp-servers/jira/transition_issue_to_new_status_example_call_tool.py @@ -18,7 +18,7 @@ "issue": "PROJ-123", "transition": "In Progress", # Important: about the atlassian_cloud_id argument, please refer to the documentation at - # https://docs.arcade.dev/toolkits/productivity/jira#handling-multiple-atlassian-clouds + # https://docs.arcade.dev/mcp-servers/productivity/jira#handling-multiple-atlassian-clouds "atlassian_cloud_id": "13516a07-1725-4dc0-9ae7-13b5749dd747" } diff --git a/public/examples/integrations/toolkits/jira/update_issue_example_call_tool.js b/public/examples/integrations/mcp-servers/jira/update_issue_example_call_tool.js similarity index 91% rename from public/examples/integrations/toolkits/jira/update_issue_example_call_tool.js rename to public/examples/integrations/mcp-servers/jira/update_issue_example_call_tool.js index d263f794e..9b2cda633 100644 --- a/public/examples/integrations/toolkits/jira/update_issue_example_call_tool.js +++ b/public/examples/integrations/mcp-servers/jira/update_issue_example_call_tool.js @@ -21,7 +21,7 @@ const toolInput = { "assignee": "john.doe@example.com", "priority": "High", // Important: about the atlassian_cloud_id argument, please refer to the documentation at - // https://docs.arcade.dev/toolkits/productivity/jira#handling-multiple-atlassian-clouds + // https://docs.arcade.dev/mcp-servers/productivity/jira#handling-multiple-atlassian-clouds "atlassian_cloud_id": "13516a07-1725-4dc0-9ae7-13b5749dd747" }; diff --git a/public/examples/integrations/toolkits/jira/update_issue_example_call_tool.py b/public/examples/integrations/mcp-servers/jira/update_issue_example_call_tool.py similarity index 90% rename from public/examples/integrations/toolkits/jira/update_issue_example_call_tool.py rename to public/examples/integrations/mcp-servers/jira/update_issue_example_call_tool.py index 06cfed513..91c88e51a 100644 --- a/public/examples/integrations/toolkits/jira/update_issue_example_call_tool.py +++ b/public/examples/integrations/mcp-servers/jira/update_issue_example_call_tool.py @@ -20,7 +20,7 @@ "assignee": "john.doe@example.com", "priority": "High", # Important: about the atlassian_cloud_id argument, please refer to the documentation at - # https://docs.arcade.dev/toolkits/productivity/jira#handling-multiple-atlassian-clouds + # https://docs.arcade.dev/mcp-servers/productivity/jira#handling-multiple-atlassian-clouds "atlassian_cloud_id": "13516a07-1725-4dc0-9ae7-13b5749dd747" } diff --git a/public/examples/integrations/toolkits/jira/who_am_i_example_call_tool.js b/public/examples/integrations/mcp-servers/jira/who_am_i_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/jira/who_am_i_example_call_tool.js rename to public/examples/integrations/mcp-servers/jira/who_am_i_example_call_tool.js diff --git a/public/examples/integrations/toolkits/jira/who_am_i_example_call_tool.py b/public/examples/integrations/mcp-servers/jira/who_am_i_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/jira/who_am_i_example_call_tool.py rename to public/examples/integrations/mcp-servers/jira/who_am_i_example_call_tool.py diff --git a/public/examples/integrations/toolkits/linear/get_issue_example_call_tool.js b/public/examples/integrations/mcp-servers/linear/get_issue_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/linear/get_issue_example_call_tool.js rename to public/examples/integrations/mcp-servers/linear/get_issue_example_call_tool.js diff --git a/public/examples/integrations/toolkits/linear/get_issue_example_call_tool.py b/public/examples/integrations/mcp-servers/linear/get_issue_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/linear/get_issue_example_call_tool.py rename to public/examples/integrations/mcp-servers/linear/get_issue_example_call_tool.py diff --git a/public/examples/integrations/mcp-servers/linear/get_teams_example_call_tool.js b/public/examples/integrations/mcp-servers/linear/get_teams_example_call_tool.js new file mode 100644 index 000000000..e69de29bb diff --git a/public/examples/integrations/toolkits/linear/get_teams_example_call_tool.py b/public/examples/integrations/mcp-servers/linear/get_teams_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/linear/get_teams_example_call_tool.py rename to public/examples/integrations/mcp-servers/linear/get_teams_example_call_tool.py diff --git a/public/examples/integrations/toolkits/linkedin/create_text_post_example_call_tool.js b/public/examples/integrations/mcp-servers/linkedin/create_text_post_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/linkedin/create_text_post_example_call_tool.js rename to public/examples/integrations/mcp-servers/linkedin/create_text_post_example_call_tool.js diff --git a/public/examples/integrations/toolkits/linkedin/create_text_post_example_call_tool.py b/public/examples/integrations/mcp-servers/linkedin/create_text_post_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/linkedin/create_text_post_example_call_tool.py rename to public/examples/integrations/mcp-servers/linkedin/create_text_post_example_call_tool.py diff --git a/public/examples/integrations/toolkits/microsoft/outlook_calendar/create_event_example_call_tool.js b/public/examples/integrations/mcp-servers/microsoft/outlook_calendar/create_event_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/microsoft/outlook_calendar/create_event_example_call_tool.js rename to public/examples/integrations/mcp-servers/microsoft/outlook_calendar/create_event_example_call_tool.js diff --git a/public/examples/integrations/toolkits/microsoft/outlook_calendar/create_event_example_call_tool.py b/public/examples/integrations/mcp-servers/microsoft/outlook_calendar/create_event_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/microsoft/outlook_calendar/create_event_example_call_tool.py rename to public/examples/integrations/mcp-servers/microsoft/outlook_calendar/create_event_example_call_tool.py diff --git a/public/examples/integrations/toolkits/microsoft/outlook_calendar/get_event_example_call_tool.js b/public/examples/integrations/mcp-servers/microsoft/outlook_calendar/get_event_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/microsoft/outlook_calendar/get_event_example_call_tool.js rename to public/examples/integrations/mcp-servers/microsoft/outlook_calendar/get_event_example_call_tool.js diff --git a/public/examples/integrations/toolkits/microsoft/outlook_calendar/get_event_example_call_tool.py b/public/examples/integrations/mcp-servers/microsoft/outlook_calendar/get_event_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/microsoft/outlook_calendar/get_event_example_call_tool.py rename to public/examples/integrations/mcp-servers/microsoft/outlook_calendar/get_event_example_call_tool.py diff --git a/public/examples/integrations/toolkits/microsoft/outlook_calendar/list_events_in_time_range_example_call_tool.js b/public/examples/integrations/mcp-servers/microsoft/outlook_calendar/list_events_in_time_range_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/microsoft/outlook_calendar/list_events_in_time_range_example_call_tool.js rename to public/examples/integrations/mcp-servers/microsoft/outlook_calendar/list_events_in_time_range_example_call_tool.js diff --git a/public/examples/integrations/toolkits/microsoft/outlook_calendar/list_events_in_time_range_example_call_tool.py b/public/examples/integrations/mcp-servers/microsoft/outlook_calendar/list_events_in_time_range_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/microsoft/outlook_calendar/list_events_in_time_range_example_call_tool.py rename to public/examples/integrations/mcp-servers/microsoft/outlook_calendar/list_events_in_time_range_example_call_tool.py diff --git a/public/examples/integrations/toolkits/microsoft/outlook_mail/create_and_send_email_example_call_tool.js b/public/examples/integrations/mcp-servers/microsoft/outlook_mail/create_and_send_email_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/microsoft/outlook_mail/create_and_send_email_example_call_tool.js rename to public/examples/integrations/mcp-servers/microsoft/outlook_mail/create_and_send_email_example_call_tool.js diff --git a/public/examples/integrations/toolkits/microsoft/outlook_mail/create_and_send_email_example_call_tool.py b/public/examples/integrations/mcp-servers/microsoft/outlook_mail/create_and_send_email_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/microsoft/outlook_mail/create_and_send_email_example_call_tool.py rename to public/examples/integrations/mcp-servers/microsoft/outlook_mail/create_and_send_email_example_call_tool.py diff --git a/public/examples/integrations/toolkits/microsoft/outlook_mail/create_draft_email_example_call_tool.js b/public/examples/integrations/mcp-servers/microsoft/outlook_mail/create_draft_email_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/microsoft/outlook_mail/create_draft_email_example_call_tool.js rename to public/examples/integrations/mcp-servers/microsoft/outlook_mail/create_draft_email_example_call_tool.js diff --git a/public/examples/integrations/toolkits/microsoft/outlook_mail/create_draft_email_example_call_tool.py b/public/examples/integrations/mcp-servers/microsoft/outlook_mail/create_draft_email_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/microsoft/outlook_mail/create_draft_email_example_call_tool.py rename to public/examples/integrations/mcp-servers/microsoft/outlook_mail/create_draft_email_example_call_tool.py diff --git a/public/examples/integrations/toolkits/microsoft/outlook_mail/list_emails_by_property_example_call_tool.js b/public/examples/integrations/mcp-servers/microsoft/outlook_mail/list_emails_by_property_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/microsoft/outlook_mail/list_emails_by_property_example_call_tool.js rename to public/examples/integrations/mcp-servers/microsoft/outlook_mail/list_emails_by_property_example_call_tool.js diff --git a/public/examples/integrations/toolkits/microsoft/outlook_mail/list_emails_by_property_example_call_tool.py b/public/examples/integrations/mcp-servers/microsoft/outlook_mail/list_emails_by_property_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/microsoft/outlook_mail/list_emails_by_property_example_call_tool.py rename to public/examples/integrations/mcp-servers/microsoft/outlook_mail/list_emails_by_property_example_call_tool.py diff --git a/public/examples/integrations/toolkits/microsoft/outlook_mail/list_emails_example_call_tool.js b/public/examples/integrations/mcp-servers/microsoft/outlook_mail/list_emails_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/microsoft/outlook_mail/list_emails_example_call_tool.js rename to public/examples/integrations/mcp-servers/microsoft/outlook_mail/list_emails_example_call_tool.js diff --git a/public/examples/integrations/toolkits/microsoft/outlook_mail/list_emails_example_call_tool.py b/public/examples/integrations/mcp-servers/microsoft/outlook_mail/list_emails_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/microsoft/outlook_mail/list_emails_example_call_tool.py rename to public/examples/integrations/mcp-servers/microsoft/outlook_mail/list_emails_example_call_tool.py diff --git a/public/examples/integrations/toolkits/microsoft/outlook_mail/list_emails_in_folder_example_call_tool.js b/public/examples/integrations/mcp-servers/microsoft/outlook_mail/list_emails_in_folder_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/microsoft/outlook_mail/list_emails_in_folder_example_call_tool.js rename to public/examples/integrations/mcp-servers/microsoft/outlook_mail/list_emails_in_folder_example_call_tool.js diff --git a/public/examples/integrations/toolkits/microsoft/outlook_mail/list_emails_in_folder_example_call_tool.py b/public/examples/integrations/mcp-servers/microsoft/outlook_mail/list_emails_in_folder_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/microsoft/outlook_mail/list_emails_in_folder_example_call_tool.py rename to public/examples/integrations/mcp-servers/microsoft/outlook_mail/list_emails_in_folder_example_call_tool.py diff --git a/public/examples/integrations/toolkits/microsoft/outlook_mail/reply_to_email_example_call_tool.js b/public/examples/integrations/mcp-servers/microsoft/outlook_mail/reply_to_email_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/microsoft/outlook_mail/reply_to_email_example_call_tool.js rename to public/examples/integrations/mcp-servers/microsoft/outlook_mail/reply_to_email_example_call_tool.js diff --git a/public/examples/integrations/toolkits/microsoft/outlook_mail/reply_to_email_example_call_tool.py b/public/examples/integrations/mcp-servers/microsoft/outlook_mail/reply_to_email_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/microsoft/outlook_mail/reply_to_email_example_call_tool.py rename to public/examples/integrations/mcp-servers/microsoft/outlook_mail/reply_to_email_example_call_tool.py diff --git a/public/examples/integrations/toolkits/microsoft/outlook_mail/send_draft_email_example_call_tool.js b/public/examples/integrations/mcp-servers/microsoft/outlook_mail/send_draft_email_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/microsoft/outlook_mail/send_draft_email_example_call_tool.js rename to public/examples/integrations/mcp-servers/microsoft/outlook_mail/send_draft_email_example_call_tool.js diff --git a/public/examples/integrations/toolkits/microsoft/outlook_mail/send_draft_email_example_call_tool.py b/public/examples/integrations/mcp-servers/microsoft/outlook_mail/send_draft_email_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/microsoft/outlook_mail/send_draft_email_example_call_tool.py rename to public/examples/integrations/mcp-servers/microsoft/outlook_mail/send_draft_email_example_call_tool.py diff --git a/public/examples/integrations/toolkits/microsoft/outlook_mail/update_draft_email_example_call_tool.js b/public/examples/integrations/mcp-servers/microsoft/outlook_mail/update_draft_email_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/microsoft/outlook_mail/update_draft_email_example_call_tool.js rename to public/examples/integrations/mcp-servers/microsoft/outlook_mail/update_draft_email_example_call_tool.js diff --git a/public/examples/integrations/toolkits/microsoft/outlook_mail/update_draft_email_example_call_tool.py b/public/examples/integrations/mcp-servers/microsoft/outlook_mail/update_draft_email_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/microsoft/outlook_mail/update_draft_email_example_call_tool.py rename to public/examples/integrations/mcp-servers/microsoft/outlook_mail/update_draft_email_example_call_tool.py diff --git a/public/examples/integrations/toolkits/microsoft_teams/create_chat_example_call_tool.js b/public/examples/integrations/mcp-servers/microsoft_teams/create_chat_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/microsoft_teams/create_chat_example_call_tool.js rename to public/examples/integrations/mcp-servers/microsoft_teams/create_chat_example_call_tool.js diff --git a/public/examples/integrations/toolkits/microsoft_teams/create_chat_example_call_tool.py b/public/examples/integrations/mcp-servers/microsoft_teams/create_chat_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/microsoft_teams/create_chat_example_call_tool.py rename to public/examples/integrations/mcp-servers/microsoft_teams/create_chat_example_call_tool.py diff --git a/public/examples/integrations/toolkits/microsoft_teams/get_channel_message_replies_example_call_tool.js b/public/examples/integrations/mcp-servers/microsoft_teams/get_channel_message_replies_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/microsoft_teams/get_channel_message_replies_example_call_tool.js rename to public/examples/integrations/mcp-servers/microsoft_teams/get_channel_message_replies_example_call_tool.js diff --git a/public/examples/integrations/toolkits/microsoft_teams/get_channel_message_replies_example_call_tool.py b/public/examples/integrations/mcp-servers/microsoft_teams/get_channel_message_replies_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/microsoft_teams/get_channel_message_replies_example_call_tool.py rename to public/examples/integrations/mcp-servers/microsoft_teams/get_channel_message_replies_example_call_tool.py diff --git a/public/examples/integrations/toolkits/microsoft_teams/get_channel_messages_example_call_tool.js b/public/examples/integrations/mcp-servers/microsoft_teams/get_channel_messages_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/microsoft_teams/get_channel_messages_example_call_tool.js rename to public/examples/integrations/mcp-servers/microsoft_teams/get_channel_messages_example_call_tool.js diff --git a/public/examples/integrations/toolkits/microsoft_teams/get_channel_messages_example_call_tool.py b/public/examples/integrations/mcp-servers/microsoft_teams/get_channel_messages_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/microsoft_teams/get_channel_messages_example_call_tool.py rename to public/examples/integrations/mcp-servers/microsoft_teams/get_channel_messages_example_call_tool.py diff --git a/public/examples/integrations/toolkits/microsoft_teams/get_channel_metadata_example_call_tool.js b/public/examples/integrations/mcp-servers/microsoft_teams/get_channel_metadata_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/microsoft_teams/get_channel_metadata_example_call_tool.js rename to public/examples/integrations/mcp-servers/microsoft_teams/get_channel_metadata_example_call_tool.js diff --git a/public/examples/integrations/toolkits/microsoft_teams/get_channel_metadata_example_call_tool.py b/public/examples/integrations/mcp-servers/microsoft_teams/get_channel_metadata_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/microsoft_teams/get_channel_metadata_example_call_tool.py rename to public/examples/integrations/mcp-servers/microsoft_teams/get_channel_metadata_example_call_tool.py diff --git a/public/examples/integrations/toolkits/microsoft_teams/get_chat_message_by_id_example_call_tool.js b/public/examples/integrations/mcp-servers/microsoft_teams/get_chat_message_by_id_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/microsoft_teams/get_chat_message_by_id_example_call_tool.js rename to public/examples/integrations/mcp-servers/microsoft_teams/get_chat_message_by_id_example_call_tool.js diff --git a/public/examples/integrations/toolkits/microsoft_teams/get_chat_message_by_id_example_call_tool.py b/public/examples/integrations/mcp-servers/microsoft_teams/get_chat_message_by_id_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/microsoft_teams/get_chat_message_by_id_example_call_tool.py rename to public/examples/integrations/mcp-servers/microsoft_teams/get_chat_message_by_id_example_call_tool.py diff --git a/public/examples/integrations/toolkits/microsoft_teams/get_chat_messages_example_call_tool.js b/public/examples/integrations/mcp-servers/microsoft_teams/get_chat_messages_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/microsoft_teams/get_chat_messages_example_call_tool.js rename to public/examples/integrations/mcp-servers/microsoft_teams/get_chat_messages_example_call_tool.js diff --git a/public/examples/integrations/toolkits/microsoft_teams/get_chat_messages_example_call_tool.py b/public/examples/integrations/mcp-servers/microsoft_teams/get_chat_messages_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/microsoft_teams/get_chat_messages_example_call_tool.py rename to public/examples/integrations/mcp-servers/microsoft_teams/get_chat_messages_example_call_tool.py diff --git a/public/examples/integrations/toolkits/microsoft_teams/get_chat_metadata_example_call_tool.js b/public/examples/integrations/mcp-servers/microsoft_teams/get_chat_metadata_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/microsoft_teams/get_chat_metadata_example_call_tool.js rename to public/examples/integrations/mcp-servers/microsoft_teams/get_chat_metadata_example_call_tool.js diff --git a/public/examples/integrations/toolkits/microsoft_teams/get_chat_metadata_example_call_tool.py b/public/examples/integrations/mcp-servers/microsoft_teams/get_chat_metadata_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/microsoft_teams/get_chat_metadata_example_call_tool.py rename to public/examples/integrations/mcp-servers/microsoft_teams/get_chat_metadata_example_call_tool.py diff --git a/public/examples/integrations/toolkits/microsoft_teams/get_signed_in_user_example_call_tool.js b/public/examples/integrations/mcp-servers/microsoft_teams/get_signed_in_user_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/microsoft_teams/get_signed_in_user_example_call_tool.js rename to public/examples/integrations/mcp-servers/microsoft_teams/get_signed_in_user_example_call_tool.js diff --git a/public/examples/integrations/toolkits/microsoft_teams/get_signed_in_user_example_call_tool.py b/public/examples/integrations/mcp-servers/microsoft_teams/get_signed_in_user_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/microsoft_teams/get_signed_in_user_example_call_tool.py rename to public/examples/integrations/mcp-servers/microsoft_teams/get_signed_in_user_example_call_tool.py diff --git a/public/examples/integrations/toolkits/microsoft_teams/get_team_example_call_tool.js b/public/examples/integrations/mcp-servers/microsoft_teams/get_team_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/microsoft_teams/get_team_example_call_tool.js rename to public/examples/integrations/mcp-servers/microsoft_teams/get_team_example_call_tool.js diff --git a/public/examples/integrations/toolkits/microsoft_teams/get_team_example_call_tool.py b/public/examples/integrations/mcp-servers/microsoft_teams/get_team_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/microsoft_teams/get_team_example_call_tool.py rename to public/examples/integrations/mcp-servers/microsoft_teams/get_team_example_call_tool.py diff --git a/public/examples/integrations/toolkits/microsoft_teams/list_channels_example_call_tool.js b/public/examples/integrations/mcp-servers/microsoft_teams/list_channels_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/microsoft_teams/list_channels_example_call_tool.js rename to public/examples/integrations/mcp-servers/microsoft_teams/list_channels_example_call_tool.js diff --git a/public/examples/integrations/toolkits/microsoft_teams/list_channels_example_call_tool.py b/public/examples/integrations/mcp-servers/microsoft_teams/list_channels_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/microsoft_teams/list_channels_example_call_tool.py rename to public/examples/integrations/mcp-servers/microsoft_teams/list_channels_example_call_tool.py diff --git a/public/examples/integrations/toolkits/microsoft_teams/list_chats_example_call_tool.js b/public/examples/integrations/mcp-servers/microsoft_teams/list_chats_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/microsoft_teams/list_chats_example_call_tool.js rename to public/examples/integrations/mcp-servers/microsoft_teams/list_chats_example_call_tool.js diff --git a/public/examples/integrations/toolkits/microsoft_teams/list_chats_example_call_tool.py b/public/examples/integrations/mcp-servers/microsoft_teams/list_chats_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/microsoft_teams/list_chats_example_call_tool.py rename to public/examples/integrations/mcp-servers/microsoft_teams/list_chats_example_call_tool.py diff --git a/public/examples/integrations/toolkits/microsoft_teams/list_team_members_example_call_tool.js b/public/examples/integrations/mcp-servers/microsoft_teams/list_team_members_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/microsoft_teams/list_team_members_example_call_tool.js rename to public/examples/integrations/mcp-servers/microsoft_teams/list_team_members_example_call_tool.js diff --git a/public/examples/integrations/toolkits/microsoft_teams/list_team_members_example_call_tool.py b/public/examples/integrations/mcp-servers/microsoft_teams/list_team_members_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/microsoft_teams/list_team_members_example_call_tool.py rename to public/examples/integrations/mcp-servers/microsoft_teams/list_team_members_example_call_tool.py diff --git a/public/examples/integrations/toolkits/microsoft_teams/list_teams_example_call_tool.js b/public/examples/integrations/mcp-servers/microsoft_teams/list_teams_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/microsoft_teams/list_teams_example_call_tool.js rename to public/examples/integrations/mcp-servers/microsoft_teams/list_teams_example_call_tool.js diff --git a/public/examples/integrations/toolkits/microsoft_teams/list_teams_example_call_tool.py b/public/examples/integrations/mcp-servers/microsoft_teams/list_teams_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/microsoft_teams/list_teams_example_call_tool.py rename to public/examples/integrations/mcp-servers/microsoft_teams/list_teams_example_call_tool.py diff --git a/public/examples/integrations/toolkits/microsoft_teams/list_users_example_call_tool.js b/public/examples/integrations/mcp-servers/microsoft_teams/list_users_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/microsoft_teams/list_users_example_call_tool.js rename to public/examples/integrations/mcp-servers/microsoft_teams/list_users_example_call_tool.js diff --git a/public/examples/integrations/toolkits/microsoft_teams/list_users_example_call_tool.py b/public/examples/integrations/mcp-servers/microsoft_teams/list_users_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/microsoft_teams/list_users_example_call_tool.py rename to public/examples/integrations/mcp-servers/microsoft_teams/list_users_example_call_tool.py diff --git a/public/examples/integrations/toolkits/microsoft_teams/reply_to_channel_message_example_call_tool.js b/public/examples/integrations/mcp-servers/microsoft_teams/reply_to_channel_message_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/microsoft_teams/reply_to_channel_message_example_call_tool.js rename to public/examples/integrations/mcp-servers/microsoft_teams/reply_to_channel_message_example_call_tool.js diff --git a/public/examples/integrations/toolkits/microsoft_teams/reply_to_channel_message_example_call_tool.py b/public/examples/integrations/mcp-servers/microsoft_teams/reply_to_channel_message_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/microsoft_teams/reply_to_channel_message_example_call_tool.py rename to public/examples/integrations/mcp-servers/microsoft_teams/reply_to_channel_message_example_call_tool.py diff --git a/public/examples/integrations/toolkits/microsoft_teams/reply_to_chat_message_example_call_tool.js b/public/examples/integrations/mcp-servers/microsoft_teams/reply_to_chat_message_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/microsoft_teams/reply_to_chat_message_example_call_tool.js rename to public/examples/integrations/mcp-servers/microsoft_teams/reply_to_chat_message_example_call_tool.js diff --git a/public/examples/integrations/toolkits/microsoft_teams/reply_to_chat_message_example_call_tool.py b/public/examples/integrations/mcp-servers/microsoft_teams/reply_to_chat_message_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/microsoft_teams/reply_to_chat_message_example_call_tool.py rename to public/examples/integrations/mcp-servers/microsoft_teams/reply_to_chat_message_example_call_tool.py diff --git a/public/examples/integrations/toolkits/microsoft_teams/search_channels_example_call_tool.js b/public/examples/integrations/mcp-servers/microsoft_teams/search_channels_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/microsoft_teams/search_channels_example_call_tool.js rename to public/examples/integrations/mcp-servers/microsoft_teams/search_channels_example_call_tool.js diff --git a/public/examples/integrations/toolkits/microsoft_teams/search_channels_example_call_tool.py b/public/examples/integrations/mcp-servers/microsoft_teams/search_channels_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/microsoft_teams/search_channels_example_call_tool.py rename to public/examples/integrations/mcp-servers/microsoft_teams/search_channels_example_call_tool.py diff --git a/public/examples/integrations/toolkits/microsoft_teams/search_messages_example_call_tool.js b/public/examples/integrations/mcp-servers/microsoft_teams/search_messages_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/microsoft_teams/search_messages_example_call_tool.js rename to public/examples/integrations/mcp-servers/microsoft_teams/search_messages_example_call_tool.js diff --git a/public/examples/integrations/toolkits/microsoft_teams/search_messages_example_call_tool.py b/public/examples/integrations/mcp-servers/microsoft_teams/search_messages_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/microsoft_teams/search_messages_example_call_tool.py rename to public/examples/integrations/mcp-servers/microsoft_teams/search_messages_example_call_tool.py diff --git a/public/examples/integrations/toolkits/microsoft_teams/search_people_example_call_tool.js b/public/examples/integrations/mcp-servers/microsoft_teams/search_people_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/microsoft_teams/search_people_example_call_tool.js rename to public/examples/integrations/mcp-servers/microsoft_teams/search_people_example_call_tool.js diff --git a/public/examples/integrations/toolkits/microsoft_teams/search_people_example_call_tool.py b/public/examples/integrations/mcp-servers/microsoft_teams/search_people_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/microsoft_teams/search_people_example_call_tool.py rename to public/examples/integrations/mcp-servers/microsoft_teams/search_people_example_call_tool.py diff --git a/public/examples/integrations/toolkits/microsoft_teams/search_team_members_example_call_tool.js b/public/examples/integrations/mcp-servers/microsoft_teams/search_team_members_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/microsoft_teams/search_team_members_example_call_tool.js rename to public/examples/integrations/mcp-servers/microsoft_teams/search_team_members_example_call_tool.js diff --git a/public/examples/integrations/toolkits/microsoft_teams/search_team_members_example_call_tool.py b/public/examples/integrations/mcp-servers/microsoft_teams/search_team_members_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/microsoft_teams/search_team_members_example_call_tool.py rename to public/examples/integrations/mcp-servers/microsoft_teams/search_team_members_example_call_tool.py diff --git a/public/examples/integrations/toolkits/microsoft_teams/search_teams_example_call_tool.js b/public/examples/integrations/mcp-servers/microsoft_teams/search_teams_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/microsoft_teams/search_teams_example_call_tool.js rename to public/examples/integrations/mcp-servers/microsoft_teams/search_teams_example_call_tool.js diff --git a/public/examples/integrations/toolkits/microsoft_teams/search_teams_example_call_tool.py b/public/examples/integrations/mcp-servers/microsoft_teams/search_teams_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/microsoft_teams/search_teams_example_call_tool.py rename to public/examples/integrations/mcp-servers/microsoft_teams/search_teams_example_call_tool.py diff --git a/public/examples/integrations/toolkits/microsoft_teams/search_users_example_call_tool.js b/public/examples/integrations/mcp-servers/microsoft_teams/search_users_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/microsoft_teams/search_users_example_call_tool.js rename to public/examples/integrations/mcp-servers/microsoft_teams/search_users_example_call_tool.js diff --git a/public/examples/integrations/toolkits/microsoft_teams/search_users_example_call_tool.py b/public/examples/integrations/mcp-servers/microsoft_teams/search_users_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/microsoft_teams/search_users_example_call_tool.py rename to public/examples/integrations/mcp-servers/microsoft_teams/search_users_example_call_tool.py diff --git a/public/examples/integrations/toolkits/microsoft_teams/send_message_to_channel_example_call_tool.js b/public/examples/integrations/mcp-servers/microsoft_teams/send_message_to_channel_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/microsoft_teams/send_message_to_channel_example_call_tool.js rename to public/examples/integrations/mcp-servers/microsoft_teams/send_message_to_channel_example_call_tool.js diff --git a/public/examples/integrations/toolkits/microsoft_teams/send_message_to_channel_example_call_tool.py b/public/examples/integrations/mcp-servers/microsoft_teams/send_message_to_channel_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/microsoft_teams/send_message_to_channel_example_call_tool.py rename to public/examples/integrations/mcp-servers/microsoft_teams/send_message_to_channel_example_call_tool.py diff --git a/public/examples/integrations/toolkits/microsoft_teams/send_message_to_chat_example_call_tool.js b/public/examples/integrations/mcp-servers/microsoft_teams/send_message_to_chat_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/microsoft_teams/send_message_to_chat_example_call_tool.js rename to public/examples/integrations/mcp-servers/microsoft_teams/send_message_to_chat_example_call_tool.js diff --git a/public/examples/integrations/toolkits/microsoft_teams/send_message_to_chat_example_call_tool.py b/public/examples/integrations/mcp-servers/microsoft_teams/send_message_to_chat_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/microsoft_teams/send_message_to_chat_example_call_tool.py rename to public/examples/integrations/mcp-servers/microsoft_teams/send_message_to_chat_example_call_tool.py diff --git a/public/examples/integrations/toolkits/microsoft_teams/who_am_i_example_call_tool.js b/public/examples/integrations/mcp-servers/microsoft_teams/who_am_i_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/microsoft_teams/who_am_i_example_call_tool.js rename to public/examples/integrations/mcp-servers/microsoft_teams/who_am_i_example_call_tool.js diff --git a/public/examples/integrations/toolkits/microsoft_teams/who_am_i_example_call_tool.py b/public/examples/integrations/mcp-servers/microsoft_teams/who_am_i_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/microsoft_teams/who_am_i_example_call_tool.py rename to public/examples/integrations/mcp-servers/microsoft_teams/who_am_i_example_call_tool.py diff --git a/public/examples/integrations/toolkits/mongodb/aggregate_documents_example_call_tool.js b/public/examples/integrations/mcp-servers/mongodb/aggregate_documents_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/mongodb/aggregate_documents_example_call_tool.js rename to public/examples/integrations/mcp-servers/mongodb/aggregate_documents_example_call_tool.js diff --git a/public/examples/integrations/toolkits/mongodb/aggregate_documents_example_call_tool.py b/public/examples/integrations/mcp-servers/mongodb/aggregate_documents_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/mongodb/aggregate_documents_example_call_tool.py rename to public/examples/integrations/mcp-servers/mongodb/aggregate_documents_example_call_tool.py diff --git a/public/examples/integrations/toolkits/mongodb/count_documents_example_call_tool.js b/public/examples/integrations/mcp-servers/mongodb/count_documents_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/mongodb/count_documents_example_call_tool.js rename to public/examples/integrations/mcp-servers/mongodb/count_documents_example_call_tool.js diff --git a/public/examples/integrations/toolkits/mongodb/count_documents_example_call_tool.py b/public/examples/integrations/mcp-servers/mongodb/count_documents_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/mongodb/count_documents_example_call_tool.py rename to public/examples/integrations/mcp-servers/mongodb/count_documents_example_call_tool.py diff --git a/public/examples/integrations/toolkits/mongodb/discover_collections_example_call_tool.js b/public/examples/integrations/mcp-servers/mongodb/discover_collections_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/mongodb/discover_collections_example_call_tool.js rename to public/examples/integrations/mcp-servers/mongodb/discover_collections_example_call_tool.js diff --git a/public/examples/integrations/toolkits/mongodb/discover_collections_example_call_tool.py b/public/examples/integrations/mcp-servers/mongodb/discover_collections_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/mongodb/discover_collections_example_call_tool.py rename to public/examples/integrations/mcp-servers/mongodb/discover_collections_example_call_tool.py diff --git a/public/examples/integrations/toolkits/mongodb/discover_databases_example_call_tool.js b/public/examples/integrations/mcp-servers/mongodb/discover_databases_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/mongodb/discover_databases_example_call_tool.js rename to public/examples/integrations/mcp-servers/mongodb/discover_databases_example_call_tool.js diff --git a/public/examples/integrations/toolkits/mongodb/discover_databases_example_call_tool.py b/public/examples/integrations/mcp-servers/mongodb/discover_databases_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/mongodb/discover_databases_example_call_tool.py rename to public/examples/integrations/mcp-servers/mongodb/discover_databases_example_call_tool.py diff --git a/public/examples/integrations/toolkits/mongodb/find_documents_example_call_tool.js b/public/examples/integrations/mcp-servers/mongodb/find_documents_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/mongodb/find_documents_example_call_tool.js rename to public/examples/integrations/mcp-servers/mongodb/find_documents_example_call_tool.js diff --git a/public/examples/integrations/toolkits/mongodb/find_documents_example_call_tool.py b/public/examples/integrations/mcp-servers/mongodb/find_documents_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/mongodb/find_documents_example_call_tool.py rename to public/examples/integrations/mcp-servers/mongodb/find_documents_example_call_tool.py diff --git a/public/examples/integrations/toolkits/mongodb/get_collection_schema_example_call_tool.js b/public/examples/integrations/mcp-servers/mongodb/get_collection_schema_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/mongodb/get_collection_schema_example_call_tool.js rename to public/examples/integrations/mcp-servers/mongodb/get_collection_schema_example_call_tool.js diff --git a/public/examples/integrations/toolkits/mongodb/get_collection_schema_example_call_tool.py b/public/examples/integrations/mcp-servers/mongodb/get_collection_schema_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/mongodb/get_collection_schema_example_call_tool.py rename to public/examples/integrations/mcp-servers/mongodb/get_collection_schema_example_call_tool.py diff --git a/public/examples/integrations/toolkits/notion/append_content_to_end_of_page.js b/public/examples/integrations/mcp-servers/notion/append_content_to_end_of_page.js similarity index 100% rename from public/examples/integrations/toolkits/notion/append_content_to_end_of_page.js rename to public/examples/integrations/mcp-servers/notion/append_content_to_end_of_page.js diff --git a/public/examples/integrations/toolkits/notion/append_content_to_end_of_page.py b/public/examples/integrations/mcp-servers/notion/append_content_to_end_of_page.py similarity index 100% rename from public/examples/integrations/toolkits/notion/append_content_to_end_of_page.py rename to public/examples/integrations/mcp-servers/notion/append_content_to_end_of_page.py diff --git a/public/examples/integrations/toolkits/notion/create_page_example_call_tool.js b/public/examples/integrations/mcp-servers/notion/create_page_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/notion/create_page_example_call_tool.js rename to public/examples/integrations/mcp-servers/notion/create_page_example_call_tool.js diff --git a/public/examples/integrations/toolkits/notion/create_page_example_call_tool.py b/public/examples/integrations/mcp-servers/notion/create_page_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/notion/create_page_example_call_tool.py rename to public/examples/integrations/mcp-servers/notion/create_page_example_call_tool.py diff --git a/public/examples/integrations/toolkits/notion/get_object_metadata_example_call_tool.js b/public/examples/integrations/mcp-servers/notion/get_object_metadata_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/notion/get_object_metadata_example_call_tool.js rename to public/examples/integrations/mcp-servers/notion/get_object_metadata_example_call_tool.js diff --git a/public/examples/integrations/toolkits/notion/get_object_metadata_example_call_tool.py b/public/examples/integrations/mcp-servers/notion/get_object_metadata_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/notion/get_object_metadata_example_call_tool.py rename to public/examples/integrations/mcp-servers/notion/get_object_metadata_example_call_tool.py diff --git a/public/examples/integrations/toolkits/notion/get_page_content_by_id_example_call_tool.js b/public/examples/integrations/mcp-servers/notion/get_page_content_by_id_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/notion/get_page_content_by_id_example_call_tool.js rename to public/examples/integrations/mcp-servers/notion/get_page_content_by_id_example_call_tool.js diff --git a/public/examples/integrations/toolkits/notion/get_page_content_by_id_example_call_tool.py b/public/examples/integrations/mcp-servers/notion/get_page_content_by_id_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/notion/get_page_content_by_id_example_call_tool.py rename to public/examples/integrations/mcp-servers/notion/get_page_content_by_id_example_call_tool.py diff --git a/public/examples/integrations/toolkits/notion/get_page_content_by_title_example_call_tool.js b/public/examples/integrations/mcp-servers/notion/get_page_content_by_title_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/notion/get_page_content_by_title_example_call_tool.js rename to public/examples/integrations/mcp-servers/notion/get_page_content_by_title_example_call_tool.js diff --git a/public/examples/integrations/toolkits/notion/get_page_content_by_title_example_call_tool.py b/public/examples/integrations/mcp-servers/notion/get_page_content_by_title_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/notion/get_page_content_by_title_example_call_tool.py rename to public/examples/integrations/mcp-servers/notion/get_page_content_by_title_example_call_tool.py diff --git a/public/examples/integrations/toolkits/notion/get_workspace_structure_example_call_tool.js b/public/examples/integrations/mcp-servers/notion/get_workspace_structure_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/notion/get_workspace_structure_example_call_tool.js rename to public/examples/integrations/mcp-servers/notion/get_workspace_structure_example_call_tool.js diff --git a/public/examples/integrations/toolkits/notion/get_workspace_structure_example_call_tool.py b/public/examples/integrations/mcp-servers/notion/get_workspace_structure_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/notion/get_workspace_structure_example_call_tool.py rename to public/examples/integrations/mcp-servers/notion/get_workspace_structure_example_call_tool.py diff --git a/public/examples/integrations/toolkits/notion/search_by_title_example_call_tool.js b/public/examples/integrations/mcp-servers/notion/search_by_title_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/notion/search_by_title_example_call_tool.js rename to public/examples/integrations/mcp-servers/notion/search_by_title_example_call_tool.js diff --git a/public/examples/integrations/toolkits/notion/search_by_title_example_call_tool.py b/public/examples/integrations/mcp-servers/notion/search_by_title_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/notion/search_by_title_example_call_tool.py rename to public/examples/integrations/mcp-servers/notion/search_by_title_example_call_tool.py diff --git a/public/examples/integrations/toolkits/notion/who_am_i_example_call_tool.js b/public/examples/integrations/mcp-servers/notion/who_am_i_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/notion/who_am_i_example_call_tool.js rename to public/examples/integrations/mcp-servers/notion/who_am_i_example_call_tool.js diff --git a/public/examples/integrations/toolkits/notion/who_am_i_example_call_tool.py b/public/examples/integrations/mcp-servers/notion/who_am_i_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/notion/who_am_i_example_call_tool.py rename to public/examples/integrations/mcp-servers/notion/who_am_i_example_call_tool.py diff --git a/public/examples/integrations/toolkits/outlook_calendar/who_am_i_example_call_tool.js b/public/examples/integrations/mcp-servers/outlook_calendar/who_am_i_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/outlook_calendar/who_am_i_example_call_tool.js rename to public/examples/integrations/mcp-servers/outlook_calendar/who_am_i_example_call_tool.js diff --git a/public/examples/integrations/toolkits/outlook_calendar/who_am_i_example_call_tool.py b/public/examples/integrations/mcp-servers/outlook_calendar/who_am_i_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/outlook_calendar/who_am_i_example_call_tool.py rename to public/examples/integrations/mcp-servers/outlook_calendar/who_am_i_example_call_tool.py diff --git a/public/examples/integrations/toolkits/outlook_mail/who_am_i_example_call_tool.js b/public/examples/integrations/mcp-servers/outlook_mail/who_am_i_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/outlook_mail/who_am_i_example_call_tool.js rename to public/examples/integrations/mcp-servers/outlook_mail/who_am_i_example_call_tool.js diff --git a/public/examples/integrations/toolkits/outlook_mail/who_am_i_example_call_tool.py b/public/examples/integrations/mcp-servers/outlook_mail/who_am_i_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/outlook_mail/who_am_i_example_call_tool.py rename to public/examples/integrations/mcp-servers/outlook_mail/who_am_i_example_call_tool.py diff --git a/public/examples/integrations/toolkits/postgres/discover_schemas_example_call_tool.js b/public/examples/integrations/mcp-servers/postgres/discover_schemas_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/postgres/discover_schemas_example_call_tool.js rename to public/examples/integrations/mcp-servers/postgres/discover_schemas_example_call_tool.js diff --git a/public/examples/integrations/toolkits/postgres/discover_schemas_example_call_tool.py b/public/examples/integrations/mcp-servers/postgres/discover_schemas_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/postgres/discover_schemas_example_call_tool.py rename to public/examples/integrations/mcp-servers/postgres/discover_schemas_example_call_tool.py diff --git a/public/examples/integrations/toolkits/postgres/discover_tables_example_call_tool.js b/public/examples/integrations/mcp-servers/postgres/discover_tables_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/postgres/discover_tables_example_call_tool.js rename to public/examples/integrations/mcp-servers/postgres/discover_tables_example_call_tool.js diff --git a/public/examples/integrations/toolkits/postgres/discover_tables_example_call_tool.py b/public/examples/integrations/mcp-servers/postgres/discover_tables_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/postgres/discover_tables_example_call_tool.py rename to public/examples/integrations/mcp-servers/postgres/discover_tables_example_call_tool.py diff --git a/public/examples/integrations/toolkits/postgres/execute_select_query_example_call_tool.js b/public/examples/integrations/mcp-servers/postgres/execute_select_query_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/postgres/execute_select_query_example_call_tool.js rename to public/examples/integrations/mcp-servers/postgres/execute_select_query_example_call_tool.js diff --git a/public/examples/integrations/toolkits/postgres/execute_select_query_example_call_tool.py b/public/examples/integrations/mcp-servers/postgres/execute_select_query_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/postgres/execute_select_query_example_call_tool.py rename to public/examples/integrations/mcp-servers/postgres/execute_select_query_example_call_tool.py diff --git a/public/examples/integrations/toolkits/postgres/get_table_schema_example_call_tool.js b/public/examples/integrations/mcp-servers/postgres/get_table_schema_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/postgres/get_table_schema_example_call_tool.js rename to public/examples/integrations/mcp-servers/postgres/get_table_schema_example_call_tool.js diff --git a/public/examples/integrations/toolkits/postgres/get_table_schema_example_call_tool.py b/public/examples/integrations/mcp-servers/postgres/get_table_schema_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/postgres/get_table_schema_example_call_tool.py rename to public/examples/integrations/mcp-servers/postgres/get_table_schema_example_call_tool.py diff --git a/public/examples/integrations/toolkits/reddit/check_subreddit_access_example_call_tool.js b/public/examples/integrations/mcp-servers/reddit/check_subreddit_access_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/reddit/check_subreddit_access_example_call_tool.js rename to public/examples/integrations/mcp-servers/reddit/check_subreddit_access_example_call_tool.js diff --git a/public/examples/integrations/toolkits/reddit/check_subreddit_access_example_call_tool.py b/public/examples/integrations/mcp-servers/reddit/check_subreddit_access_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/reddit/check_subreddit_access_example_call_tool.py rename to public/examples/integrations/mcp-servers/reddit/check_subreddit_access_example_call_tool.py diff --git a/public/examples/integrations/toolkits/reddit/comment_on_post_example_call_tool.js b/public/examples/integrations/mcp-servers/reddit/comment_on_post_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/reddit/comment_on_post_example_call_tool.js rename to public/examples/integrations/mcp-servers/reddit/comment_on_post_example_call_tool.js diff --git a/public/examples/integrations/toolkits/reddit/comment_on_post_example_call_tool.py b/public/examples/integrations/mcp-servers/reddit/comment_on_post_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/reddit/comment_on_post_example_call_tool.py rename to public/examples/integrations/mcp-servers/reddit/comment_on_post_example_call_tool.py diff --git a/public/examples/integrations/toolkits/reddit/get_content_of_multiple_posts_example_call_tool.js b/public/examples/integrations/mcp-servers/reddit/get_content_of_multiple_posts_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/reddit/get_content_of_multiple_posts_example_call_tool.js rename to public/examples/integrations/mcp-servers/reddit/get_content_of_multiple_posts_example_call_tool.js diff --git a/public/examples/integrations/toolkits/reddit/get_content_of_multiple_posts_example_call_tool.py b/public/examples/integrations/mcp-servers/reddit/get_content_of_multiple_posts_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/reddit/get_content_of_multiple_posts_example_call_tool.py rename to public/examples/integrations/mcp-servers/reddit/get_content_of_multiple_posts_example_call_tool.py diff --git a/public/examples/integrations/toolkits/reddit/get_content_of_post_example_call_tool.js b/public/examples/integrations/mcp-servers/reddit/get_content_of_post_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/reddit/get_content_of_post_example_call_tool.js rename to public/examples/integrations/mcp-servers/reddit/get_content_of_post_example_call_tool.js diff --git a/public/examples/integrations/toolkits/reddit/get_content_of_post_example_call_tool.py b/public/examples/integrations/mcp-servers/reddit/get_content_of_post_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/reddit/get_content_of_post_example_call_tool.py rename to public/examples/integrations/mcp-servers/reddit/get_content_of_post_example_call_tool.py diff --git a/public/examples/integrations/toolkits/reddit/get_my_posts_example_call_tool.js b/public/examples/integrations/mcp-servers/reddit/get_my_posts_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/reddit/get_my_posts_example_call_tool.js rename to public/examples/integrations/mcp-servers/reddit/get_my_posts_example_call_tool.js diff --git a/public/examples/integrations/toolkits/reddit/get_my_posts_example_call_tool.py b/public/examples/integrations/mcp-servers/reddit/get_my_posts_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/reddit/get_my_posts_example_call_tool.py rename to public/examples/integrations/mcp-servers/reddit/get_my_posts_example_call_tool.py diff --git a/public/examples/integrations/toolkits/reddit/get_my_username_example_call_tool.js b/public/examples/integrations/mcp-servers/reddit/get_my_username_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/reddit/get_my_username_example_call_tool.js rename to public/examples/integrations/mcp-servers/reddit/get_my_username_example_call_tool.js diff --git a/public/examples/integrations/toolkits/reddit/get_my_username_example_call_tool.py b/public/examples/integrations/mcp-servers/reddit/get_my_username_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/reddit/get_my_username_example_call_tool.py rename to public/examples/integrations/mcp-servers/reddit/get_my_username_example_call_tool.py diff --git a/public/examples/integrations/toolkits/reddit/get_posts_in_subreddit_example_call_tool.js b/public/examples/integrations/mcp-servers/reddit/get_posts_in_subreddit_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/reddit/get_posts_in_subreddit_example_call_tool.js rename to public/examples/integrations/mcp-servers/reddit/get_posts_in_subreddit_example_call_tool.js diff --git a/public/examples/integrations/toolkits/reddit/get_posts_in_subreddit_example_call_tool.py b/public/examples/integrations/mcp-servers/reddit/get_posts_in_subreddit_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/reddit/get_posts_in_subreddit_example_call_tool.py rename to public/examples/integrations/mcp-servers/reddit/get_posts_in_subreddit_example_call_tool.py diff --git a/public/examples/integrations/toolkits/reddit/get_subreddit_rules_example_call_tool.js b/public/examples/integrations/mcp-servers/reddit/get_subreddit_rules_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/reddit/get_subreddit_rules_example_call_tool.js rename to public/examples/integrations/mcp-servers/reddit/get_subreddit_rules_example_call_tool.js diff --git a/public/examples/integrations/toolkits/reddit/get_subreddit_rules_example_call_tool.py b/public/examples/integrations/mcp-servers/reddit/get_subreddit_rules_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/reddit/get_subreddit_rules_example_call_tool.py rename to public/examples/integrations/mcp-servers/reddit/get_subreddit_rules_example_call_tool.py diff --git a/public/examples/integrations/toolkits/reddit/get_top_level_comments_of_post_example_call_tool.js b/public/examples/integrations/mcp-servers/reddit/get_top_level_comments_example_call_tool.js similarity index 89% rename from public/examples/integrations/toolkits/reddit/get_top_level_comments_of_post_example_call_tool.js rename to public/examples/integrations/mcp-servers/reddit/get_top_level_comments_example_call_tool.js index 6e6867f94..82c3952f2 100644 --- a/public/examples/integrations/toolkits/reddit/get_top_level_comments_of_post_example_call_tool.js +++ b/public/examples/integrations/mcp-servers/reddit/get_top_level_comments_example_call_tool.js @@ -3,7 +3,7 @@ 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 = "Reddit.GetTopLevelCommentsOfPost"; +const TOOL_NAME = "Reddit.GetTopLevelComments"; // Start the authorization process const authResponse = await client.tools.authorize({ @@ -29,4 +29,4 @@ const response = await client.tools.execute({ user_id: USER_ID, }); -console.log(response.output.value); \ No newline at end of file +console.log(response.output.value); diff --git a/public/examples/integrations/toolkits/reddit/get_top_level_comments_of_post_example_call_tool.py b/public/examples/integrations/mcp-servers/reddit/get_top_level_comments_example_call_tool.py similarity index 93% rename from public/examples/integrations/toolkits/reddit/get_top_level_comments_of_post_example_call_tool.py rename to public/examples/integrations/mcp-servers/reddit/get_top_level_comments_example_call_tool.py index 2e50f486b..11f058156 100644 --- a/public/examples/integrations/toolkits/reddit/get_top_level_comments_of_post_example_call_tool.py +++ b/public/examples/integrations/mcp-servers/reddit/get_top_level_comments_example_call_tool.py @@ -3,7 +3,7 @@ client = Arcade() # Automatically finds the `ARCADE_API_KEY` env variable USER_ID = "{arcade_user_id}" -TOOL_NAME = "Reddit.GetTopLevelCommentsOfPost" +TOOL_NAME = "Reddit.GetTopLevelComments" auth_response = client.tools.authorize( tool_name=TOOL_NAME, diff --git a/public/examples/integrations/toolkits/reddit/reply_to_comment_example_call_tool.js b/public/examples/integrations/mcp-servers/reddit/reply_to_comment_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/reddit/reply_to_comment_example_call_tool.js rename to public/examples/integrations/mcp-servers/reddit/reply_to_comment_example_call_tool.js diff --git a/public/examples/integrations/toolkits/reddit/reply_to_comment_example_call_tool.py b/public/examples/integrations/mcp-servers/reddit/reply_to_comment_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/reddit/reply_to_comment_example_call_tool.py rename to public/examples/integrations/mcp-servers/reddit/reply_to_comment_example_call_tool.py diff --git a/public/examples/integrations/toolkits/reddit/submit_text_post_example_call_tool.js b/public/examples/integrations/mcp-servers/reddit/submit_text_post_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/reddit/submit_text_post_example_call_tool.js rename to public/examples/integrations/mcp-servers/reddit/submit_text_post_example_call_tool.js diff --git a/public/examples/integrations/toolkits/reddit/submit_text_post_example_call_tool.py b/public/examples/integrations/mcp-servers/reddit/submit_text_post_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/reddit/submit_text_post_example_call_tool.py rename to public/examples/integrations/mcp-servers/reddit/submit_text_post_example_call_tool.py diff --git a/public/examples/integrations/toolkits/salesforce/create_contact_example_call_tool.js b/public/examples/integrations/mcp-servers/salesforce/create_contact_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/salesforce/create_contact_example_call_tool.js rename to public/examples/integrations/mcp-servers/salesforce/create_contact_example_call_tool.js diff --git a/public/examples/integrations/toolkits/salesforce/create_contact_example_call_tool.py b/public/examples/integrations/mcp-servers/salesforce/create_contact_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/salesforce/create_contact_example_call_tool.py rename to public/examples/integrations/mcp-servers/salesforce/create_contact_example_call_tool.py diff --git a/public/examples/integrations/toolkits/salesforce/create_contact_example_llm_oai.js b/public/examples/integrations/mcp-servers/salesforce/create_contact_example_llm_oai.js similarity index 100% rename from public/examples/integrations/toolkits/salesforce/create_contact_example_llm_oai.js rename to public/examples/integrations/mcp-servers/salesforce/create_contact_example_llm_oai.js diff --git a/public/examples/integrations/toolkits/salesforce/create_contact_example_llm_oai.py b/public/examples/integrations/mcp-servers/salesforce/create_contact_example_llm_oai.py similarity index 100% rename from public/examples/integrations/toolkits/salesforce/create_contact_example_llm_oai.py rename to public/examples/integrations/mcp-servers/salesforce/create_contact_example_llm_oai.py diff --git a/public/examples/integrations/toolkits/salesforce/get_account_data_by_id_example_call_tool.js b/public/examples/integrations/mcp-servers/salesforce/get_account_data_by_id_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/salesforce/get_account_data_by_id_example_call_tool.js rename to public/examples/integrations/mcp-servers/salesforce/get_account_data_by_id_example_call_tool.js diff --git a/public/examples/integrations/toolkits/salesforce/get_account_data_by_id_example_call_tool.py b/public/examples/integrations/mcp-servers/salesforce/get_account_data_by_id_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/salesforce/get_account_data_by_id_example_call_tool.py rename to public/examples/integrations/mcp-servers/salesforce/get_account_data_by_id_example_call_tool.py diff --git a/public/examples/integrations/toolkits/salesforce/get_account_data_by_id_example_llm_oai.js b/public/examples/integrations/mcp-servers/salesforce/get_account_data_by_id_example_llm_oai.js similarity index 100% rename from public/examples/integrations/toolkits/salesforce/get_account_data_by_id_example_llm_oai.js rename to public/examples/integrations/mcp-servers/salesforce/get_account_data_by_id_example_llm_oai.js diff --git a/public/examples/integrations/toolkits/salesforce/get_account_data_by_id_example_llm_oai.py b/public/examples/integrations/mcp-servers/salesforce/get_account_data_by_id_example_llm_oai.py similarity index 100% rename from public/examples/integrations/toolkits/salesforce/get_account_data_by_id_example_llm_oai.py rename to public/examples/integrations/mcp-servers/salesforce/get_account_data_by_id_example_llm_oai.py diff --git a/public/examples/integrations/toolkits/salesforce/get_account_data_by_keywords_example_call_tool.js b/public/examples/integrations/mcp-servers/salesforce/get_account_data_by_keywords_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/salesforce/get_account_data_by_keywords_example_call_tool.js rename to public/examples/integrations/mcp-servers/salesforce/get_account_data_by_keywords_example_call_tool.js diff --git a/public/examples/integrations/toolkits/salesforce/get_account_data_by_keywords_example_call_tool.py b/public/examples/integrations/mcp-servers/salesforce/get_account_data_by_keywords_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/salesforce/get_account_data_by_keywords_example_call_tool.py rename to public/examples/integrations/mcp-servers/salesforce/get_account_data_by_keywords_example_call_tool.py diff --git a/public/examples/integrations/toolkits/salesforce/get_account_data_by_keywords_example_llm_oai.js b/public/examples/integrations/mcp-servers/salesforce/get_account_data_by_keywords_example_llm_oai.js similarity index 100% rename from public/examples/integrations/toolkits/salesforce/get_account_data_by_keywords_example_llm_oai.js rename to public/examples/integrations/mcp-servers/salesforce/get_account_data_by_keywords_example_llm_oai.js diff --git a/public/examples/integrations/toolkits/salesforce/get_account_data_by_keywords_example_llm_oai.py b/public/examples/integrations/mcp-servers/salesforce/get_account_data_by_keywords_example_llm_oai.py similarity index 100% rename from public/examples/integrations/toolkits/salesforce/get_account_data_by_keywords_example_llm_oai.py rename to public/examples/integrations/mcp-servers/salesforce/get_account_data_by_keywords_example_llm_oai.py diff --git a/public/examples/integrations/toolkits/search/google_finance/get_stock_historical_data_example_call_tool.js b/public/examples/integrations/mcp-servers/search/google_finance/get_stock_historical_data_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/search/google_finance/get_stock_historical_data_example_call_tool.js rename to public/examples/integrations/mcp-servers/search/google_finance/get_stock_historical_data_example_call_tool.js diff --git a/public/examples/integrations/toolkits/search/google_finance/get_stock_historical_data_example_call_tool.py b/public/examples/integrations/mcp-servers/search/google_finance/get_stock_historical_data_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/search/google_finance/get_stock_historical_data_example_call_tool.py rename to public/examples/integrations/mcp-servers/search/google_finance/get_stock_historical_data_example_call_tool.py diff --git a/public/examples/integrations/toolkits/search/google_finance/get_stock_summary_example_call_tool.js b/public/examples/integrations/mcp-servers/search/google_finance/get_stock_summary_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/search/google_finance/get_stock_summary_example_call_tool.js rename to public/examples/integrations/mcp-servers/search/google_finance/get_stock_summary_example_call_tool.js diff --git a/public/examples/integrations/toolkits/search/google_finance/get_stock_summary_example_call_tool.py b/public/examples/integrations/mcp-servers/search/google_finance/get_stock_summary_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/search/google_finance/get_stock_summary_example_call_tool.py rename to public/examples/integrations/mcp-servers/search/google_finance/get_stock_summary_example_call_tool.py diff --git a/public/examples/integrations/toolkits/search/google_flights/search_one_way_flights_example_call_tool.js b/public/examples/integrations/mcp-servers/search/google_flights/search_one_way_flights_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/search/google_flights/search_one_way_flights_example_call_tool.js rename to public/examples/integrations/mcp-servers/search/google_flights/search_one_way_flights_example_call_tool.js diff --git a/public/examples/integrations/toolkits/search/google_flights/search_one_way_flights_example_call_tool.py b/public/examples/integrations/mcp-servers/search/google_flights/search_one_way_flights_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/search/google_flights/search_one_way_flights_example_call_tool.py rename to public/examples/integrations/mcp-servers/search/google_flights/search_one_way_flights_example_call_tool.py diff --git a/public/examples/integrations/toolkits/search/google_flights/search_roundtrip_flights_example_call_tool.js b/public/examples/integrations/mcp-servers/search/google_flights/search_roundtrip_flights_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/search/google_flights/search_roundtrip_flights_example_call_tool.js rename to public/examples/integrations/mcp-servers/search/google_flights/search_roundtrip_flights_example_call_tool.js diff --git a/public/examples/integrations/toolkits/search/google_flights/search_roundtrip_flights_example_call_tool.py b/public/examples/integrations/mcp-servers/search/google_flights/search_roundtrip_flights_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/search/google_flights/search_roundtrip_flights_example_call_tool.py rename to public/examples/integrations/mcp-servers/search/google_flights/search_roundtrip_flights_example_call_tool.py diff --git a/public/examples/integrations/toolkits/search/google_hotels/search_hotels_example_call_tool.js b/public/examples/integrations/mcp-servers/search/google_hotels/search_hotels_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/search/google_hotels/search_hotels_example_call_tool.js rename to public/examples/integrations/mcp-servers/search/google_hotels/search_hotels_example_call_tool.js diff --git a/public/examples/integrations/toolkits/search/google_hotels/search_hotels_example_call_tool.py b/public/examples/integrations/mcp-servers/search/google_hotels/search_hotels_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/search/google_hotels/search_hotels_example_call_tool.py rename to public/examples/integrations/mcp-servers/search/google_hotels/search_hotels_example_call_tool.py diff --git a/public/examples/integrations/toolkits/search/google_jobs/search_jobs_example_call_tool.js b/public/examples/integrations/mcp-servers/search/google_jobs/search_jobs_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/search/google_jobs/search_jobs_example_call_tool.js rename to public/examples/integrations/mcp-servers/search/google_jobs/search_jobs_example_call_tool.js diff --git a/public/examples/integrations/toolkits/search/google_jobs/search_jobs_example_call_tool.py b/public/examples/integrations/mcp-servers/search/google_jobs/search_jobs_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/search/google_jobs/search_jobs_example_call_tool.py rename to public/examples/integrations/mcp-servers/search/google_jobs/search_jobs_example_call_tool.py diff --git a/public/examples/integrations/toolkits/search/google_maps/get_directions_between_addresses_example_call_tool.js b/public/examples/integrations/mcp-servers/search/google_maps/get_directions_between_addresses_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/search/google_maps/get_directions_between_addresses_example_call_tool.js rename to public/examples/integrations/mcp-servers/search/google_maps/get_directions_between_addresses_example_call_tool.js diff --git a/public/examples/integrations/toolkits/search/google_maps/get_directions_between_addresses_example_call_tool.py b/public/examples/integrations/mcp-servers/search/google_maps/get_directions_between_addresses_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/search/google_maps/get_directions_between_addresses_example_call_tool.py rename to public/examples/integrations/mcp-servers/search/google_maps/get_directions_between_addresses_example_call_tool.py diff --git a/public/examples/integrations/toolkits/search/google_maps/get_directions_between_coordinates_example_call_tool.js b/public/examples/integrations/mcp-servers/search/google_maps/get_directions_between_coordinates_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/search/google_maps/get_directions_between_coordinates_example_call_tool.js rename to public/examples/integrations/mcp-servers/search/google_maps/get_directions_between_coordinates_example_call_tool.js diff --git a/public/examples/integrations/toolkits/search/google_maps/get_directions_between_coordinates_example_call_tool.py b/public/examples/integrations/mcp-servers/search/google_maps/get_directions_between_coordinates_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/search/google_maps/get_directions_between_coordinates_example_call_tool.py rename to public/examples/integrations/mcp-servers/search/google_maps/get_directions_between_coordinates_example_call_tool.py diff --git a/public/examples/integrations/toolkits/search/google_news/search_news_example_call_tool.js b/public/examples/integrations/mcp-servers/search/google_news/search_news_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/search/google_news/search_news_example_call_tool.js rename to public/examples/integrations/mcp-servers/search/google_news/search_news_example_call_tool.js diff --git a/public/examples/integrations/toolkits/search/google_news/search_news_example_call_tool.py b/public/examples/integrations/mcp-servers/search/google_news/search_news_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/search/google_news/search_news_example_call_tool.py rename to public/examples/integrations/mcp-servers/search/google_news/search_news_example_call_tool.py diff --git a/public/examples/integrations/toolkits/search/google_search/search_google_example_call_tool.js b/public/examples/integrations/mcp-servers/search/google_search/search_google_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/search/google_search/search_google_example_call_tool.js rename to public/examples/integrations/mcp-servers/search/google_search/search_google_example_call_tool.js diff --git a/public/examples/integrations/toolkits/search/google_search/search_google_example_call_tool.py b/public/examples/integrations/mcp-servers/search/google_search/search_google_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/search/google_search/search_google_example_call_tool.py rename to public/examples/integrations/mcp-servers/search/google_search/search_google_example_call_tool.py diff --git a/public/examples/integrations/toolkits/search/google_shopping/search_shopping_products_example_call_tool.js b/public/examples/integrations/mcp-servers/search/google_shopping/search_shopping_products_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/search/google_shopping/search_shopping_products_example_call_tool.js rename to public/examples/integrations/mcp-servers/search/google_shopping/search_shopping_products_example_call_tool.js diff --git a/public/examples/integrations/toolkits/search/google_shopping/search_shopping_products_example_call_tool.py b/public/examples/integrations/mcp-servers/search/google_shopping/search_shopping_products_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/search/google_shopping/search_shopping_products_example_call_tool.py rename to public/examples/integrations/mcp-servers/search/google_shopping/search_shopping_products_example_call_tool.py diff --git a/public/examples/integrations/toolkits/search/walmart/get_walmart_product_details_example_call_tool.js b/public/examples/integrations/mcp-servers/search/walmart/get_walmart_product_details_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/search/walmart/get_walmart_product_details_example_call_tool.js rename to public/examples/integrations/mcp-servers/search/walmart/get_walmart_product_details_example_call_tool.js diff --git a/public/examples/integrations/toolkits/search/walmart/get_walmart_product_details_example_call_tool.py b/public/examples/integrations/mcp-servers/search/walmart/get_walmart_product_details_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/search/walmart/get_walmart_product_details_example_call_tool.py rename to public/examples/integrations/mcp-servers/search/walmart/get_walmart_product_details_example_call_tool.py diff --git a/public/examples/integrations/toolkits/search/walmart/search_walmart_products_example_call_tool.js b/public/examples/integrations/mcp-servers/search/walmart/search_walmart_products_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/search/walmart/search_walmart_products_example_call_tool.js rename to public/examples/integrations/mcp-servers/search/walmart/search_walmart_products_example_call_tool.js diff --git a/public/examples/integrations/toolkits/search/walmart/search_walmart_products_example_call_tool.py b/public/examples/integrations/mcp-servers/search/walmart/search_walmart_products_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/search/walmart/search_walmart_products_example_call_tool.py rename to public/examples/integrations/mcp-servers/search/walmart/search_walmart_products_example_call_tool.py diff --git a/public/examples/integrations/toolkits/search/youtube/get_youtube_video_details_example_call_tool.js b/public/examples/integrations/mcp-servers/search/youtube/get_youtube_video_details_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/search/youtube/get_youtube_video_details_example_call_tool.js rename to public/examples/integrations/mcp-servers/search/youtube/get_youtube_video_details_example_call_tool.js diff --git a/public/examples/integrations/toolkits/search/youtube/get_youtube_video_details_example_call_tool.py b/public/examples/integrations/mcp-servers/search/youtube/get_youtube_video_details_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/search/youtube/get_youtube_video_details_example_call_tool.py rename to public/examples/integrations/mcp-servers/search/youtube/get_youtube_video_details_example_call_tool.py diff --git a/public/examples/integrations/toolkits/search/youtube/search_youtube_videos_example_call_tool.js b/public/examples/integrations/mcp-servers/search/youtube/search_youtube_videos_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/search/youtube/search_youtube_videos_example_call_tool.js rename to public/examples/integrations/mcp-servers/search/youtube/search_youtube_videos_example_call_tool.js diff --git a/public/examples/integrations/toolkits/search/youtube/search_youtube_videos_example_call_tool.py b/public/examples/integrations/mcp-servers/search/youtube/search_youtube_videos_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/search/youtube/search_youtube_videos_example_call_tool.py rename to public/examples/integrations/mcp-servers/search/youtube/search_youtube_videos_example_call_tool.py diff --git a/public/examples/integrations/toolkits/sharepoint/download_file_from_drive_example_call_tool.js b/public/examples/integrations/mcp-servers/sharepoint/download_file_from_drive_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/sharepoint/download_file_from_drive_example_call_tool.js rename to public/examples/integrations/mcp-servers/sharepoint/download_file_from_drive_example_call_tool.js diff --git a/public/examples/integrations/toolkits/sharepoint/download_file_from_drive_example_call_tool.py b/public/examples/integrations/mcp-servers/sharepoint/download_file_from_drive_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/sharepoint/download_file_from_drive_example_call_tool.py rename to public/examples/integrations/mcp-servers/sharepoint/download_file_from_drive_example_call_tool.py diff --git a/public/examples/integrations/toolkits/sharepoint/get_drives_from_site_example_call_tool.js b/public/examples/integrations/mcp-servers/sharepoint/get_drives_from_site_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/sharepoint/get_drives_from_site_example_call_tool.js rename to public/examples/integrations/mcp-servers/sharepoint/get_drives_from_site_example_call_tool.js diff --git a/public/examples/integrations/toolkits/sharepoint/get_drives_from_site_example_call_tool.py b/public/examples/integrations/mcp-servers/sharepoint/get_drives_from_site_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/sharepoint/get_drives_from_site_example_call_tool.py rename to public/examples/integrations/mcp-servers/sharepoint/get_drives_from_site_example_call_tool.py diff --git a/public/examples/integrations/toolkits/sharepoint/get_followed_sites_example_call_tool.js b/public/examples/integrations/mcp-servers/sharepoint/get_followed_sites_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/sharepoint/get_followed_sites_example_call_tool.js rename to public/examples/integrations/mcp-servers/sharepoint/get_followed_sites_example_call_tool.js diff --git a/public/examples/integrations/toolkits/sharepoint/get_followed_sites_example_call_tool.py b/public/examples/integrations/mcp-servers/sharepoint/get_followed_sites_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/sharepoint/get_followed_sites_example_call_tool.py rename to public/examples/integrations/mcp-servers/sharepoint/get_followed_sites_example_call_tool.py diff --git a/public/examples/integrations/toolkits/sharepoint/get_items_from_list_example_call_tool.js b/public/examples/integrations/mcp-servers/sharepoint/get_items_from_list_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/sharepoint/get_items_from_list_example_call_tool.js rename to public/examples/integrations/mcp-servers/sharepoint/get_items_from_list_example_call_tool.js diff --git a/public/examples/integrations/toolkits/sharepoint/get_items_from_list_example_call_tool.py b/public/examples/integrations/mcp-servers/sharepoint/get_items_from_list_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/sharepoint/get_items_from_list_example_call_tool.py rename to public/examples/integrations/mcp-servers/sharepoint/get_items_from_list_example_call_tool.py diff --git a/public/examples/integrations/toolkits/sharepoint/get_lists_from_site_example_call_tool.js b/public/examples/integrations/mcp-servers/sharepoint/get_lists_from_site_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/sharepoint/get_lists_from_site_example_call_tool.js rename to public/examples/integrations/mcp-servers/sharepoint/get_lists_from_site_example_call_tool.js diff --git a/public/examples/integrations/toolkits/sharepoint/get_lists_from_site_example_call_tool.py b/public/examples/integrations/mcp-servers/sharepoint/get_lists_from_site_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/sharepoint/get_lists_from_site_example_call_tool.py rename to public/examples/integrations/mcp-servers/sharepoint/get_lists_from_site_example_call_tool.py diff --git a/public/examples/integrations/toolkits/sharepoint/get_page_example_call_tool.js b/public/examples/integrations/mcp-servers/sharepoint/get_page_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/sharepoint/get_page_example_call_tool.js rename to public/examples/integrations/mcp-servers/sharepoint/get_page_example_call_tool.js diff --git a/public/examples/integrations/toolkits/sharepoint/get_page_example_call_tool.py b/public/examples/integrations/mcp-servers/sharepoint/get_page_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/sharepoint/get_page_example_call_tool.py rename to public/examples/integrations/mcp-servers/sharepoint/get_page_example_call_tool.py diff --git a/public/examples/integrations/toolkits/sharepoint/get_site_example_call_tool.js b/public/examples/integrations/mcp-servers/sharepoint/get_site_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/sharepoint/get_site_example_call_tool.js rename to public/examples/integrations/mcp-servers/sharepoint/get_site_example_call_tool.js diff --git a/public/examples/integrations/toolkits/sharepoint/get_site_example_call_tool.py b/public/examples/integrations/mcp-servers/sharepoint/get_site_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/sharepoint/get_site_example_call_tool.py rename to public/examples/integrations/mcp-servers/sharepoint/get_site_example_call_tool.py diff --git a/public/examples/integrations/toolkits/sharepoint/list_items_in_folder_example_call_tool.js b/public/examples/integrations/mcp-servers/sharepoint/list_items_in_folder_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/sharepoint/list_items_in_folder_example_call_tool.js rename to public/examples/integrations/mcp-servers/sharepoint/list_items_in_folder_example_call_tool.js diff --git a/public/examples/integrations/toolkits/sharepoint/list_items_in_folder_example_call_tool.py b/public/examples/integrations/mcp-servers/sharepoint/list_items_in_folder_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/sharepoint/list_items_in_folder_example_call_tool.py rename to public/examples/integrations/mcp-servers/sharepoint/list_items_in_folder_example_call_tool.py diff --git a/public/examples/integrations/toolkits/sharepoint/list_pages_example_call_tool.js b/public/examples/integrations/mcp-servers/sharepoint/list_pages_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/sharepoint/list_pages_example_call_tool.js rename to public/examples/integrations/mcp-servers/sharepoint/list_pages_example_call_tool.js diff --git a/public/examples/integrations/toolkits/sharepoint/list_pages_example_call_tool.py b/public/examples/integrations/mcp-servers/sharepoint/list_pages_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/sharepoint/list_pages_example_call_tool.py rename to public/examples/integrations/mcp-servers/sharepoint/list_pages_example_call_tool.py diff --git a/public/examples/integrations/toolkits/sharepoint/list_root_items_in_drive_example_call_tool.js b/public/examples/integrations/mcp-servers/sharepoint/list_root_items_in_drive_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/sharepoint/list_root_items_in_drive_example_call_tool.js rename to public/examples/integrations/mcp-servers/sharepoint/list_root_items_in_drive_example_call_tool.js diff --git a/public/examples/integrations/toolkits/sharepoint/list_root_items_in_drive_example_call_tool.py b/public/examples/integrations/mcp-servers/sharepoint/list_root_items_in_drive_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/sharepoint/list_root_items_in_drive_example_call_tool.py rename to public/examples/integrations/mcp-servers/sharepoint/list_root_items_in_drive_example_call_tool.py diff --git a/public/examples/integrations/toolkits/sharepoint/list_sites_example_call_tool.js b/public/examples/integrations/mcp-servers/sharepoint/list_sites_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/sharepoint/list_sites_example_call_tool.js rename to public/examples/integrations/mcp-servers/sharepoint/list_sites_example_call_tool.js diff --git a/public/examples/integrations/toolkits/sharepoint/list_sites_example_call_tool.py b/public/examples/integrations/mcp-servers/sharepoint/list_sites_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/sharepoint/list_sites_example_call_tool.py rename to public/examples/integrations/mcp-servers/sharepoint/list_sites_example_call_tool.py diff --git a/public/examples/integrations/toolkits/sharepoint/search_drive_items_example_call_tool.js b/public/examples/integrations/mcp-servers/sharepoint/search_drive_items_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/sharepoint/search_drive_items_example_call_tool.js rename to public/examples/integrations/mcp-servers/sharepoint/search_drive_items_example_call_tool.js diff --git a/public/examples/integrations/toolkits/sharepoint/search_drive_items_example_call_tool.py b/public/examples/integrations/mcp-servers/sharepoint/search_drive_items_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/sharepoint/search_drive_items_example_call_tool.py rename to public/examples/integrations/mcp-servers/sharepoint/search_drive_items_example_call_tool.py diff --git a/public/examples/integrations/toolkits/sharepoint/search_sites_example_call_tool.js b/public/examples/integrations/mcp-servers/sharepoint/search_sites_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/sharepoint/search_sites_example_call_tool.js rename to public/examples/integrations/mcp-servers/sharepoint/search_sites_example_call_tool.js diff --git a/public/examples/integrations/toolkits/sharepoint/search_sites_example_call_tool.py b/public/examples/integrations/mcp-servers/sharepoint/search_sites_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/sharepoint/search_sites_example_call_tool.py rename to public/examples/integrations/mcp-servers/sharepoint/search_sites_example_call_tool.py diff --git a/public/examples/integrations/toolkits/slack/get_channel_metadata_by_name_example_call_tool.js b/public/examples/integrations/mcp-servers/slack/get_channel_metadata_by_name_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/slack/get_channel_metadata_by_name_example_call_tool.js rename to public/examples/integrations/mcp-servers/slack/get_channel_metadata_by_name_example_call_tool.js diff --git a/public/examples/integrations/toolkits/slack/get_channel_metadata_by_name_example_call_tool.py b/public/examples/integrations/mcp-servers/slack/get_channel_metadata_by_name_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/slack/get_channel_metadata_by_name_example_call_tool.py rename to public/examples/integrations/mcp-servers/slack/get_channel_metadata_by_name_example_call_tool.py diff --git a/public/examples/integrations/toolkits/slack/get_conversation_history_by_id_example_call_tool.js b/public/examples/integrations/mcp-servers/slack/get_conversation_history_by_id_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/slack/get_conversation_history_by_id_example_call_tool.js rename to public/examples/integrations/mcp-servers/slack/get_conversation_history_by_id_example_call_tool.js diff --git a/public/examples/integrations/toolkits/slack/get_conversation_history_by_id_example_call_tool.py b/public/examples/integrations/mcp-servers/slack/get_conversation_history_by_id_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/slack/get_conversation_history_by_id_example_call_tool.py rename to public/examples/integrations/mcp-servers/slack/get_conversation_history_by_id_example_call_tool.py diff --git a/public/examples/integrations/toolkits/slack/get_conversation_history_by_name_example_call_tool.js b/public/examples/integrations/mcp-servers/slack/get_conversation_history_by_name_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/slack/get_conversation_history_by_name_example_call_tool.js rename to public/examples/integrations/mcp-servers/slack/get_conversation_history_by_name_example_call_tool.js diff --git a/public/examples/integrations/toolkits/slack/get_conversation_history_by_name_example_call_tool.py b/public/examples/integrations/mcp-servers/slack/get_conversation_history_by_name_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/slack/get_conversation_history_by_name_example_call_tool.py rename to public/examples/integrations/mcp-servers/slack/get_conversation_history_by_name_example_call_tool.py diff --git a/public/examples/integrations/toolkits/slack/get_conversation_metadata_by_id_example_call_tool.js b/public/examples/integrations/mcp-servers/slack/get_conversation_metadata_by_id_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/slack/get_conversation_metadata_by_id_example_call_tool.js rename to public/examples/integrations/mcp-servers/slack/get_conversation_metadata_by_id_example_call_tool.js diff --git a/public/examples/integrations/toolkits/slack/get_conversation_metadata_by_id_example_call_tool.py b/public/examples/integrations/mcp-servers/slack/get_conversation_metadata_by_id_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/slack/get_conversation_metadata_by_id_example_call_tool.py rename to public/examples/integrations/mcp-servers/slack/get_conversation_metadata_by_id_example_call_tool.py diff --git a/public/examples/integrations/toolkits/slack/get_conversation_metadata_example_call_tool.js b/public/examples/integrations/mcp-servers/slack/get_conversation_metadata_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/slack/get_conversation_metadata_example_call_tool.js rename to public/examples/integrations/mcp-servers/slack/get_conversation_metadata_example_call_tool.js diff --git a/public/examples/integrations/toolkits/slack/get_conversation_metadata_example_call_tool.py b/public/examples/integrations/mcp-servers/slack/get_conversation_metadata_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/slack/get_conversation_metadata_example_call_tool.py rename to public/examples/integrations/mcp-servers/slack/get_conversation_metadata_example_call_tool.py diff --git a/public/examples/integrations/toolkits/slack/get_direct_message_conversation_metadata_by_username_example_call_tool.js b/public/examples/integrations/mcp-servers/slack/get_direct_message_conversation_metadata_by_username_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/slack/get_direct_message_conversation_metadata_by_username_example_call_tool.js rename to public/examples/integrations/mcp-servers/slack/get_direct_message_conversation_metadata_by_username_example_call_tool.js diff --git a/public/examples/integrations/toolkits/slack/get_direct_message_conversation_metadata_by_username_example_call_tool.py b/public/examples/integrations/mcp-servers/slack/get_direct_message_conversation_metadata_by_username_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/slack/get_direct_message_conversation_metadata_by_username_example_call_tool.py rename to public/examples/integrations/mcp-servers/slack/get_direct_message_conversation_metadata_by_username_example_call_tool.py diff --git a/public/examples/integrations/toolkits/slack/get_members_in_channel_by_name_example_call_tool.js b/public/examples/integrations/mcp-servers/slack/get_members_in_channel_by_name_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/slack/get_members_in_channel_by_name_example_call_tool.js rename to public/examples/integrations/mcp-servers/slack/get_members_in_channel_by_name_example_call_tool.js diff --git a/public/examples/integrations/toolkits/slack/get_members_in_channel_by_name_example_call_tool.py b/public/examples/integrations/mcp-servers/slack/get_members_in_channel_by_name_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/slack/get_members_in_channel_by_name_example_call_tool.py rename to public/examples/integrations/mcp-servers/slack/get_members_in_channel_by_name_example_call_tool.py diff --git a/public/examples/integrations/toolkits/slack/get_members_in_conversation_by_id_example_call_tool.js b/public/examples/integrations/mcp-servers/slack/get_members_in_conversation_by_id_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/slack/get_members_in_conversation_by_id_example_call_tool.js rename to public/examples/integrations/mcp-servers/slack/get_members_in_conversation_by_id_example_call_tool.js diff --git a/public/examples/integrations/toolkits/slack/get_members_in_conversation_by_id_example_call_tool.py b/public/examples/integrations/mcp-servers/slack/get_members_in_conversation_by_id_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/slack/get_members_in_conversation_by_id_example_call_tool.py rename to public/examples/integrations/mcp-servers/slack/get_members_in_conversation_by_id_example_call_tool.py diff --git a/public/examples/integrations/toolkits/slack/get_messages_example_call_tool.js b/public/examples/integrations/mcp-servers/slack/get_messages_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/slack/get_messages_example_call_tool.js rename to public/examples/integrations/mcp-servers/slack/get_messages_example_call_tool.js diff --git a/public/examples/integrations/toolkits/slack/get_messages_example_call_tool.py b/public/examples/integrations/mcp-servers/slack/get_messages_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/slack/get_messages_example_call_tool.py rename to public/examples/integrations/mcp-servers/slack/get_messages_example_call_tool.py diff --git a/public/examples/integrations/toolkits/slack/get_messages_in_channel_by_name_example_call_tool.js b/public/examples/integrations/mcp-servers/slack/get_messages_in_channel_by_name_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/slack/get_messages_in_channel_by_name_example_call_tool.js rename to public/examples/integrations/mcp-servers/slack/get_messages_in_channel_by_name_example_call_tool.js diff --git a/public/examples/integrations/toolkits/slack/get_messages_in_channel_by_name_example_call_tool.py b/public/examples/integrations/mcp-servers/slack/get_messages_in_channel_by_name_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/slack/get_messages_in_channel_by_name_example_call_tool.py rename to public/examples/integrations/mcp-servers/slack/get_messages_in_channel_by_name_example_call_tool.py diff --git a/public/examples/integrations/toolkits/slack/get_messages_in_conversation_by_id_example_call_tool.js b/public/examples/integrations/mcp-servers/slack/get_messages_in_conversation_by_id_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/slack/get_messages_in_conversation_by_id_example_call_tool.js rename to public/examples/integrations/mcp-servers/slack/get_messages_in_conversation_by_id_example_call_tool.js diff --git a/public/examples/integrations/toolkits/slack/get_messages_in_conversation_by_id_example_call_tool.py b/public/examples/integrations/mcp-servers/slack/get_messages_in_conversation_by_id_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/slack/get_messages_in_conversation_by_id_example_call_tool.py rename to public/examples/integrations/mcp-servers/slack/get_messages_in_conversation_by_id_example_call_tool.py diff --git a/public/examples/integrations/toolkits/slack/get_messages_in_direct_message_conversation_by_username_example_call_tool.js b/public/examples/integrations/mcp-servers/slack/get_messages_in_direct_message_conversation_by_username_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/slack/get_messages_in_direct_message_conversation_by_username_example_call_tool.js rename to public/examples/integrations/mcp-servers/slack/get_messages_in_direct_message_conversation_by_username_example_call_tool.js diff --git a/public/examples/integrations/toolkits/slack/get_messages_in_direct_message_conversation_by_username_example_call_tool.py b/public/examples/integrations/mcp-servers/slack/get_messages_in_direct_message_conversation_by_username_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/slack/get_messages_in_direct_message_conversation_by_username_example_call_tool.py rename to public/examples/integrations/mcp-servers/slack/get_messages_in_direct_message_conversation_by_username_example_call_tool.py diff --git a/public/examples/integrations/toolkits/slack/get_messages_in_multi_person_dm_conversation_by_username_example_call_tool.js b/public/examples/integrations/mcp-servers/slack/get_messages_in_multi_person_dm_conversation_by_username_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/slack/get_messages_in_multi_person_dm_conversation_by_username_example_call_tool.js rename to public/examples/integrations/mcp-servers/slack/get_messages_in_multi_person_dm_conversation_by_username_example_call_tool.js diff --git a/public/examples/integrations/toolkits/slack/get_messages_in_multi_person_dm_conversation_by_username_example_call_tool.py b/public/examples/integrations/mcp-servers/slack/get_messages_in_multi_person_dm_conversation_by_username_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/slack/get_messages_in_multi_person_dm_conversation_by_username_example_call_tool.py rename to public/examples/integrations/mcp-servers/slack/get_messages_in_multi_person_dm_conversation_by_username_example_call_tool.py diff --git a/public/examples/integrations/toolkits/slack/get_messages_in_multi_person_dm_conversation_by_usernames_example_call_tool.js b/public/examples/integrations/mcp-servers/slack/get_messages_in_multi_person_dm_conversation_by_usernames_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/slack/get_messages_in_multi_person_dm_conversation_by_usernames_example_call_tool.js rename to public/examples/integrations/mcp-servers/slack/get_messages_in_multi_person_dm_conversation_by_usernames_example_call_tool.js diff --git a/public/examples/integrations/toolkits/slack/get_messages_in_multi_person_dm_conversation_by_usernames_example_call_tool.py b/public/examples/integrations/mcp-servers/slack/get_messages_in_multi_person_dm_conversation_by_usernames_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/slack/get_messages_in_multi_person_dm_conversation_by_usernames_example_call_tool.py rename to public/examples/integrations/mcp-servers/slack/get_messages_in_multi_person_dm_conversation_by_usernames_example_call_tool.py diff --git a/public/examples/integrations/toolkits/slack/get_multi_person_dm_conversation_metadata_by_usernames_example_call_tool.js b/public/examples/integrations/mcp-servers/slack/get_multi_person_dm_conversation_metadata_by_usernames_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/slack/get_multi_person_dm_conversation_metadata_by_usernames_example_call_tool.js rename to public/examples/integrations/mcp-servers/slack/get_multi_person_dm_conversation_metadata_by_usernames_example_call_tool.js diff --git a/public/examples/integrations/toolkits/slack/get_multi_person_dm_conversation_metadata_by_usernames_example_call_tool.py b/public/examples/integrations/mcp-servers/slack/get_multi_person_dm_conversation_metadata_by_usernames_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/slack/get_multi_person_dm_conversation_metadata_by_usernames_example_call_tool.py rename to public/examples/integrations/mcp-servers/slack/get_multi_person_dm_conversation_metadata_by_usernames_example_call_tool.py diff --git a/public/examples/integrations/toolkits/slack/get_user_info_by_id_example_call_tool.js b/public/examples/integrations/mcp-servers/slack/get_user_info_by_id_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/slack/get_user_info_by_id_example_call_tool.js rename to public/examples/integrations/mcp-servers/slack/get_user_info_by_id_example_call_tool.js diff --git a/public/examples/integrations/toolkits/slack/get_user_info_by_id_example_call_tool.py b/public/examples/integrations/mcp-servers/slack/get_user_info_by_id_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/slack/get_user_info_by_id_example_call_tool.py rename to public/examples/integrations/mcp-servers/slack/get_user_info_by_id_example_call_tool.py diff --git a/public/examples/integrations/toolkits/slack/get_users_in_conversation_example_call_tool.js b/public/examples/integrations/mcp-servers/slack/get_users_in_conversation_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/slack/get_users_in_conversation_example_call_tool.js rename to public/examples/integrations/mcp-servers/slack/get_users_in_conversation_example_call_tool.js diff --git a/public/examples/integrations/toolkits/slack/get_users_in_conversation_example_call_tool.py b/public/examples/integrations/mcp-servers/slack/get_users_in_conversation_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/slack/get_users_in_conversation_example_call_tool.py rename to public/examples/integrations/mcp-servers/slack/get_users_in_conversation_example_call_tool.py diff --git a/public/examples/integrations/toolkits/slack/get_users_info_example_call_tool.js b/public/examples/integrations/mcp-servers/slack/get_users_info_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/slack/get_users_info_example_call_tool.js rename to public/examples/integrations/mcp-servers/slack/get_users_info_example_call_tool.js diff --git a/public/examples/integrations/toolkits/slack/get_users_info_example_call_tool.py b/public/examples/integrations/mcp-servers/slack/get_users_info_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/slack/get_users_info_example_call_tool.py rename to public/examples/integrations/mcp-servers/slack/get_users_info_example_call_tool.py diff --git a/public/examples/integrations/toolkits/slack/list_conversations_example_call_tool.js b/public/examples/integrations/mcp-servers/slack/list_conversations_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/slack/list_conversations_example_call_tool.js rename to public/examples/integrations/mcp-servers/slack/list_conversations_example_call_tool.js diff --git a/public/examples/integrations/toolkits/slack/list_conversations_example_call_tool.py b/public/examples/integrations/mcp-servers/slack/list_conversations_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/slack/list_conversations_example_call_tool.py rename to public/examples/integrations/mcp-servers/slack/list_conversations_example_call_tool.py diff --git a/public/examples/integrations/toolkits/slack/list_conversations_metadata_example_call_tool.js b/public/examples/integrations/mcp-servers/slack/list_conversations_metadata_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/slack/list_conversations_metadata_example_call_tool.js rename to public/examples/integrations/mcp-servers/slack/list_conversations_metadata_example_call_tool.js diff --git a/public/examples/integrations/toolkits/slack/list_conversations_metadata_example_call_tool.py b/public/examples/integrations/mcp-servers/slack/list_conversations_metadata_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/slack/list_conversations_metadata_example_call_tool.py rename to public/examples/integrations/mcp-servers/slack/list_conversations_metadata_example_call_tool.py diff --git a/public/examples/integrations/toolkits/slack/list_direct_message_channels_metadata_example_call_tool.js b/public/examples/integrations/mcp-servers/slack/list_direct_message_channels_metadata_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/slack/list_direct_message_channels_metadata_example_call_tool.js rename to public/examples/integrations/mcp-servers/slack/list_direct_message_channels_metadata_example_call_tool.js diff --git a/public/examples/integrations/toolkits/slack/list_direct_message_channels_metadata_example_call_tool.py b/public/examples/integrations/mcp-servers/slack/list_direct_message_channels_metadata_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/slack/list_direct_message_channels_metadata_example_call_tool.py rename to public/examples/integrations/mcp-servers/slack/list_direct_message_channels_metadata_example_call_tool.py diff --git a/public/examples/integrations/toolkits/slack/list_direct_message_conversations_metadata_example_call_tool.js b/public/examples/integrations/mcp-servers/slack/list_direct_message_conversations_metadata_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/slack/list_direct_message_conversations_metadata_example_call_tool.js rename to public/examples/integrations/mcp-servers/slack/list_direct_message_conversations_metadata_example_call_tool.js diff --git a/public/examples/integrations/toolkits/slack/list_direct_message_conversations_metadata_example_call_tool.py b/public/examples/integrations/mcp-servers/slack/list_direct_message_conversations_metadata_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/slack/list_direct_message_conversations_metadata_example_call_tool.py rename to public/examples/integrations/mcp-servers/slack/list_direct_message_conversations_metadata_example_call_tool.py diff --git a/public/examples/integrations/toolkits/slack/list_group_direct_message_channels_metadata_example_call_tool.js b/public/examples/integrations/mcp-servers/slack/list_group_direct_message_channels_metadata_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/slack/list_group_direct_message_channels_metadata_example_call_tool.js rename to public/examples/integrations/mcp-servers/slack/list_group_direct_message_channels_metadata_example_call_tool.js diff --git a/public/examples/integrations/toolkits/slack/list_group_direct_message_channels_metadata_example_call_tool.py b/public/examples/integrations/mcp-servers/slack/list_group_direct_message_channels_metadata_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/slack/list_group_direct_message_channels_metadata_example_call_tool.py rename to public/examples/integrations/mcp-servers/slack/list_group_direct_message_channels_metadata_example_call_tool.py diff --git a/public/examples/integrations/toolkits/slack/list_group_direct_message_conversations_metadata_example_call_tool.js b/public/examples/integrations/mcp-servers/slack/list_group_direct_message_conversations_metadata_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/slack/list_group_direct_message_conversations_metadata_example_call_tool.js rename to public/examples/integrations/mcp-servers/slack/list_group_direct_message_conversations_metadata_example_call_tool.js diff --git a/public/examples/integrations/toolkits/slack/list_group_direct_message_conversations_metadata_example_call_tool.py b/public/examples/integrations/mcp-servers/slack/list_group_direct_message_conversations_metadata_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/slack/list_group_direct_message_conversations_metadata_example_call_tool.py rename to public/examples/integrations/mcp-servers/slack/list_group_direct_message_conversations_metadata_example_call_tool.py diff --git a/public/examples/integrations/toolkits/slack/list_private_channels_metadata_example_call_tool.js b/public/examples/integrations/mcp-servers/slack/list_private_channels_metadata_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/slack/list_private_channels_metadata_example_call_tool.js rename to public/examples/integrations/mcp-servers/slack/list_private_channels_metadata_example_call_tool.js diff --git a/public/examples/integrations/toolkits/slack/list_private_channels_metadata_example_call_tool.py b/public/examples/integrations/mcp-servers/slack/list_private_channels_metadata_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/slack/list_private_channels_metadata_example_call_tool.py rename to public/examples/integrations/mcp-servers/slack/list_private_channels_metadata_example_call_tool.py diff --git a/public/examples/integrations/toolkits/slack/list_public_channels_metadata_example_call_tool.js b/public/examples/integrations/mcp-servers/slack/list_public_channels_metadata_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/slack/list_public_channels_metadata_example_call_tool.js rename to public/examples/integrations/mcp-servers/slack/list_public_channels_metadata_example_call_tool.js diff --git a/public/examples/integrations/toolkits/slack/list_public_channels_metadata_example_call_tool.py b/public/examples/integrations/mcp-servers/slack/list_public_channels_metadata_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/slack/list_public_channels_metadata_example_call_tool.py rename to public/examples/integrations/mcp-servers/slack/list_public_channels_metadata_example_call_tool.py diff --git a/public/examples/integrations/toolkits/slack/list_users_example_call_tool.js b/public/examples/integrations/mcp-servers/slack/list_users_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/slack/list_users_example_call_tool.js rename to public/examples/integrations/mcp-servers/slack/list_users_example_call_tool.js diff --git a/public/examples/integrations/toolkits/slack/list_users_example_call_tool.py b/public/examples/integrations/mcp-servers/slack/list_users_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/slack/list_users_example_call_tool.py rename to public/examples/integrations/mcp-servers/slack/list_users_example_call_tool.py diff --git a/public/examples/integrations/toolkits/slack/send_dm_to_user_example_call_tool.js b/public/examples/integrations/mcp-servers/slack/send_dm_to_user_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/slack/send_dm_to_user_example_call_tool.js rename to public/examples/integrations/mcp-servers/slack/send_dm_to_user_example_call_tool.js diff --git a/public/examples/integrations/toolkits/slack/send_dm_to_user_example_call_tool.py b/public/examples/integrations/mcp-servers/slack/send_dm_to_user_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/slack/send_dm_to_user_example_call_tool.py rename to public/examples/integrations/mcp-servers/slack/send_dm_to_user_example_call_tool.py diff --git a/public/examples/integrations/toolkits/slack/send_message_example_call_tool.js b/public/examples/integrations/mcp-servers/slack/send_message_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/slack/send_message_example_call_tool.js rename to public/examples/integrations/mcp-servers/slack/send_message_example_call_tool.js diff --git a/public/examples/integrations/toolkits/slack/send_message_example_call_tool.py b/public/examples/integrations/mcp-servers/slack/send_message_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/slack/send_message_example_call_tool.py rename to public/examples/integrations/mcp-servers/slack/send_message_example_call_tool.py diff --git a/public/examples/integrations/toolkits/slack/send_message_to_channel_example_call_tool.js b/public/examples/integrations/mcp-servers/slack/send_message_to_channel_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/slack/send_message_to_channel_example_call_tool.js rename to public/examples/integrations/mcp-servers/slack/send_message_to_channel_example_call_tool.js diff --git a/public/examples/integrations/toolkits/slack/send_message_to_channel_example_call_tool.py b/public/examples/integrations/mcp-servers/slack/send_message_to_channel_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/slack/send_message_to_channel_example_call_tool.py rename to public/examples/integrations/mcp-servers/slack/send_message_to_channel_example_call_tool.py diff --git a/public/examples/integrations/toolkits/slack/who_am_i_example_call_tool.js b/public/examples/integrations/mcp-servers/slack/who_am_i_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/slack/who_am_i_example_call_tool.js rename to public/examples/integrations/mcp-servers/slack/who_am_i_example_call_tool.js diff --git a/public/examples/integrations/toolkits/slack/who_am_i_example_call_tool.py b/public/examples/integrations/mcp-servers/slack/who_am_i_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/slack/who_am_i_example_call_tool.py rename to public/examples/integrations/mcp-servers/slack/who_am_i_example_call_tool.py diff --git a/public/examples/integrations/toolkits/slack_api/accept_slack_invite_example_call_tool.js b/public/examples/integrations/mcp-servers/slack_api/accept_slack_invite_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/slack_api/accept_slack_invite_example_call_tool.js rename to public/examples/integrations/mcp-servers/slack_api/accept_slack_invite_example_call_tool.js diff --git a/public/examples/integrations/toolkits/slack_api/accept_slack_invite_example_call_tool.py b/public/examples/integrations/mcp-servers/slack_api/accept_slack_invite_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/slack_api/accept_slack_invite_example_call_tool.py rename to public/examples/integrations/mcp-servers/slack_api/accept_slack_invite_example_call_tool.py diff --git a/public/examples/integrations/toolkits/slack_api/add_call_participants_example_call_tool.js b/public/examples/integrations/mcp-servers/slack_api/add_call_participants_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/slack_api/add_call_participants_example_call_tool.js rename to public/examples/integrations/mcp-servers/slack_api/add_call_participants_example_call_tool.js diff --git a/public/examples/integrations/toolkits/slack_api/add_call_participants_example_call_tool.py b/public/examples/integrations/mcp-servers/slack_api/add_call_participants_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/slack_api/add_call_participants_example_call_tool.py rename to public/examples/integrations/mcp-servers/slack_api/add_call_participants_example_call_tool.py diff --git a/public/examples/integrations/toolkits/slack_api/add_slack_emoji_alias_example_call_tool.js b/public/examples/integrations/mcp-servers/slack_api/add_slack_emoji_alias_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/slack_api/add_slack_emoji_alias_example_call_tool.js rename to public/examples/integrations/mcp-servers/slack_api/add_slack_emoji_alias_example_call_tool.js diff --git a/public/examples/integrations/toolkits/slack_api/add_slack_emoji_alias_example_call_tool.py b/public/examples/integrations/mcp-servers/slack_api/add_slack_emoji_alias_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/slack_api/add_slack_emoji_alias_example_call_tool.py rename to public/examples/integrations/mcp-servers/slack_api/add_slack_emoji_alias_example_call_tool.py diff --git a/public/examples/integrations/toolkits/slack_api/add_slack_reaction_example_call_tool.js b/public/examples/integrations/mcp-servers/slack_api/add_slack_reaction_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/slack_api/add_slack_reaction_example_call_tool.js rename to public/examples/integrations/mcp-servers/slack_api/add_slack_reaction_example_call_tool.js diff --git a/public/examples/integrations/toolkits/slack_api/add_slack_reaction_example_call_tool.py b/public/examples/integrations/mcp-servers/slack_api/add_slack_reaction_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/slack_api/add_slack_reaction_example_call_tool.py rename to public/examples/integrations/mcp-servers/slack_api/add_slack_reaction_example_call_tool.py diff --git a/public/examples/integrations/toolkits/slack_api/approve_slack_channel_invitation_example_call_tool.js b/public/examples/integrations/mcp-servers/slack_api/approve_slack_channel_invitation_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/slack_api/approve_slack_channel_invitation_example_call_tool.js rename to public/examples/integrations/mcp-servers/slack_api/approve_slack_channel_invitation_example_call_tool.js diff --git a/public/examples/integrations/toolkits/slack_api/approve_slack_channel_invitation_example_call_tool.py b/public/examples/integrations/mcp-servers/slack_api/approve_slack_channel_invitation_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/slack_api/approve_slack_channel_invitation_example_call_tool.py rename to public/examples/integrations/mcp-servers/slack_api/approve_slack_channel_invitation_example_call_tool.py diff --git a/public/examples/integrations/toolkits/slack_api/check_api_calling_code_example_call_tool.js b/public/examples/integrations/mcp-servers/slack_api/check_api_calling_code_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/slack_api/check_api_calling_code_example_call_tool.js rename to public/examples/integrations/mcp-servers/slack_api/check_api_calling_code_example_call_tool.js diff --git a/public/examples/integrations/toolkits/slack_api/check_api_calling_code_example_call_tool.py b/public/examples/integrations/mcp-servers/slack_api/check_api_calling_code_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/slack_api/check_api_calling_code_example_call_tool.py rename to public/examples/integrations/mcp-servers/slack_api/check_api_calling_code_example_call_tool.py diff --git a/public/examples/integrations/toolkits/slack_api/check_slack_discoverability_example_call_tool.js b/public/examples/integrations/mcp-servers/slack_api/check_slack_discoverability_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/slack_api/check_slack_discoverability_example_call_tool.js rename to public/examples/integrations/mcp-servers/slack_api/check_slack_discoverability_example_call_tool.js diff --git a/public/examples/integrations/toolkits/slack_api/check_slack_discoverability_example_call_tool.py b/public/examples/integrations/mcp-servers/slack_api/check_slack_discoverability_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/slack_api/check_slack_discoverability_example_call_tool.py rename to public/examples/integrations/mcp-servers/slack_api/check_slack_discoverability_example_call_tool.py diff --git a/public/examples/integrations/toolkits/slack_api/create_slack_conversation_example_call_tool.js b/public/examples/integrations/mcp-servers/slack_api/create_slack_conversation_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/slack_api/create_slack_conversation_example_call_tool.js rename to public/examples/integrations/mcp-servers/slack_api/create_slack_conversation_example_call_tool.js diff --git a/public/examples/integrations/toolkits/slack_api/create_slack_conversation_example_call_tool.py b/public/examples/integrations/mcp-servers/slack_api/create_slack_conversation_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/slack_api/create_slack_conversation_example_call_tool.py rename to public/examples/integrations/mcp-servers/slack_api/create_slack_conversation_example_call_tool.py diff --git a/public/examples/integrations/toolkits/slack_api/create_slack_user_group_example_call_tool.js b/public/examples/integrations/mcp-servers/slack_api/create_slack_user_group_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/slack_api/create_slack_user_group_example_call_tool.js rename to public/examples/integrations/mcp-servers/slack_api/create_slack_user_group_example_call_tool.js diff --git a/public/examples/integrations/toolkits/slack_api/create_slack_user_group_example_call_tool.py b/public/examples/integrations/mcp-servers/slack_api/create_slack_user_group_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/slack_api/create_slack_user_group_example_call_tool.py rename to public/examples/integrations/mcp-servers/slack_api/create_slack_user_group_example_call_tool.py diff --git a/public/examples/integrations/toolkits/slack_api/custom_unfurl_slack_urls_example_call_tool.js b/public/examples/integrations/mcp-servers/slack_api/custom_unfurl_slack_urls_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/slack_api/custom_unfurl_slack_urls_example_call_tool.js rename to public/examples/integrations/mcp-servers/slack_api/custom_unfurl_slack_urls_example_call_tool.js diff --git a/public/examples/integrations/toolkits/slack_api/custom_unfurl_slack_urls_example_call_tool.py b/public/examples/integrations/mcp-servers/slack_api/custom_unfurl_slack_urls_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/slack_api/custom_unfurl_slack_urls_example_call_tool.py rename to public/examples/integrations/mcp-servers/slack_api/custom_unfurl_slack_urls_example_call_tool.py diff --git a/public/examples/integrations/toolkits/slack_api/delete_scheduled_slack_message_example_call_tool.js b/public/examples/integrations/mcp-servers/slack_api/delete_scheduled_slack_message_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/slack_api/delete_scheduled_slack_message_example_call_tool.js rename to public/examples/integrations/mcp-servers/slack_api/delete_scheduled_slack_message_example_call_tool.js diff --git a/public/examples/integrations/toolkits/slack_api/delete_scheduled_slack_message_example_call_tool.py b/public/examples/integrations/mcp-servers/slack_api/delete_scheduled_slack_message_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/slack_api/delete_scheduled_slack_message_example_call_tool.py rename to public/examples/integrations/mcp-servers/slack_api/delete_scheduled_slack_message_example_call_tool.py diff --git a/public/examples/integrations/toolkits/slack_api/deny_shared_invite_request_example_call_tool.js b/public/examples/integrations/mcp-servers/slack_api/deny_shared_invite_request_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/slack_api/deny_shared_invite_request_example_call_tool.js rename to public/examples/integrations/mcp-servers/slack_api/deny_shared_invite_request_example_call_tool.js diff --git a/public/examples/integrations/toolkits/slack_api/deny_shared_invite_request_example_call_tool.py b/public/examples/integrations/mcp-servers/slack_api/deny_shared_invite_request_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/slack_api/deny_shared_invite_request_example_call_tool.py rename to public/examples/integrations/mcp-servers/slack_api/deny_shared_invite_request_example_call_tool.py diff --git a/public/examples/integrations/toolkits/slack_api/disable_user_group_example_call_tool.js b/public/examples/integrations/mcp-servers/slack_api/disable_user_group_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/slack_api/disable_user_group_example_call_tool.js rename to public/examples/integrations/mcp-servers/slack_api/disable_user_group_example_call_tool.js diff --git a/public/examples/integrations/toolkits/slack_api/disable_user_group_example_call_tool.py b/public/examples/integrations/mcp-servers/slack_api/disable_user_group_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/slack_api/disable_user_group_example_call_tool.py rename to public/examples/integrations/mcp-servers/slack_api/disable_user_group_example_call_tool.py diff --git a/public/examples/integrations/toolkits/slack_api/edit_slack_bookmark_example_call_tool.js b/public/examples/integrations/mcp-servers/slack_api/edit_slack_bookmark_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/slack_api/edit_slack_bookmark_example_call_tool.js rename to public/examples/integrations/mcp-servers/slack_api/edit_slack_bookmark_example_call_tool.js diff --git a/public/examples/integrations/toolkits/slack_api/edit_slack_bookmark_example_call_tool.py b/public/examples/integrations/mcp-servers/slack_api/edit_slack_bookmark_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/slack_api/edit_slack_bookmark_example_call_tool.py rename to public/examples/integrations/mcp-servers/slack_api/edit_slack_bookmark_example_call_tool.py diff --git a/public/examples/integrations/toolkits/slack_api/enable_slack_file_sharing_example_call_tool.js b/public/examples/integrations/mcp-servers/slack_api/enable_slack_file_sharing_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/slack_api/enable_slack_file_sharing_example_call_tool.js rename to public/examples/integrations/mcp-servers/slack_api/enable_slack_file_sharing_example_call_tool.js diff --git a/public/examples/integrations/toolkits/slack_api/enable_slack_file_sharing_example_call_tool.py b/public/examples/integrations/mcp-servers/slack_api/enable_slack_file_sharing_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/slack_api/enable_slack_file_sharing_example_call_tool.py rename to public/examples/integrations/mcp-servers/slack_api/enable_slack_file_sharing_example_call_tool.py diff --git a/public/examples/integrations/toolkits/slack_api/enable_slack_user_group_example_call_tool.js b/public/examples/integrations/mcp-servers/slack_api/enable_slack_user_group_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/slack_api/enable_slack_user_group_example_call_tool.js rename to public/examples/integrations/mcp-servers/slack_api/enable_slack_user_group_example_call_tool.js diff --git a/public/examples/integrations/toolkits/slack_api/enable_slack_user_group_example_call_tool.py b/public/examples/integrations/mcp-servers/slack_api/enable_slack_user_group_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/slack_api/enable_slack_user_group_example_call_tool.py rename to public/examples/integrations/mcp-servers/slack_api/enable_slack_user_group_example_call_tool.py diff --git a/public/examples/integrations/toolkits/slack_api/fetch_workspace_settings_info_example_call_tool.js b/public/examples/integrations/mcp-servers/slack_api/fetch_workspace_settings_info_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/slack_api/fetch_workspace_settings_info_example_call_tool.js rename to public/examples/integrations/mcp-servers/slack_api/fetch_workspace_settings_info_example_call_tool.js diff --git a/public/examples/integrations/toolkits/slack_api/fetch_workspace_settings_info_example_call_tool.py b/public/examples/integrations/mcp-servers/slack_api/fetch_workspace_settings_info_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/slack_api/fetch_workspace_settings_info_example_call_tool.py rename to public/examples/integrations/mcp-servers/slack_api/fetch_workspace_settings_info_example_call_tool.py diff --git a/public/examples/integrations/toolkits/slack_api/find_slack_user_by_email_example_call_tool.js b/public/examples/integrations/mcp-servers/slack_api/find_slack_user_by_email_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/slack_api/find_slack_user_by_email_example_call_tool.js rename to public/examples/integrations/mcp-servers/slack_api/find_slack_user_by_email_example_call_tool.js diff --git a/public/examples/integrations/toolkits/slack_api/find_slack_user_by_email_example_call_tool.py b/public/examples/integrations/mcp-servers/slack_api/find_slack_user_by_email_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/slack_api/find_slack_user_by_email_example_call_tool.py rename to public/examples/integrations/mcp-servers/slack_api/find_slack_user_by_email_example_call_tool.py diff --git a/public/examples/integrations/toolkits/slack_api/get_call_information_example_call_tool.js b/public/examples/integrations/mcp-servers/slack_api/get_call_information_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/slack_api/get_call_information_example_call_tool.js rename to public/examples/integrations/mcp-servers/slack_api/get_call_information_example_call_tool.js diff --git a/public/examples/integrations/toolkits/slack_api/get_call_information_example_call_tool.py b/public/examples/integrations/mcp-servers/slack_api/get_call_information_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/slack_api/get_call_information_example_call_tool.py rename to public/examples/integrations/mcp-servers/slack_api/get_call_information_example_call_tool.py diff --git a/public/examples/integrations/toolkits/slack_api/get_conversation_info_example_call_tool.js b/public/examples/integrations/mcp-servers/slack_api/get_conversation_info_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/slack_api/get_conversation_info_example_call_tool.js rename to public/examples/integrations/mcp-servers/slack_api/get_conversation_info_example_call_tool.js diff --git a/public/examples/integrations/toolkits/slack_api/get_conversation_info_example_call_tool.py b/public/examples/integrations/mcp-servers/slack_api/get_conversation_info_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/slack_api/get_conversation_info_example_call_tool.py rename to public/examples/integrations/mcp-servers/slack_api/get_conversation_info_example_call_tool.py diff --git a/public/examples/integrations/toolkits/slack_api/get_current_slack_team_info_example_call_tool.js b/public/examples/integrations/mcp-servers/slack_api/get_current_slack_team_info_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/slack_api/get_current_slack_team_info_example_call_tool.js rename to public/examples/integrations/mcp-servers/slack_api/get_current_slack_team_info_example_call_tool.js diff --git a/public/examples/integrations/toolkits/slack_api/get_current_slack_team_info_example_call_tool.py b/public/examples/integrations/mcp-servers/slack_api/get_current_slack_team_info_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/slack_api/get_current_slack_team_info_example_call_tool.py rename to public/examples/integrations/mcp-servers/slack_api/get_current_slack_team_info_example_call_tool.py diff --git a/public/examples/integrations/toolkits/slack_api/get_external_file_upload_url_example_call_tool.js b/public/examples/integrations/mcp-servers/slack_api/get_external_file_upload_url_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/slack_api/get_external_file_upload_url_example_call_tool.js rename to public/examples/integrations/mcp-servers/slack_api/get_external_file_upload_url_example_call_tool.js diff --git a/public/examples/integrations/toolkits/slack_api/get_external_file_upload_url_example_call_tool.py b/public/examples/integrations/mcp-servers/slack_api/get_external_file_upload_url_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/slack_api/get_external_file_upload_url_example_call_tool.py rename to public/examples/integrations/mcp-servers/slack_api/get_external_file_upload_url_example_call_tool.py diff --git a/public/examples/integrations/toolkits/slack_api/get_integration_logs_example_call_tool.js b/public/examples/integrations/mcp-servers/slack_api/get_integration_logs_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/slack_api/get_integration_logs_example_call_tool.js rename to public/examples/integrations/mcp-servers/slack_api/get_integration_logs_example_call_tool.js diff --git a/public/examples/integrations/toolkits/slack_api/get_integration_logs_example_call_tool.py b/public/examples/integrations/mcp-servers/slack_api/get_integration_logs_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/slack_api/get_integration_logs_example_call_tool.py rename to public/examples/integrations/mcp-servers/slack_api/get_integration_logs_example_call_tool.py diff --git a/public/examples/integrations/toolkits/slack_api/get_remote_file_info_slack_example_call_tool.js b/public/examples/integrations/mcp-servers/slack_api/get_remote_file_info_slack_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/slack_api/get_remote_file_info_slack_example_call_tool.js rename to public/examples/integrations/mcp-servers/slack_api/get_remote_file_info_slack_example_call_tool.js diff --git a/public/examples/integrations/toolkits/slack_api/get_remote_file_info_slack_example_call_tool.py b/public/examples/integrations/mcp-servers/slack_api/get_remote_file_info_slack_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/slack_api/get_remote_file_info_slack_example_call_tool.py rename to public/examples/integrations/mcp-servers/slack_api/get_remote_file_info_slack_example_call_tool.py diff --git a/public/examples/integrations/toolkits/slack_api/get_slack_bot_info_example_call_tool.js b/public/examples/integrations/mcp-servers/slack_api/get_slack_bot_info_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/slack_api/get_slack_bot_info_example_call_tool.js rename to public/examples/integrations/mcp-servers/slack_api/get_slack_bot_info_example_call_tool.js diff --git a/public/examples/integrations/toolkits/slack_api/get_slack_bot_info_example_call_tool.py b/public/examples/integrations/mcp-servers/slack_api/get_slack_bot_info_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/slack_api/get_slack_bot_info_example_call_tool.py rename to public/examples/integrations/mcp-servers/slack_api/get_slack_bot_info_example_call_tool.py diff --git a/public/examples/integrations/toolkits/slack_api/get_slack_conversation_members_example_call_tool.js b/public/examples/integrations/mcp-servers/slack_api/get_slack_conversation_members_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/slack_api/get_slack_conversation_members_example_call_tool.js rename to public/examples/integrations/mcp-servers/slack_api/get_slack_conversation_members_example_call_tool.js diff --git a/public/examples/integrations/toolkits/slack_api/get_slack_conversation_members_example_call_tool.py b/public/examples/integrations/mcp-servers/slack_api/get_slack_conversation_members_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/slack_api/get_slack_conversation_members_example_call_tool.py rename to public/examples/integrations/mcp-servers/slack_api/get_slack_conversation_members_example_call_tool.py diff --git a/public/examples/integrations/toolkits/slack_api/get_slack_message_permalink_example_call_tool.js b/public/examples/integrations/mcp-servers/slack_api/get_slack_message_permalink_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/slack_api/get_slack_message_permalink_example_call_tool.js rename to public/examples/integrations/mcp-servers/slack_api/get_slack_message_permalink_example_call_tool.js diff --git a/public/examples/integrations/toolkits/slack_api/get_slack_message_permalink_example_call_tool.py b/public/examples/integrations/mcp-servers/slack_api/get_slack_message_permalink_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/slack_api/get_slack_message_permalink_example_call_tool.py rename to public/examples/integrations/mcp-servers/slack_api/get_slack_message_permalink_example_call_tool.py diff --git a/public/examples/integrations/toolkits/slack_api/get_slack_remote_files_info_example_call_tool.js b/public/examples/integrations/mcp-servers/slack_api/get_slack_remote_files_info_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/slack_api/get_slack_remote_files_info_example_call_tool.js rename to public/examples/integrations/mcp-servers/slack_api/get_slack_remote_files_info_example_call_tool.js diff --git a/public/examples/integrations/toolkits/slack_api/get_slack_remote_files_info_example_call_tool.py b/public/examples/integrations/mcp-servers/slack_api/get_slack_remote_files_info_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/slack_api/get_slack_remote_files_info_example_call_tool.py rename to public/examples/integrations/mcp-servers/slack_api/get_slack_remote_files_info_example_call_tool.py diff --git a/public/examples/integrations/toolkits/slack_api/get_slack_team_preferences_example_call_tool.js b/public/examples/integrations/mcp-servers/slack_api/get_slack_team_preferences_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/slack_api/get_slack_team_preferences_example_call_tool.js rename to public/examples/integrations/mcp-servers/slack_api/get_slack_team_preferences_example_call_tool.js diff --git a/public/examples/integrations/toolkits/slack_api/get_slack_team_preferences_example_call_tool.py b/public/examples/integrations/mcp-servers/slack_api/get_slack_team_preferences_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/slack_api/get_slack_team_preferences_example_call_tool.py rename to public/examples/integrations/mcp-servers/slack_api/get_slack_team_preferences_example_call_tool.py diff --git a/public/examples/integrations/toolkits/slack_api/get_slack_thread_messages_example_call_tool.js b/public/examples/integrations/mcp-servers/slack_api/get_slack_thread_messages_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/slack_api/get_slack_thread_messages_example_call_tool.js rename to public/examples/integrations/mcp-servers/slack_api/get_slack_thread_messages_example_call_tool.js diff --git a/public/examples/integrations/toolkits/slack_api/get_slack_thread_messages_example_call_tool.py b/public/examples/integrations/mcp-servers/slack_api/get_slack_thread_messages_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/slack_api/get_slack_thread_messages_example_call_tool.py rename to public/examples/integrations/mcp-servers/slack_api/get_slack_thread_messages_example_call_tool.py diff --git a/public/examples/integrations/toolkits/slack_api/get_slack_user_presence_example_call_tool.js b/public/examples/integrations/mcp-servers/slack_api/get_slack_user_presence_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/slack_api/get_slack_user_presence_example_call_tool.js rename to public/examples/integrations/mcp-servers/slack_api/get_slack_user_presence_example_call_tool.js diff --git a/public/examples/integrations/toolkits/slack_api/get_slack_user_presence_example_call_tool.py b/public/examples/integrations/mcp-servers/slack_api/get_slack_user_presence_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/slack_api/get_slack_user_presence_example_call_tool.py rename to public/examples/integrations/mcp-servers/slack_api/get_slack_user_presence_example_call_tool.py diff --git a/public/examples/integrations/toolkits/slack_api/get_slack_user_profile_example_call_tool.js b/public/examples/integrations/mcp-servers/slack_api/get_slack_user_profile_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/slack_api/get_slack_user_profile_example_call_tool.js rename to public/examples/integrations/mcp-servers/slack_api/get_slack_user_profile_example_call_tool.js diff --git a/public/examples/integrations/toolkits/slack_api/get_slack_user_profile_example_call_tool.py b/public/examples/integrations/mcp-servers/slack_api/get_slack_user_profile_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/slack_api/get_slack_user_profile_example_call_tool.py rename to public/examples/integrations/mcp-servers/slack_api/get_slack_user_profile_example_call_tool.py diff --git a/public/examples/integrations/toolkits/slack_api/get_team_billable_users_info_example_call_tool.js b/public/examples/integrations/mcp-servers/slack_api/get_team_billable_users_info_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/slack_api/get_team_billable_users_info_example_call_tool.js rename to public/examples/integrations/mcp-servers/slack_api/get_team_billable_users_info_example_call_tool.js diff --git a/public/examples/integrations/toolkits/slack_api/get_team_billable_users_info_example_call_tool.py b/public/examples/integrations/mcp-servers/slack_api/get_team_billable_users_info_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/slack_api/get_team_billable_users_info_example_call_tool.py rename to public/examples/integrations/mcp-servers/slack_api/get_team_billable_users_info_example_call_tool.py diff --git a/public/examples/integrations/toolkits/slack_api/get_team_profile_example_call_tool.js b/public/examples/integrations/mcp-servers/slack_api/get_team_profile_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/slack_api/get_team_profile_example_call_tool.js rename to public/examples/integrations/mcp-servers/slack_api/get_team_profile_example_call_tool.js diff --git a/public/examples/integrations/toolkits/slack_api/get_team_profile_example_call_tool.py b/public/examples/integrations/mcp-servers/slack_api/get_team_profile_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/slack_api/get_team_profile_example_call_tool.py rename to public/examples/integrations/mcp-servers/slack_api/get_team_profile_example_call_tool.py diff --git a/public/examples/integrations/toolkits/slack_api/get_user_identity_example_call_tool.js b/public/examples/integrations/mcp-servers/slack_api/get_user_identity_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/slack_api/get_user_identity_example_call_tool.js rename to public/examples/integrations/mcp-servers/slack_api/get_user_identity_example_call_tool.js diff --git a/public/examples/integrations/toolkits/slack_api/get_user_identity_example_call_tool.py b/public/examples/integrations/mcp-servers/slack_api/get_user_identity_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/slack_api/get_user_identity_example_call_tool.py rename to public/examples/integrations/mcp-servers/slack_api/get_user_identity_example_call_tool.py diff --git a/public/examples/integrations/toolkits/slack_api/invite_user_to_slack_channel_example_call_tool.js b/public/examples/integrations/mcp-servers/slack_api/invite_user_to_slack_channel_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/slack_api/invite_user_to_slack_channel_example_call_tool.js rename to public/examples/integrations/mcp-servers/slack_api/invite_user_to_slack_channel_example_call_tool.js diff --git a/public/examples/integrations/toolkits/slack_api/invite_user_to_slack_channel_example_call_tool.py b/public/examples/integrations/mcp-servers/slack_api/invite_user_to_slack_channel_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/slack_api/invite_user_to_slack_channel_example_call_tool.py rename to public/examples/integrations/mcp-servers/slack_api/invite_user_to_slack_channel_example_call_tool.py diff --git a/public/examples/integrations/toolkits/slack_api/join_slack_conversation_example_call_tool.js b/public/examples/integrations/mcp-servers/slack_api/join_slack_conversation_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/slack_api/join_slack_conversation_example_call_tool.js rename to public/examples/integrations/mcp-servers/slack_api/join_slack_conversation_example_call_tool.js diff --git a/public/examples/integrations/toolkits/slack_api/join_slack_conversation_example_call_tool.py b/public/examples/integrations/mcp-servers/slack_api/join_slack_conversation_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/slack_api/join_slack_conversation_example_call_tool.py rename to public/examples/integrations/mcp-servers/slack_api/join_slack_conversation_example_call_tool.py diff --git a/public/examples/integrations/toolkits/slack_api/list_accessible_slack_conversations_example_call_tool.js b/public/examples/integrations/mcp-servers/slack_api/list_accessible_slack_conversations_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/slack_api/list_accessible_slack_conversations_example_call_tool.js rename to public/examples/integrations/mcp-servers/slack_api/list_accessible_slack_conversations_example_call_tool.js diff --git a/public/examples/integrations/toolkits/slack_api/list_accessible_slack_conversations_example_call_tool.py b/public/examples/integrations/mcp-servers/slack_api/list_accessible_slack_conversations_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/slack_api/list_accessible_slack_conversations_example_call_tool.py rename to public/examples/integrations/mcp-servers/slack_api/list_accessible_slack_conversations_example_call_tool.py diff --git a/public/examples/integrations/toolkits/slack_api/list_approved_workspace_invite_requests_example_call_tool.js b/public/examples/integrations/mcp-servers/slack_api/list_approved_workspace_invite_requests_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/slack_api/list_approved_workspace_invite_requests_example_call_tool.js rename to public/examples/integrations/mcp-servers/slack_api/list_approved_workspace_invite_requests_example_call_tool.js diff --git a/public/examples/integrations/toolkits/slack_api/list_approved_workspace_invite_requests_example_call_tool.py b/public/examples/integrations/mcp-servers/slack_api/list_approved_workspace_invite_requests_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/slack_api/list_approved_workspace_invite_requests_example_call_tool.py rename to public/examples/integrations/mcp-servers/slack_api/list_approved_workspace_invite_requests_example_call_tool.py diff --git a/public/examples/integrations/toolkits/slack_api/list_channels_for_usergroup_example_call_tool.js b/public/examples/integrations/mcp-servers/slack_api/list_channels_for_usergroup_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/slack_api/list_channels_for_usergroup_example_call_tool.js rename to public/examples/integrations/mcp-servers/slack_api/list_channels_for_usergroup_example_call_tool.js diff --git a/public/examples/integrations/toolkits/slack_api/list_channels_for_usergroup_example_call_tool.py b/public/examples/integrations/mcp-servers/slack_api/list_channels_for_usergroup_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/slack_api/list_channels_for_usergroup_example_call_tool.py rename to public/examples/integrations/mcp-servers/slack_api/list_channels_for_usergroup_example_call_tool.py diff --git a/public/examples/integrations/toolkits/slack_api/list_custom_emoji_for_team_example_call_tool.js b/public/examples/integrations/mcp-servers/slack_api/list_custom_emoji_for_team_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/slack_api/list_custom_emoji_for_team_example_call_tool.js rename to public/examples/integrations/mcp-servers/slack_api/list_custom_emoji_for_team_example_call_tool.js diff --git a/public/examples/integrations/toolkits/slack_api/list_custom_emoji_for_team_example_call_tool.py b/public/examples/integrations/mcp-servers/slack_api/list_custom_emoji_for_team_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/slack_api/list_custom_emoji_for_team_example_call_tool.py rename to public/examples/integrations/mcp-servers/slack_api/list_custom_emoji_for_team_example_call_tool.py diff --git a/public/examples/integrations/toolkits/slack_api/list_denied_slack_invite_requests_example_call_tool.js b/public/examples/integrations/mcp-servers/slack_api/list_denied_slack_invite_requests_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/slack_api/list_denied_slack_invite_requests_example_call_tool.js rename to public/examples/integrations/mcp-servers/slack_api/list_denied_slack_invite_requests_example_call_tool.js diff --git a/public/examples/integrations/toolkits/slack_api/list_denied_slack_invite_requests_example_call_tool.py b/public/examples/integrations/mcp-servers/slack_api/list_denied_slack_invite_requests_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/slack_api/list_denied_slack_invite_requests_example_call_tool.py rename to public/examples/integrations/mcp-servers/slack_api/list_denied_slack_invite_requests_example_call_tool.py diff --git a/public/examples/integrations/toolkits/slack_api/list_pending_workspace_invites_example_call_tool.js b/public/examples/integrations/mcp-servers/slack_api/list_pending_workspace_invites_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/slack_api/list_pending_workspace_invites_example_call_tool.js rename to public/examples/integrations/mcp-servers/slack_api/list_pending_workspace_invites_example_call_tool.js diff --git a/public/examples/integrations/toolkits/slack_api/list_pending_workspace_invites_example_call_tool.py b/public/examples/integrations/mcp-servers/slack_api/list_pending_workspace_invites_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/slack_api/list_pending_workspace_invites_example_call_tool.py rename to public/examples/integrations/mcp-servers/slack_api/list_pending_workspace_invites_example_call_tool.py diff --git a/public/examples/integrations/toolkits/slack_api/list_pinned_items_example_call_tool.js b/public/examples/integrations/mcp-servers/slack_api/list_pinned_items_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/slack_api/list_pinned_items_example_call_tool.js rename to public/examples/integrations/mcp-servers/slack_api/list_pinned_items_example_call_tool.js diff --git a/public/examples/integrations/toolkits/slack_api/list_pinned_items_example_call_tool.py b/public/examples/integrations/mcp-servers/slack_api/list_pinned_items_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/slack_api/list_pinned_items_example_call_tool.py rename to public/examples/integrations/mcp-servers/slack_api/list_pinned_items_example_call_tool.py diff --git a/public/examples/integrations/toolkits/slack_api/list_scheduled_messages_example_call_tool.js b/public/examples/integrations/mcp-servers/slack_api/list_scheduled_messages_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/slack_api/list_scheduled_messages_example_call_tool.js rename to public/examples/integrations/mcp-servers/slack_api/list_scheduled_messages_example_call_tool.js diff --git a/public/examples/integrations/toolkits/slack_api/list_scheduled_messages_example_call_tool.py b/public/examples/integrations/mcp-servers/slack_api/list_scheduled_messages_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/slack_api/list_scheduled_messages_example_call_tool.py rename to public/examples/integrations/mcp-servers/slack_api/list_scheduled_messages_example_call_tool.py diff --git a/public/examples/integrations/toolkits/slack_api/list_shared_channel_invites_example_call_tool.js b/public/examples/integrations/mcp-servers/slack_api/list_shared_channel_invites_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/slack_api/list_shared_channel_invites_example_call_tool.js rename to public/examples/integrations/mcp-servers/slack_api/list_shared_channel_invites_example_call_tool.js diff --git a/public/examples/integrations/toolkits/slack_api/list_shared_channel_invites_example_call_tool.py b/public/examples/integrations/mcp-servers/slack_api/list_shared_channel_invites_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/slack_api/list_shared_channel_invites_example_call_tool.py rename to public/examples/integrations/mcp-servers/slack_api/list_shared_channel_invites_example_call_tool.py diff --git a/public/examples/integrations/toolkits/slack_api/list_slack_channels_example_call_tool.js b/public/examples/integrations/mcp-servers/slack_api/list_slack_channels_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/slack_api/list_slack_channels_example_call_tool.js rename to public/examples/integrations/mcp-servers/slack_api/list_slack_channels_example_call_tool.js diff --git a/public/examples/integrations/toolkits/slack_api/list_slack_channels_example_call_tool.py b/public/examples/integrations/mcp-servers/slack_api/list_slack_channels_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/slack_api/list_slack_channels_example_call_tool.py rename to public/examples/integrations/mcp-servers/slack_api/list_slack_channels_example_call_tool.py diff --git a/public/examples/integrations/toolkits/slack_api/list_slack_enterprise_emojis_example_call_tool.js b/public/examples/integrations/mcp-servers/slack_api/list_slack_enterprise_emojis_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/slack_api/list_slack_enterprise_emojis_example_call_tool.js rename to public/examples/integrations/mcp-servers/slack_api/list_slack_enterprise_emojis_example_call_tool.js diff --git a/public/examples/integrations/toolkits/slack_api/list_slack_enterprise_emojis_example_call_tool.py b/public/examples/integrations/mcp-servers/slack_api/list_slack_enterprise_emojis_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/slack_api/list_slack_enterprise_emojis_example_call_tool.py rename to public/examples/integrations/mcp-servers/slack_api/list_slack_enterprise_emojis_example_call_tool.py diff --git a/public/examples/integrations/toolkits/slack_api/list_slack_team_users_example_call_tool.js b/public/examples/integrations/mcp-servers/slack_api/list_slack_team_users_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/slack_api/list_slack_team_users_example_call_tool.js rename to public/examples/integrations/mcp-servers/slack_api/list_slack_team_users_example_call_tool.js diff --git a/public/examples/integrations/toolkits/slack_api/list_slack_team_users_example_call_tool.py b/public/examples/integrations/mcp-servers/slack_api/list_slack_team_users_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/slack_api/list_slack_team_users_example_call_tool.py rename to public/examples/integrations/mcp-servers/slack_api/list_slack_team_users_example_call_tool.py diff --git a/public/examples/integrations/toolkits/slack_api/list_slack_user_groups_example_call_tool.js b/public/examples/integrations/mcp-servers/slack_api/list_slack_user_groups_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/slack_api/list_slack_user_groups_example_call_tool.js rename to public/examples/integrations/mcp-servers/slack_api/list_slack_user_groups_example_call_tool.js diff --git a/public/examples/integrations/toolkits/slack_api/list_slack_user_groups_example_call_tool.py b/public/examples/integrations/mcp-servers/slack_api/list_slack_user_groups_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/slack_api/list_slack_user_groups_example_call_tool.py rename to public/examples/integrations/mcp-servers/slack_api/list_slack_user_groups_example_call_tool.py diff --git a/public/examples/integrations/toolkits/slack_api/list_slack_workspace_owners_example_call_tool.js b/public/examples/integrations/mcp-servers/slack_api/list_slack_workspace_owners_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/slack_api/list_slack_workspace_owners_example_call_tool.js rename to public/examples/integrations/mcp-servers/slack_api/list_slack_workspace_owners_example_call_tool.js diff --git a/public/examples/integrations/toolkits/slack_api/list_slack_workspace_owners_example_call_tool.py b/public/examples/integrations/mcp-servers/slack_api/list_slack_workspace_owners_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/slack_api/list_slack_workspace_owners_example_call_tool.py rename to public/examples/integrations/mcp-servers/slack_api/list_slack_workspace_owners_example_call_tool.py diff --git a/public/examples/integrations/toolkits/slack_api/list_teams_in_enterprise_example_call_tool.js b/public/examples/integrations/mcp-servers/slack_api/list_teams_in_enterprise_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/slack_api/list_teams_in_enterprise_example_call_tool.js rename to public/examples/integrations/mcp-servers/slack_api/list_teams_in_enterprise_example_call_tool.js diff --git a/public/examples/integrations/toolkits/slack_api/list_teams_in_enterprise_example_call_tool.py b/public/examples/integrations/mcp-servers/slack_api/list_teams_in_enterprise_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/slack_api/list_teams_in_enterprise_example_call_tool.py rename to public/examples/integrations/mcp-servers/slack_api/list_teams_in_enterprise_example_call_tool.py diff --git a/public/examples/integrations/toolkits/slack_api/list_workspace_users_example_call_tool.js b/public/examples/integrations/mcp-servers/slack_api/list_workspace_users_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/slack_api/list_workspace_users_example_call_tool.js rename to public/examples/integrations/mcp-servers/slack_api/list_workspace_users_example_call_tool.js diff --git a/public/examples/integrations/toolkits/slack_api/list_workspace_users_example_call_tool.py b/public/examples/integrations/mcp-servers/slack_api/list_workspace_users_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/slack_api/list_workspace_users_example_call_tool.py rename to public/examples/integrations/mcp-servers/slack_api/list_workspace_users_example_call_tool.py diff --git a/public/examples/integrations/toolkits/slack_api/open_or_resume_slack_conversation_example_call_tool.js b/public/examples/integrations/mcp-servers/slack_api/open_or_resume_slack_conversation_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/slack_api/open_or_resume_slack_conversation_example_call_tool.js rename to public/examples/integrations/mcp-servers/slack_api/open_or_resume_slack_conversation_example_call_tool.js diff --git a/public/examples/integrations/toolkits/slack_api/open_or_resume_slack_conversation_example_call_tool.py b/public/examples/integrations/mcp-servers/slack_api/open_or_resume_slack_conversation_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/slack_api/open_or_resume_slack_conversation_example_call_tool.py rename to public/examples/integrations/mcp-servers/slack_api/open_or_resume_slack_conversation_example_call_tool.py diff --git a/public/examples/integrations/toolkits/slack_api/pin_item_to_slack_channel_example_call_tool.js b/public/examples/integrations/mcp-servers/slack_api/pin_item_to_slack_channel_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/slack_api/pin_item_to_slack_channel_example_call_tool.js rename to public/examples/integrations/mcp-servers/slack_api/pin_item_to_slack_channel_example_call_tool.js diff --git a/public/examples/integrations/toolkits/slack_api/pin_item_to_slack_channel_example_call_tool.py b/public/examples/integrations/mcp-servers/slack_api/pin_item_to_slack_channel_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/slack_api/pin_item_to_slack_channel_example_call_tool.py rename to public/examples/integrations/mcp-servers/slack_api/pin_item_to_slack_channel_example_call_tool.py diff --git a/public/examples/integrations/toolkits/slack_api/register_slack_call_example_call_tool.js b/public/examples/integrations/mcp-servers/slack_api/register_slack_call_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/slack_api/register_slack_call_example_call_tool.js rename to public/examples/integrations/mcp-servers/slack_api/register_slack_call_example_call_tool.js diff --git a/public/examples/integrations/toolkits/slack_api/register_slack_call_example_call_tool.py b/public/examples/integrations/mcp-servers/slack_api/register_slack_call_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/slack_api/register_slack_call_example_call_tool.py rename to public/examples/integrations/mcp-servers/slack_api/register_slack_call_example_call_tool.py diff --git a/public/examples/integrations/toolkits/slack_api/remove_call_participants_example_call_tool.js b/public/examples/integrations/mcp-servers/slack_api/remove_call_participants_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/slack_api/remove_call_participants_example_call_tool.js rename to public/examples/integrations/mcp-servers/slack_api/remove_call_participants_example_call_tool.js diff --git a/public/examples/integrations/toolkits/slack_api/remove_call_participants_example_call_tool.py b/public/examples/integrations/mcp-servers/slack_api/remove_call_participants_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/slack_api/remove_call_participants_example_call_tool.py rename to public/examples/integrations/mcp-servers/slack_api/remove_call_participants_example_call_tool.py diff --git a/public/examples/integrations/toolkits/slack_api/remove_reaction_from_item_example_call_tool.js b/public/examples/integrations/mcp-servers/slack_api/remove_reaction_from_item_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/slack_api/remove_reaction_from_item_example_call_tool.js rename to public/examples/integrations/mcp-servers/slack_api/remove_reaction_from_item_example_call_tool.js diff --git a/public/examples/integrations/toolkits/slack_api/remove_reaction_from_item_example_call_tool.py b/public/examples/integrations/mcp-servers/slack_api/remove_reaction_from_item_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/slack_api/remove_reaction_from_item_example_call_tool.py rename to public/examples/integrations/mcp-servers/slack_api/remove_reaction_from_item_example_call_tool.py diff --git a/public/examples/integrations/toolkits/slack_api/remove_slack_bookmark_example_call_tool.js b/public/examples/integrations/mcp-servers/slack_api/remove_slack_bookmark_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/slack_api/remove_slack_bookmark_example_call_tool.js rename to public/examples/integrations/mcp-servers/slack_api/remove_slack_bookmark_example_call_tool.js diff --git a/public/examples/integrations/toolkits/slack_api/remove_slack_bookmark_example_call_tool.py b/public/examples/integrations/mcp-servers/slack_api/remove_slack_bookmark_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/slack_api/remove_slack_bookmark_example_call_tool.py rename to public/examples/integrations/mcp-servers/slack_api/remove_slack_bookmark_example_call_tool.py diff --git a/public/examples/integrations/toolkits/slack_api/rename_slack_emoji_example_call_tool.js b/public/examples/integrations/mcp-servers/slack_api/rename_slack_emoji_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/slack_api/rename_slack_emoji_example_call_tool.js rename to public/examples/integrations/mcp-servers/slack_api/rename_slack_emoji_example_call_tool.js diff --git a/public/examples/integrations/toolkits/slack_api/rename_slack_emoji_example_call_tool.py b/public/examples/integrations/mcp-servers/slack_api/rename_slack_emoji_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/slack_api/rename_slack_emoji_example_call_tool.py rename to public/examples/integrations/mcp-servers/slack_api/rename_slack_emoji_example_call_tool.py diff --git a/public/examples/integrations/toolkits/slack_api/revoke_slack_token_example_call_tool.js b/public/examples/integrations/mcp-servers/slack_api/revoke_slack_token_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/slack_api/revoke_slack_token_example_call_tool.js rename to public/examples/integrations/mcp-servers/slack_api/revoke_slack_token_example_call_tool.js diff --git a/public/examples/integrations/toolkits/slack_api/revoke_slack_token_example_call_tool.py b/public/examples/integrations/mcp-servers/slack_api/revoke_slack_token_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/slack_api/revoke_slack_token_example_call_tool.py rename to public/examples/integrations/mcp-servers/slack_api/revoke_slack_token_example_call_tool.py diff --git a/public/examples/integrations/toolkits/slack_api/schedule_slack_message_example_call_tool.js b/public/examples/integrations/mcp-servers/slack_api/schedule_slack_message_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/slack_api/schedule_slack_message_example_call_tool.js rename to public/examples/integrations/mcp-servers/slack_api/schedule_slack_message_example_call_tool.js diff --git a/public/examples/integrations/toolkits/slack_api/schedule_slack_message_example_call_tool.py b/public/examples/integrations/mcp-servers/slack_api/schedule_slack_message_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/slack_api/schedule_slack_message_example_call_tool.py rename to public/examples/integrations/mcp-servers/slack_api/schedule_slack_message_example_call_tool.py diff --git a/public/examples/integrations/toolkits/slack_api/search_files_in_slack_example_call_tool.js b/public/examples/integrations/mcp-servers/slack_api/search_files_in_slack_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/slack_api/search_files_in_slack_example_call_tool.js rename to public/examples/integrations/mcp-servers/slack_api/search_files_in_slack_example_call_tool.js diff --git a/public/examples/integrations/toolkits/slack_api/search_files_in_slack_example_call_tool.py b/public/examples/integrations/mcp-servers/slack_api/search_files_in_slack_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/slack_api/search_files_in_slack_example_call_tool.py rename to public/examples/integrations/mcp-servers/slack_api/search_files_in_slack_example_call_tool.py diff --git a/public/examples/integrations/toolkits/slack_api/search_slack_messages_example_call_tool.js b/public/examples/integrations/mcp-servers/slack_api/search_slack_messages_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/slack_api/search_slack_messages_example_call_tool.js rename to public/examples/integrations/mcp-servers/slack_api/search_slack_messages_example_call_tool.js diff --git a/public/examples/integrations/toolkits/slack_api/search_slack_messages_example_call_tool.py b/public/examples/integrations/mcp-servers/slack_api/search_slack_messages_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/slack_api/search_slack_messages_example_call_tool.py rename to public/examples/integrations/mcp-servers/slack_api/search_slack_messages_example_call_tool.py diff --git a/public/examples/integrations/toolkits/slack_api/send_ephemeral_message_slack_example_call_tool.js b/public/examples/integrations/mcp-servers/slack_api/send_ephemeral_message_slack_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/slack_api/send_ephemeral_message_slack_example_call_tool.js rename to public/examples/integrations/mcp-servers/slack_api/send_ephemeral_message_slack_example_call_tool.js diff --git a/public/examples/integrations/toolkits/slack_api/send_ephemeral_message_slack_example_call_tool.py b/public/examples/integrations/mcp-servers/slack_api/send_ephemeral_message_slack_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/slack_api/send_ephemeral_message_slack_example_call_tool.py rename to public/examples/integrations/mcp-servers/slack_api/send_ephemeral_message_slack_example_call_tool.py diff --git a/public/examples/integrations/toolkits/slack_api/send_slack_message_example_call_tool.js b/public/examples/integrations/mcp-servers/slack_api/send_slack_message_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/slack_api/send_slack_message_example_call_tool.js rename to public/examples/integrations/mcp-servers/slack_api/send_slack_message_example_call_tool.js diff --git a/public/examples/integrations/toolkits/slack_api/send_slack_message_example_call_tool.py b/public/examples/integrations/mcp-servers/slack_api/send_slack_message_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/slack_api/send_slack_message_example_call_tool.py rename to public/examples/integrations/mcp-servers/slack_api/send_slack_message_example_call_tool.py diff --git a/public/examples/integrations/toolkits/slack_api/set_slack_channel_read_cursor_example_call_tool.js b/public/examples/integrations/mcp-servers/slack_api/set_slack_channel_read_cursor_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/slack_api/set_slack_channel_read_cursor_example_call_tool.js rename to public/examples/integrations/mcp-servers/slack_api/set_slack_channel_read_cursor_example_call_tool.js diff --git a/public/examples/integrations/toolkits/slack_api/set_slack_channel_read_cursor_example_call_tool.py b/public/examples/integrations/mcp-servers/slack_api/set_slack_channel_read_cursor_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/slack_api/set_slack_channel_read_cursor_example_call_tool.py rename to public/examples/integrations/mcp-servers/slack_api/set_slack_channel_read_cursor_example_call_tool.py diff --git a/public/examples/integrations/toolkits/slack_api/set_slack_profile_photo_example_call_tool.js b/public/examples/integrations/mcp-servers/slack_api/set_slack_profile_photo_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/slack_api/set_slack_profile_photo_example_call_tool.js rename to public/examples/integrations/mcp-servers/slack_api/set_slack_profile_photo_example_call_tool.js diff --git a/public/examples/integrations/toolkits/slack_api/set_slack_profile_photo_example_call_tool.py b/public/examples/integrations/mcp-servers/slack_api/set_slack_profile_photo_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/slack_api/set_slack_profile_photo_example_call_tool.py rename to public/examples/integrations/mcp-servers/slack_api/set_slack_profile_photo_example_call_tool.py diff --git a/public/examples/integrations/toolkits/slack_api/set_slack_workspace_name_example_call_tool.js b/public/examples/integrations/mcp-servers/slack_api/set_slack_workspace_name_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/slack_api/set_slack_workspace_name_example_call_tool.js rename to public/examples/integrations/mcp-servers/slack_api/set_slack_workspace_name_example_call_tool.js diff --git a/public/examples/integrations/toolkits/slack_api/set_slack_workspace_name_example_call_tool.py b/public/examples/integrations/mcp-servers/slack_api/set_slack_workspace_name_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/slack_api/set_slack_workspace_name_example_call_tool.py rename to public/examples/integrations/mcp-servers/slack_api/set_slack_workspace_name_example_call_tool.py diff --git a/public/examples/integrations/toolkits/slack_api/set_workspace_description_example_call_tool.js b/public/examples/integrations/mcp-servers/slack_api/set_workspace_description_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/slack_api/set_workspace_description_example_call_tool.js rename to public/examples/integrations/mcp-servers/slack_api/set_workspace_description_example_call_tool.js diff --git a/public/examples/integrations/toolkits/slack_api/set_workspace_description_example_call_tool.py b/public/examples/integrations/mcp-servers/slack_api/set_workspace_description_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/slack_api/set_workspace_description_example_call_tool.py rename to public/examples/integrations/mcp-servers/slack_api/set_workspace_description_example_call_tool.py diff --git a/public/examples/integrations/toolkits/slack_api/share_remote_file_in_channel_example_call_tool.js b/public/examples/integrations/mcp-servers/slack_api/share_remote_file_in_channel_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/slack_api/share_remote_file_in_channel_example_call_tool.js rename to public/examples/integrations/mcp-servers/slack_api/share_remote_file_in_channel_example_call_tool.js diff --git a/public/examples/integrations/toolkits/slack_api/share_remote_file_in_channel_example_call_tool.py b/public/examples/integrations/mcp-servers/slack_api/share_remote_file_in_channel_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/slack_api/share_remote_file_in_channel_example_call_tool.py rename to public/examples/integrations/mcp-servers/slack_api/share_remote_file_in_channel_example_call_tool.py diff --git a/public/examples/integrations/toolkits/slack_api/update_slack_user_group_example_call_tool.js b/public/examples/integrations/mcp-servers/slack_api/update_slack_user_group_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/slack_api/update_slack_user_group_example_call_tool.js rename to public/examples/integrations/mcp-servers/slack_api/update_slack_user_group_example_call_tool.js diff --git a/public/examples/integrations/toolkits/slack_api/update_slack_user_group_example_call_tool.py b/public/examples/integrations/mcp-servers/slack_api/update_slack_user_group_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/slack_api/update_slack_user_group_example_call_tool.py rename to public/examples/integrations/mcp-servers/slack_api/update_slack_user_group_example_call_tool.py diff --git a/public/examples/integrations/toolkits/slack_api/update_slack_usergroup_users_example_call_tool.js b/public/examples/integrations/mcp-servers/slack_api/update_slack_usergroup_users_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/slack_api/update_slack_usergroup_users_example_call_tool.js rename to public/examples/integrations/mcp-servers/slack_api/update_slack_usergroup_users_example_call_tool.js diff --git a/public/examples/integrations/toolkits/slack_api/update_slack_usergroup_users_example_call_tool.py b/public/examples/integrations/mcp-servers/slack_api/update_slack_usergroup_users_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/slack_api/update_slack_usergroup_users_example_call_tool.py rename to public/examples/integrations/mcp-servers/slack_api/update_slack_usergroup_users_example_call_tool.py diff --git a/public/examples/integrations/toolkits/spotify/adjust_playback_position_example_call_tool.js b/public/examples/integrations/mcp-servers/spotify/adjust_playback_position_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/spotify/adjust_playback_position_example_call_tool.js rename to public/examples/integrations/mcp-servers/spotify/adjust_playback_position_example_call_tool.js diff --git a/public/examples/integrations/toolkits/spotify/adjust_playback_position_example_call_tool.py b/public/examples/integrations/mcp-servers/spotify/adjust_playback_position_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/spotify/adjust_playback_position_example_call_tool.py rename to public/examples/integrations/mcp-servers/spotify/adjust_playback_position_example_call_tool.py diff --git a/public/examples/integrations/toolkits/spotify/get_available_devices_example_call_tool.js b/public/examples/integrations/mcp-servers/spotify/get_available_devices_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/spotify/get_available_devices_example_call_tool.js rename to public/examples/integrations/mcp-servers/spotify/get_available_devices_example_call_tool.js diff --git a/public/examples/integrations/toolkits/spotify/get_available_devices_example_call_tool.py b/public/examples/integrations/mcp-servers/spotify/get_available_devices_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/spotify/get_available_devices_example_call_tool.py rename to public/examples/integrations/mcp-servers/spotify/get_available_devices_example_call_tool.py diff --git a/public/examples/integrations/toolkits/spotify/get_currently_playing_example_call_tool.js b/public/examples/integrations/mcp-servers/spotify/get_currently_playing_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/spotify/get_currently_playing_example_call_tool.js rename to public/examples/integrations/mcp-servers/spotify/get_currently_playing_example_call_tool.js diff --git a/public/examples/integrations/toolkits/spotify/get_currently_playing_example_call_tool.py b/public/examples/integrations/mcp-servers/spotify/get_currently_playing_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/spotify/get_currently_playing_example_call_tool.py rename to public/examples/integrations/mcp-servers/spotify/get_currently_playing_example_call_tool.py diff --git a/public/examples/integrations/toolkits/spotify/get_playback_state_example_call_tool.js b/public/examples/integrations/mcp-servers/spotify/get_playback_state_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/spotify/get_playback_state_example_call_tool.js rename to public/examples/integrations/mcp-servers/spotify/get_playback_state_example_call_tool.js diff --git a/public/examples/integrations/toolkits/spotify/get_playback_state_example_call_tool.py b/public/examples/integrations/mcp-servers/spotify/get_playback_state_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/spotify/get_playback_state_example_call_tool.py rename to public/examples/integrations/mcp-servers/spotify/get_playback_state_example_call_tool.py diff --git a/public/examples/integrations/toolkits/spotify/get_track_from_id_example_call_tool.js b/public/examples/integrations/mcp-servers/spotify/get_track_from_id_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/spotify/get_track_from_id_example_call_tool.js rename to public/examples/integrations/mcp-servers/spotify/get_track_from_id_example_call_tool.js diff --git a/public/examples/integrations/toolkits/spotify/get_track_from_id_example_call_tool.py b/public/examples/integrations/mcp-servers/spotify/get_track_from_id_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/spotify/get_track_from_id_example_call_tool.py rename to public/examples/integrations/mcp-servers/spotify/get_track_from_id_example_call_tool.py diff --git a/public/examples/integrations/toolkits/spotify/pause_playback_example_call_tool.js b/public/examples/integrations/mcp-servers/spotify/pause_playback_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/spotify/pause_playback_example_call_tool.js rename to public/examples/integrations/mcp-servers/spotify/pause_playback_example_call_tool.js diff --git a/public/examples/integrations/toolkits/spotify/pause_playback_example_call_tool.py b/public/examples/integrations/mcp-servers/spotify/pause_playback_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/spotify/pause_playback_example_call_tool.py rename to public/examples/integrations/mcp-servers/spotify/pause_playback_example_call_tool.py diff --git a/public/examples/integrations/toolkits/spotify/play_artist_by_name_example_call_tool.js b/public/examples/integrations/mcp-servers/spotify/play_artist_by_name_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/spotify/play_artist_by_name_example_call_tool.js rename to public/examples/integrations/mcp-servers/spotify/play_artist_by_name_example_call_tool.js diff --git a/public/examples/integrations/toolkits/spotify/play_artist_by_name_example_call_tool.py b/public/examples/integrations/mcp-servers/spotify/play_artist_by_name_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/spotify/play_artist_by_name_example_call_tool.py rename to public/examples/integrations/mcp-servers/spotify/play_artist_by_name_example_call_tool.py diff --git a/public/examples/integrations/toolkits/spotify/play_track_by_name_example_call_tool.js b/public/examples/integrations/mcp-servers/spotify/play_track_by_name_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/spotify/play_track_by_name_example_call_tool.js rename to public/examples/integrations/mcp-servers/spotify/play_track_by_name_example_call_tool.js diff --git a/public/examples/integrations/toolkits/spotify/play_track_by_name_example_call_tool.py b/public/examples/integrations/mcp-servers/spotify/play_track_by_name_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/spotify/play_track_by_name_example_call_tool.py rename to public/examples/integrations/mcp-servers/spotify/play_track_by_name_example_call_tool.py diff --git a/public/examples/integrations/toolkits/spotify/resume_playback_example_call_tool.js b/public/examples/integrations/mcp-servers/spotify/resume_playback_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/spotify/resume_playback_example_call_tool.js rename to public/examples/integrations/mcp-servers/spotify/resume_playback_example_call_tool.js diff --git a/public/examples/integrations/toolkits/spotify/resume_playback_example_call_tool.py b/public/examples/integrations/mcp-servers/spotify/resume_playback_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/spotify/resume_playback_example_call_tool.py rename to public/examples/integrations/mcp-servers/spotify/resume_playback_example_call_tool.py diff --git a/public/examples/integrations/toolkits/spotify/search_example_call_tool.js b/public/examples/integrations/mcp-servers/spotify/search_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/spotify/search_example_call_tool.js rename to public/examples/integrations/mcp-servers/spotify/search_example_call_tool.js diff --git a/public/examples/integrations/toolkits/spotify/search_example_call_tool.py b/public/examples/integrations/mcp-servers/spotify/search_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/spotify/search_example_call_tool.py rename to public/examples/integrations/mcp-servers/spotify/search_example_call_tool.py diff --git a/public/examples/integrations/toolkits/spotify/skip_to_next_track_example_call_tool.js b/public/examples/integrations/mcp-servers/spotify/skip_to_next_track_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/spotify/skip_to_next_track_example_call_tool.js rename to public/examples/integrations/mcp-servers/spotify/skip_to_next_track_example_call_tool.js diff --git a/public/examples/integrations/toolkits/spotify/skip_to_next_track_example_call_tool.py b/public/examples/integrations/mcp-servers/spotify/skip_to_next_track_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/spotify/skip_to_next_track_example_call_tool.py rename to public/examples/integrations/mcp-servers/spotify/skip_to_next_track_example_call_tool.py diff --git a/public/examples/integrations/toolkits/spotify/skip_to_previous_track_example_call_tool.js b/public/examples/integrations/mcp-servers/spotify/skip_to_previous_track_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/spotify/skip_to_previous_track_example_call_tool.js rename to public/examples/integrations/mcp-servers/spotify/skip_to_previous_track_example_call_tool.js diff --git a/public/examples/integrations/toolkits/spotify/skip_to_previous_track_example_call_tool.py b/public/examples/integrations/mcp-servers/spotify/skip_to_previous_track_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/spotify/skip_to_previous_track_example_call_tool.py rename to public/examples/integrations/mcp-servers/spotify/skip_to_previous_track_example_call_tool.py diff --git a/public/examples/integrations/toolkits/spotify/start_tracks_playback_by_id_example_call_tool.js b/public/examples/integrations/mcp-servers/spotify/start_tracks_playback_by_id_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/spotify/start_tracks_playback_by_id_example_call_tool.js rename to public/examples/integrations/mcp-servers/spotify/start_tracks_playback_by_id_example_call_tool.js diff --git a/public/examples/integrations/toolkits/spotify/start_tracks_playback_by_id_example_call_tool.py b/public/examples/integrations/mcp-servers/spotify/start_tracks_playback_by_id_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/spotify/start_tracks_playback_by_id_example_call_tool.py rename to public/examples/integrations/mcp-servers/spotify/start_tracks_playback_by_id_example_call_tool.py diff --git a/public/examples/integrations/toolkits/stripe/create_billing_portal_session_example_call_tool.js b/public/examples/integrations/mcp-servers/stripe/create_billing_portal_session_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/stripe/create_billing_portal_session_example_call_tool.js rename to public/examples/integrations/mcp-servers/stripe/create_billing_portal_session_example_call_tool.js diff --git a/public/examples/integrations/toolkits/stripe/create_billing_portal_session_example_call_tool.py b/public/examples/integrations/mcp-servers/stripe/create_billing_portal_session_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/stripe/create_billing_portal_session_example_call_tool.py rename to public/examples/integrations/mcp-servers/stripe/create_billing_portal_session_example_call_tool.py diff --git a/public/examples/integrations/toolkits/stripe/create_customer_example_call_tool.js b/public/examples/integrations/mcp-servers/stripe/create_customer_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/stripe/create_customer_example_call_tool.js rename to public/examples/integrations/mcp-servers/stripe/create_customer_example_call_tool.js diff --git a/public/examples/integrations/toolkits/stripe/create_customer_example_call_tool.py b/public/examples/integrations/mcp-servers/stripe/create_customer_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/stripe/create_customer_example_call_tool.py rename to public/examples/integrations/mcp-servers/stripe/create_customer_example_call_tool.py diff --git a/public/examples/integrations/toolkits/stripe/create_invoice_example_call_tool.js b/public/examples/integrations/mcp-servers/stripe/create_invoice_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/stripe/create_invoice_example_call_tool.js rename to public/examples/integrations/mcp-servers/stripe/create_invoice_example_call_tool.js diff --git a/public/examples/integrations/toolkits/stripe/create_invoice_example_call_tool.py b/public/examples/integrations/mcp-servers/stripe/create_invoice_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/stripe/create_invoice_example_call_tool.py rename to public/examples/integrations/mcp-servers/stripe/create_invoice_example_call_tool.py diff --git a/public/examples/integrations/toolkits/stripe/create_invoice_item_example_call_tool.js b/public/examples/integrations/mcp-servers/stripe/create_invoice_item_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/stripe/create_invoice_item_example_call_tool.js rename to public/examples/integrations/mcp-servers/stripe/create_invoice_item_example_call_tool.js diff --git a/public/examples/integrations/toolkits/stripe/create_invoice_item_example_call_tool.py b/public/examples/integrations/mcp-servers/stripe/create_invoice_item_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/stripe/create_invoice_item_example_call_tool.py rename to public/examples/integrations/mcp-servers/stripe/create_invoice_item_example_call_tool.py diff --git a/public/examples/integrations/toolkits/stripe/create_payment_link_example_call_tool.js b/public/examples/integrations/mcp-servers/stripe/create_payment_link_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/stripe/create_payment_link_example_call_tool.js rename to public/examples/integrations/mcp-servers/stripe/create_payment_link_example_call_tool.js diff --git a/public/examples/integrations/toolkits/stripe/create_payment_link_example_call_tool.py b/public/examples/integrations/mcp-servers/stripe/create_payment_link_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/stripe/create_payment_link_example_call_tool.py rename to public/examples/integrations/mcp-servers/stripe/create_payment_link_example_call_tool.py diff --git a/public/examples/integrations/toolkits/stripe/create_price_example_call_tool.js b/public/examples/integrations/mcp-servers/stripe/create_price_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/stripe/create_price_example_call_tool.js rename to public/examples/integrations/mcp-servers/stripe/create_price_example_call_tool.js diff --git a/public/examples/integrations/toolkits/stripe/create_price_example_call_tool.py b/public/examples/integrations/mcp-servers/stripe/create_price_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/stripe/create_price_example_call_tool.py rename to public/examples/integrations/mcp-servers/stripe/create_price_example_call_tool.py diff --git a/public/examples/integrations/toolkits/stripe/create_product_example_call_tool.js b/public/examples/integrations/mcp-servers/stripe/create_product_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/stripe/create_product_example_call_tool.js rename to public/examples/integrations/mcp-servers/stripe/create_product_example_call_tool.js diff --git a/public/examples/integrations/toolkits/stripe/create_product_example_call_tool.py b/public/examples/integrations/mcp-servers/stripe/create_product_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/stripe/create_product_example_call_tool.py rename to public/examples/integrations/mcp-servers/stripe/create_product_example_call_tool.py diff --git a/public/examples/integrations/toolkits/stripe/create_refund_example_call_tool.js b/public/examples/integrations/mcp-servers/stripe/create_refund_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/stripe/create_refund_example_call_tool.js rename to public/examples/integrations/mcp-servers/stripe/create_refund_example_call_tool.js diff --git a/public/examples/integrations/toolkits/stripe/create_refund_example_call_tool.py b/public/examples/integrations/mcp-servers/stripe/create_refund_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/stripe/create_refund_example_call_tool.py rename to public/examples/integrations/mcp-servers/stripe/create_refund_example_call_tool.py diff --git a/public/examples/integrations/toolkits/stripe/finalize_invoice_example_call_tool.js b/public/examples/integrations/mcp-servers/stripe/finalize_invoice_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/stripe/finalize_invoice_example_call_tool.js rename to public/examples/integrations/mcp-servers/stripe/finalize_invoice_example_call_tool.js diff --git a/public/examples/integrations/toolkits/stripe/finalize_invoice_example_call_tool.py b/public/examples/integrations/mcp-servers/stripe/finalize_invoice_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/stripe/finalize_invoice_example_call_tool.py rename to public/examples/integrations/mcp-servers/stripe/finalize_invoice_example_call_tool.py diff --git a/public/examples/integrations/toolkits/stripe/list_customers_example_call_tool.js b/public/examples/integrations/mcp-servers/stripe/list_customers_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/stripe/list_customers_example_call_tool.js rename to public/examples/integrations/mcp-servers/stripe/list_customers_example_call_tool.js diff --git a/public/examples/integrations/toolkits/stripe/list_customers_example_call_tool.py b/public/examples/integrations/mcp-servers/stripe/list_customers_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/stripe/list_customers_example_call_tool.py rename to public/examples/integrations/mcp-servers/stripe/list_customers_example_call_tool.py diff --git a/public/examples/integrations/toolkits/stripe/list_invoices_example_call_tool.js b/public/examples/integrations/mcp-servers/stripe/list_invoices_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/stripe/list_invoices_example_call_tool.js rename to public/examples/integrations/mcp-servers/stripe/list_invoices_example_call_tool.js diff --git a/public/examples/integrations/toolkits/stripe/list_invoices_example_call_tool.py b/public/examples/integrations/mcp-servers/stripe/list_invoices_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/stripe/list_invoices_example_call_tool.py rename to public/examples/integrations/mcp-servers/stripe/list_invoices_example_call_tool.py diff --git a/public/examples/integrations/toolkits/stripe/list_payment_intents_example_call_tool.js b/public/examples/integrations/mcp-servers/stripe/list_payment_intents_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/stripe/list_payment_intents_example_call_tool.js rename to public/examples/integrations/mcp-servers/stripe/list_payment_intents_example_call_tool.js diff --git a/public/examples/integrations/toolkits/stripe/list_payment_intents_example_call_tool.py b/public/examples/integrations/mcp-servers/stripe/list_payment_intents_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/stripe/list_payment_intents_example_call_tool.py rename to public/examples/integrations/mcp-servers/stripe/list_payment_intents_example_call_tool.py diff --git a/public/examples/integrations/toolkits/stripe/list_prices_example_call_tool.js b/public/examples/integrations/mcp-servers/stripe/list_prices_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/stripe/list_prices_example_call_tool.js rename to public/examples/integrations/mcp-servers/stripe/list_prices_example_call_tool.js diff --git a/public/examples/integrations/toolkits/stripe/list_prices_example_call_tool.py b/public/examples/integrations/mcp-servers/stripe/list_prices_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/stripe/list_prices_example_call_tool.py rename to public/examples/integrations/mcp-servers/stripe/list_prices_example_call_tool.py diff --git a/public/examples/integrations/toolkits/stripe/list_products_example_call_tool.js b/public/examples/integrations/mcp-servers/stripe/list_products_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/stripe/list_products_example_call_tool.js rename to public/examples/integrations/mcp-servers/stripe/list_products_example_call_tool.js diff --git a/public/examples/integrations/toolkits/stripe/list_products_example_call_tool.py b/public/examples/integrations/mcp-servers/stripe/list_products_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/stripe/list_products_example_call_tool.py rename to public/examples/integrations/mcp-servers/stripe/list_products_example_call_tool.py diff --git a/public/examples/integrations/toolkits/stripe/retrieve_balance_example_call_tool.js b/public/examples/integrations/mcp-servers/stripe/retrieve_balance_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/stripe/retrieve_balance_example_call_tool.js rename to public/examples/integrations/mcp-servers/stripe/retrieve_balance_example_call_tool.js diff --git a/public/examples/integrations/toolkits/stripe/retrieve_balance_example_call_tool.py b/public/examples/integrations/mcp-servers/stripe/retrieve_balance_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/stripe/retrieve_balance_example_call_tool.py rename to public/examples/integrations/mcp-servers/stripe/retrieve_balance_example_call_tool.py diff --git a/public/examples/integrations/toolkits/x/delete_tweet_by_id_example_call_tool.js b/public/examples/integrations/mcp-servers/x/delete_tweet_by_id_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/x/delete_tweet_by_id_example_call_tool.js rename to public/examples/integrations/mcp-servers/x/delete_tweet_by_id_example_call_tool.js diff --git a/public/examples/integrations/toolkits/x/delete_tweet_by_id_example_call_tool.py b/public/examples/integrations/mcp-servers/x/delete_tweet_by_id_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/x/delete_tweet_by_id_example_call_tool.py rename to public/examples/integrations/mcp-servers/x/delete_tweet_by_id_example_call_tool.py diff --git a/public/examples/integrations/toolkits/x/lookup_single_user_by_username_example_call_tool.js b/public/examples/integrations/mcp-servers/x/lookup_single_user_by_username_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/x/lookup_single_user_by_username_example_call_tool.js rename to public/examples/integrations/mcp-servers/x/lookup_single_user_by_username_example_call_tool.js diff --git a/public/examples/integrations/toolkits/x/lookup_single_user_by_username_example_call_tool.py b/public/examples/integrations/mcp-servers/x/lookup_single_user_by_username_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/x/lookup_single_user_by_username_example_call_tool.py rename to public/examples/integrations/mcp-servers/x/lookup_single_user_by_username_example_call_tool.py diff --git a/public/examples/integrations/toolkits/x/lookup_tweet_by_id_example_call_tool.js b/public/examples/integrations/mcp-servers/x/lookup_tweet_by_id_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/x/lookup_tweet_by_id_example_call_tool.js rename to public/examples/integrations/mcp-servers/x/lookup_tweet_by_id_example_call_tool.js diff --git a/public/examples/integrations/toolkits/x/lookup_tweet_by_id_example_call_tool.py b/public/examples/integrations/mcp-servers/x/lookup_tweet_by_id_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/x/lookup_tweet_by_id_example_call_tool.py rename to public/examples/integrations/mcp-servers/x/lookup_tweet_by_id_example_call_tool.py diff --git a/public/examples/integrations/toolkits/x/post_tweet_example_call_tool.js b/public/examples/integrations/mcp-servers/x/post_tweet_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/x/post_tweet_example_call_tool.js rename to public/examples/integrations/mcp-servers/x/post_tweet_example_call_tool.js diff --git a/public/examples/integrations/toolkits/x/post_tweet_example_call_tool.py b/public/examples/integrations/mcp-servers/x/post_tweet_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/x/post_tweet_example_call_tool.py rename to public/examples/integrations/mcp-servers/x/post_tweet_example_call_tool.py diff --git a/public/examples/integrations/toolkits/x/reply_to_tweet_example_call_tool.js b/public/examples/integrations/mcp-servers/x/reply_to_tweet_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/x/reply_to_tweet_example_call_tool.js rename to public/examples/integrations/mcp-servers/x/reply_to_tweet_example_call_tool.js diff --git a/public/examples/integrations/toolkits/x/reply_to_tweet_example_call_tool.py b/public/examples/integrations/mcp-servers/x/reply_to_tweet_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/x/reply_to_tweet_example_call_tool.py rename to public/examples/integrations/mcp-servers/x/reply_to_tweet_example_call_tool.py diff --git a/public/examples/integrations/toolkits/x/search_recent_tweets_by_keywords_example_call_tool.js b/public/examples/integrations/mcp-servers/x/search_recent_tweets_by_keywords_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/x/search_recent_tweets_by_keywords_example_call_tool.js rename to public/examples/integrations/mcp-servers/x/search_recent_tweets_by_keywords_example_call_tool.js diff --git a/public/examples/integrations/toolkits/x/search_recent_tweets_by_keywords_example_call_tool.py b/public/examples/integrations/mcp-servers/x/search_recent_tweets_by_keywords_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/x/search_recent_tweets_by_keywords_example_call_tool.py rename to public/examples/integrations/mcp-servers/x/search_recent_tweets_by_keywords_example_call_tool.py diff --git a/public/examples/integrations/toolkits/x/search_recent_tweets_by_username_example_call_tool.js b/public/examples/integrations/mcp-servers/x/search_recent_tweets_by_username_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/x/search_recent_tweets_by_username_example_call_tool.js rename to public/examples/integrations/mcp-servers/x/search_recent_tweets_by_username_example_call_tool.js diff --git a/public/examples/integrations/toolkits/x/search_recent_tweets_by_username_example_call_tool.py b/public/examples/integrations/mcp-servers/x/search_recent_tweets_by_username_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/x/search_recent_tweets_by_username_example_call_tool.py rename to public/examples/integrations/mcp-servers/x/search_recent_tweets_by_username_example_call_tool.py diff --git a/public/examples/integrations/toolkits/zendesk/add_ticket_comment_example_call_tool.js b/public/examples/integrations/mcp-servers/zendesk/add_ticket_comment_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/zendesk/add_ticket_comment_example_call_tool.js rename to public/examples/integrations/mcp-servers/zendesk/add_ticket_comment_example_call_tool.js diff --git a/public/examples/integrations/toolkits/zendesk/add_ticket_comment_example_call_tool.py b/public/examples/integrations/mcp-servers/zendesk/add_ticket_comment_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/zendesk/add_ticket_comment_example_call_tool.py rename to public/examples/integrations/mcp-servers/zendesk/add_ticket_comment_example_call_tool.py diff --git a/public/examples/integrations/toolkits/zendesk/get_ticket_comments_example_call_tool.js b/public/examples/integrations/mcp-servers/zendesk/get_ticket_comments_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/zendesk/get_ticket_comments_example_call_tool.js rename to public/examples/integrations/mcp-servers/zendesk/get_ticket_comments_example_call_tool.js diff --git a/public/examples/integrations/toolkits/zendesk/get_ticket_comments_example_call_tool.py b/public/examples/integrations/mcp-servers/zendesk/get_ticket_comments_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/zendesk/get_ticket_comments_example_call_tool.py rename to public/examples/integrations/mcp-servers/zendesk/get_ticket_comments_example_call_tool.py diff --git a/public/examples/integrations/toolkits/zendesk/list_tickets_example_call_tool.js b/public/examples/integrations/mcp-servers/zendesk/list_tickets_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/zendesk/list_tickets_example_call_tool.js rename to public/examples/integrations/mcp-servers/zendesk/list_tickets_example_call_tool.js diff --git a/public/examples/integrations/toolkits/zendesk/list_tickets_example_call_tool.py b/public/examples/integrations/mcp-servers/zendesk/list_tickets_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/zendesk/list_tickets_example_call_tool.py rename to public/examples/integrations/mcp-servers/zendesk/list_tickets_example_call_tool.py diff --git a/public/examples/integrations/toolkits/zendesk/mark_ticket_solved_example_call_tool.js b/public/examples/integrations/mcp-servers/zendesk/mark_ticket_solved_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/zendesk/mark_ticket_solved_example_call_tool.js rename to public/examples/integrations/mcp-servers/zendesk/mark_ticket_solved_example_call_tool.js diff --git a/public/examples/integrations/toolkits/zendesk/mark_ticket_solved_example_call_tool.py b/public/examples/integrations/mcp-servers/zendesk/mark_ticket_solved_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/zendesk/mark_ticket_solved_example_call_tool.py rename to public/examples/integrations/mcp-servers/zendesk/mark_ticket_solved_example_call_tool.py diff --git a/public/examples/integrations/toolkits/zendesk/search_articles_example_call_tool.js b/public/examples/integrations/mcp-servers/zendesk/search_articles_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/zendesk/search_articles_example_call_tool.js rename to public/examples/integrations/mcp-servers/zendesk/search_articles_example_call_tool.js diff --git a/public/examples/integrations/toolkits/zendesk/search_articles_example_call_tool.py b/public/examples/integrations/mcp-servers/zendesk/search_articles_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/zendesk/search_articles_example_call_tool.py rename to public/examples/integrations/mcp-servers/zendesk/search_articles_example_call_tool.py diff --git a/public/examples/integrations/toolkits/zendesk/who_am_i_example_call_tool.js b/public/examples/integrations/mcp-servers/zendesk/who_am_i_example_call_tool.js similarity index 100% rename from public/examples/integrations/toolkits/zendesk/who_am_i_example_call_tool.js rename to public/examples/integrations/mcp-servers/zendesk/who_am_i_example_call_tool.js diff --git a/public/examples/integrations/toolkits/zendesk/who_am_i_example_call_tool.py b/public/examples/integrations/mcp-servers/zendesk/who_am_i_example_call_tool.py similarity index 100% rename from public/examples/integrations/toolkits/zendesk/who_am_i_example_call_tool.py rename to public/examples/integrations/mcp-servers/zendesk/who_am_i_example_call_tool.py diff --git a/public/images/agentic-development/cursor-llms-txt.png b/public/images/agentic-development/cursor-llms-txt.png new file mode 100644 index 0000000000000000000000000000000000000000..98316a7bad46808b30cf9b96f9267842efbf9977 GIT binary patch literal 248662 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 literal 0 HcmV?d00001 diff --git a/public/llms-full.txt b/public/llms-full.txt index 631a37110..ce7b5656e 100644 --- a/public/llms-full.txt +++ b/public/llms-full.txt @@ -9,7 +9,7 @@ Arcade enables your AI agent to securely take real-world actions through user-sp Get started with a 5-minute quickstart. -[Get Started](https://docs.arcade.dev/home/quickstart) [Build a tool](https://docs.arcade.dev/home/build-tools/create-a-toolkit) +[Get Started](https://docs.arcade.dev/home/quickstart) [Build a tool](https://docs.arcade.dev/home/build-tools/create-a-mcp-server) Give your AI IDE access to Arcade.dev's documentation using our llms.txt files ( [short llms.txt](https://docs.arcade.dev/llms.txt), [llms-full.txt](https://docs.arcade.dev/llms-full.txt)), or use [context7](https://context7.com/arcadeai/docs). @@ -67,7 +67,7 @@ This will be shown if an incident or maintenance is posted on your status page. [View latest updates](https://status.arcade.dev/?utm_source=embed) ## Spotify Toolkit Overview -[Integrations](https://docs.arcade.dev/toolkits "Integrations") [Entertainment](https://docs.arcade.dev/toolkits/entertainment/imgflip "Entertainment") Spotify +[Integrations](https://docs.arcade.dev/toolkits "Integrations") [Entertainment](https://docs.arcade.dev/mcp-servers/entertainment/imgflip "Entertainment") Spotify # Spotify @@ -81,13 +81,13 @@ This Toolkit is not available in Arcade Cloud. You can use these tools with a [s [![PyPI Version](https://img.shields.io/pypi/v/arcade_spotify)](https://pypi.org/project/arcade_spotify/)[![License](https://img.shields.io/badge/License-MIT-yellow.svg)](https://github.com/arcadeai/arcade-ai/blob/main/LICENSE)[![Python Versions](https://img.shields.io/pypi/pyversions/arcade_spotify)](https://pypi.org/project/arcade_spotify/)[![Wheel Status](https://img.shields.io/pypi/wheel/arcade_spotify)](https://pypi.org/project/arcade_spotify/)[![Downloads](https://img.shields.io/pypi/dm/arcade_spotify)](https://pypi.org/project/arcade_spotify/) -The Arcade Spotify toolkit provides a pre-built set of tools for interacting with Spotify. These tools make it easy to build agents and AI apps that can: +The Arcade Spotify MCP Server provides a pre-built set of tools for interacting with Spotify. These tools make it easy to build agents and AI apps that can: - Get information about tracks - Search for tracks - Control playback -## Available Tools [Permalink for this section](https://docs.arcade.dev/toolkits/entertainment/spotify\#available-tools) +## Available Tools [Permalink for this section](https://docs.arcade.dev/mcp-servers/entertainment/spotify\#available-tools) These tools are currently available in the Arcade Spotify toolkit. @@ -109,10 +109,10 @@ These tools are currently available in the Arcade Spotify toolkit. 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](https://docs.arcade.dev/home/build-tools/create-a-toolkit) with the [Spotify auth\\ +own tools](https://docs.arcade.dev/home/build-tools/create-a-mcp-server) with the [Spotify auth\\ provider](https://docs.arcade.dev/home/auth-providers/spotify#using-spotify-auth-in-customtools). -## Spotify.GetTrackFromId [Permalink for this section](https://docs.arcade.dev/toolkits/entertainment/spotify\#spotifygettrackfromid) +## Spotify.GetTrackFromId [Permalink for this section](https://docs.arcade.dev/mcp-servers/entertainment/spotify\#spotifygettrackfromid) See Example > @@ -124,7 +124,7 @@ Get information about a track * * * -## Spotify.AdjustPlaybackPosition [Permalink for this section](https://docs.arcade.dev/toolkits/entertainment/spotify\#spotifyadjustplaybackposition) +## Spotify.AdjustPlaybackPosition [Permalink for this section](https://docs.arcade.dev/mcp-servers/entertainment/spotify\#spotifyadjustplaybackposition) See Example > @@ -145,7 +145,7 @@ Note: Either absolute\_position\_ms or relative\_position\_ms must be provided, * * * -## Spotify.SkipToPreviousTrack [Permalink for this section](https://docs.arcade.dev/toolkits/entertainment/spotify\#spotifyskiptoprevioustrack) +## Spotify.SkipToPreviousTrack [Permalink for this section](https://docs.arcade.dev/mcp-servers/entertainment/spotify\#spotifyskiptoprevioustrack) See Example > @@ -153,7 +153,7 @@ Skip to the previous track in the user’s queue, if any * * * -## Spotify.SkipToNextTrack [Permalink for this section](https://docs.arcade.dev/toolkits/entertainment/spotify\#spotifyskiptonexttrack) +## Spotify.SkipToNextTrack [Permalink for this section](https://docs.arcade.dev/mcp-servers/entertainment/spotify\#spotifyskiptonexttrack) See Example > @@ -161,7 +161,7 @@ Skip to the next track in the user’s queue, if any * * * -## Spotify.PausePlayback [Permalink for this section](https://docs.arcade.dev/toolkits/entertainment/spotify\#spotifypauseplayback) +## Spotify.PausePlayback [Permalink for this section](https://docs.arcade.dev/mcp-servers/entertainment/spotify\#spotifypauseplayback) See Example > @@ -169,7 +169,7 @@ Pause the currently playing track, if any * * * -## Spotify.ResumePlayback [Permalink for this section](https://docs.arcade.dev/toolkits/entertainment/spotify\#spotifyresumeplayback) +## Spotify.ResumePlayback [Permalink for this section](https://docs.arcade.dev/mcp-servers/entertainment/spotify\#spotifyresumeplayback) See Example > @@ -177,7 +177,7 @@ Resume the currently playing track, if any * * * -## Spotify.StartTracksPlaybackById [Permalink for this section](https://docs.arcade.dev/toolkits/entertainment/spotify\#spotifystarttracksplaybackbyid) +## Spotify.StartTracksPlaybackById [Permalink for this section](https://docs.arcade.dev/mcp-servers/entertainment/spotify\#spotifystarttracksplaybackbyid) See Example > @@ -192,7 +192,7 @@ Start playback of a list of tracks (songs) * * * -## Spotify.GetPlaybackState [Permalink for this section](https://docs.arcade.dev/toolkits/entertainment/spotify\#spotifygetplaybackstate) +## Spotify.GetPlaybackState [Permalink for this section](https://docs.arcade.dev/mcp-servers/entertainment/spotify\#spotifygetplaybackstate) See Example > @@ -200,7 +200,7 @@ Get information about the user’s current playback state, including track or ep * * * -## Spotify.GetCurrentlyPlaying [Permalink for this section](https://docs.arcade.dev/toolkits/entertainment/spotify\#spotifygetcurrentlyplaying) +## Spotify.GetCurrentlyPlaying [Permalink for this section](https://docs.arcade.dev/mcp-servers/entertainment/spotify\#spotifygetcurrentlyplaying) See Example > @@ -208,7 +208,7 @@ Get information about the user’s currently playing track * * * -## Spotify.PlayArtistByName [Permalink for this section](https://docs.arcade.dev/toolkits/entertainment/spotify\#spotifyplayartistbyname) +## Spotify.PlayArtistByName [Permalink for this section](https://docs.arcade.dev/mcp-servers/entertainment/spotify\#spotifyplayartistbyname) See Example > @@ -220,7 +220,7 @@ Plays a song by an artist and queues four more songs by the same artist * * * -## Spotify.PlayTrackByName [Permalink for this section](https://docs.arcade.dev/toolkits/entertainment/spotify\#spotifyplaytrackbyname) +## Spotify.PlayTrackByName [Permalink for this section](https://docs.arcade.dev/mcp-servers/entertainment/spotify\#spotifyplaytrackbyname) See Example > @@ -233,7 +233,7 @@ Plays a song by name - `artist_name` _(string, optional)_ The name of the artist of the track -## Spotify.GetAvailableDevices [Permalink for this section](https://docs.arcade.dev/toolkits/entertainment/spotify\#spotifygetavailabledevices) +## Spotify.GetAvailableDevices [Permalink for this section](https://docs.arcade.dev/mcp-servers/entertainment/spotify\#spotifygetavailabledevices) See Example > @@ -241,7 +241,7 @@ Get the available devices * * * -## Spotify.Search [Permalink for this section](https://docs.arcade.dev/toolkits/entertainment/spotify\#spotifysearch) +## Spotify.Search [Permalink for this section](https://docs.arcade.dev/mcp-servers/entertainment/spotify\#spotifysearch) See Example > @@ -280,7 +280,7 @@ Arcade tools can be self-hosted on your own infrastructure. Learn more about sel pip install arcade_spotify\\ ```](https://docs.arcade.dev/home/hosting-overview) -[Imgflip](https://docs.arcade.dev/toolkits/entertainment/imgflip "Imgflip") [Twitch](https://docs.arcade.dev/toolkits/entertainment/twitch "Twitch") +[Imgflip](https://docs.arcade.dev/mcp-servers/entertainment/imgflip "Imgflip") [Twitch](https://docs.arcade.dev/mcp-servers/entertainment/twitch "Twitch") Frame @@ -298,7 +298,7 @@ This will be shown if an incident or maintenance is posted on your status page. _Here’s what’s new at Arcade.dev!_ -## For the week ending on 2025-09-26 [Permalink for this section](https://docs.arcade.dev/home/changelog\#for-the-week-ending-on-2025-09-26) +## 2025-09-26 [Permalink for this section](https://docs.arcade.dev/home/changelog\#for-the-week-ending-on-2025-09-26) **Toolkits** @@ -316,7 +316,7 @@ _Here’s what’s new at Arcade.dev!_ - `[documentation - πŸ“]` Documents API wrapper vs LLM-native toolkits; includes Slack API wrapper toolkit docs -## For the week ending on 2025-09-19 [Permalink for this section](https://docs.arcade.dev/home/changelog\#for-the-week-ending-on-2025-09-19) +## 2025-09-19 [Permalink for this section](https://docs.arcade.dev/home/changelog\#for-the-week-ending-on-2025-09-19) **Toolkits** @@ -334,7 +334,7 @@ _Here’s what’s new at Arcade.dev!_ - `[documentation - πŸ“]` Update Tool Error Handling ( [PR #438](https://github.com/ArcadeAI/docs/pull/438)) - `[maintenance - πŸ”§]` Update Mastra example docs to better match the example repo ( [PR #444](https://github.com/ArcadeAI/docs/pull/444)) -## For the week ending on 2025-09-12 [Permalink for this section](https://docs.arcade.dev/home/changelog\#for-the-week-ending-on-2025-09-12) +## 2025-09-12 [Permalink for this section](https://docs.arcade.dev/home/changelog\#for-the-week-ending-on-2025-09-12) **CLI and TDK** @@ -355,7 +355,7 @@ _Here’s what’s new at Arcade.dev!_ - `[documentation - πŸ“]` Add a FAQ for requesting over-scoped permissions for Google Drive and similar tools ( [docs PR #440](https://github.com/ArcadeAI/docs/pull/440)) -## For the week ending on 2025-09-05 [Permalink for this section](https://docs.arcade.dev/home/changelog\#for-the-week-ending-on-2025-09-05) +## 2025-09-05 [Permalink for this section](https://docs.arcade.dev/home/changelog\#for-the-week-ending-on-2025-09-05) **Toolkits** @@ -377,7 +377,7 @@ _Here’s what’s new at Arcade.dev!_ - `[documentation - πŸ“]` Adding ClickUp documentation ( [PR #413](https://github.com/ArcadeAI/docs/pull/413)) - `[documentation - πŸ“]` updated instructions on GH OAuth customization ( [PR #425](https://github.com/ArcadeAI/docs/pull/425)) -## For the week ending on 2025-08-29 [Permalink for this section](https://docs.arcade.dev/home/changelog\#for-the-week-ending-on-2025-08-29) +## 2025-08-29 [Permalink for this section](https://docs.arcade.dev/home/changelog\#for-the-week-ending-on-2025-08-29) **Toolkits** @@ -399,7 +399,7 @@ _Here’s what’s new at Arcade.dev!_ - `[documentation - πŸ“]` Fix glossary: change β€˜Authentication Scope’ to β€˜Authorization Scope’ ( [PR #419](https://github.com/ArcadeAI/docs/pull/419)) - `[documentation - πŸ“]` Added missing parameter to the usage example templates ( [PR #537](https://github.com/ArcadeAI/arcade-ai/pull/537)) -## For the week ending on 2025-08-22 [Permalink for this section](https://docs.arcade.dev/home/changelog\#for-the-week-ending-on-2025-08-22) +## 2025-08-22 [Permalink for this section](https://docs.arcade.dev/home/changelog\#for-the-week-ending-on-2025-08-22) This week we released a new pricing model for Arcade which will be better for hobbyists and enterprises alike. Learn more here: [https://blog.arcade.dev/pricing-updates](https://blog.arcade.dev/pricing-updates) @@ -415,13 +415,13 @@ This week we released a new pricing model for Arcade which will be better for ho - `[feature - πŸš€]` Authenticate communication between Engine and Coordinator via key exchange - `[feature - πŸš€]` Engine: Add additional redis cert check options -## For the week ending on 2025-08-15 [Permalink for this section](https://docs.arcade.dev/home/changelog\#for-the-week-ending-on-2025-08-15) +## 2025-08-15 [Permalink for this section](https://docs.arcade.dev/home/changelog\#for-the-week-ending-on-2025-08-15) This week we enforced a new requirement for all OAuth providers: they must have a unique callback URL. This is a minor security change, but does require you to update your OAuth configuration. This can be updated from the dashboard. **Toolkits** -- `[feature - πŸš€]` Sharepoint Toolkit added ( [docs](https://docs.arcade.dev/toolkits/productivity/sharepoint)) +- `[feature - πŸš€]` Sharepoint Toolkit added ( [docs](https://docs.arcade.dev/mcp-servers/productivity/sharepoint)) - `[feature - πŸš€]` Google Slides Toolkit added - `[feature - πŸš€]` Commenting on Google Docs added - `[bugfix - πŸ›]` Improvements in Microsoft Teams message search tool for better agentic experience. Fix bug when no messages match the search query. @@ -438,7 +438,7 @@ This week we enforced a new requirement for all OAuth providers: they must have - `[documentation - πŸ“]` Document Microsoft scopes required by Arcade toolkits ( [PR #409](https://github.com/ArcadeAI/docs/pull/409)) - `[documentation - πŸ“]` Microsoft SharePoint toolkit documentation ( [PR #400](https://github.com/ArcadeAI/docs/pull/400)) -## For the week ending on 2025-08-08 [Permalink for this section](https://docs.arcade.dev/home/changelog\#for-the-week-ending-on-2025-08-08) +## 2025-08-08 [Permalink for this section](https://docs.arcade.dev/home/changelog\#for-the-week-ending-on-2025-08-08) **Toolkits** @@ -451,7 +451,7 @@ This week we enforced a new requirement for all OAuth providers: they must have - `[feature - πŸš€]` Add support for GPT-5 models - `[feature - πŸš€]` Per-app redirect URI info -## For the week ending on 2025-08-01 [Permalink for this section](https://docs.arcade.dev/home/changelog\#for-the-week-ending-on-2025-08-01) +## 2025-08-01 [Permalink for this section](https://docs.arcade.dev/home/changelog\#for-the-week-ending-on-2025-08-01) **Toolkits** @@ -467,7 +467,7 @@ This week we enforced a new requirement for all OAuth providers: they must have - `[bugfix - πŸ›]` Fixes for the CLI docs generator ( [PR #524](https://github.com/ArcadeAI/arcade-ai/pull/524)) - `[feature - πŸš€]` CLI: Rename auto-docs command to β€˜docs’ and other improvements ( [PR #518](https://github.com/ArcadeAI/arcade-ai/pull/518)) -## For the week ending on 2025-07-25 [Permalink for this section](https://docs.arcade.dev/home/changelog\#for-the-week-ending-on-2025-07-25) +## 2025-07-25 [Permalink for this section](https://docs.arcade.dev/home/changelog\#for-the-week-ending-on-2025-07-25) Most Arcade toolkits have been removed from the `github.com/ArcadeAI/arcade-ai` repository, and transitioned to closed-source. Toolkit source code remains available upon request for our paying customers. This enables us to iterate more quickly and provide a better experience for our customers. The previously open-sourced toolkits are still available in the public repository’s git history. @@ -492,7 +492,7 @@ Most Arcade toolkits have been removed from the `github.com/ArcadeAI/arcade-ai` - `[documentation - πŸ“]` Update Zendesk Custom OAuth ( [PR #359](https://github.com/ArcadeAI/docs/pull/359)) - `[documentation - πŸ“]` Add code samples & screenshots to user verification doc ( [PR #363](https://github.com/ArcadeAI/docs/pull/363)) -## For the week ending on 2025-07-18 [Permalink for this section](https://docs.arcade.dev/home/changelog\#for-the-week-ending-on-2025-07-18) +## 2025-07-18 [Permalink for this section](https://docs.arcade.dev/home/changelog\#for-the-week-ending-on-2025-07-18) Version 2.0.0 of the Arcade Engine was released this week. Upgrading to version 2.0.0 is recommended for all self-hosted developers, and includes an important security fix for [secure OAuth flows](https://docs.arcade.dev/home/auth/secure-auth-production). After upgrading, all projects will default to using the Arcade user verifier. If desired, you can then implement a custom user verifier in your application/agent and make the switch via the Arcade Dashboard. @@ -526,7 +526,7 @@ Self-hosed Arcade developers cannot be grandfathered into the old (insecure) beh - `[documentation - πŸ“]` replaced creating toolkit video with full tutorial ( [PR #349](https://github.com/ArcadeAI/docs/pull/349)) - `[documentation - πŸ“]` Add secure/brand auth in production doc ( [PR #341](https://github.com/ArcadeAI/docs/pull/341)) -## For the week ending on 2025-07-11 [Permalink for this section](https://docs.arcade.dev/home/changelog\#for-the-week-ending-on-2025-07-11) +## 2025-07-11 [Permalink for this section](https://docs.arcade.dev/home/changelog\#for-the-week-ending-on-2025-07-11) **Frameworks** @@ -547,7 +547,7 @@ Self-hosed Arcade developers cannot be grandfathered into the old (insecure) beh - `[documentation - πŸ“]` Document the OAuth scopes required by the Slack toolkit ( [PR #344](https://github.com/ArcadeAI/docs/pull/344)) -## For the week ending on 2025-07-04 [Permalink for this section](https://docs.arcade.dev/home/changelog\#for-the-week-ending-on-2025-07-04) +## 2025-07-04 [Permalink for this section](https://docs.arcade.dev/home/changelog\#for-the-week-ending-on-2025-07-04) **Toolkits** @@ -568,13 +568,13 @@ Self-hosed Arcade developers cannot be grandfathered into the old (insecure) beh - `[feature - πŸš€]` Dashboard: Allow editing the description of a secret - `[feature - πŸš€]` Dashboard: Preserve tools when resetting parameters -## For the week ending on 2025-06-28 [Permalink for this section](https://docs.arcade.dev/home/changelog\#for-the-week-ending-on-2025-06-28) +## 2025-06-28 [Permalink for this section](https://docs.arcade.dev/home/changelog\#for-the-week-ending-on-2025-06-28) **Toolkits** - `[bugfix - πŸ›]` Jira toolkit: deduplicate cloud data in Atlassian’s available-resources response ( [PR #456](https://github.com/ArcadeAI/arcade-ai/pull/456)) -## For the week ending on 2025-06-20 [Permalink for this section](https://docs.arcade.dev/home/changelog\#for-the-week-ending-on-2025-06-20) +## 2025-06-20 [Permalink for this section](https://docs.arcade.dev/home/changelog\#for-the-week-ending-on-2025-06-20) **Frameworks** @@ -582,7 +582,7 @@ Self-hosed Arcade developers cannot be grandfathered into the old (insecure) beh **Toolkits** -- `[feature - πŸš€]` Jira toolkit released ( [docs](https://docs.arcade.dev/toolkits/productivity/jira)) +- `[feature - πŸš€]` Jira toolkit released ( [docs](https://docs.arcade.dev/mcp-servers/productivity/jira)) **CLI and TDK** @@ -613,7 +613,7 @@ This will be shown if an incident or maintenance is posted on your status page. [View latest updates](https://status.arcade.dev/?utm_source=embed) ## Google Search Toolkit -[Integrations](https://docs.arcade.dev/toolkits "Integrations") [Search Tools](https://docs.arcade.dev/toolkits/search/google_finance "Search Tools") Google Search +[Integrations](https://docs.arcade.dev/toolkits "Integrations") [Search Tools](https://docs.arcade.dev/mcp-servers/search/google_finance "Search Tools") Google Search # Google Search @@ -625,11 +625,11 @@ This will be shown if an incident or maintenance is posted on your status page. [![PyPI Version](https://img.shields.io/pypi/v/arcade_google-search)](https://pypi.org/project/arcade_google-search/)[![License](https://img.shields.io/badge/License-MIT-yellow.svg)](https://github.com/arcadeai/arcade-ai/blob/main/LICENSE)[![Python Versions](https://img.shields.io/pypi/pyversions/arcade_google-search)](https://pypi.org/project/arcade_google-search/)[![Wheel Status](https://img.shields.io/pypi/wheel/arcade_google-search)](https://pypi.org/project/arcade_google-search/)[![Downloads](https://img.shields.io/pypi/dm/arcade_google-search)](https://pypi.org/project/arcade_google-search/) -The Arcade Search toolkit provides a pre-built set of tools for interacting with Google search results. These tools make it easy to build agents and AI apps that can: +The Arcade Search MCP Server provides a pre-built set of tools for interacting with Google search results. These tools make it easy to build agents and AI apps that can: - Search Google and return results. -## Available Tools [Permalink for this section](https://docs.arcade.dev/toolkits/search/google_search\#available-tools) +## Available Tools [Permalink for this section](https://docs.arcade.dev/mcp-servers/search/google_search\#available-tools) | Tool Name | Description | | --- | --- | @@ -637,9 +637,9 @@ The Arcade Search toolkit provides a pre-built set of tools for interacting with 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](https://docs.arcade.dev/home/build-tools/create-a-toolkit). +own tools](https://docs.arcade.dev/home/build-tools/create-a-mcp-server). -## GoogleSearch.Search [Permalink for this section](https://docs.arcade.dev/toolkits/search/google_search\#googlesearchsearch) +## GoogleSearch.Search [Permalink for this section](https://docs.arcade.dev/mcp-servers/search/google_search\#googlesearchsearch) See Example > @@ -650,7 +650,7 @@ Search Google using SerpAPI and return organic search results. - **`query`** _(string, required)_ The search query. - **`n_results`** _(integer, optional, Defaults to 5)_ Number of results to retrieve. -## Auth [Permalink for this section](https://docs.arcade.dev/toolkits/search/google_search\#auth) +## Auth [Permalink for this section](https://docs.arcade.dev/mcp-servers/search/google_search\#auth) The Arcade Google Search toolkit uses the [SerpAPI](https://serpapi.com/) to get get results from a Google search. @@ -673,7 +673,7 @@ Arcade tools can be self-hosted on your own infrastructure. Learn more about sel pip install arcade_google_search\\ ```](https://docs.arcade.dev/home/hosting-overview) -[Google News](https://docs.arcade.dev/toolkits/search/google_news "Google News") [Google Shopping](https://docs.arcade.dev/toolkits/search/google_shopping "Google Shopping") +[Google News](https://docs.arcade.dev/mcp-servers/search/google_news "Google News") [Google Shopping](https://docs.arcade.dev/mcp-servers/search/google_shopping "Google Shopping") Frame @@ -770,7 +770,7 @@ This will be shown if an incident or maintenance is posted on your status page. [View latest updates](https://status.arcade.dev/?utm_source=embed) ## Twitch Auth Configuration -[Integrations](https://docs.arcade.dev/toolkits "Integrations") [Entertainment](https://docs.arcade.dev/toolkits/entertainment/imgflip "Entertainment") Twitch +[Integrations](https://docs.arcade.dev/toolkits "Integrations") [Entertainment](https://docs.arcade.dev/mcp-servers/entertainment/imgflip "Entertainment") Twitch # Twitch auth provider @@ -780,18 +780,18 @@ OAuth 2.0 credentials as described below. The Twitch auth provider enables tools and agents to call the Twitch API on behalf of a user. Behind the scenes, the Arcade Engine and the Twitch auth provider seamlessly manage Twitch OAuth 2.0 authorization for your users. -### What’s documented here [Permalink for this section](https://docs.arcade.dev/toolkits/entertainment/twitch\#whats-documented-here) +### What’s documented here [Permalink for this section](https://docs.arcade.dev/mcp-servers/entertainment/twitch\#whats-documented-here) This page describes how to use and configure Twitch auth with Arcade. This auth provider is used by: -- Your [app code](https://docs.arcade.dev/toolkits/entertainment/twitch#using-twitch-auth-in-app-code) that needs to call Twitch APIs -- Or, your [custom tools](https://docs.arcade.dev/toolkits/entertainment/twitch#using-twitch-auth-in-custom-tools) that need to call Twitch APIs +- Your [app code](https://docs.arcade.dev/mcp-servers/entertainment/twitch#using-twitch-auth-in-app-code) that needs to call Twitch APIs +- Or, your [custom tools](https://docs.arcade.dev/mcp-servers/entertainment/twitch#using-twitch-auth-in-custom-tools) that need to call Twitch APIs -## Configuring Twitch auth [Permalink for this section](https://docs.arcade.dev/toolkits/entertainment/twitch\#configuring-twitch-auth) +## Configuring Twitch auth [Permalink for this section](https://docs.arcade.dev/mcp-servers/entertainment/twitch\#configuring-twitch-auth) -### Create a Twitch app [Permalink for this section](https://docs.arcade.dev/toolkits/entertainment/twitch\#create-a-twitch-app) +### Create a Twitch app [Permalink for this section](https://docs.arcade.dev/mcp-servers/entertainment/twitch\#create-a-twitch-app) - Twitch requires that you have two-factor authentication enabled for your account. Enable in your [account security seetings](https://www.twitch.tv/settings/security) - Create a Twitch Application in the [Twitch App Console](https://dev.twitch.tv/console/apps) @@ -802,7 +802,7 @@ This auth provider is used by: Next, add the Twitch app to your Arcade Engine configuration. You can do this in the Arcade Dashboard, or by editing the `engine.yaml` file directly (for a self-hosted instance). -### Configuring Twitch auth with the Arcade Dashboard [Permalink for this section](https://docs.arcade.dev/toolkits/entertainment/twitch\#configuring-twitch-auth-with-the-arcade-dashboard) +### Configuring Twitch auth with the Arcade Dashboard [Permalink for this section](https://docs.arcade.dev/mcp-servers/entertainment/twitch\#configuring-twitch-auth-with-the-arcade-dashboard) 1. Navigate to the OAuth section of the Arcade Dashboard and click **Add OAuth Provider**. 2. Select **Twitch** as the provider. @@ -813,9 +813,9 @@ Next, add the Twitch app to your Arcade Engine configuration. You can do this in When you use tools that require Twitch auth using your Arcade account credentials, the Arcade Engine will automatically use this Twitch OAuth provider. -### Configuring Twitch auth in self-hosted Arcade Engine configuration [Permalink for this section](https://docs.arcade.dev/toolkits/entertainment/twitch\#configuring-twitch-auth-in-self-hosted-arcade-engine-configuration) +### Configuring Twitch auth in self-hosted Arcade Engine configuration [Permalink for this section](https://docs.arcade.dev/mcp-servers/entertainment/twitch\#configuring-twitch-auth-in-self-hosted-arcade-engine-configuration) -### Set environment variables [Permalink for this section](https://docs.arcade.dev/toolkits/entertainment/twitch\#set-environment-variables) +### Set environment variables [Permalink for this section](https://docs.arcade.dev/mcp-servers/entertainment/twitch\#set-environment-variables) The Client ID is the Twitch β€œApp key” and the Client Secret is the Twitch β€œApp secret”. @@ -837,7 +837,7 @@ TWITCH_CLIENT_ID="" See [Engine configuration](https://docs.arcade.dev/home/local-deployment/configure/engine) for more information on how to set environment variables and configure the Arcade Engine. -### Edit the Engine configuration [Permalink for this section](https://docs.arcade.dev/toolkits/entertainment/twitch\#edit-the-engine-configuration) +### Edit the Engine configuration [Permalink for this section](https://docs.arcade.dev/mcp-servers/entertainment/twitch\#edit-the-engine-configuration) Edit the `engine.yaml` file and add a `twitch` item to the `auth.providers` section: @@ -853,7 +853,7 @@ auth: client_secret: ${env:TWITCH_CLIENT_SECRET} ``` -## Using Twitch auth in app code [Permalink for this section](https://docs.arcade.dev/toolkits/entertainment/twitch\#using-twitch-auth-in-app-code) +## Using Twitch auth in app code [Permalink for this section](https://docs.arcade.dev/mcp-servers/entertainment/twitch\#using-twitch-auth-in-app-code) Use the Twitch auth provider in your own agents and AI apps to get a user-scoped token for the Twitch API. See [authorizing agents with Arcade](https://docs.arcade.dev/home/auth/how-arcade-helps) to understand how this works. @@ -886,9 +886,9 @@ token = auth_response.context.token # Do something interesting with the token... ``` -## Using Twitch auth in custom tools [Permalink for this section](https://docs.arcade.dev/toolkits/entertainment/twitch\#using-twitch-auth-in-custom-tools) +## Using Twitch auth in custom tools [Permalink for this section](https://docs.arcade.dev/mcp-servers/entertainment/twitch\#using-twitch-auth-in-custom-tools) -You can author your own [custom tools](https://docs.arcade.dev/home/build-tools/create-a-toolkit) that interact with the Twitch API. +You can author your own [custom tools](https://docs.arcade.dev/home/build-tools/create-a-mcp-server) that interact with the Twitch API. Use the `Twitch()` auth class to specify that a tool requires authorization with Twitch. The `context.authorization.token` field will be automatically populated with the user’s Twitch token: @@ -959,7 +959,7 @@ Arcade tools can be self-hosted on your own infrastructure. Learn more about sel pip install arcade_twitch\\ ```](https://docs.arcade.dev/home/hosting-overview) -[Spotify](https://docs.arcade.dev/toolkits/entertainment/spotify "Spotify") [E2B](https://docs.arcade.dev/toolkits/development/e2b "E2B") +[Spotify](https://docs.arcade.dev/mcp-servers/entertainment/spotify "Spotify") [E2B](https://docs.arcade.dev/mcp-servers/development/e2b "E2B") Frame @@ -971,7 +971,7 @@ This will be shown if an incident or maintenance is posted on your status page. [View latest updates](https://status.arcade.dev/?utm_source=embed) ## Google Hotels Toolkit -[Integrations](https://docs.arcade.dev/toolkits "Integrations") [Search Tools](https://docs.arcade.dev/toolkits/search/google_finance "Search Tools") Google Hotels +[Integrations](https://docs.arcade.dev/toolkits "Integrations") [Search Tools](https://docs.arcade.dev/mcp-servers/search/google_finance "Search Tools") Google Hotels # Google Hotels @@ -985,13 +985,13 @@ This will be shown if an incident or maintenance is posted on your status page. The Arcade Google Hotels toolkit lets you search for hotels with ease. Use this tool to build intelligent agents and applications that search for hotels worldwide. -## Available Tools [Permalink for this section](https://docs.arcade.dev/toolkits/search/google_hotels\#available-tools) +## Available Tools [Permalink for this section](https://docs.arcade.dev/mcp-servers/search/google_hotels\#available-tools) | Tool Name | Description | | --- | --- | | GoogleHotels.SearchHotels | Retrieve hotel search results using the Google Hotels API. | -## GoogleHotels.SearchHotels [Permalink for this section](https://docs.arcade.dev/toolkits/search/google_hotels\#googlehotelssearchhotels) +## GoogleHotels.SearchHotels [Permalink for this section](https://docs.arcade.dev/mcp-servers/search/google_hotels\#googlehotelssearchhotels) Retrieve hotel search results using the Google Hotels API. @@ -1006,12 +1006,12 @@ Retrieve hotel search results using the Google Hotels API. - **`max_price`** _(int, optional)_: Maximum price per night. Defaults to no maximum. - **`num_adults`** _(int, optional)_: Number of adults per room. Defaults to 2. - **`num_children`** _(int, optional)_: Number of children per room. Defaults to 0. -- **`sort_by`** _(enum ( [GoogleHotelsSortBy](https://docs.arcade.dev/toolkits/search/google_hotels#googlehotelssortby)), optional)_: The sorting order of the results. Defaults to RELEVANCE. +- **`sort_by`** _(enum ( [GoogleHotelsSortBy](https://docs.arcade.dev/mcp-servers/search/google_hotels#googlehotelssortby)), optional)_: The sorting order of the results. Defaults to RELEVANCE. - **`num_results`** _(int, optional)_: Maximum number of results to return. Defaults to 5. Max 20. See Example > -## Auth [Permalink for this section](https://docs.arcade.dev/toolkits/search/google_hotels\#auth) +## Auth [Permalink for this section](https://docs.arcade.dev/mcp-servers/search/google_hotels\#auth) The Arcade Google Hotels toolkit uses the [SerpAPI](https://serpapi.com/) to search for hotels from Google Hotels. @@ -1020,9 +1020,9 @@ The Arcade Google Hotels toolkit uses the [SerpAPI](https://serpapi.com/) to sea Setting the `SERP_API_KEY` secret is only required if you are [self-hosting](https://docs.arcade.dev/home/local-deployment/install/overview) Arcade. If you’re using Arcade Cloud, the secret is already set for you. To manage your secrets, go to the [Secrets page](https://api.arcade.dev/dashboard/auth/secrets) in the Arcade Dashboard. -## Reference [Permalink for this section](https://docs.arcade.dev/toolkits/search/google_hotels\#reference) +## Reference [Permalink for this section](https://docs.arcade.dev/mcp-servers/search/google_hotels\#reference) -## GoogleHotelsSortBy [Permalink for this section](https://docs.arcade.dev/toolkits/search/google_hotels\#googlehotelssortby) +## GoogleHotelsSortBy [Permalink for this section](https://docs.arcade.dev/mcp-servers/search/google_hotels\#googlehotelssortby) Defines the sorting options for hotel search results. @@ -1045,7 +1045,7 @@ Arcade tools can be self-hosted on your own infrastructure. Learn more about sel pip install arcade_google_hotels\\ ```](https://docs.arcade.dev/home/hosting-overview) -[Google Flights](https://docs.arcade.dev/toolkits/search/google_flights "Google Flights") [Google Jobs](https://docs.arcade.dev/toolkits/search/google_jobs "Google Jobs") +[Google Flights](https://docs.arcade.dev/mcp-servers/search/google_flights "Google Flights") [Google Jobs](https://docs.arcade.dev/mcp-servers/search/google_jobs "Google Jobs") Frame @@ -1064,7 +1064,7 @@ This will be shown if an incident or maintenance is posted on your status page. The GitHub auth provider enables tools and agents to call [GitHub APIs](https://docs.github.com/en/rest/overview/resources-in-the-rest-api) on behalf of a user. Behind the scenes, the Arcade Engine and the GitHub auth provider seamlessly manage GitHub OAuth 2.0 authorization for your users. Want to quickly get started with GitHub in your agent or AI app? The pre-built -[Arcade GitHub toolkit](https://docs.arcade.dev/toolkits/development/github/github) is what you want! +[Arcade GitHub toolkit](https://docs.arcade.dev/mcp-servers/development/github/github) is what you want! ### What’s documented here [Permalink for this section](https://docs.arcade.dev/home/auth-providers/github\#whats-documented-here) @@ -1072,7 +1072,7 @@ This page describes how to use and configure GitHub auth with Arcade. This auth provider is used by: -- The [Arcade GitHub toolkit](https://docs.arcade.dev/toolkits/development/github/github), which provides pre-built tools for interacting with GitHub +- The [Arcade GitHub toolkit](https://docs.arcade.dev/mcp-servers/development/github/github), which provides pre-built tools for interacting with GitHub - Your [app code](https://docs.arcade.dev/home/auth-providers/github#using-github-auth-in-app-code) that needs to call the GitHub API - Or, your [custom tools](https://docs.arcade.dev/home/auth-providers/github#using-github-auth-in-custom-tools) that need to call the GitHub API @@ -1206,9 +1206,9 @@ print(response.json().get("stargazers_count")) ## Using GitHub auth in custom tools [Permalink for this section](https://docs.arcade.dev/home/auth-providers/github\#using-github-auth-in-custom-tools) -You can use the pre-built [Arcade GitHub toolkit](https://docs.arcade.dev/toolkits/development/github/github) to quickly build agents and AI apps that interact with GitHub. +You can use the pre-built [Arcade GitHub toolkit](https://docs.arcade.dev/mcp-servers/development/github/github) to quickly build agents and AI apps that interact with GitHub. -If the pre-built tools in the GitHub toolkit don’t meet your needs, you can author your own [custom tools](https://docs.arcade.dev/home/build-tools/create-a-toolkit) that interact with the GitHub API. +If the pre-built tools in the GitHub toolkit don’t meet your needs, you can author your own [custom tools](https://docs.arcade.dev/home/build-tools/create-a-mcp-server) that interact with the GitHub API. Use the `GitHub()` auth class to specify that a tool requires authorization with GitHub. The `context.authorization.token` field will be automatically populated with the user’s GitHub token: @@ -1255,13 +1255,13 @@ This will be shown if an incident or maintenance is posted on your status page. [View latest updates](https://status.arcade.dev/?utm_source=embed) ## Google Docs Reference -[Integrations](https://docs.arcade.dev/toolkits "Integrations") [Productivity & Docs](https://docs.arcade.dev/toolkits/productivity/asana "Productivity & Docs") [Google Docs](https://docs.arcade.dev/toolkits/productivity/google_docs "Google Docs") Reference +[Integrations](https://docs.arcade.dev/toolkits "Integrations") [Productivity & Docs](https://docs.arcade.dev/mcp-servers/productivity/asana "Productivity & Docs") [Google Docs](https://docs.arcade.dev/mcp-servers/productivity/google_docs "Google Docs") Reference # GoogleDocs Reference Below is a reference of enumerations used by some tools in the GoogleDocs toolkit: -## OrderBy [Permalink for this section](https://docs.arcade.dev/toolkits/productivity/google_docs/reference\#orderby) +## OrderBy [Permalink for this section](https://docs.arcade.dev/mcp-servers/productivity/google_docs/reference\#orderby) - **CREATED\_TIME**: `createdTime` - **CREATED\_TIME\_DESC**: `createdTime desc` @@ -1286,13 +1286,13 @@ Below is a reference of enumerations used by some tools in the GoogleDocs toolki - **VIEWED\_BY\_ME\_TIME**: `viewedByMeTime` - **VIEWED\_BY\_ME\_TIME\_DESC**: `viewedByMeTime desc` -## DocumentFormat [Permalink for this section](https://docs.arcade.dev/toolkits/productivity/google_docs/reference\#documentformat) +## DocumentFormat [Permalink for this section](https://docs.arcade.dev/mcp-servers/productivity/google_docs/reference\#documentformat) - **MARKDOWN**: `markdown` - **HTML**: `html` - **GOOGLE\_API\_JSON**: `google_api_json` -[Google Docs](https://docs.arcade.dev/toolkits/productivity/google_docs "Google Docs") [Google Drive](https://docs.arcade.dev/toolkits/productivity/google_drive "Google Drive") +[Google Docs](https://docs.arcade.dev/mcp-servers/productivity/google_docs "Google Docs") [Google Drive](https://docs.arcade.dev/mcp-servers/productivity/google_drive "Google Drive") Frame @@ -1304,18 +1304,18 @@ This will be shown if an incident or maintenance is posted on your status page. [View latest updates](https://status.arcade.dev/?utm_source=embed) ## Gmail Toolkit Reference -[Integrations](https://docs.arcade.dev/toolkits "Integrations") [Productivity & Docs](https://docs.arcade.dev/toolkits/productivity/asana "Productivity & Docs") [Gmail](https://docs.arcade.dev/toolkits/productivity/gmail "Gmail") Reference +[Integrations](https://docs.arcade.dev/toolkits "Integrations") [Productivity & Docs](https://docs.arcade.dev/mcp-servers/productivity/asana "Productivity & Docs") [Gmail](https://docs.arcade.dev/mcp-servers/productivity/gmail "Gmail") Reference # Gmail Reference Below is a reference of enumerations used by some tools in the Gmail toolkit: -## GmailReplyToWhom [Permalink for this section](https://docs.arcade.dev/toolkits/productivity/gmail/reference\#gmailreplytowhom) +## GmailReplyToWhom [Permalink for this section](https://docs.arcade.dev/mcp-servers/productivity/gmail/reference\#gmailreplytowhom) - **EVERY\_RECIPIENT**: `every_recipient` - **ONLY\_THE\_SENDER**: `only_the_sender` -## DateRange [Permalink for this section](https://docs.arcade.dev/toolkits/productivity/gmail/reference\#daterange) +## DateRange [Permalink for this section](https://docs.arcade.dev/mcp-servers/productivity/gmail/reference\#daterange) - **TODAY**: `today` - **YESTERDAY**: `yesterday` @@ -1325,7 +1325,7 @@ Below is a reference of enumerations used by some tools in the Gmail toolkit: - **LAST\_MONTH**: `last_month` - **THIS\_YEAR**: `this_year` -[Gmail](https://docs.arcade.dev/toolkits/productivity/gmail "Gmail") [Google Calendar](https://docs.arcade.dev/toolkits/productivity/google_calendar "Google Calendar") +[Gmail](https://docs.arcade.dev/mcp-servers/productivity/gmail "Gmail") [Google Calendar](https://docs.arcade.dev/mcp-servers/productivity/google_calendar "Google Calendar") Frame @@ -1352,7 +1352,7 @@ This page describes how to use and configure Zendesk auth with Arcade. This auth provider is used by: -- The [Arcade Zendesk toolkit](https://docs.arcade.dev/toolkits/customer-support/zendesk), which provides pre-built tools for interacting with Zendesk services +- The [Arcade Zendesk toolkit](https://docs.arcade.dev/mcp-servers/customer-support/zendesk), which provides pre-built tools for interacting with Zendesk services - Your [app code](https://docs.arcade.dev/home/auth-providers/zendesk#using-zendesk-auth-in-app-code) that needs to call Zendesk APIs - Or, your [custom tools](https://docs.arcade.dev/home/auth-providers/zendesk#using-zendesk-auth-in-custom-tools) that need to call Zendesk APIs @@ -1469,7 +1469,7 @@ token = auth_response.context.token ## Using Zendesk auth in custom tools [Permalink for this section](https://docs.arcade.dev/home/auth-providers/zendesk\#using-zendesk-auth-in-custom-tools) -If the [Arcade Zendesk toolkit](https://docs.arcade.dev/toolkits/customer-support/zendesk) does not meet your needs, you can author your own [custom tools](https://docs.arcade.dev/home/build-tools/create-a-toolkit) that interact with Zendesk APIs. +If the [Arcade Zendesk toolkit](https://docs.arcade.dev/mcp-servers/customer-support/zendesk) does not meet your needs, you can author your own [custom tools](https://docs.arcade.dev/home/build-tools/create-a-mcp-server) that interact with Zendesk APIs. Use the `OAuth2()` auth class to specify that a tool requires authorization with Zendesk. The `context.authorization.token` field will be automatically populated with the user’s Zendesk token: @@ -1519,7 +1519,7 @@ This will be shown if an incident or maintenance is posted on your status page. [View latest updates](https://status.arcade.dev/?utm_source=embed) ## LinkedIn Toolkit -[Integrations](https://docs.arcade.dev/toolkits "Integrations") [Social & Communication](https://docs.arcade.dev/toolkits/social-communication/discord "Social & Communication") LinkedIn +[Integrations](https://docs.arcade.dev/toolkits "Integrations") [Social & Communication](https://docs.arcade.dev/mcp-servers/social-communication/discord "Social & Communication") LinkedIn # LinkedIn @@ -1527,17 +1527,17 @@ This will be shown if an incident or maintenance is posted on your status page. **Author:** Arcade -**Code:** [GitHub](https://github.com/ArcadeAI/arcade-ai/tree/main/toolkits/linkedin) +**Code:** [GitHub](https://github.com/ArcadeAI/arcade-ai/tree/main/mcp-servers/linkedin) **Auth:** User authorizationvia the [LinkedIn auth provider](https://docs.arcade.dev/home/auth-providers/linkedin) [![PyPI Version](https://img.shields.io/pypi/v/arcade_linkedin)](https://pypi.org/project/arcade_linkedin/)[![License](https://img.shields.io/badge/License-MIT-yellow.svg)](https://github.com/arcadeai/arcade-ai/blob/main/LICENSE)[![Python Versions](https://img.shields.io/pypi/pyversions/arcade_linkedin)](https://pypi.org/project/arcade_linkedin/)[![Wheel Status](https://img.shields.io/pypi/wheel/arcade_linkedin)](https://pypi.org/project/arcade_linkedin/)[![Downloads](https://img.shields.io/pypi/dm/arcade_linkedin)](https://pypi.org/project/arcade_linkedin/) -The Arcade LinkedIn toolkit provides a pre-built set of tools for interacting with LinkedIn. These tools make it easy to build agents and AI apps that can: +The Arcade LinkedIn MCP Server provides a pre-built set of tools for interacting with LinkedIn. These tools make it easy to build agents and AI apps that can: - Create a post -## Available Tools [Permalink for this section](https://docs.arcade.dev/toolkits/social-communication/linkedin\#available-tools) +## Available Tools [Permalink for this section](https://docs.arcade.dev/mcp-servers/social-communication/linkedin\#available-tools) These tools are currently available in the Arcade LinkedIn toolkit. @@ -1547,10 +1547,10 @@ These tools are currently available in the Arcade LinkedIn toolkit. 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](https://docs.arcade.dev/home/build-tools/create-a-toolkit) with the [LinkedIn auth\\ +own tools](https://docs.arcade.dev/home/build-tools/create-a-mcp-server) with the [LinkedIn auth\\ provider](https://docs.arcade.dev/home/auth-providers/linkedin#using-linkedin-auth-in-custom-tools). -## Linkedin.CreateTextPost [Permalink for this section](https://docs.arcade.dev/toolkits/social-communication/linkedin\#linkedincreatetextpost) +## Linkedin.CreateTextPost [Permalink for this section](https://docs.arcade.dev/mcp-servers/social-communication/linkedin\#linkedincreatetextpost) See Example > @@ -1562,7 +1562,7 @@ Share a new text post to LinkedIn. * * * -## Auth [Permalink for this section](https://docs.arcade.dev/toolkits/social-communication/linkedin\#auth) +## Auth [Permalink for this section](https://docs.arcade.dev/mcp-servers/social-communication/linkedin\#auth) The Arcade LinkedIn toolkit uses the [LinkedIn auth provider](https://docs.arcade.dev/home/auth-providers/linkedin) to connect to users’ LinkedIn accounts. @@ -1584,7 +1584,7 @@ Arcade tools can be self-hosted on your own infrastructure. Learn more about sel pip install arcade_linkedin\\ ```](https://docs.arcade.dev/home/hosting-overview) -[Discord](https://docs.arcade.dev/toolkits/social-communication/discord "Discord") [Slack](https://docs.arcade.dev/toolkits/social-communication/slack "Slack") +[Discord](https://docs.arcade.dev/mcp-servers/social-communication/discord "Discord") [Slack](https://docs.arcade.dev/mcp-servers/social-communication/slack "Slack") Frame @@ -1624,7 +1624,7 @@ pip install arcade-ai arcade login ``` -For a simple example on using the Arcade CLI, see the [quickstart on building tools](https://docs.arcade.dev/home/build-tools/create-a-toolkit) +For a simple example on using the Arcade CLI, see the [quickstart on building tools](https://docs.arcade.dev/home/build-tools/create-a-mcp-server) ### Install the Engine [Permalink for this section](https://docs.arcade.dev/home/local-deployment/install/local\#install-the-engine) @@ -1700,7 +1700,7 @@ You are now chatting with Arcade locally! ## Next Steps [Permalink for this section](https://docs.arcade.dev/home/local-deployment/install/local\#next-steps) -- **Building Tools**: Learn how to build tools with your local Arcade Instance in the [Creating a Toolkit](https://docs.arcade.dev/home/build-tools/create-a-toolkit) guide. +- **Building Tools**: Learn how to build tools with your local Arcade Instance in the [Creating a Toolkit](https://docs.arcade.dev/home/build-tools/create-a-mcp-server) guide. - **Hosting With Docker**: Learn how to run the [Engine in Docker](https://docs.arcade.dev/home/local-deployment/install/docker). ## Troubleshooting [Permalink for this section](https://docs.arcade.dev/home/local-deployment/install/local\#troubleshooting) @@ -1883,7 +1883,7 @@ This will be shown if an incident or maintenance is posted on your status page. [View latest updates](https://status.arcade.dev/?utm_source=embed) ## Firecrawl Toolkit -[Integrations](https://docs.arcade.dev/toolkits "Integrations") [Developer Tools](https://docs.arcade.dev/toolkits/development/e2b "Developer Tools") FirecrawlFirecrawl +[Integrations](https://docs.arcade.dev/toolkits "Integrations") [Developer Tools](https://docs.arcade.dev/mcp-servers/development/e2b "Developer Tools") FirecrawlFirecrawl # Firecrawl @@ -1895,7 +1895,7 @@ This will be shown if an incident or maintenance is posted on your status page. [![PyPI Version](https://img.shields.io/pypi/v/arcade_firecrawl)](https://pypi.org/project/arcade_firecrawl/)[![License](https://img.shields.io/badge/License-MIT-yellow.svg)](https://github.com/arcadeai/arcade-ai/blob/main/LICENSE)[![Python Versions](https://img.shields.io/pypi/pyversions/arcade_firecrawl)](https://pypi.org/project/arcade_firecrawl/)[![Wheel Status](https://img.shields.io/pypi/wheel/arcade_firecrawl)](https://pypi.org/project/arcade_firecrawl/)[![Downloads](https://img.shields.io/pypi/dm/arcade_firecrawl)](https://pypi.org/project/arcade_firecrawl/) -The Arcade Firecrawl toolkit provides a pre-built set of tools for interacting with websites. These tools make it easy to build agents and AI apps that can: +The Arcade Firecrawl MCP Server provides a pre-built set of tools for interacting with websites. These tools make it easy to build agents and AI apps that can: - Scrape web pages - Crawl websites @@ -1903,7 +1903,7 @@ The Arcade Firecrawl toolkit provides a pre-built set of tools for interacting w - Retrieve crawl status and data - Cancel ongoing crawls -## Available Tools [Permalink for this section](https://docs.arcade.dev/toolkits/development/firecrawl/firecrawl\#available-tools) +## Available Tools [Permalink for this section](https://docs.arcade.dev/mcp-servers/development/firecrawl/firecrawl\#available-tools) These tools are currently available in the Arcade Firecrawl toolkit. @@ -1918,9 +1918,9 @@ These tools are currently available in the Arcade Firecrawl toolkit. 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](https://docs.arcade.dev/home/build-tools/create-a-toolkit). +own tools](https://docs.arcade.dev/home/build-tools/create-a-mcp-server). -## Firecrawl.ScrapeUrl [Permalink for this section](https://docs.arcade.dev/toolkits/development/firecrawl/firecrawl\#firecrawlscrapeurl) +## Firecrawl.ScrapeUrl [Permalink for this section](https://docs.arcade.dev/mcp-servers/development/firecrawl/firecrawl\#firecrawlscrapeurl) See Example > @@ -1934,7 +1934,7 @@ Scrape a URL and return data in specified formats. **Parameters** - **`url`** _(string, required)_ The URL to scrape. -- **`formats`** _(enum ( [Formats](https://docs.arcade.dev/toolkits/development/firecrawl/reference#formats)), optional)_ The format of the scraped web page. Defaults to `Formats.MARKDOWN`. +- **`formats`** _(enum ( [Formats](https://docs.arcade.dev/mcp-servers/development/firecrawl/reference#formats)), optional)_ The format of the scraped web page. Defaults to `Formats.MARKDOWN`. - **`only_main_content`** _(bool, optional)_ Only return the main content of the page. Defaults to `True`. - **`include_tags`** _(list, optional)_ List of tags to include in the output. - **`exclude_tags`** _(list, optional)_ List of tags to exclude from the output. @@ -1943,7 +1943,7 @@ Scrape a URL and return data in specified formats. * * * -## Firecrawl.CrawlWebsite [Permalink for this section](https://docs.arcade.dev/toolkits/development/firecrawl/firecrawl\#firecrawlcrawlwebsite) +## Firecrawl.CrawlWebsite [Permalink for this section](https://docs.arcade.dev/mcp-servers/development/firecrawl/firecrawl\#firecrawlcrawlwebsite) See Example > @@ -1969,7 +1969,7 @@ Crawl a website and return crawl status and data. * * * -## Firecrawl.GetCrawlStatus [Permalink for this section](https://docs.arcade.dev/toolkits/development/firecrawl/firecrawl\#firecrawlgetcrawlstatus) +## Firecrawl.GetCrawlStatus [Permalink for this section](https://docs.arcade.dev/mcp-servers/development/firecrawl/firecrawl\#firecrawlgetcrawlstatus) See Example > @@ -1986,7 +1986,7 @@ Retrieve the status of a crawl job. * * * -## Firecrawl.GetCrawlData [Permalink for this section](https://docs.arcade.dev/toolkits/development/firecrawl/firecrawl\#firecrawlgetcrawldata) +## Firecrawl.GetCrawlData [Permalink for this section](https://docs.arcade.dev/mcp-servers/development/firecrawl/firecrawl\#firecrawlgetcrawldata) See Example > @@ -2003,7 +2003,7 @@ Retrieve data from a completed crawl job. * * * -## Firecrawl.CancelCrawl [Permalink for this section](https://docs.arcade.dev/toolkits/development/firecrawl/firecrawl\#firecrawlcancelcrawl) +## Firecrawl.CancelCrawl [Permalink for this section](https://docs.arcade.dev/mcp-servers/development/firecrawl/firecrawl\#firecrawlcancelcrawl) See Example > @@ -2020,7 +2020,7 @@ Cancel an ongoing crawl job. * * * -## Firecrawl.MapWebsite [Permalink for this section](https://docs.arcade.dev/toolkits/development/firecrawl/firecrawl\#firecrawlmapwebsite) +## Firecrawl.MapWebsite [Permalink for this section](https://docs.arcade.dev/mcp-servers/development/firecrawl/firecrawl\#firecrawlmapwebsite) See Example > @@ -2039,7 +2039,7 @@ Map a website from a single URL to a map of the entire website. - **`include_subdomains`** _(bool, required)_ Include subdomains of the website. Defaults to `False`. - **`limit`** _(int, required)_ Maximum number of links to return. Defaults to `5000`. -## Auth [Permalink for this section](https://docs.arcade.dev/toolkits/development/firecrawl/firecrawl\#auth) +## Auth [Permalink for this section](https://docs.arcade.dev/mcp-servers/development/firecrawl/firecrawl\#auth) The Arcade Web toolkit uses [Firecrawl](https://www.firecrawl.dev/) to scrape, crawl, and map websites. @@ -2061,7 +2061,7 @@ Arcade tools can be self-hosted on your own infrastructure. Learn more about sel pip install arcade_firecrawl\\ ```](https://docs.arcade.dev/home/hosting-overview) -[Reference](https://docs.arcade.dev/toolkits/development/github/reference "Reference") [Reference](https://docs.arcade.dev/toolkits/development/firecrawl/reference "Reference") +[Reference](https://docs.arcade.dev/mcp-servers/development/github/reference "Reference") [Reference](https://docs.arcade.dev/mcp-servers/development/firecrawl/reference "Reference") Frame @@ -2073,7 +2073,7 @@ This will be shown if an incident or maintenance is posted on your status page. [View latest updates](https://status.arcade.dev/?utm_source=embed) ## Twilio Toolkit -[Integrations](https://docs.arcade.dev/toolkits "Integrations") [Social & Communication](https://docs.arcade.dev/toolkits/social-communication/discord "Social & Communication") [Twilio](https://docs.arcade.dev/toolkits/social-communication/twilio/readme "Twilio") Reference +[Integrations](https://docs.arcade.dev/toolkits "Integrations") [Social & Communication](https://docs.arcade.dev/mcp-servers/social-communication/discord "Social & Communication") [Twilio](https://docs.arcade.dev/mcp-servers/social-communication/twilio/readme "Twilio") Reference # Twilio Toolkit @@ -2088,30 +2088,30 @@ This will be shown if an incident or maintenance is posted on your status page. | Tool Name | Description | | --- | --- | -| [SendSms](https://docs.arcade.dev/toolkits/social-communication/twilio/reference#sendsms) | Send an SMS/text message to a phone number | -| [SendWhatsapp](https://docs.arcade.dev/toolkits/social-communication/twilio/reference#sendwhatsapp) | Send a WhatsApp message to a phone number | +| [SendSms](https://docs.arcade.dev/mcp-servers/social-communication/twilio/reference#sendsms) | Send an SMS/text message to a phone number | +| [SendWhatsapp](https://docs.arcade.dev/mcp-servers/social-communication/twilio/reference#sendwhatsapp) | Send a WhatsApp message to a phone number | -### SendSms [Permalink for this section](https://docs.arcade.dev/toolkits/social-communication/twilio/reference\#sendsms) +### SendSms [Permalink for this section](https://docs.arcade.dev/mcp-servers/social-communication/twilio/reference\#sendsms) Send an SMS/text message to a phone number -#### Parameters [Permalink for this section](https://docs.arcade.dev/toolkits/social-communication/twilio/reference\#parameters) +#### Parameters [Permalink for this section](https://docs.arcade.dev/mcp-servers/social-communication/twilio/reference\#parameters) - `phone_number` _(string, required)_ The phone number to send the message to. Use β€˜my\_phone\_number’ when a phone number is not specified or when the request implies sending to the user themselves - `message` _(string, required)_ The text content to be sent via SMS * * * -### SendWhatsapp [Permalink for this section](https://docs.arcade.dev/toolkits/social-communication/twilio/reference\#sendwhatsapp) +### SendWhatsapp [Permalink for this section](https://docs.arcade.dev/mcp-servers/social-communication/twilio/reference\#sendwhatsapp) Send a WhatsApp message to a phone number -#### Parameters [Permalink for this section](https://docs.arcade.dev/toolkits/social-communication/twilio/reference\#parameters-1) +#### Parameters [Permalink for this section](https://docs.arcade.dev/mcp-servers/social-communication/twilio/reference\#parameters-1) - `phone_number` _(string, required)_ The phone number to send the message to. Use β€˜my\_phone\_number’ when a phone number is not specified or when the request implies sending to the user themselves - `message` _(string, required)_ The text content to be sent via WhatsApp -[Readme](https://docs.arcade.dev/toolkits/social-communication/twilio/readme "Readme") [X](https://docs.arcade.dev/toolkits/social-communication/x "X") +[Readme](https://docs.arcade.dev/mcp-servers/social-communication/twilio/readme "Readme") [X](https://docs.arcade.dev/mcp-servers/social-communication/x "X") Frame @@ -2123,29 +2123,29 @@ This will be shown if an incident or maintenance is posted on your status page. [View latest updates](https://status.arcade.dev/?utm_source=embed) ## Microsoft Teams Reference -[Integrations](https://docs.arcade.dev/toolkits "Integrations") [Social & Communication](https://docs.arcade.dev/toolkits/social-communication/discord "Social & Communication") [Microsoft Teams](https://docs.arcade.dev/toolkits/social-communication/microsoft_teams "Microsoft Teams") Reference +[Integrations](https://docs.arcade.dev/toolkits "Integrations") [Social & Communication](https://docs.arcade.dev/mcp-servers/social-communication/discord "Social & Communication") [Microsoft Teams](https://docs.arcade.dev/mcp-servers/social-communication/microsoft_teams "Microsoft Teams") Reference # MicrosoftTeams Reference Below is a reference of enumerations used by some tools in the MicrosoftTeams toolkit: -## PartialMatchType [Permalink for this section](https://docs.arcade.dev/toolkits/social-communication/microsoft_teams/reference\#partialmatchtype) +## PartialMatchType [Permalink for this section](https://docs.arcade.dev/mcp-servers/social-communication/microsoft_teams/reference\#partialmatchtype) - **PARTIAL\_ALL**: `match_all_keywords` - **PARTIAL\_ANY**: `match_any_of_the_keywords` -## MatchType [Permalink for this section](https://docs.arcade.dev/toolkits/social-communication/microsoft_teams/reference\#matchtype) +## MatchType [Permalink for this section](https://docs.arcade.dev/mcp-servers/social-communication/microsoft_teams/reference\#matchtype) - **EXACT**: `exact_match` - **PARTIAL\_ALL**: `partial_match_all_keywords` - **PARTIAL\_ANY**: `partial_match_any_of_the_keywords` -## TeamMembershipType [Permalink for this section](https://docs.arcade.dev/toolkits/social-communication/microsoft_teams/reference\#teammembershiptype) +## TeamMembershipType [Permalink for this section](https://docs.arcade.dev/mcp-servers/social-communication/microsoft_teams/reference\#teammembershiptype) - **DIRECT\_MEMBER**: `direct_member_of_the_team` - **MEMBER\_OF\_SHARED\_CHANNEL**: `member_of_a_shared_channel_in_another_team` -[Microsoft Teams](https://docs.arcade.dev/toolkits/social-communication/microsoft_teams "Microsoft Teams") [Reddit](https://docs.arcade.dev/toolkits/social-communication/reddit "Reddit") +[Microsoft Teams](https://docs.arcade.dev/mcp-servers/social-communication/microsoft_teams "Microsoft Teams") [Reddit](https://docs.arcade.dev/mcp-servers/social-communication/reddit "Reddit") Frame @@ -2171,7 +2171,7 @@ This will be shown if an incident or maintenance is posted on your status page. The Arcade Stripe toolkit lets you interact with the Stripe API. Use these tools to build intelligent agents and applications that process payments, create invoices, and more. -## Available Tools [Permalink for this section](https://docs.arcade.dev/toolkits/payments/stripe\#available-tools) +## Available Tools [Permalink for this section](https://docs.arcade.dev/mcp-servers/payments/stripe\#available-tools) | Tool Name | Description | | --- | --- | @@ -2191,9 +2191,9 @@ The Arcade Stripe toolkit lets you interact with the Stripe API. Use these tools | Stripe.ListPaymentIntents | This tool will list payment intents in Stripe. | | Stripe.CreateBillingPortalSession | This tool will create a billing portal session. | -If you need an action that’s not listed here, please [contact us](mailto:contact@arcade.dev) to request a new tool, or [create your own tools](https://docs.arcade.dev/home/build-tools/create-a-toolkit). +If you need an action that’s not listed here, please [contact us](mailto:contact@arcade.dev) to request a new tool, or [create your own tools](https://docs.arcade.dev/home/build-tools/create-a-mcp-server). -## Stripe.CreateCustomer [Permalink for this section](https://docs.arcade.dev/toolkits/payments/stripe\#stripecreatecustomer) +## Stripe.CreateCustomer [Permalink for this section](https://docs.arcade.dev/mcp-servers/payments/stripe\#stripecreatecustomer) Create a customer in Stripe. @@ -2204,7 +2204,7 @@ Create a customer in Stripe. See Example > -## Stripe.ListCustomers [Permalink for this section](https://docs.arcade.dev/toolkits/payments/stripe\#stripelistcustomers) +## Stripe.ListCustomers [Permalink for this section](https://docs.arcade.dev/mcp-servers/payments/stripe\#stripelistcustomers) Fetch a list of customers from Stripe. @@ -2215,7 +2215,7 @@ Fetch a list of customers from Stripe. See Example > -## Stripe.CreateProduct [Permalink for this section](https://docs.arcade.dev/toolkits/payments/stripe\#stripecreateproduct) +## Stripe.CreateProduct [Permalink for this section](https://docs.arcade.dev/mcp-servers/payments/stripe\#stripecreateproduct) Create a product in Stripe. @@ -2226,7 +2226,7 @@ Create a product in Stripe. See Example > -## Stripe.ListProducts [Permalink for this section](https://docs.arcade.dev/toolkits/payments/stripe\#stripelistproducts) +## Stripe.ListProducts [Permalink for this section](https://docs.arcade.dev/mcp-servers/payments/stripe\#stripelistproducts) Fetch a list of products from Stripe. @@ -2236,7 +2236,7 @@ Fetch a list of products from Stripe. See Example > -## Stripe.CreatePrice [Permalink for this section](https://docs.arcade.dev/toolkits/payments/stripe\#stripecreateprice) +## Stripe.CreatePrice [Permalink for this section](https://docs.arcade.dev/mcp-servers/payments/stripe\#stripecreateprice) Create a price in Stripe. @@ -2248,7 +2248,7 @@ Create a price in Stripe. See Example > -## Stripe.ListPrices [Permalink for this section](https://docs.arcade.dev/toolkits/payments/stripe\#stripelistprices) +## Stripe.ListPrices [Permalink for this section](https://docs.arcade.dev/mcp-servers/payments/stripe\#stripelistprices) Fetch a list of prices from Stripe. @@ -2259,7 +2259,7 @@ Fetch a list of prices from Stripe. See Example > -## Stripe.CreatePaymentLink [Permalink for this section](https://docs.arcade.dev/toolkits/payments/stripe\#stripecreatepaymentlink) +## Stripe.CreatePaymentLink [Permalink for this section](https://docs.arcade.dev/mcp-servers/payments/stripe\#stripecreatepaymentlink) Create a payment link in Stripe. @@ -2270,7 +2270,7 @@ Create a payment link in Stripe. See Example > -## Stripe.ListInvoices [Permalink for this section](https://docs.arcade.dev/toolkits/payments/stripe\#stripelistinvoices) +## Stripe.ListInvoices [Permalink for this section](https://docs.arcade.dev/mcp-servers/payments/stripe\#stripelistinvoices) List invoices in Stripe. @@ -2281,7 +2281,7 @@ List invoices in Stripe. See Example > -## Stripe.CreateInvoice [Permalink for this section](https://docs.arcade.dev/toolkits/payments/stripe\#stripecreateinvoice) +## Stripe.CreateInvoice [Permalink for this section](https://docs.arcade.dev/mcp-servers/payments/stripe\#stripecreateinvoice) Create an invoice in Stripe. @@ -2292,7 +2292,7 @@ Create an invoice in Stripe. See Example > -## Stripe.CreateInvoiceItem [Permalink for this section](https://docs.arcade.dev/toolkits/payments/stripe\#stripecreateinvoiceitem) +## Stripe.CreateInvoiceItem [Permalink for this section](https://docs.arcade.dev/mcp-servers/payments/stripe\#stripecreateinvoiceitem) Create an invoice item in Stripe. @@ -2304,7 +2304,7 @@ Create an invoice item in Stripe. See Example > -## Stripe.FinalizeInvoice [Permalink for this section](https://docs.arcade.dev/toolkits/payments/stripe\#stripefinalizeinvoice) +## Stripe.FinalizeInvoice [Permalink for this section](https://docs.arcade.dev/mcp-servers/payments/stripe\#stripefinalizeinvoice) Finalize an invoice in Stripe. @@ -2314,13 +2314,13 @@ Finalize an invoice in Stripe. See Example > -## Stripe.RetrieveBalance [Permalink for this section](https://docs.arcade.dev/toolkits/payments/stripe\#striperetrievebalance) +## Stripe.RetrieveBalance [Permalink for this section](https://docs.arcade.dev/mcp-servers/payments/stripe\#striperetrievebalance) Retrieve the balance from Stripe. This tool takes no inputs. See Example > -## Stripe.CreateRefund [Permalink for this section](https://docs.arcade.dev/toolkits/payments/stripe\#stripecreaterefund) +## Stripe.CreateRefund [Permalink for this section](https://docs.arcade.dev/mcp-servers/payments/stripe\#stripecreaterefund) Refund a payment intent in Stripe. @@ -2331,7 +2331,7 @@ Refund a payment intent in Stripe. See Example > -## Stripe.ListPaymentIntents [Permalink for this section](https://docs.arcade.dev/toolkits/payments/stripe\#stripelistpaymentintents) +## Stripe.ListPaymentIntents [Permalink for this section](https://docs.arcade.dev/mcp-servers/payments/stripe\#stripelistpaymentintents) List payment intents in Stripe. @@ -2342,7 +2342,7 @@ List payment intents in Stripe. See Example > -## Stripe.CreateBillingPortalSession [Permalink for this section](https://docs.arcade.dev/toolkits/payments/stripe\#stripecreatebillingportalsession) +## Stripe.CreateBillingPortalSession [Permalink for this section](https://docs.arcade.dev/mcp-servers/payments/stripe\#stripecreatebillingportalsession) Create a billing portal session in Stripe. @@ -2353,7 +2353,7 @@ Create a billing portal session in Stripe. See Example > -## Auth [Permalink for this section](https://docs.arcade.dev/toolkits/payments/stripe\#auth) +## Auth [Permalink for this section](https://docs.arcade.dev/mcp-servers/payments/stripe\#auth) The Arcade Stripe toolkit uses the [Stripe Agent Toolkit](https://github.com/stripe/agent-toolkit) to interact with the Stripe API. @@ -2374,7 +2374,7 @@ Arcade tools can be self-hosted on your own infrastructure. Learn more about sel pip install arcade_stripe\\ ```](https://docs.arcade.dev/home/hosting-overview) -[Reference](https://docs.arcade.dev/toolkits/development/firecrawl/reference "Reference") [Google Finance](https://docs.arcade.dev/toolkits/search/google_finance "Google Finance") +[Reference](https://docs.arcade.dev/mcp-servers/development/firecrawl/reference "Reference") [Google Finance](https://docs.arcade.dev/mcp-servers/search/google_finance "Google Finance") Frame @@ -2386,7 +2386,7 @@ This will be shown if an incident or maintenance is posted on your status page. [View latest updates](https://status.arcade.dev/?utm_source=embed) ## Notion Toolkit -[Integrations](https://docs.arcade.dev/toolkits "Integrations") [Productivity & Docs](https://docs.arcade.dev/toolkits/productivity/asana "Productivity & Docs") Notion +[Integrations](https://docs.arcade.dev/toolkits "Integrations") [Productivity & Docs](https://docs.arcade.dev/mcp-servers/productivity/asana "Productivity & Docs") Notion # Notion @@ -2398,7 +2398,7 @@ This will be shown if an incident or maintenance is posted on your status page. [![PyPI Version](https://img.shields.io/pypi/v/arcade_notion-toolkit)](https://pypi.org/project/arcade_notion-toolkit/)[![License](https://img.shields.io/badge/License-MIT-yellow.svg)](https://github.com/arcadeai/arcade-ai/blob/main/LICENSE)[![Python Versions](https://img.shields.io/pypi/pyversions/arcade_notion-toolkit)](https://pypi.org/project/arcade_notion-toolkit/)[![Wheel Status](https://img.shields.io/pypi/wheel/arcade_notion-toolkit)](https://pypi.org/project/arcade_notion-toolkit/)[![Downloads](https://img.shields.io/pypi/dm/arcade_notion-toolkit)](https://pypi.org/project/arcade_notion-toolkit/) -The Arcade Notion toolkit provides a pre-built set of tools for interacting with Notion. These tools make it easy to build agents and AI apps that can: +The Arcade Notion MCP Server provides a pre-built set of tools for interacting with Notion. These tools make it easy to build agents and AI apps that can: - Get a page’s content - Create a new page @@ -2406,7 +2406,7 @@ The Arcade Notion toolkit provides a pre-built set of tools for interacting with - Get the metadata of a Notion object (page or database) - Get a workspace’s folder structure -## Available tools [Permalink for this section](https://docs.arcade.dev/toolkits/productivity/notion\#available-tools) +## Available tools [Permalink for this section](https://docs.arcade.dev/mcp-servers/productivity/notion\#available-tools) These tools are currently available in the Arcade Notion toolkit. @@ -2421,9 +2421,9 @@ These tools are currently available in the Arcade Notion toolkit. | NotionToolkit.AppendContentToEndOfPage | Append content to the end of a Notion page. | | NotionToolkit.WhoAmI | Get comprehensive user profile and Notion workspace information. | -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](https://docs.arcade.dev/home/build-tools/create-a-toolkit) with the [Notion auth provider](https://docs.arcade.dev/home/auth-providers/notion). +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](https://docs.arcade.dev/home/build-tools/create-a-mcp-server) with the [Notion auth provider](https://docs.arcade.dev/home/auth-providers/notion). -## NotionToolkit.GetPageContentById [Permalink for this section](https://docs.arcade.dev/toolkits/productivity/notion\#notiontoolkitgetpagecontentbyid) +## NotionToolkit.GetPageContentById [Permalink for this section](https://docs.arcade.dev/mcp-servers/productivity/notion\#notiontoolkitgetpagecontentbyid) See Example > @@ -2435,7 +2435,7 @@ Get the content of a Notion page as markdown with the page’s ID. * * * -## NotionToolkit.GetPageContentByTitle [Permalink for this section](https://docs.arcade.dev/toolkits/productivity/notion\#notiontoolkitgetpagecontentbytitle) +## NotionToolkit.GetPageContentByTitle [Permalink for this section](https://docs.arcade.dev/mcp-servers/productivity/notion\#notiontoolkitgetpagecontentbytitle) See Example > @@ -2447,7 +2447,7 @@ Get the content of a Notion page as markdown with the page’s title. * * * -## NotionToolkit.CreatePage [Permalink for this section](https://docs.arcade.dev/toolkits/productivity/notion\#notiontoolkitcreatepage) +## NotionToolkit.CreatePage [Permalink for this section](https://docs.arcade.dev/mcp-servers/productivity/notion\#notiontoolkitcreatepage) See Example > @@ -2461,7 +2461,7 @@ Create a new Notion page by specifying an existing parent page and the new page * * * -## NotionToolkit.SearchByTitle [Permalink for this section](https://docs.arcade.dev/toolkits/productivity/notion\#notiontoolkitsearchbytitle) +## NotionToolkit.SearchByTitle [Permalink for this section](https://docs.arcade.dev/mcp-servers/productivity/notion\#notiontoolkitsearchbytitle) See Example > @@ -2480,7 +2480,7 @@ The maximum number of results to return. Defaults to 100. Use -1 for no limit. * * * -## NotionToolkit.GetObjectMetadata [Permalink for this section](https://docs.arcade.dev/toolkits/productivity/notion\#notiontoolkitgetobjectmetadata) +## NotionToolkit.GetObjectMetadata [Permalink for this section](https://docs.arcade.dev/mcp-servers/productivity/notion\#notiontoolkitgetobjectmetadata) See Example > @@ -2497,7 +2497,7 @@ The type of object to match the title against. If provided, must be one of `page * * * -## NotionToolkit.GetWorkspaceStructure [Permalink for this section](https://docs.arcade.dev/toolkits/productivity/notion\#notiontoolkitgetworkspacestructure) +## NotionToolkit.GetWorkspaceStructure [Permalink for this section](https://docs.arcade.dev/mcp-servers/productivity/notion\#notiontoolkitgetworkspacestructure) See Example > @@ -2509,7 +2509,7 @@ _None_ * * * -## NotionToolkit.AppendContentToEndOfPage [Permalink for this section](https://docs.arcade.dev/toolkits/productivity/notion\#notiontoolkitappendcontenttoendofpage) +## NotionToolkit.AppendContentToEndOfPage [Permalink for this section](https://docs.arcade.dev/mcp-servers/productivity/notion\#notiontoolkitappendcontenttoendofpage) See Example > @@ -2522,7 +2522,7 @@ Append markdown content to the end of a Notion page using either the page’s ID * * * -## NotionToolkit.WhoAmI [Permalink for this section](https://docs.arcade.dev/toolkits/productivity/notion\#notiontoolkitwhoami) +## NotionToolkit.WhoAmI [Permalink for this section](https://docs.arcade.dev/mcp-servers/productivity/notion\#notiontoolkitwhoami) See Example > @@ -2532,7 +2532,7 @@ Get comprehensive user profile and Notion workspace information. This tool does not take any parameters. -## Auth [Permalink for this section](https://docs.arcade.dev/toolkits/productivity/notion\#auth) +## Auth [Permalink for this section](https://docs.arcade.dev/mcp-servers/productivity/notion\#auth) The Arcade Notion toolkit uses the [Notion auth provider](https://docs.arcade.dev/home/auth-providers/notion) to connect to users’ Notion accounts. @@ -2554,7 +2554,7 @@ Arcade tools can be self-hosted on your own infrastructure. Learn more about sel pip install arcade_notion_toolkit\\ ```](https://docs.arcade.dev/home/hosting-overview) -[Linear](https://docs.arcade.dev/toolkits/productivity/linear "Linear") [Obsidian](https://docs.arcade.dev/toolkits/productivity/obsidian "Obsidian") +[Linear](https://docs.arcade.dev/mcp-servers/productivity/linear "Linear") [Obsidian](https://docs.arcade.dev/mcp-servers/productivity/obsidian "Obsidian") Frame @@ -2573,7 +2573,7 @@ This will be shown if an incident or maintenance is posted on your status page. The X auth provider enables tools and agents to call the X (Twitter) API on behalf of a user. Behind the scenes, the Arcade Engine and the X auth provider seamlessly manage X OAuth 2.0 authorization for your users. Want to quickly get started with X services in your agent or AI app? The -pre-built [Arcade X toolkit](https://docs.arcade.dev/toolkits/social-communication/x) is what you +pre-built [Arcade X toolkit](https://docs.arcade.dev/mcp-servers/social-communication/x) is what you want! ### What’s documented here [Permalink for this section](https://docs.arcade.dev/home/auth-providers/x\#whats-documented-here) @@ -2582,7 +2582,7 @@ This page describes how to use and configure X auth with Arcade. This auth provider is used by: -- The [Arcade X toolkit](https://docs.arcade.dev/toolkits/social-communication/x), which provides pre-built tools for interacting with X +- The [Arcade X toolkit](https://docs.arcade.dev/mcp-servers/social-communication/x), which provides pre-built tools for interacting with X - Your [app code](https://docs.arcade.dev/home/auth-providers/x#using-x-auth-in-app-code) that needs to call X APIs - Or, your [custom tools](https://docs.arcade.dev/home/auth-providers/x#using-x-auth-in-custom-tools) that need to call X APIs @@ -2677,9 +2677,9 @@ token = auth_response.context.token ## Using X auth in custom tools [Permalink for this section](https://docs.arcade.dev/home/auth-providers/x\#using-x-auth-in-custom-tools) -You can use the pre-built [Arcade X toolkit](https://docs.arcade.dev/toolkits/social-communication/x) to quickly build agents and AI apps that interact with X. +You can use the pre-built [Arcade X toolkit](https://docs.arcade.dev/mcp-servers/social-communication/x) to quickly build agents and AI apps that interact with X. -If the pre-built tools in the X toolkit don’t meet your needs, you can author your own [custom tools](https://docs.arcade.dev/home/build-tools/create-a-toolkit) that interact with the X API. +If the pre-built tools in the X toolkit don’t meet your needs, you can author your own [custom tools](https://docs.arcade.dev/home/build-tools/create-a-mcp-server) that interact with the X API. Use the `X()` auth class to specify that a tool requires authorization with X. The `context.authorization.token` field will be automatically populated with the user’s X token: @@ -2741,13 +2741,13 @@ This will be shown if an incident or maintenance is posted on your status page. [![PyPI Version](https://img.shields.io/pypi/v/arcade_imgflip)](https://pypi.org/project/arcade_imgflip/)[![License](https://img.shields.io/badge/License-MIT-yellow.svg)](https://github.com/arcadeai/arcade-ai/blob/main/LICENSE)[![Python Versions](https://img.shields.io/pypi/pyversions/arcade_imgflip)](https://pypi.org/project/arcade_imgflip/)[![Wheel Status](https://img.shields.io/pypi/wheel/arcade_imgflip)](https://pypi.org/project/arcade_imgflip/)[![Downloads](https://img.shields.io/pypi/dm/arcade_imgflip)](https://pypi.org/project/arcade_imgflip/) -The Arcade Imgflip toolkit provides a pre-built set of tools for interacting with Imgflip. These tools make it easy to build agents and AI apps that can: +The Arcade Imgflip MCP Server provides a pre-built set of tools for interacting with Imgflip. These tools make it easy to build agents and AI apps that can: - Create memes - Search for memes - Get popular meme templates -## Available Tools [Permalink for this section](https://docs.arcade.dev/toolkits/entertainment/imgflip\#available-tools) +## Available Tools [Permalink for this section](https://docs.arcade.dev/mcp-servers/entertainment/imgflip\#available-tools) These tools are currently available in the Arcade Imgflip toolkit. @@ -2759,10 +2759,10 @@ These tools are currently available in the Arcade Imgflip toolkit. 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](https://docs.arcade.dev/home/build-tools/create-a-toolkit) with the [Imgflip auth\\ +own tools](https://docs.arcade.dev/home/build-tools/create-a-mcp-server) with the [Imgflip auth\\ provider](https://docs.arcade.dev/home/auth-providers/imgflip#using-imgflip-auth-in-customtools). -## Imgflip.SearchMemes [Permalink for this section](https://docs.arcade.dev/toolkits/entertainment/imgflip\#imgflipsearchmemes) +## Imgflip.SearchMemes [Permalink for this section](https://docs.arcade.dev/mcp-servers/entertainment/imgflip\#imgflipsearchmemes) See Example > @@ -2780,7 +2780,7 @@ requires a paid Imgflip subscription. * * * -## Imgflip.GetPopularMemes [Permalink for this section](https://docs.arcade.dev/toolkits/entertainment/imgflip\#imgflipgetpopularmemes) +## Imgflip.GetPopularMemes [Permalink for this section](https://docs.arcade.dev/mcp-servers/entertainment/imgflip\#imgflipgetpopularmemes) See Example > @@ -2796,7 +2796,7 @@ based on how many times they’ve been captioned. * * * -## Imgflip.CreateMeme [Permalink for this section](https://docs.arcade.dev/toolkits/entertainment/imgflip\#imgflipcreatememe) +## Imgflip.CreateMeme [Permalink for this section](https://docs.arcade.dev/mcp-servers/entertainment/imgflip\#imgflipcreatememe) See Example > @@ -2829,7 +2829,7 @@ Arcade tools can be self-hosted on your own infrastructure. Learn more about sel pip install arcade_imgflip\\ ```](https://docs.arcade.dev/home/hosting-overview) -[Reference](https://docs.arcade.dev/toolkits/social-communication/teams/reference "Reference") [Spotify](https://docs.arcade.dev/toolkits/entertainment/spotify "Spotify") +[Reference](https://docs.arcade.dev/mcp-servers/social-communication/teams/reference "Reference") [Spotify](https://docs.arcade.dev/mcp-servers/entertainment/spotify "Spotify") Frame @@ -3030,7 +3030,7 @@ Auth integrations allow you to develop custom tools that connect your agent APIs Don't see what you need? Use Arcade's SDK to integrate with any service or API. -[Learn how to build a toolkit](https://docs.arcade.dev/home/build-tools/create-a-toolkit) +[Learn how to build a toolkit](https://docs.arcade.dev/home/build-tools/create-a-mcp-server) 104 result(s) found @@ -3042,307 +3042,307 @@ Asana\\ \\ Arcade Optimized Toolkit\\ \\ -Manage projects, tasks, and more in Asana with your agents.](https://docs.arcade.dev/toolkits/productivity/asana) [CL\\ +Manage projects, tasks, and more in Asana with your agents.](https://docs.arcade.dev/mcp-servers/productivity/asana) [CL\\ \\ ClickUp\\ \\ Arcade Optimized Toolkit\\ \\ -Manage projects, tasks, and documents with your agents.](https://docs.arcade.dev/toolkits/productivity/clickup) [CO\\ +Manage projects, tasks, and documents with your agents.](https://docs.arcade.dev/mcp-servers/productivity/clickup) [CO\\ \\ Confluence\\ \\ Arcade Optimized Toolkit\\ \\ -Manage Confluence pages and spaces with your agents](https://docs.arcade.dev/toolkits/productivity/confluence) [DR\\ +Manage Confluence pages and spaces with your agents](https://docs.arcade.dev/mcp-servers/productivity/confluence) [DR\\ \\ Dropbox\\ \\ Arcade Optimized Toolkit\\ \\ -Manage Dropbox files and folders with your agents](https://docs.arcade.dev/toolkits/productivity/dropbox/dropbox) [E2\\ +Manage Dropbox files and folders with your agents](https://docs.arcade.dev/mcp-servers/productivity/dropbox/dropbox) [E2\\ \\ E2B\\ \\ Arcade Optimized Toolkit\\ \\ -Execute and test code in a secure sandbox environment](https://docs.arcade.dev/toolkits/development/e2b) [FI\\ +Execute and test code in a secure sandbox environment](https://docs.arcade.dev/mcp-servers/development/e2b) [FI\\ \\ Firecrawl\\ \\ Arcade Optimized Toolkit\\ \\ -Browse and interact with web pages programmatically](https://docs.arcade.dev/toolkits/development/firecrawl/firecrawl) [GI\\ +Browse and interact with web pages programmatically](https://docs.arcade.dev/mcp-servers/development/firecrawl/firecrawl) [GI\\ \\ GitHub\\ \\ Arcade Optimized Toolkit\\ \\ -Interact with private and public GitHub repositories, issues, pull requests, and more](https://docs.arcade.dev/toolkits/development/github/github) [GM\\ +Interact with private and public GitHub repositories, issues, pull requests, and more](https://docs.arcade.dev/mcp-servers/development/github/github) [GM\\ \\ Gmail\\ \\ Arcade Optimized Toolkit\\ \\ -Send, write, draft, delete, trash, and search Gmail emails with your agents.](https://docs.arcade.dev/toolkits/productivity/gmail) [GO\\ +Send, write, draft, delete, trash, and search Gmail emails with your agents.](https://docs.arcade.dev/mcp-servers/productivity/gmail) [GO\\ \\ Google Calendar\\ \\ Arcade Optimized Toolkit\\ \\ -Create, update, delete, and search events in Google Calendar with your agents.](https://docs.arcade.dev/toolkits/productivity/google_calendar) [GO\\ +Create, update, delete, and search events in Google Calendar with your agents.](https://docs.arcade.dev/mcp-servers/productivity/google_calendar) [GO\\ \\ Google Contacts\\ \\ Arcade Optimized Toolkit\\ \\ -Create and search contacts in Google Contacts with your agents.](https://docs.arcade.dev/toolkits/productivity/google_contacts) [GO\\ +Create and search contacts in Google Contacts with your agents.](https://docs.arcade.dev/mcp-servers/productivity/google_contacts) [GO\\ \\ Google Docs\\ \\ Arcade Optimized Toolkit\\ \\ -Create, edit, and get information about Google Docs documents with your agents.](https://docs.arcade.dev/toolkits/productivity/google_docs) [GO\\ +Create, edit, and get information about Google Docs documents with your agents.](https://docs.arcade.dev/mcp-servers/productivity/google_docs) [GO\\ \\ Google Drive\\ \\ Arcade Optimized Toolkit\\ \\ -List documents in Google Drive with your agents.](https://docs.arcade.dev/toolkits/productivity/google_drive) [GO\\ +List documents in Google Drive with your agents.](https://docs.arcade.dev/mcp-servers/productivity/google_drive) [GO\\ \\ Google Finance\\ \\ Arcade Optimized Toolkit\\ \\ -Get stock data from Google Finance](https://docs.arcade.dev/toolkits/search/google_finance) [GO\\ +Get stock data from Google Finance](https://docs.arcade.dev/mcp-servers/search/google_finance) [GO\\ \\ Google Flights\\ \\ Arcade Optimized Toolkit\\ \\ -Search for flights](https://docs.arcade.dev/toolkits/search/google_flights) [GO\\ +Search for flights](https://docs.arcade.dev/mcp-servers/search/google_flights) [GO\\ \\ Google Hotels\\ \\ Arcade Optimized Toolkit\\ \\ -Search for hotels](https://docs.arcade.dev/toolkits/search/google_hotels) [GO\\ +Search for hotels](https://docs.arcade.dev/mcp-servers/search/google_hotels) [GO\\ \\ Google Jobs\\ \\ Arcade Optimized Toolkit\\ \\ -Search for job openings with Google Jobs.](https://docs.arcade.dev/toolkits/search/google_jobs) [GO\\ +Search for job openings with Google Jobs.](https://docs.arcade.dev/mcp-servers/search/google_jobs) [GO\\ \\ Google Maps\\ \\ Arcade Optimized Toolkit\\ \\ -Get directions between two locations with Google Maps](https://docs.arcade.dev/toolkits/search/google_maps) [GO\\ +Get directions between two locations with Google Maps](https://docs.arcade.dev/mcp-servers/search/google_maps) [GO\\ \\ Google News\\ \\ Arcade Optimized Toolkit\\ \\ -Search for news articles with Google News](https://docs.arcade.dev/toolkits/search/google_news) [GO\\ +Search for news articles with Google News](https://docs.arcade.dev/mcp-servers/search/google_news) [GO\\ \\ Google Search\\ \\ Arcade Optimized Toolkit\\ \\ -Perform Google searches and retrieve relevant information](https://docs.arcade.dev/toolkits/search/google_search) [GO\\ +Perform Google searches and retrieve relevant information](https://docs.arcade.dev/mcp-servers/search/google_search) [GO\\ \\ Google Sheets\\ \\ Arcade Optimized Toolkit\\ \\ -Create, read, and update Google Sheets with your agents.](https://docs.arcade.dev/toolkits/productivity/google_sheets) [GO\\ +Create, read, and update Google Sheets with your agents.](https://docs.arcade.dev/mcp-servers/productivity/google_sheets) [GO\\ \\ Google Shopping\\ \\ Arcade Optimized Toolkit\\ \\ -Search for products on Google Shopping.](https://docs.arcade.dev/toolkits/search/google_shopping) [GO\\ +Search for products on Google Shopping.](https://docs.arcade.dev/mcp-servers/search/google_shopping) [GO\\ \\ Google Slides\\ \\ Arcade Optimized Toolkit\\ \\ -Create, read, and update Google Slides with your agents.](https://docs.arcade.dev/toolkits/productivity/google_slides) [HU\\ +Create, read, and update Google Slides with your agents.](https://docs.arcade.dev/mcp-servers/productivity/google_slides) [HU\\ \\ HubSpot\\ \\ Arcade Optimized Toolkit\\ \\ -Manage companies, contacts, deals, and more in HubSpot with your agents.](https://docs.arcade.dev/toolkits/sales/hubspot) [IM\\ +Manage companies, contacts, deals, and more in HubSpot with your agents.](https://docs.arcade.dev/mcp-servers/sales/hubspot) [IM\\ \\ Imgflip\\ \\ Arcade Optimized Toolkit\\ \\ -Create memes with Imgflip](https://docs.arcade.dev/toolkits/entertainment/imgflip) [LI\\ +Create memes with Imgflip](https://docs.arcade.dev/mcp-servers/entertainment/imgflip) [LI\\ \\ Linear\\ \\ Arcade Optimized Toolkit\\ \\ -Manage issues and projects with your agents.](https://docs.arcade.dev/toolkits/productivity/linear) [LI\\ +Manage issues and projects with your agents.](https://docs.arcade.dev/mcp-servers/productivity/linear) [LI\\ \\ LinkedIn\\ \\ Arcade Optimized Toolkit\\ \\ -Connect and interact with LinkedIn's professional network through your agents](https://docs.arcade.dev/toolkits/social-communication/linkedin) [MI\\ +Connect and interact with LinkedIn's professional network through your agents](https://docs.arcade.dev/mcp-servers/social-communication/linkedin) [MI\\ \\ Microsoft SharePoint\\ \\ Arcade Optimized Toolkit\\ \\ -Manage SharePoint sites, lists, drives, and files with your agents.](https://docs.arcade.dev/toolkits/productivity/sharepoint) [MI\\ +Manage SharePoint sites, lists, drives, and files with your agents.](https://docs.arcade.dev/mcp-servers/productivity/sharepoint) [MI\\ \\ Microsoft Teams\\ \\ Arcade Optimized Toolkit\\ \\ -Manage teams, messages, chats, and channels with your agents.](https://docs.arcade.dev/toolkits/social-communication/microsoft_teams) [NO\\ +Manage teams, messages, chats, and channels with your agents.](https://docs.arcade.dev/mcp-servers/social-communication/microsoft_teams) [NO\\ \\ Notion\\ \\ Arcade Optimized Toolkit\\ \\ -Create, read, and search Notion pages](https://docs.arcade.dev/toolkits/productivity/notion) [OU\\ +Create, read, and search Notion pages](https://docs.arcade.dev/mcp-servers/productivity/notion) [OU\\ \\ Outlook Calendar\\ \\ Arcade Optimized Toolkit\\ \\ -Manage Outlook calendar with your agents](https://docs.arcade.dev/toolkits/productivity/outlook_calendar) [OU\\ +Manage Outlook calendar with your agents](https://docs.arcade.dev/mcp-servers/productivity/outlook_calendar) [OU\\ \\ Outlook Mail\\ \\ Arcade Optimized Toolkit\\ \\ -Manage Outlook emails with your agents](https://docs.arcade.dev/toolkits/productivity/outlook_mail) [RE\\ +Manage Outlook emails with your agents](https://docs.arcade.dev/mcp-servers/productivity/outlook_mail) [RE\\ \\ Reddit\\ \\ Arcade Optimized Toolkit\\ \\ -Interact with Reddit with your agents](https://docs.arcade.dev/toolkits/social-communication/reddit) [SA\\ +Interact with Reddit with your agents](https://docs.arcade.dev/mcp-servers/social-communication/reddit) [SA\\ \\ Salesforce\\ \\ Arcade Optimized Toolkit\\ \\ -Manage customer relationships and sales with your agents.](https://docs.arcade.dev/toolkits/sales/salesforce) [SL\\ +Manage customer relationships and sales with your agents.](https://docs.arcade.dev/mcp-servers/sales/salesforce) [SL\\ \\ Slack\\ \\ Arcade Optimized Toolkit\\ \\ -Send and receive messages to Slack channels and users with agents](https://docs.arcade.dev/toolkits/social-communication/slack) [SP\\ +Send and receive messages to Slack channels and users with agents](https://docs.arcade.dev/mcp-servers/social-communication/slack) [SP\\ \\ Spotify\\ \\ Arcade Optimized Toolkit\\ \\ -Control music playback and manage playlists on Spotify](https://docs.arcade.dev/toolkits/entertainment/spotify) [ST\\ +Control music playback and manage playlists on Spotify](https://docs.arcade.dev/mcp-servers/entertainment/spotify) [ST\\ \\ Stripe\\ \\ Arcade Optimized Toolkit\\ \\ -Process payments and manage subscriptions with your agents.](https://docs.arcade.dev/toolkits/payments/stripe) [WA\\ +Process payments and manage subscriptions with your agents.](https://docs.arcade.dev/mcp-servers/payments/stripe) [WA\\ \\ Walmart Search\\ \\ Arcade Optimized Toolkit\\ \\ -Search and get details about products listed on Walmart.](https://docs.arcade.dev/toolkits/search/walmart) [X\\ +Search and get details about products listed on Walmart.](https://docs.arcade.dev/mcp-servers/search/walmart) [X\\ \\ X\\ \\ Arcade Optimized Toolkit\\ \\ -Integrate agents with X (Twitter), including tweets, users, and more](https://docs.arcade.dev/toolkits/social-communication/x) [YO\\ +Integrate agents with X (Twitter), including tweets, users, and more](https://docs.arcade.dev/mcp-servers/social-communication/x) [YO\\ \\ Youtube Search\\ \\ Arcade Optimized Toolkit\\ \\ -Search and get details about YouTube videos.](https://docs.arcade.dev/toolkits/search/youtube) [ZE\\ +Search and get details about YouTube videos.](https://docs.arcade.dev/mcp-servers/search/youtube) [ZE\\ \\ Zendesk\\ \\ Arcade Optimized Toolkit\\ \\ -Manage customer support and service with your agents.](https://docs.arcade.dev/toolkits/customer-support/zendesk) [ZO\\ +Manage customer support and service with your agents.](https://docs.arcade.dev/mcp-servers/customer-support/zendesk) [ZO\\ \\ Zoom\\ \\ Arcade Optimized Toolkit\\ \\ -Join and manage Zoom meetings with your agents](https://docs.arcade.dev/toolkits/social-communication/zoom) [TW\\ +Join and manage Zoom meetings with your agents](https://docs.arcade.dev/mcp-servers/social-communication/zoom) [TW\\ \\ Twilio\\ \\ Verified Toolkit\\ \\ -Send SMS and WhatsApp messages through Twilio's platform](https://docs.arcade.dev/toolkits/social-communication/twilio/readme) [CL\\ +Send SMS and WhatsApp messages through Twilio's platform](https://docs.arcade.dev/mcp-servers/social-communication/twilio/readme) [CL\\ \\ Clickhouse\\ \\ Community Toolkit\\ \\ -Interact with Clickhouse databases with your agents.](https://docs.arcade.dev/toolkits/databases/clickhouse) [CL\\ +Interact with Clickhouse databases with your agents.](https://docs.arcade.dev/mcp-servers/databases/clickhouse) [CL\\ \\ Close.io\\ \\ Community Toolkit\\ \\ -Manage leads, contacts, and deals in Close.io CRM](https://docs.arcade.dev/toolkits/productivity/closeio) [DI\\ +Manage leads, contacts, and deals in Close.io CRM](https://docs.arcade.dev/mcp-servers/productivity/closeio) [DI\\ \\ Discord\\ \\ Auth Provider\\ \\ -Manage Discord servers, channels, and more with your agents](https://docs.arcade.dev/toolkits/social-communication/discord) [JI\\ +Manage Discord servers, channels, and more with your agents](https://docs.arcade.dev/mcp-servers/social-communication/discord) [JI\\ \\ Jira\\ \\ Auth Provider\\ \\ -Manage Jira projects, issues, and more with your agents](https://docs.arcade.dev/toolkits/productivity/jira) [MO\\ +Manage Jira projects, issues, and more with your agents](https://docs.arcade.dev/mcp-servers/productivity/jira) [MO\\ \\ MongoDB\\ \\ Community Toolkit\\ \\ -Interact with MongoDB databases with your agents.](https://docs.arcade.dev/toolkits/databases/mongodb) [OB\\ +Interact with MongoDB databases with your agents.](https://docs.arcade.dev/mcp-servers/databases/mongodb) [OB\\ \\ Obsidian\\ \\ Community Toolkit\\ \\ -Create, edit, and manage Obsidian notes](https://docs.arcade.dev/toolkits/productivity/obsidian) [PO\\ +Create, edit, and manage Obsidian notes](https://docs.arcade.dev/mcp-servers/productivity/obsidian) [PO\\ \\ Postgres\\ \\ Community Toolkit\\ \\ -Interact with PostgreSQL databases with your agents.](https://docs.arcade.dev/toolkits/databases/postgres) [SL\\ +Interact with PostgreSQL databases with your agents.](https://docs.arcade.dev/mcp-servers/databases/postgres) [SL\\ \\ Slack API\\ \\ Arcade Starter Toolkit\\ \\ -Enable LLMs to interact with the low-level Slack API](https://docs.arcade.dev/toolkits/social-communication/slack_api) [TW\\ +Enable LLMs to interact with the low-level Slack API](https://docs.arcade.dev/mcp-servers/social-communication/slack_api) [TW\\ \\ Twitch\\ \\ Auth Provider\\ \\ -Create clips, get videos, and more from Twitch with your agents](https://docs.arcade.dev/toolkits/entertainment/twitch) +Create clips, get videos, and more from Twitch with your agents](https://docs.arcade.dev/mcp-servers/entertainment/twitch) AD @@ -3874,7 +3874,7 @@ Coming Soon Manage accounting and finances with your agents. -[Asana](https://docs.arcade.dev/toolkits/productivity/asana "Asana") +[Asana](https://docs.arcade.dev/mcp-servers/productivity/asana "Asana") Frame @@ -3912,7 +3912,7 @@ With Arcade, developers can now create agents that can _act as the end users of ### Auth permissions and scopes [Permalink for this section](https://docs.arcade.dev/home/auth/how-arcade-helps\#auth-permissions-and-scopes) -Each tool in Arcade’s toolkits has a set of required permissions - or, more commonly referred to in OAuth2, **scopes**. For example, the [`Gmail.SendEmail`](https://docs.arcade.dev/toolkits/productivity/gmail#gmailsendemail) tool requires the [`https://www.googleapis.com/auth/gmail.send`](https://developers.google.com/identity/protocols/oauth2/scopes#gmail) scope. +Each tool in Arcade’s toolkits has a set of required permissions - or, more commonly referred to in OAuth2, **scopes**. For example, the [`Gmail.SendEmail`](https://docs.arcade.dev/mcp-servers/productivity/gmail#gmailsendemail) tool requires the [`https://www.googleapis.com/auth/gmail.send`](https://developers.google.com/identity/protocols/oauth2/scopes#gmail) scope. A scope is what the user has authorized someone else (in this case, the AI agent) to do on their behalf. In any OAuth2-compatible service, each kind of action requires a different set of permissions. This gives the user fine-grained control over what data third-party services can access and what actions can be executed in their accounts. @@ -3924,7 +3924,7 @@ To learn how Arcade allows for actions (tools) to be authorized through OAuth2 a ### Tools that don’t require authorization [Permalink for this section](https://docs.arcade.dev/home/auth/how-arcade-helps\#tools-that-dont-require-authorization) -Some tools, like [`GoogleSearch.Search`](https://docs.arcade.dev/toolkits/search/google_search#googlesearchsearch), allow AI agents to retrieve information or perform actions without needing user-specific authorization. +Some tools, like [`GoogleSearch.Search`](https://docs.arcade.dev/mcp-servers/search/google_search#googlesearchsearch), allow AI agents to retrieve information or perform actions without needing user-specific authorization. PythonJavaScript @@ -3953,7 +3953,7 @@ This will be shown if an incident or maintenance is posted on your status page. [View latest updates](https://status.arcade.dev/?utm_source=embed) ## Dropbox Toolkit Integration -[Integrations](https://docs.arcade.dev/toolkits "Integrations") [Productivity & Docs](https://docs.arcade.dev/toolkits/productivity/asana "Productivity & Docs") DropboxDropbox +[Integrations](https://docs.arcade.dev/toolkits "Integrations") [Productivity & Docs](https://docs.arcade.dev/mcp-servers/productivity/asana "Productivity & Docs") DropboxDropbox # Dropbox @@ -3961,19 +3961,19 @@ This will be shown if an incident or maintenance is posted on your status page. **Author:** Arcade -**Code:** [GitHub](https://github.com/ArcadeAI/arcade-ai/tree/main/toolkits/dropbox) +**Code:** [GitHub](https://github.com/ArcadeAI/arcade-ai/tree/main/mcp-servers/dropbox) **Auth:** User authorization [![PyPI Version](https://img.shields.io/pypi/v/arcade_dropbox)](https://pypi.org/project/arcade_dropbox/)[![License](https://img.shields.io/badge/License-MIT-yellow.svg)](https://github.com/arcadeai/arcade-ai/blob/main/LICENSE)[![Python Versions](https://img.shields.io/pypi/pyversions/arcade_dropbox)](https://pypi.org/project/arcade_dropbox/)[![Wheel Status](https://img.shields.io/pypi/wheel/arcade_dropbox)](https://pypi.org/project/arcade_dropbox/)[![Downloads](https://img.shields.io/pypi/dm/arcade_dropbox)](https://pypi.org/project/arcade_dropbox/) -The Arcade Dropbox toolkit provides a pre-built set of tools for interacting with Dropbox. These tools make it easy to build agents and AI apps that can: +The Arcade Dropbox MCP Server provides a pre-built set of tools for interacting with Dropbox. These tools make it easy to build agents and AI apps that can: - Browse files and folders - Search for files and folders - Download files -## Available Tools [Permalink for this section](https://docs.arcade.dev/toolkits/productivity/dropbox/dropbox\#available-tools) +## Available Tools [Permalink for this section](https://docs.arcade.dev/mcp-servers/productivity/dropbox/dropbox\#available-tools) | Tool Name | Description | | --- | --- | @@ -3983,9 +3983,9 @@ The Arcade Dropbox toolkit provides a pre-built set of tools for interacting wit 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](https://docs.arcade.dev/home/build-tools/create-a-toolkit). +own tools](https://docs.arcade.dev/home/build-tools/create-a-mcp-server). -## Dropbox.ListItemsInFolder [Permalink for this section](https://docs.arcade.dev/toolkits/productivity/dropbox/dropbox\#dropboxlistitemsinfolder) +## Dropbox.ListItemsInFolder [Permalink for this section](https://docs.arcade.dev/mcp-servers/productivity/dropbox/dropbox\#dropboxlistitemsinfolder) See Example > @@ -3997,7 +3997,7 @@ List all items in a folder. - **limit** _(int, optional, Defaults to `100`)_ Maximum number of items to return. Defaults to 100. Maximum allowed is 2000. - **cursor** _(string, optional)_ A cursor to use for pagination. Defaults to `None`. -## Dropbox.SearchFilesAndFolders [Permalink for this section](https://docs.arcade.dev/toolkits/productivity/dropbox/dropbox\#dropboxsearchfilesandfolders) +## Dropbox.SearchFilesAndFolders [Permalink for this section](https://docs.arcade.dev/mcp-servers/productivity/dropbox/dropbox\#dropboxsearchfilesandfolders) See Example > @@ -4007,11 +4007,11 @@ Search for files and folders in Dropbox. - **keywords** _(string, required)_ The keywords to search for. E.g. β€˜quarterly report’ - **search\_in\_folder\_path** _(string, optional)_ Restricts the search to the specified folder path. E.g. β€˜/My Documents/My Folder’. Defaults to `None` (search in the entire Dropbox). -- **filter\_by\_category** _(list of enum [DropboxItemCategory](https://docs.arcade.dev/toolkits/productivity/dropbox/reference#dropboxitemcategory), optional)_ Restricts the search to the specified category(ies) of items. Defaults to `None` (returns all items). +- **filter\_by\_category** _(list of enum [DropboxItemCategory](https://docs.arcade.dev/mcp-servers/productivity/dropbox/reference#dropboxitemcategory), optional)_ Restricts the search to the specified category(ies) of items. Defaults to `None` (returns all items). - **limit** _(int, optional, Defaults to `100`)_ Maximum number of items to return. Defaults to 100. Maximum allowed is 2000. - **cursor** _(string, optional)_ A cursor to use for pagination. Defaults to `None`. -## Dropbox.DownloadFile [Permalink for this section](https://docs.arcade.dev/toolkits/productivity/dropbox/dropbox\#dropboxdownloadfile) +## Dropbox.DownloadFile [Permalink for this section](https://docs.arcade.dev/mcp-servers/productivity/dropbox/dropbox\#dropboxdownloadfile) See Example > @@ -4024,7 +4024,7 @@ Download a file from Dropbox. Note: to call this tool, you must provide either `file_path` or `file_id`. -## Auth [Permalink for this section](https://docs.arcade.dev/toolkits/productivity/dropbox/dropbox\#auth) +## Auth [Permalink for this section](https://docs.arcade.dev/mcp-servers/productivity/dropbox/dropbox\#auth) The Arcade Dropbox toolkit uses the [Dropbox auth provider](https://docs.arcade.dev/home/auth-providers/dropbox) to connect to users’ Dropbox accounts. @@ -4046,7 +4046,7 @@ Arcade tools can be self-hosted on your own infrastructure. Learn more about sel pip install arcade_dropbox\\ ```](https://docs.arcade.dev/home/hosting-overview) -[Confluence](https://docs.arcade.dev/toolkits/productivity/confluence "Confluence") [Reference](https://docs.arcade.dev/toolkits/productivity/dropbox/reference "Reference") +[Confluence](https://docs.arcade.dev/mcp-servers/productivity/confluence "Confluence") [Reference](https://docs.arcade.dev/mcp-servers/productivity/dropbox/reference "Reference") Frame @@ -4168,9 +4168,9 @@ token = auth_response.context.token ## Using Linear auth in custom tools [Permalink for this section](https://docs.arcade.dev/home/auth-providers/linear\#using-linear-auth-in-custom-tools) -You can use the pre-built [Arcade Linear toolkit](https://docs.arcade.dev/toolkits/productivity/linear) to quickly build agents and AI apps that interact with Linear. +You can use the pre-built [Arcade Linear toolkit](https://docs.arcade.dev/mcp-servers/productivity/linear) to quickly build agents and AI apps that interact with Linear. -If the pre-built tools in the Linear toolkit don’t meet your needs, you can author your own [custom tools](https://docs.arcade.dev/home/build-tools/create-a-toolkit) that interact with the Linear API. +If the pre-built tools in the Linear toolkit don’t meet your needs, you can author your own [custom tools](https://docs.arcade.dev/home/build-tools/create-a-mcp-server) that interact with the Linear API. Use the `Linear()` auth class to specify that a tool requires authorization with Linear. The `context.authorization.token` field will be automatically populated with the user’s Linear token: @@ -4354,7 +4354,7 @@ This will be shown if an incident or maintenance is posted on your status page. ## What if I need a Tool that Arcade doesn’t have? [Permalink for this section](https://docs.arcade.dev/home/faq\#what-if-i-need-a-tool-that-arcade-doesnt-have) -Arcade makes it easy to build your own tools! You can fork our existing tools, or build your own from scratch. Learn more about [building your own toolkit](https://docs.arcade.dev/home/build-tools/create-a-toolkit). +Arcade makes it easy to build your own tools! You can fork our existing tools, or build your own from scratch. Learn more about [building your own toolkit](https://docs.arcade.dev/home/build-tools/create-a-mcp-server). ## How do I contribute back a Tool to the Registry? [Permalink for this section](https://docs.arcade.dev/home/faq\#how-do-i-contribute-back-a-tool-to-the-registry) @@ -4599,7 +4599,7 @@ For a full list of available toolkits, visit the [Arcade Toolkits](https://docs. Ready to start building with Arcade and OpenAI Agents? Check out these guides: - [Using Arcade tools](https://docs.arcade.dev/home/google-adk/use-arcade-tools) \- Learn the basics of using Arcade tools with Google ADK -- [Creating custom tools](https://docs.arcade.dev/home/build-tools/create-a-toolkit) \- Build your own tools with the Arcade Tool SDK +- [Creating custom tools](https://docs.arcade.dev/home/build-tools/create-a-mcp-server) \- Build your own tools with the Arcade Tool SDK Enjoy exploring Arcade and building powerful AI-enabled applications! @@ -4625,7 +4625,7 @@ We’ll create evaluation cases to test our `hello` tool and measure its perform ### Prerequisites [Permalink for this section](https://docs.arcade.dev/home/evaluate-tools/create-an-evaluation-suite\#prerequisites) -- [Build a custom tool](https://docs.arcade.dev/home/build-tools/create-a-toolkit) +- [Build a custom tool](https://docs.arcade.dev/home/build-tools/create-a-mcp-server) - Install the evaluation dependencies: uvpip @@ -4899,7 +4899,7 @@ This will be shown if an incident or maintenance is posted on your status page. [View latest updates](https://status.arcade.dev/?utm_source=embed) ## ClickUp Toolkit -[Integrations](https://docs.arcade.dev/toolkits "Integrations") [Productivity & Docs](https://docs.arcade.dev/toolkits/productivity/asana "Productivity & Docs") Clickup +[Integrations](https://docs.arcade.dev/toolkits "Integrations") [Productivity & Docs](https://docs.arcade.dev/mcp-servers/productivity/asana "Productivity & Docs") Clickup # Clickup @@ -4911,7 +4911,7 @@ This will be shown if an incident or maintenance is posted on your status page. [![PyPI Version](https://img.shields.io/pypi/v/arcade_clickup)](https://pypi.org/project/arcade_clickup/)[![License](https://img.shields.io/badge/License-MIT-yellow.svg)](https://github.com/arcadeai/arcade-ai/blob/main/LICENSE)[![Python Versions](https://img.shields.io/pypi/pyversions/arcade_clickup)](https://pypi.org/project/arcade_clickup/)[![Wheel Status](https://img.shields.io/pypi/wheel/arcade_clickup)](https://pypi.org/project/arcade_clickup/)[![Downloads](https://img.shields.io/pypi/dm/arcade_clickup)](https://pypi.org/project/arcade_clickup/) -The ClickUp toolkit provides tools to interact with ClickUp workspaces, projects (spaces/folders/lists), tasks, comments, and members. It enables building agents and apps that can: +The ClickUp MCP Server provides tools to interact with ClickUp workspaces, projects (spaces/folders/lists), tasks, comments, and members. It enables building agents and apps that can: - Discover workspace structure and users. - Create, view, and modify tasks. @@ -4920,7 +4920,7 @@ The ClickUp toolkit provides tools to interact with ClickUp workspaces, projects - Search for containers and people by approximate name when location is unknown. - Retrieve guidance for agent decision-making. -## Available Tools [Permalink for this section](https://docs.arcade.dev/toolkits/productivity/clickup\#available-tools) +## Available Tools [Permalink for this section](https://docs.arcade.dev/mcp-servers/productivity/clickup\#available-tools) | Tool Name | Description | | --- | --- | @@ -4951,9 +4951,9 @@ The ClickUp toolkit provides tools to interact with ClickUp workspaces, projects 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](https://docs.arcade.dev/home/build-tools/create-a-toolkit). +own tools](https://docs.arcade.dev/home/build-tools/create-a-mcp-server). -## Clickup.GetTaskCommentReplies [Permalink for this section](https://docs.arcade.dev/toolkits/productivity/clickup\#clickupgettaskcommentreplies) +## Clickup.GetTaskCommentReplies [Permalink for this section](https://docs.arcade.dev/mcp-servers/productivity/clickup\#clickupgettaskcommentreplies) See Example > @@ -4965,7 +4965,7 @@ Get threaded replies for a specific ClickUp comment with pagination support. - **offset** ( `integer`, optional) Starting position for offset-based retrieval (default: 0) - **limit** ( `integer`, optional) Maximum number of replies to return (max: 50, default: 20) -## Clickup.CreateTaskCommentReply [Permalink for this section](https://docs.arcade.dev/toolkits/productivity/clickup\#clickupcreatetaskcommentreply) +## Clickup.CreateTaskCommentReply [Permalink for this section](https://docs.arcade.dev/mcp-servers/productivity/clickup\#clickupcreatetaskcommentreply) See Example > @@ -4977,7 +4977,7 @@ Create a new threaded reply to an existing ClickUp comment. - **reply\_text** ( `string`, required) The text content of the reply - **assignee\_id** ( `integer`, optional) User ID to assign the reply to -## Clickup.CreateTask [Permalink for this section](https://docs.arcade.dev/toolkits/productivity/clickup\#clickupcreatetask) +## Clickup.CreateTask [Permalink for this section](https://docs.arcade.dev/mcp-servers/productivity/clickup\#clickupcreatetask) See Example > @@ -4988,14 +4988,14 @@ Create a new task in a ClickUp list with optional planning metadata. - **list\_id** ( `string`, required) The ClickUp list ID where the task will be created - **task\_title** ( `string`, required) The name/title of the task - **description** ( `string`, optional) The description/content of the task -- **priority** ( `Enum` [TaskPriority](https://docs.arcade.dev/toolkits/productivity/clickup/reference#TaskPriority), optional) Task priority +- **priority** ( `Enum` [TaskPriority](https://docs.arcade.dev/mcp-servers/productivity/clickup/reference#TaskPriority), optional) Task priority - **status** ( `string`, optional) Task status label (string) - **parent\_task\_id** ( `string`, optional) The parent task ID if this is a subtask - **start\_date** ( `string`, optional) Date string in format YYYY-MM-DD or YYYY-MM-DD HH:MM\[:SS\]; ISO-8601 also supported - **due\_date** ( `string`, optional) Date string in format YYYY-MM-DD or YYYY-MM-DD HH:MM\[:SS\]; ISO-8601 also supported - **sprint\_points** ( `integer`, optional) The sprint points for the task -## Clickup.GetTaskById [Permalink for this section](https://docs.arcade.dev/toolkits/productivity/clickup\#clickupgettaskbyid) +## Clickup.GetTaskById [Permalink for this section](https://docs.arcade.dev/mcp-servers/productivity/clickup\#clickupgettaskbyid) See Example > @@ -5007,7 +5007,7 @@ Get detailed information about a specific task by its ID. Also supports custom t - **include\_subtasks** ( `boolean`, optional) Include subtask information (default: false ) - **workspace\_id\_for\_custom\_id** ( `string`, optional) The ClickUp workspace ID (provide this to use custom task IDs) -## Clickup.UpdateTask [Permalink for this section](https://docs.arcade.dev/toolkits/productivity/clickup\#clickupupdatetask) +## Clickup.UpdateTask [Permalink for this section](https://docs.arcade.dev/mcp-servers/productivity/clickup\#clickupupdatetask) See Example > @@ -5018,14 +5018,14 @@ Update one or more fields of an existing ClickUp task. - **task\_id** ( `string`, required) The ClickUp task ID to update - **task\_title** ( `string`, optional) The new name/title of the task - **description** ( `string`, optional) The new description/content of the task -- **priority** ( `Enum` [TaskPriority](https://docs.arcade.dev/toolkits/productivity/clickup/reference#TaskPriority), optional) Task priority +- **priority** ( `Enum` [TaskPriority](https://docs.arcade.dev/mcp-servers/productivity/clickup/reference#TaskPriority), optional) Task priority - **status** ( `string`, optional) Task status label (string) - **parent\_task\_id** ( `string`, optional) The new parent task ID - **start\_date** ( `string`, optional) Date string in format YYYY-MM-DD or YYYY-MM-DD HH:MM\[:SS\]; ISO-8601 also supported - **due\_date** ( `string`, optional) Date string in format YYYY-MM-DD or YYYY-MM-DD HH:MM\[:SS\]; ISO-8601 also supported - **sprint\_points** ( `integer`, optional) The new sprint points for the task -## Clickup.GetTasksByScope [Permalink for this section](https://docs.arcade.dev/toolkits/productivity/clickup\#clickupgettasksbyscope) +## Clickup.GetTasksByScope [Permalink for this section](https://docs.arcade.dev/mcp-servers/productivity/clickup\#clickupgettasksbyscope) See Example > @@ -5034,11 +5034,11 @@ Get filtered tasks from ClickUp with advanced filtering options. **Parameters** - **workspace\_id** ( `string`, required) The ClickUp workspace ID for GUI URL generation (should be a number) -- **scope** ( `Enum` [FilterScope](https://docs.arcade.dev/toolkits/productivity/clickup/reference#FilterScope), required) The scope to filter tasks by (all, spaces, folders, or lists) +- **scope** ( `Enum` [FilterScope](https://docs.arcade.dev/mcp-servers/productivity/clickup/reference#FilterScope), required) The scope to filter tasks by (all, spaces, folders, or lists) - **item\_ids** ( `array[string]`, optional) List of IDs to get tasks from (required for spaces/folders/lists, ignored for β€˜all’) - **offset** ( `integer`, optional) Starting position for offset-based retrieval (default: 0) - **limit** ( `integer`, optional) Maximum number of tasks to return (max: 50, default: 20) -- **order\_by** ( `Enum` [TaskOrderBy](https://docs.arcade.dev/toolkits/productivity/clickup/reference#TaskOrderBy), optional) Field to sort tasks by +- **order\_by** ( `Enum` [TaskOrderBy](https://docs.arcade.dev/mcp-servers/productivity/clickup/reference#TaskOrderBy), optional) Field to sort tasks by - **should\_sort\_by\_reverse** ( `boolean`, optional) Whether to sort in descending order (default: False) - **statuses** ( `array[string]`, optional) List of status strings to filter by - **include\_closed** ( `boolean`, optional) Whether to include closed tasks (default: False) @@ -5047,7 +5047,7 @@ Get filtered tasks from ClickUp with advanced filtering options. - **date\_created\_gt** ( `string`, optional) Created date greater than (date string in format YYYY-MM-DD or YYYY-MM-DD HH:MM\[:SS\]) - **date\_created\_lt** ( `string`, optional) Created date less than (date string in format YYYY-MM-DD or YYYY-MM-DD HH:MM\[:SS\]) -## Clickup.GetTasksByAssignees [Permalink for this section](https://docs.arcade.dev/toolkits/productivity/clickup\#clickupgettasksbyassignees) +## Clickup.GetTasksByAssignees [Permalink for this section](https://docs.arcade.dev/mcp-servers/productivity/clickup\#clickupgettasksbyassignees) See Example > @@ -5059,7 +5059,7 @@ Get filtered tasks assigned to specific team members with advanced filtering opt - **assignees\_ids** ( `array[integer]`, required) List of assignee user IDs to get tasks for - **offset** ( `integer`, optional) Starting position for offset-based retrieval (default: 0) - **limit** ( `integer`, optional) Maximum number of tasks to return (max: 50, default: 20) -- **order\_by** ( `Enum` [TaskOrderBy](https://docs.arcade.dev/toolkits/productivity/clickup/reference#TaskOrderBy), optional) Field to sort tasks by +- **order\_by** ( `Enum` [TaskOrderBy](https://docs.arcade.dev/mcp-servers/productivity/clickup/reference#TaskOrderBy), optional) Field to sort tasks by - **should\_sort\_by\_reverse** ( `boolean`, optional) Whether to sort in descending order (default: False) - **statuses** ( `array[string]`, optional) List of status strings to filter by - **include\_closed** ( `boolean`, optional) Whether to include closed tasks (default: False) @@ -5068,7 +5068,7 @@ Get filtered tasks assigned to specific team members with advanced filtering opt - **date\_created\_gt** ( `string`, optional) Created date greater than (date string in format YYYY-MM-DD or YYYY-MM-DD HH:MM\[:SS\]) - **date\_created\_lt** ( `string`, optional) Created date less than (date string in format YYYY-MM-DD or YYYY-MM-DD HH:MM\[:SS\]) -## Clickup.UpdateTaskAssignees [Permalink for this section](https://docs.arcade.dev/toolkits/productivity/clickup\#clickupupdatetaskassignees) +## Clickup.UpdateTaskAssignees [Permalink for this section](https://docs.arcade.dev/mcp-servers/productivity/clickup\#clickupupdatetaskassignees) See Example > @@ -5080,7 +5080,7 @@ Update task assignees by adding and/or removing specific users. - **assignee\_ids\_to\_add** ( `array[integer]`, optional) List of user IDs to add as assignees - **assignee\_ids\_to\_remove** ( `array[integer]`, optional) List of user IDs to remove from assignees -## Clickup.GetSpaces [Permalink for this section](https://docs.arcade.dev/toolkits/productivity/clickup\#clickupgetspaces) +## Clickup.GetSpaces [Permalink for this section](https://docs.arcade.dev/mcp-servers/productivity/clickup\#clickupgetspaces) See Example > @@ -5093,7 +5093,7 @@ Retrieve spaces from a ClickUp workspace. - **limit** ( `integer`, optional) Maximum number of spaces to return (max: 50, default: 50) - **include\_archived** ( `boolean`, optional) Whether to include archived spaces (default: False) -## Clickup.GetFoldersForSpace [Permalink for this section](https://docs.arcade.dev/toolkits/productivity/clickup\#clickupgetfoldersforspace) +## Clickup.GetFoldersForSpace [Permalink for this section](https://docs.arcade.dev/mcp-servers/productivity/clickup\#clickupgetfoldersforspace) See Example > @@ -5107,7 +5107,7 @@ Retrieve folders (also called directories, project categories, or project areas) - **limit** ( `integer`, optional) Maximum number of folders to return (max: 50, default: 50) - **include\_archived** ( `boolean`, optional) Whether to include archived, inactive, or deleted folders (default: False) -## Clickup.GetListsForFolder [Permalink for this section](https://docs.arcade.dev/toolkits/productivity/clickup\#clickupgetlistsforfolder) +## Clickup.GetListsForFolder [Permalink for this section](https://docs.arcade.dev/mcp-servers/productivity/clickup\#clickupgetlistsforfolder) See Example > @@ -5121,7 +5121,7 @@ Retrieve task lists from a ClickUp folder (when users refer to a folder as a β€œ - **limit** ( `integer`, optional) Maximum number of lists to return (max: 50, default: 50) - **include\_archived** ( `boolean`, optional) Whether to include archived, inactive, or completed lists (default: False) -## Clickup.GetListsForSpace [Permalink for this section](https://docs.arcade.dev/toolkits/productivity/clickup\#clickupgetlistsforspace) +## Clickup.GetListsForSpace [Permalink for this section](https://docs.arcade.dev/mcp-servers/productivity/clickup\#clickupgetlistsforspace) See Example > @@ -5135,7 +5135,7 @@ Retrieve all task lists from a ClickUp space by collecting lists from all folder - **limit** ( `integer`, optional) Maximum number of lists to return (max: 50, default: 50) - **include\_archived** ( `boolean`, optional) Whether to include archived, inactive, or completed lists (default: False) -## Clickup.GetStatusesForList [Permalink for this section](https://docs.arcade.dev/toolkits/productivity/clickup\#clickupgetstatusesforlist) +## Clickup.GetStatusesForList [Permalink for this section](https://docs.arcade.dev/mcp-servers/productivity/clickup\#clickupgetstatusesforlist) See Example > @@ -5145,7 +5145,7 @@ Retrieve the possible task statuses for a specific ClickUp list. - **list\_id** ( `string`, required) The ClickUp list ID to retrieve possible task statuses for -## Clickup.GetMembersForWorkspace [Permalink for this section](https://docs.arcade.dev/toolkits/productivity/clickup\#clickupgetmembersforworkspace) +## Clickup.GetMembersForWorkspace [Permalink for this section](https://docs.arcade.dev/mcp-servers/productivity/clickup\#clickupgetmembersforworkspace) See Example > @@ -5157,7 +5157,7 @@ Retrieve all team members from a specific ClickUp workspace. - **offset** ( `integer`, optional) Starting position for offset-based retrieval (default: 0) - **limit** ( `integer`, optional) Maximum number of members to return (max: 50, default: 50) -## Clickup.WhoAmI [Permalink for this section](https://docs.arcade.dev/toolkits/productivity/clickup\#clickupwhoami) +## Clickup.WhoAmI [Permalink for this section](https://docs.arcade.dev/mcp-servers/productivity/clickup\#clickupwhoami) See Example > @@ -5167,7 +5167,7 @@ Return current user profile and accessible workspaces (teams). This tool does not take any parameters. -## Clickup.GetSystemGuidance [Permalink for this section](https://docs.arcade.dev/toolkits/productivity/clickup\#clickupgetsystemguidance) +## Clickup.GetSystemGuidance [Permalink for this section](https://docs.arcade.dev/mcp-servers/productivity/clickup\#clickupgetsystemguidance) See Example > @@ -5177,7 +5177,7 @@ Return static guidance intended solely to help agents make informed decisions. This tool does not take any parameters. -## Clickup.GetWorkspaceInsights [Permalink for this section](https://docs.arcade.dev/toolkits/productivity/clickup\#clickupgetworkspaceinsights) +## Clickup.GetWorkspaceInsights [Permalink for this section](https://docs.arcade.dev/mcp-servers/productivity/clickup\#clickupgetworkspaceinsights) See Example > @@ -5187,7 +5187,7 @@ Return a brief overview for a workspace using the latest updated tasks to inform - **workspace\_id** ( `string`, required) The ClickUp workspace ID to summarize (should be a number) -## Clickup.GetTaskComments [Permalink for this section](https://docs.arcade.dev/toolkits/productivity/clickup\#clickupgettaskcomments) +## Clickup.GetTaskComments [Permalink for this section](https://docs.arcade.dev/mcp-servers/productivity/clickup\#clickupgettaskcomments) See Example > @@ -5199,7 +5199,7 @@ Get comments for a specific ClickUp task with pagination support. - **limit** ( `integer`, optional) Number of comments to retrieve (max 25, default: 5) - **oldest\_comment\_id** ( `string`, optional) ID of the oldest comment from previous call for pagination -## Clickup.CreateTaskComment [Permalink for this section](https://docs.arcade.dev/toolkits/productivity/clickup\#clickupcreatetaskcomment) +## Clickup.CreateTaskComment [Permalink for this section](https://docs.arcade.dev/mcp-servers/productivity/clickup\#clickupcreatetaskcomment) See Example > @@ -5211,7 +5211,7 @@ Create a new comment on a ClickUp task with optional assignment. - **comment\_text** ( `string`, required) The text content of the comment - **assignee\_id** ( `integer`, optional) User ID to assign the comment to (optional) -## Clickup.UpdateTaskComment [Permalink for this section](https://docs.arcade.dev/toolkits/productivity/clickup\#clickupupdatetaskcomment) +## Clickup.UpdateTaskComment [Permalink for this section](https://docs.arcade.dev/mcp-servers/productivity/clickup\#clickupupdatetaskcomment) See Example > @@ -5223,9 +5223,9 @@ Update an existing comment on a ClickUp task. - **task\_id** ( `string`, required) The ClickUp task ID the comment belongs to - **comment\_text** ( `string`, optional) New text content for the comment (optional) - **assignee\_id** ( `integer`, optional) User ID to assign the comment to (optional) -- **resolution** ( `Enum` [CommentResolution](https://docs.arcade.dev/toolkits/productivity/clickup/reference#CommentResolution), optional) Set comment resolution status (optional) +- **resolution** ( `Enum` [CommentResolution](https://docs.arcade.dev/mcp-servers/productivity/clickup/reference#CommentResolution), optional) Set comment resolution status (optional) -## Clickup.FuzzySearchTasksByName [Permalink for this section](https://docs.arcade.dev/toolkits/productivity/clickup\#clickupfuzzysearchtasksbyname) +## Clickup.FuzzySearchTasksByName [Permalink for this section](https://docs.arcade.dev/mcp-servers/productivity/clickup\#clickupfuzzysearchtasksbyname) See Example > @@ -5244,7 +5244,7 @@ Search for tasks using fuzzy matching on task names. - **list\_ids** ( `array[string]`, optional) Filter by ClickUp list IDs - limit search to specific lists - **limit** ( `integer`, optional) Maximum number of matches to return (max: 50, default: 10) -## Clickup.FuzzySearchListsByName [Permalink for this section](https://docs.arcade.dev/toolkits/productivity/clickup\#clickupfuzzysearchlistsbyname) +## Clickup.FuzzySearchListsByName [Permalink for this section](https://docs.arcade.dev/mcp-servers/productivity/clickup\#clickupfuzzysearchlistsbyname) See Example > @@ -5260,7 +5260,7 @@ Search for lists using fuzzy matching on list names. - **should\_include\_archived** ( `boolean`, optional) Include archived lists (default: false) - **limit** ( `integer`, optional) Maximum number of matches to return (max: 50, default: 10) -## Clickup.FuzzySearchFoldersByName [Permalink for this section](https://docs.arcade.dev/toolkits/productivity/clickup\#clickupfuzzysearchfoldersbyname) +## Clickup.FuzzySearchFoldersByName [Permalink for this section](https://docs.arcade.dev/mcp-servers/productivity/clickup\#clickupfuzzysearchfoldersbyname) See Example > @@ -5275,7 +5275,7 @@ Search for folders using fuzzy matching on folder names. - **should\_include\_archived** ( `boolean`, optional) Include archived folders (default: false) - **limit** ( `integer`, optional) Maximum number of matches to return (max: 50, default: 10) -## Clickup.FuzzySearchMembersByName [Permalink for this section](https://docs.arcade.dev/toolkits/productivity/clickup\#clickupfuzzysearchmembersbyname) +## Clickup.FuzzySearchMembersByName [Permalink for this section](https://docs.arcade.dev/mcp-servers/productivity/clickup\#clickupfuzzysearchmembersbyname) See Example > @@ -5288,36 +5288,36 @@ Search for workspace members using fuzzy matching on member names. - **scan\_size** ( `integer`, optional) Number of members to scan (in increments of 100, max 500 default: 500) - **limit** ( `integer`, optional) Maximum number of matches to return (max: 50, default: 10) -## Reference [Permalink for this section](https://docs.arcade.dev/toolkits/productivity/clickup\#reference) +## Reference [Permalink for this section](https://docs.arcade.dev/mcp-servers/productivity/clickup\#reference) Below is a reference of enumerations used by some of the tools in the Clickup toolkit: -## TaskPriority [Permalink for this section](https://docs.arcade.dev/toolkits/productivity/clickup\#taskpriority) +## TaskPriority [Permalink for this section](https://docs.arcade.dev/mcp-servers/productivity/clickup\#taskpriority) - **URGENT**: `URGENT` - **HIGH**: `HIGH` - **NORMAL**: `NORMAL` - **LOW**: `LOW` -## FilterScope [Permalink for this section](https://docs.arcade.dev/toolkits/productivity/clickup\#filterscope) +## FilterScope [Permalink for this section](https://docs.arcade.dev/mcp-servers/productivity/clickup\#filterscope) - **ALL**: `all` - **SPACES**: `spaces` - **FOLDERS**: `folders` - **LISTS**: `lists` -## TaskOrderBy [Permalink for this section](https://docs.arcade.dev/toolkits/productivity/clickup\#taskorderby) +## TaskOrderBy [Permalink for this section](https://docs.arcade.dev/mcp-servers/productivity/clickup\#taskorderby) - **CREATED**: `created` - **UPDATED**: `updated` - **DUE\_DATE**: `due_date` -## CommentResolution [Permalink for this section](https://docs.arcade.dev/toolkits/productivity/clickup\#commentresolution) +## CommentResolution [Permalink for this section](https://docs.arcade.dev/mcp-servers/productivity/clickup\#commentresolution) - **SET\_AS\_RESOLVED**: `resolved` - **SET\_AS\_UNRESOLVED**: `unresolved` -## Auth [Permalink for this section](https://docs.arcade.dev/toolkits/productivity/clickup\#auth) +## Auth [Permalink for this section](https://docs.arcade.dev/mcp-servers/productivity/clickup\#auth) The Arcade Clickup toolkit uses the [Clickup auth provider](https://docs.arcade.dev/home/auth-providers/clickup) to connect to users’ Clickup accounts. Please refer to the [Clickup auth provider](https://docs.arcade.dev/home/auth-providers/clickup) documentation to learn how to configure auth. @@ -5335,7 +5335,7 @@ Arcade tools can be self-hosted on your own infrastructure. Learn more about sel pip install arcade_clickup\\ ```](https://docs.arcade.dev/home/hosting-overview) -[Reference](https://docs.arcade.dev/toolkits/productivity/outlook_mail/reference "Reference") [Reference](https://docs.arcade.dev/toolkits/productivity/clickup/reference "Reference") +[Reference](https://docs.arcade.dev/mcp-servers/productivity/outlook_mail/reference "Reference") [Reference](https://docs.arcade.dev/mcp-servers/productivity/clickup/reference "Reference") Frame @@ -5347,7 +5347,7 @@ This will be shown if an incident or maintenance is posted on your status page. [View latest updates](https://status.arcade.dev/?utm_source=embed) ## GitHub Toolkit Integration -[Integrations](https://docs.arcade.dev/toolkits "Integrations") [Developer Tools](https://docs.arcade.dev/toolkits/development/e2b "Developer Tools") GitHubGitHub +[Integrations](https://docs.arcade.dev/toolkits "Integrations") [Developer Tools](https://docs.arcade.dev/mcp-servers/development/e2b "Developer Tools") GitHubGitHub # GitHub @@ -5359,13 +5359,13 @@ This will be shown if an incident or maintenance is posted on your status page. [![PyPI Version](https://img.shields.io/pypi/v/arcade_github)](https://pypi.org/project/arcade_github/)[![License](https://img.shields.io/badge/License-MIT-yellow.svg)](https://github.com/arcadeai/arcade-ai/blob/main/LICENSE)[![Python Versions](https://img.shields.io/pypi/pyversions/arcade_github)](https://pypi.org/project/arcade_github/)[![Wheel Status](https://img.shields.io/pypi/wheel/arcade_github)](https://pypi.org/project/arcade_github/)[![Downloads](https://img.shields.io/pypi/dm/arcade_github)](https://pypi.org/project/arcade_github/) -The Arcade GitHub toolkit provides a pre-built set of tools for interacting with GitHub. These tools make it easy to build agents and AI apps that can: +The Arcade GitHub MCP Server provides a pre-built set of tools for interacting with GitHub. These tools make it easy to build agents and AI apps that can: - Access private repositories (with the user’s permission) - Get info about repositories, issues, pull requests, and more - Post issues, comments, and replies as the user -## Available Tools [Permalink for this section](https://docs.arcade.dev/toolkits/development/github/github\#available-tools) +## Available Tools [Permalink for this section](https://docs.arcade.dev/mcp-servers/development/github/github\#available-tools) These tools are currently available in the Arcade GitHub toolkit. @@ -5390,10 +5390,10 @@ These tools are currently available in the Arcade GitHub toolkit. 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](https://docs.arcade.dev/home/build-tools/create-a-toolkit) with the [GitHub auth\\ +own tools](https://docs.arcade.dev/home/build-tools/create-a-mcp-server) with the [GitHub auth\\ provider](https://docs.arcade.dev/home/auth-providers/github#using-github-auth-in-customtools). -## Github.SetStarred [Permalink for this section](https://docs.arcade.dev/toolkits/development/github/github\#githubsetstarred) +## Github.SetStarred [Permalink for this section](https://docs.arcade.dev/mcp-servers/development/github/github\#githubsetstarred) See Example > @@ -5407,7 +5407,7 @@ Star or unstar a GitHub repository. * * * -## Github.ListStargazers [Permalink for this section](https://docs.arcade.dev/toolkits/development/github/github\#githubliststargazers) +## Github.ListStargazers [Permalink for this section](https://docs.arcade.dev/mcp-servers/development/github/github\#githubliststargazers) See Example > @@ -5421,7 +5421,7 @@ List the stargazers of a GitHub repository. * * * -## Github.CreateIssue [Permalink for this section](https://docs.arcade.dev/toolkits/development/github/github\#githubcreateissue) +## Github.CreateIssue [Permalink for this section](https://docs.arcade.dev/mcp-servers/development/github/github\#githubcreateissue) See Example > @@ -5440,7 +5440,7 @@ Create an issue in a GitHub repository. * * * -## Github.CreateIssueComment [Permalink for this section](https://docs.arcade.dev/toolkits/development/github/github\#githubcreateissuecomment) +## Github.CreateIssueComment [Permalink for this section](https://docs.arcade.dev/mcp-servers/development/github/github\#githubcreateissuecomment) See Example > @@ -5456,7 +5456,7 @@ Create a comment on an issue in a GitHub repository. * * * -## Github.ListPullRequests [Permalink for this section](https://docs.arcade.dev/toolkits/development/github/github\#githublistpullrequests) +## Github.ListPullRequests [Permalink for this section](https://docs.arcade.dev/mcp-servers/development/github/github\#githublistpullrequests) See Example > @@ -5466,18 +5466,18 @@ List pull requests in a GitHub repository. - **`owner`** _(string, required)_ The account owner of the repository. The name is not case sensitive. - **`repo`** _(string, required)_ The name of the repository without the .git extension. The name is not case sensitive. -- **`state`** _(enum ( [PRState](https://docs.arcade.dev/toolkits/development/github/reference#prstate)), optional, Defaults to `PRState.OPEN`)_ The state of the pull requests to return. +- **`state`** _(enum ( [PRState](https://docs.arcade.dev/mcp-servers/development/github/reference#prstate)), optional, Defaults to `PRState.OPEN`)_ The state of the pull requests to return. - **`head`** _(string, optional)_ Filter pulls by head user or head organization and branch name in the format of user:ref-name or organization:ref-name. - **`base`** _(string, optional, Defaults to `'main'`)_ Filter pulls by base branch name. -- **`sort`** _(enum ( [PRSortProperty](https://docs.arcade.dev/toolkits/development/github/reference#prsortproperty)), optional, Defaults to `PRSortProperty.CREATED`)_ The property to sort the results by. -- **`direction`** _(enum ( [SortDirection](https://docs.arcade.dev/toolkits/development/github/reference#sortdirection)), optional)_ The direction of the sort. +- **`sort`** _(enum ( [PRSortProperty](https://docs.arcade.dev/mcp-servers/development/github/reference#prsortproperty)), optional, Defaults to `PRSortProperty.CREATED`)_ The property to sort the results by. +- **`direction`** _(enum ( [SortDirection](https://docs.arcade.dev/mcp-servers/development/github/reference#sortdirection)), optional)_ The direction of the sort. - **`per_page`** _(integer, optional, Defaults to `30`)_ The number of results per page (max 100). - **`page`** _(integer, optional, Defaults to `1`)_ The page number of the results to fetch. - **`include_extra_data`** _(boolean, optional, Defaults to `false`)_ If true, return all the data available about the pull requests. This is a large payload and may impact performance - use with caution. * * * -## Github.GetPullRequest [Permalink for this section](https://docs.arcade.dev/toolkits/development/github/github\#githubgetpullrequest) +## Github.GetPullRequest [Permalink for this section](https://docs.arcade.dev/mcp-servers/development/github/github\#githubgetpullrequest) See Example > @@ -5493,7 +5493,7 @@ Get details of a pull request in a GitHub repository. * * * -## Github.UpdatePullRequest [Permalink for this section](https://docs.arcade.dev/toolkits/development/github/github\#githubupdatepullrequest) +## Github.UpdatePullRequest [Permalink for this section](https://docs.arcade.dev/mcp-servers/development/github/github\#githubupdatepullrequest) See Example > @@ -5506,13 +5506,13 @@ Update a pull request in a GitHub repository. - **`pull_number`** _(integer, required)_ The number that identifies the pull request. - **`title`** _(string, optional)_ The title of the pull request. - **`body`** _(string, optional)_ The contents of the pull request. -- **`state`** _(enum ( [PRState](https://docs.arcade.dev/toolkits/development/github/reference#prstate)), optional)_ State of this Pull Request. Either open or closed. +- **`state`** _(enum ( [PRState](https://docs.arcade.dev/mcp-servers/development/github/reference#prstate)), optional)_ State of this Pull Request. Either open or closed. - **`base`** _(string, optional)_ The name of the branch you want your changes pulled into. - **`maintainer_can_modify`** _(boolean, optional)_ Indicates whether maintainers can modify the pull request. * * * -## Github.ListPullRequestCommits [Permalink for this section](https://docs.arcade.dev/toolkits/development/github/github\#githublistpullrequestcommits) +## Github.ListPullRequestCommits [Permalink for this section](https://docs.arcade.dev/mcp-servers/development/github/github\#githublistpullrequestcommits) See Example > @@ -5529,7 +5529,7 @@ List commits (from oldest to newest) on a pull request in a GitHub repository. * * * -## Github.CreateReplyForReviewComment [Permalink for this section](https://docs.arcade.dev/toolkits/development/github/github\#githubcreatereplyforreviewcomment) +## Github.CreateReplyForReviewComment [Permalink for this section](https://docs.arcade.dev/mcp-servers/development/github/github\#githubcreatereplyforreviewcomment) See Example > @@ -5545,7 +5545,7 @@ Create a reply to a review comment for a pull request in a GitHub repository. * * * -## Github.ListReviewCommentsOnPullRequest [Permalink for this section](https://docs.arcade.dev/toolkits/development/github/github\#githublistreviewcommentsonpullrequest) +## Github.ListReviewCommentsOnPullRequest [Permalink for this section](https://docs.arcade.dev/mcp-servers/development/github/github\#githublistreviewcommentsonpullrequest) See Example > @@ -5556,8 +5556,8 @@ List review comments on a pull request in a GitHub repository. - **`owner`** _(string, required)_ The account owner of the repository. The name is not case sensitive. - **`repo`** _(string, required)_ The name of the repository without the .git extension. The name is not case sensitive. - **`pull_number`** _(integer, required)_ The number that identifies the pull request. -- **`sort`** _(enum ( [ReviewCommentSortProperty](https://docs.arcade.dev/toolkits/development/github/reference#reviewcommentsortproperty)), optional, Defaults to `'created'`)_ The property to sort the results by. Can be one of: `created`, `updated`. -- **`direction`** _(enum ( [SortDirection](https://docs.arcade.dev/toolkits/development/github/reference#sortdirection)), optional, Defaults to `'desc'`)_ The direction to sort results. Can be one of: `asc`, `desc`. +- **`sort`** _(enum ( [ReviewCommentSortProperty](https://docs.arcade.dev/mcp-servers/development/github/reference#reviewcommentsortproperty)), optional, Defaults to `'created'`)_ The property to sort the results by. Can be one of: `created`, `updated`. +- **`direction`** _(enum ( [SortDirection](https://docs.arcade.dev/mcp-servers/development/github/reference#sortdirection)), optional, Defaults to `'desc'`)_ The direction to sort results. Can be one of: `asc`, `desc`. - **`since`** _(string, optional)_ Only show results that were last updated after the given time. This is a timestamp in ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ. - **`per_page`** _(integer, optional, Defaults to `30`)_ The number of results per page (max 100). - **`page`** _(integer, optional, Defaults to `1`)_ The page number of the results to fetch. @@ -5565,7 +5565,7 @@ List review comments on a pull request in a GitHub repository. * * * -## Github.CreateReviewComment [Permalink for this section](https://docs.arcade.dev/toolkits/development/github/github\#githubcreatereviewcomment) +## Github.CreateReviewComment [Permalink for this section](https://docs.arcade.dev/mcp-servers/development/github/github\#githubcreatereviewcomment) See Example > @@ -5583,14 +5583,14 @@ If the subject\_type is not β€˜file’, then the start\_line and end\_line param - **`commit_id`** _(string, optional)_ The SHA of the commit needing a comment. If not provided, the latest commit SHA of the PR’s base branch will be used. - **`start_line`** _(integer, optional)_ The start line of the range of lines in the pull request diff that the comment applies to. Required unless β€˜subject\_type’ is β€˜file’. - **`end_line`** _(integer, optional)_ The end line of the range of lines in the pull request diff that the comment applies to. Required unless β€˜subject\_type’ is β€˜file’. -- **`side`** _(enum ( [DiffSide](https://docs.arcade.dev/toolkits/development/github/reference#diffside)), optional, Defaults to `'RIGHT'`)_ The side of the diff that the pull request’s changes appear on. Use LEFT for deletions that appear in red. Use RIGHT for additions that appear in green or unchanged lines that appear in white and are shown for context. +- **`side`** _(enum ( [DiffSide](https://docs.arcade.dev/mcp-servers/development/github/reference#diffside)), optional, Defaults to `'RIGHT'`)_ The side of the diff that the pull request’s changes appear on. Use LEFT for deletions that appear in red. Use RIGHT for additions that appear in green or unchanged lines that appear in white and are shown for context. - **`start_side`** _(string, optional)_ The starting side of the diff that the comment applies to. -- **`subject_type`** _(enum ( [ReviewCommentSubjectType](https://docs.arcade.dev/toolkits/development/github/reference#reviewcommentsubjecttype)), optional, Defaults to `'FILE'`)_ The type of subject that the comment applies to. Can be one of: file, hunk, or line. +- **`subject_type`** _(enum ( [ReviewCommentSubjectType](https://docs.arcade.dev/mcp-servers/development/github/reference#reviewcommentsubjecttype)), optional, Defaults to `'FILE'`)_ The type of subject that the comment applies to. Can be one of: file, hunk, or line. - **`include_extra_data`** _(boolean, optional, Defaults to `false`)_ If true, return all the data available about the review comment. This is a large payload and may impact performance - use with caution. * * * -## Github.CountStargazers [Permalink for this section](https://docs.arcade.dev/toolkits/development/github/github\#githubcountstargazers) +## Github.CountStargazers [Permalink for this section](https://docs.arcade.dev/mcp-servers/development/github/github\#githubcountstargazers) See Example > @@ -5603,7 +5603,7 @@ Count the number of stargazers (stars) for a GitHub repository. * * * -## Github.ListOrgRepositories [Permalink for this section](https://docs.arcade.dev/toolkits/development/github/github\#githublistorgrepositories) +## Github.ListOrgRepositories [Permalink for this section](https://docs.arcade.dev/mcp-servers/development/github/github\#githublistorgrepositories) See Example > @@ -5612,16 +5612,16 @@ List repositories for the specified GitHub organization. **Parameters** - **`org`** _(string, required)_ The organization name. The name is not case sensitive. -- **`repo_type`** _(enum ( [RepoType](https://docs.arcade.dev/toolkits/development/github/reference#repotype)), optional, Defaults to `'ALL'`)_ The types of repositories to return. -- **`sort`** _(enum ( [RepoSortProperty](https://docs.arcade.dev/toolkits/development/github/reference#reposortproperty)), optional, Defaults to `'CREATED'`)_ The property to sort the results by. -- **`sort_direction`** _(enum ( [SortDirection](https://docs.arcade.dev/toolkits/development/github/reference#sortdirection)), optional, Defaults to `'ASC'`)_ The order to sort by. +- **`repo_type`** _(enum ( [RepoType](https://docs.arcade.dev/mcp-servers/development/github/reference#repotype)), optional, Defaults to `'ALL'`)_ The types of repositories to return. +- **`sort`** _(enum ( [RepoSortProperty](https://docs.arcade.dev/mcp-servers/development/github/reference#reposortproperty)), optional, Defaults to `'CREATED'`)_ The property to sort the results by. +- **`sort_direction`** _(enum ( [SortDirection](https://docs.arcade.dev/mcp-servers/development/github/reference#sortdirection)), optional, Defaults to `'ASC'`)_ The order to sort by. - **`per_page`** _(integer, optional, Defaults to `30`)_ The number of results per page. - **`page`** _(integer, optional, Defaults to `1`)_ The page number of the results to fetch. - **`include_extra_data`** _(boolean, optional, Defaults to `false`)_ If true, return all the data available about the repositories. This is a large payload and may impact performance - use with caution. * * * -## Github.GetRepository [Permalink for this section](https://docs.arcade.dev/toolkits/development/github/github\#githubgetrepository) +## Github.GetRepository [Permalink for this section](https://docs.arcade.dev/mcp-servers/development/github/github\#githubgetrepository) See Example > @@ -5635,7 +5635,7 @@ Get detailed information about a GitHub repository. * * * -## Github.ListRepositoryActivities [Permalink for this section](https://docs.arcade.dev/toolkits/development/github/github\#githublistrepositoryactivities) +## Github.ListRepositoryActivities [Permalink for this section](https://docs.arcade.dev/mcp-servers/development/github/github\#githublistrepositoryactivities) See Example > @@ -5645,19 +5645,19 @@ List repository activities such as pushes, merges, force pushes, and branch chan - **`owner`** _(string, required)_ The account owner of the repository. The name is not case sensitive. - **`repo`** _(string, required)_ The name of the repository without the .git extension. The name is not case sensitive. -- **`direction`** _(enum ( [SortDirection](https://docs.arcade.dev/toolkits/development/github/reference#sortdirection)), optional, Defaults to `'DESC'`)_ The direction to sort the results by. +- **`direction`** _(enum ( [SortDirection](https://docs.arcade.dev/mcp-servers/development/github/reference#sortdirection)), optional, Defaults to `'DESC'`)_ The direction to sort the results by. - **`per_page`** _(integer, optional, Defaults to `30`)_ The number of results per page (max 100). - **`before`** _(string, optional)_ A cursor (unique identifier, e.g., a SHA of a commit) to search for results before this cursor. - **`after`** _(string, optional)_ A cursor (unique identifier, e.g., a SHA of a commit) to search for results after this cursor. - **`ref`** _(string, optional)_ The Git reference for the activities you want to list. Can be formatted as `refs/heads/BRANCH_NAME` or just `BRANCH_NAME`. - **`actor`** _(string, optional)_ The GitHub username to filter by the actor who performed the activity. -- **`time_period`** _(enum ( [RepoTimePeriod](https://docs.arcade.dev/toolkits/development/github/reference#repotimeperiod)), optional)_ The time period to filter by. -- **`activity_type`** _(enum ( [ActivityType](https://docs.arcade.dev/toolkits/development/github/reference#activitytype)), optional)_ The activity type to filter by. +- **`time_period`** _(enum ( [RepoTimePeriod](https://docs.arcade.dev/mcp-servers/development/github/reference#repotimeperiod)), optional)_ The time period to filter by. +- **`activity_type`** _(enum ( [ActivityType](https://docs.arcade.dev/mcp-servers/development/github/reference#activitytype)), optional)_ The activity type to filter by. - **`include_extra_data`** _(boolean, optional, Defaults to `false`)_ If true, return all the data available about the activities. This is a large payload and may impact performance - use with caution. * * * -## Github.ListReviewCommentsInARepository [Permalink for this section](https://docs.arcade.dev/toolkits/development/github/github\#githublistreviewcommentsinarepository) +## Github.ListReviewCommentsInARepository [Permalink for this section](https://docs.arcade.dev/mcp-servers/development/github/github\#githublistreviewcommentsinarepository) See Example > @@ -5667,8 +5667,8 @@ List review comments in a GitHub repository. - **`owner`** _(string, required)_ The account owner of the repository. The name is not case sensitive. - **`repo`** _(string, required)_ The name of the repository without the .git extension. The name is not case sensitive. -- **`sort`** _(enum ( [ReviewCommentSortProperty](https://docs.arcade.dev/toolkits/development/github/reference#reviewcommentsortproperty)), optional, Defaults to `'created'`)_ The property to sort the results by. Can be one of: created, updated. -- **`direction`** _(enum ( [SortDirection](https://docs.arcade.dev/toolkits/development/github/reference#sortdirection)), optional, Defaults to `'DESC'`)_ The direction to sort results. Ignored without sort parameter. Can be one of: asc, desc. +- **`sort`** _(enum ( [ReviewCommentSortProperty](https://docs.arcade.dev/mcp-servers/development/github/reference#reviewcommentsortproperty)), optional, Defaults to `'created'`)_ The property to sort the results by. Can be one of: created, updated. +- **`direction`** _(enum ( [SortDirection](https://docs.arcade.dev/mcp-servers/development/github/reference#sortdirection)), optional, Defaults to `'DESC'`)_ The direction to sort results. Ignored without sort parameter. Can be one of: asc, desc. - **`since`** _(string, optional)_ Only show results that were last updated after the given time. This is a timestamp in ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ. - **`per_page`** _(integer, optional, Defaults to `30`)_ The number of results per page (max 100). - **`page`** _(integer, optional, Defaults to `1`)_ The page number of the results to fetch. @@ -5676,7 +5676,7 @@ List review comments in a GitHub repository. * * * -## Auth [Permalink for this section](https://docs.arcade.dev/toolkits/development/github/github\#auth) +## Auth [Permalink for this section](https://docs.arcade.dev/mcp-servers/development/github/github\#auth) The Arcade GitHub toolkit uses the [GitHub auth provider](https://docs.arcade.dev/home/auth-providers/github) to connect to users’ GitHub accounts. @@ -5698,7 +5698,7 @@ Arcade tools can be self-hosted on your own infrastructure. Learn more about sel pip install arcade_github\\ ```](https://docs.arcade.dev/home/hosting-overview) -[E2B](https://docs.arcade.dev/toolkits/development/e2b "E2B") [Reference](https://docs.arcade.dev/toolkits/development/github/reference "Reference") +[E2B](https://docs.arcade.dev/mcp-servers/development/e2b "E2B") [Reference](https://docs.arcade.dev/mcp-servers/development/github/reference "Reference") Frame @@ -5820,7 +5820,7 @@ token = auth_response.context.token ## Using Spotify auth in custom tools [Permalink for this section](https://docs.arcade.dev/home/auth-providers/spotify\#using-spotify-auth-in-custom-tools) -You can author your own [custom tools](https://docs.arcade.dev/home/build-tools/create-a-toolkit) that interact with the Spotify API. +You can author your own [custom tools](https://docs.arcade.dev/home/build-tools/create-a-mcp-server) that interact with the Spotify API. Use the `Spotify()` auth class to specify that a tool requires authorization with Spotify. The `context.authorization.token` field will be automatically populated with the user’s Spotify token: @@ -5869,7 +5869,7 @@ This will be shown if an incident or maintenance is posted on your status page. [View latest updates](https://status.arcade.dev/?utm_source=embed) ## Google Flights Toolkit -[Integrations](https://docs.arcade.dev/toolkits "Integrations") [Search Tools](https://docs.arcade.dev/toolkits/search/google_finance "Search Tools") Google Flights +[Integrations](https://docs.arcade.dev/toolkits "Integrations") [Search Tools](https://docs.arcade.dev/mcp-servers/search/google_finance "Search Tools") Google Flights # Google Flights @@ -5885,13 +5885,13 @@ The Arcade Google Flights toolkit lets you search for flights with ease. Use the - Search for one-way flights. -## Available Tools [Permalink for this section](https://docs.arcade.dev/toolkits/search/google_flights\#available-tools) +## Available Tools [Permalink for this section](https://docs.arcade.dev/mcp-servers/search/google_flights\#available-tools) | Tool Name | Description | | --- | --- | | GoogleFlights.SearchOneWayFlights | Retrieve one-way flight search results using Google Flights. | -## GoogleFlights.SearchOneWayFlights [Permalink for this section](https://docs.arcade.dev/toolkits/search/google_flights\#googleflightssearchonewayflights) +## GoogleFlights.SearchOneWayFlights [Permalink for this section](https://docs.arcade.dev/mcp-servers/search/google_flights\#googleflightssearchonewayflights) Retrieve flight search results for a one-way flight using Google Flights. @@ -5901,15 +5901,15 @@ Retrieve flight search results for a one-way flight using Google Flights. - **`arrival_airport_code`** _(string, required)_: The arrival airport code. An uppercase 3-letter code. - **`outbound_date`** _(string, required)_: Flight departure date in YYYY-MM-DD format. - **`currency_code`** _(string, optional)_: Currency of the returned prices. Defaults to β€˜USD’. -- **`travel_class`** _(enum ( [GoogleFlightsTravelClass](https://docs.arcade.dev/toolkits/search/google_flights#googleflightstravelclass)), optional)_: Travel class of the flight. Defaults to β€˜ECONOMY’. +- **`travel_class`** _(enum ( [GoogleFlightsTravelClass](https://docs.arcade.dev/mcp-servers/search/google_flights#googleflightstravelclass)), optional)_: Travel class of the flight. Defaults to β€˜ECONOMY’. - **`num_adults`** _(int, optional)_: Number of adult passengers. Defaults to 1. - **`num_children`** _(int, optional)_: Number of child passengers. Defaults to 0. -- **`max_stops`** _(enum ( [GoogleFlightsMaxStops](https://docs.arcade.dev/toolkits/search/google_flights#googleflightsmaxstops)), optional)_: Maximum number of stops (layovers) for the flight. Defaults to any number of stops. -- **`sort_by`** _(enum ( [GoogleFlightsSortBy](https://docs.arcade.dev/toolkits/search/google_flights#googleflightssortby)), optional)_: The sorting order of the results. Defaults to TOP\_FLIGHTS. +- **`max_stops`** _(enum ( [GoogleFlightsMaxStops](https://docs.arcade.dev/mcp-servers/search/google_flights#googleflightsmaxstops)), optional)_: Maximum number of stops (layovers) for the flight. Defaults to any number of stops. +- **`sort_by`** _(enum ( [GoogleFlightsSortBy](https://docs.arcade.dev/mcp-servers/search/google_flights#googleflightssortby)), optional)_: The sorting order of the results. Defaults to TOP\_FLIGHTS. See Example > -## Auth [Permalink for this section](https://docs.arcade.dev/toolkits/search/google_flights\#auth) +## Auth [Permalink for this section](https://docs.arcade.dev/mcp-servers/search/google_flights\#auth) The Arcade Google Flights toolkit uses the [SerpAPI](https://serpapi.com/) to search for flights from Google Flights. @@ -5920,9 +5920,9 @@ Setting the `SERP_API_KEY` secret is only required if you are [self-hosting](htt * * * -## Reference [Permalink for this section](https://docs.arcade.dev/toolkits/search/google_flights\#reference) +## Reference [Permalink for this section](https://docs.arcade.dev/mcp-servers/search/google_flights\#reference) -## GoogleFlightsMaxStops [Permalink for this section](https://docs.arcade.dev/toolkits/search/google_flights\#googleflightsmaxstops) +## GoogleFlightsMaxStops [Permalink for this section](https://docs.arcade.dev/mcp-servers/search/google_flights\#googleflightsmaxstops) Defines the maximum number of stops for flights. @@ -5931,7 +5931,7 @@ Defines the maximum number of stops for flights. - **`ONE`**: Only flights with one stop are allowed. - **`TWO`**: Only flights with two stops are allowed. -## GoogleFlightsSortBy [Permalink for this section](https://docs.arcade.dev/toolkits/search/google_flights\#googleflightssortby) +## GoogleFlightsSortBy [Permalink for this section](https://docs.arcade.dev/mcp-servers/search/google_flights\#googleflightssortby) Defines the sorting options for flight search results. @@ -5942,7 +5942,7 @@ Defines the sorting options for flight search results. - **`DURATION`**: Sort by the shortest flight duration. - **`EMISSIONS`**: Sort by the lowest carbon emissions. -## GoogleFlightsTravelClass [Permalink for this section](https://docs.arcade.dev/toolkits/search/google_flights\#googleflightstravelclass) +## GoogleFlightsTravelClass [Permalink for this section](https://docs.arcade.dev/mcp-servers/search/google_flights\#googleflightstravelclass) Defines the travel class options for flights. @@ -5965,7 +5965,7 @@ Arcade tools can be self-hosted on your own infrastructure. Learn more about sel pip install arcade_google_flights\\ ```](https://docs.arcade.dev/home/hosting-overview) -[Google Finance](https://docs.arcade.dev/toolkits/search/google_finance "Google Finance") [Google Hotels](https://docs.arcade.dev/toolkits/search/google_hotels "Google Hotels") +[Google Finance](https://docs.arcade.dev/mcp-servers/search/google_finance "Google Finance") [Google Hotels](https://docs.arcade.dev/mcp-servers/search/google_hotels "Google Hotels") Frame @@ -6066,7 +6066,7 @@ This will be shown if an incident or maintenance is posted on your status page. [View latest updates](https://status.arcade.dev/?utm_source=embed) ## Create Tool with Secrets -[Home](https://docs.arcade.dev/home "Home") [Build tools](https://docs.arcade.dev/home/build-tools/create-a-toolkit "Build tools") Create a tool with secrets +[Home](https://docs.arcade.dev/home "Home") [Build tools](https://docs.arcade.dev/home/build-tools/create-a-mcp-server "Build tools") Create a tool with secrets # Create a tool with secrets @@ -6077,7 +6077,7 @@ Secrets are sensitive strings like passwords, api-keys, or other tokens that gra ### Prerequisites [Permalink for this section](https://docs.arcade.dev/home/build-tools/create-a-tool-with-secrets\#prerequisites) - [Set up Arcade](https://docs.arcade.dev/home/quickstart) -- [Create a toolkit](https://docs.arcade.dev/home/build-tools/create-a-toolkit) +- [Create a toolkit](https://docs.arcade.dev/home/build-tools/create-a-mcp-server) - [Understand Tool Context](https://docs.arcade.dev/home/build-tools/tool-context) ### Set the secret in the Arcade Dashboard [Permalink for this section](https://docs.arcade.dev/home/build-tools/create-a-tool-with-secrets\#set-the-secret-in-the-arcade-dashboard) @@ -6229,7 +6229,7 @@ token = auth_response.context.token ## Using Atlassian auth in custom tools [Permalink for this section](https://docs.arcade.dev/home/auth-providers/atlassian\#using-atlassian-auth-in-custom-tools) -You can author your own [custom tools](https://docs.arcade.dev/home/build-tools/create-a-toolkit) that interact with the Atlassian API. +You can author your own [custom tools](https://docs.arcade.dev/home/build-tools/create-a-mcp-server) that interact with the Atlassian API. Use the `Atlassian()` auth class to specify that a tool requires authorization with Atlassian. The `context.authorization.token` field will be automatically populated with the user’s Atlassian token: @@ -6562,7 +6562,7 @@ This will be shown if an incident or maintenance is posted on your status page. The Hubspot auth provider enables tools and agents to call Hubspot APIs on behalf of a user. Behind the scenes, the Arcade Engine and the Hubspot auth provider seamlessly manage Hubspot OAuth 2.0 authorization for your users. Want to quickly get started with Hubspot services in your agent or AI app? The -pre-built [Arcade Hubspot toolkit](https://docs.arcade.dev/toolkits/sales/hubspot) is what you want! +pre-built [Arcade Hubspot toolkit](https://docs.arcade.dev/mcp-servers/sales/hubspot) is what you want! ## What’s documented here [Permalink for this section](https://docs.arcade.dev/home/auth-providers/hubspot\#whats-documented-here) @@ -6570,7 +6570,7 @@ This page describes how to use and configure Hubspot auth with Arcade. This auth provider is used by: -- The [Arcade Hubspot toolkit](https://docs.arcade.dev/toolkits/sales/hubspot), which provides pre-built tools for interacting with Hubspot +- The [Arcade Hubspot toolkit](https://docs.arcade.dev/mcp-servers/sales/hubspot), which provides pre-built tools for interacting with Hubspot - Your [app code](https://docs.arcade.dev/home/auth-providers/hubspot#using-hubspot-auth-in-app-code) that needs to call Hubspot APIs - Or, your [custom tools](https://docs.arcade.dev/home/auth-providers/hubspot#using-hubspot-auth-in-custom-tools) that need to call Hubspot APIs @@ -6578,7 +6578,7 @@ This auth provider is used by: Arcade offers a default Hubspot auth provider that you can use in the Arcade Cloud Platform. In this case, your users will see `Arcade` as the name of the application that’s requesting permission. -If you choose to use Arcade’s Hubspot auth, you don’t need to configure anything. Follow the [Hubspot toolkit examples](https://docs.arcade.dev/toolkits/sales/hubspot) to get started calling Hubspot tools. +If you choose to use Arcade’s Hubspot auth, you don’t need to configure anything. Follow the [Hubspot toolkit examples](https://docs.arcade.dev/mcp-servers/sales/hubspot) to get started calling Hubspot tools. ## Use Your Own Hubspot App Credentials [Permalink for this section](https://docs.arcade.dev/home/auth-providers/hubspot\#use-your-own-hubspot-app-credentials) @@ -6657,9 +6657,9 @@ When you use tools that require Hubspot auth using your Arcade account credentia ## Using the Arcade Hubspot Toolkit [Permalink for this section](https://docs.arcade.dev/home/auth-providers/hubspot\#using-the-arcade-hubspot-toolkit) -The [Arcade Hubspot toolkit](https://docs.arcade.dev/toolkits/sales/hubspot) provides tools to interact with various Hubspot objects, such as companies, contacts, deals, and email messages. +The [Arcade Hubspot toolkit](https://docs.arcade.dev/mcp-servers/sales/hubspot) provides tools to interact with various Hubspot objects, such as companies, contacts, deals, and email messages. -Refer to the [toolkit documentation and examples](https://docs.arcade.dev/toolkits/sales/hubspot) to learn how to use the toolkit to build agents and AI apps that interact with Hubspot services. +Refer to the [toolkit documentation and examples](https://docs.arcade.dev/mcp-servers/sales/hubspot) to learn how to use the toolkit to build agents and AI apps that interact with Hubspot services. ## Using Hubspot auth in app code [Permalink for this section](https://docs.arcade.dev/home/auth-providers/hubspot\#using-hubspot-auth-in-app-code) @@ -6702,7 +6702,7 @@ The scopes supported by the Arcade Hubspot auth provider are the ones [listed ab ## Using Hubspot auth in custom tools [Permalink for this section](https://docs.arcade.dev/home/auth-providers/hubspot\#using-hubspot-auth-in-custom-tools) -You can author your own [custom tools](https://docs.arcade.dev/home/build-tools/create-a-toolkit) that interact with the Hubspot API. +You can author your own [custom tools](https://docs.arcade.dev/home/build-tools/create-a-mcp-server) that interact with the Hubspot API. Use the `Hubspot()` auth class to specify that a tool requires authorization with Hubspot. The authentication token needed to call the Hubspot API is available in the tool context through the `context.get_auth_token_or_empty()` method. @@ -6895,7 +6895,7 @@ token = auth_response.context.token ## Using Zoom auth in custom tools [Permalink for this section](https://docs.arcade.dev/home/auth-providers/zoom\#using-zoom-auth-in-custom-tools) -You can author your own [custom tools](https://docs.arcade.dev/home/build-tools/create-a-toolkit) that interact with the Zoom API. +You can author your own [custom tools](https://docs.arcade.dev/home/build-tools/create-a-mcp-server) that interact with the Zoom API. Use the `Zoom()` auth class to specify that a tool requires authorization with Zoom. The `context.authorization.token` field will be automatically populated with the user’s Zoom token: @@ -6942,7 +6942,7 @@ This will be shown if an incident or maintenance is posted on your status page. [View latest updates](https://status.arcade.dev/?utm_source=embed) ## Microsoft Teams Toolkit -[Integrations](https://docs.arcade.dev/toolkits "Integrations") [Social & Communication](https://docs.arcade.dev/toolkits/social-communication/discord "Social & Communication") Microsoft Teams +[Integrations](https://docs.arcade.dev/toolkits "Integrations") [Social & Communication](https://docs.arcade.dev/mcp-servers/social-communication/discord "Social & Communication") Microsoft Teams # MicrosoftTeams @@ -6954,7 +6954,7 @@ This will be shown if an incident or maintenance is posted on your status page. [![PyPI Version](https://img.shields.io/pypi/v/arcade_microsoft_teams)](https://pypi.org/project/arcade_microsoft_teams/)[![License](https://img.shields.io/badge/License-MIT-yellow.svg)](https://github.com/arcadeai/arcade-ai/blob/main/LICENSE)[![Python Versions](https://img.shields.io/pypi/pyversions/arcade_microsoft_teams)](https://pypi.org/project/arcade_microsoft_teams/)[![Wheel Status](https://img.shields.io/pypi/wheel/arcade_microsoft_teams)](https://pypi.org/project/arcade_microsoft_teams/)[![Downloads](https://img.shields.io/pypi/dm/arcade_microsoft_teams)](https://pypi.org/project/arcade_microsoft_teams/) -The Microsoft Teams toolkit provides a comprehensive set of tools for interacting with Microsoft Teams. Users can efficiently manage teams, channels, and chats, enabling them to: +The Microsoft Teams MCP Server provides a comprehensive set of tools for interacting with Microsoft Teams. Users can efficiently manage teams, channels, and chats, enabling them to: - Retrieve information about teams, channels, and chats. - List, search, and manage users and teams. @@ -6964,7 +6964,7 @@ The Microsoft Teams toolkit provides a comprehensive set of tools for interactin This toolkit streamlines collaboration and communication within Microsoft Teams, making it easier to manage interactions and information flow. -## Available Tools [Permalink for this section](https://docs.arcade.dev/toolkits/social-communication/microsoft_teams\#available-tools) +## Available Tools [Permalink for this section](https://docs.arcade.dev/mcp-servers/social-communication/microsoft_teams\#available-tools) | Tool Name | Description | | --- | --- | @@ -6996,9 +6996,9 @@ This toolkit streamlines collaboration and communication within Microsoft Teams, 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](https://docs.arcade.dev/home/build-tools/create-a-toolkit). +own tools](https://docs.arcade.dev/home/build-tools/create-a-mcp-server). -## MicrosoftTeams.WhoAmI [Permalink for this section](https://docs.arcade.dev/toolkits/social-communication/microsoft_teams\#microsoftteamswhoami) +## MicrosoftTeams.WhoAmI [Permalink for this section](https://docs.arcade.dev/mcp-servers/social-communication/microsoft_teams\#microsoftteamswhoami) See Example > @@ -7008,7 +7008,7 @@ Get information about the current user and their Microsoft Teams environment. This tool does not take any parameters. -## MicrosoftTeams.GetSignedInUser [Permalink for this section](https://docs.arcade.dev/toolkits/social-communication/microsoft_teams\#microsoftteamsgetsignedinuser) +## MicrosoftTeams.GetSignedInUser [Permalink for this section](https://docs.arcade.dev/mcp-servers/social-communication/microsoft_teams\#microsoftteamsgetsignedinuser) See Example > @@ -7018,7 +7018,7 @@ Get the user currently signed in Microsoft Teams. This tool does not take any parameters. -## MicrosoftTeams.ListUsers [Permalink for this section](https://docs.arcade.dev/toolkits/social-communication/microsoft_teams\#microsoftteamslistusers) +## MicrosoftTeams.ListUsers [Permalink for this section](https://docs.arcade.dev/mcp-servers/social-communication/microsoft_teams\#microsoftteamslistusers) See Example > @@ -7029,7 +7029,7 @@ Lists the users in the Microsoft Teams tenant. - **limit** ( `integer`, optional) The maximum number of users to return. Defaults to 50, max is 100. - **offset** ( `integer`, optional) The offset to start from. -## MicrosoftTeams.SearchUsers [Permalink for this section](https://docs.arcade.dev/toolkits/social-communication/microsoft_teams\#microsoftteamssearchusers) +## MicrosoftTeams.SearchUsers [Permalink for this section](https://docs.arcade.dev/mcp-servers/social-communication/microsoft_teams\#microsoftteamssearchusers) See Example > @@ -7038,11 +7038,11 @@ Searches for users in the Microsoft Teams tenant. **Parameters** - **keywords** ( `array[string]`, required) The keywords to match against users’ names. -- **match\_type** ( `Enum` [PartialMatchType](https://docs.arcade.dev/toolkits/social-communication/microsoft_teams/reference#PartialMatchType), optional) The type of match to use for the keywords. Defaults to match\_any\_of\_the\_keywords. +- **match\_type** ( `Enum` [PartialMatchType](https://docs.arcade.dev/mcp-servers/social-communication/microsoft_teams/reference#PartialMatchType), optional) The type of match to use for the keywords. Defaults to match\_any\_of\_the\_keywords. - **limit** ( `integer`, optional) The maximum number of users to return. Defaults to 50, max is 999. - **offset** ( `integer`, optional) The offset to start from. -## MicrosoftTeams.GetChannelMetadata [Permalink for this section](https://docs.arcade.dev/toolkits/social-communication/microsoft_teams\#microsoftteamsgetchannelmetadata) +## MicrosoftTeams.GetChannelMetadata [Permalink for this section](https://docs.arcade.dev/mcp-servers/social-communication/microsoft_teams\#microsoftteamsgetchannelmetadata) See Example > @@ -7054,7 +7054,7 @@ Retrieves metadata about a Microsoft Teams channel and its members. - **channel\_name** ( `string`, optional) The name of the channel to get. Provide either this or channel\_id. - **team\_id\_or\_name** ( `string`, optional) The ID or name of the team to get the channel of (optional). If not provided: in case the user is a member of a single team, the tool will use it; otherwise an error will be returned with a list of all teams to pick from. -## MicrosoftTeams.ListChannels [Permalink for this section](https://docs.arcade.dev/toolkits/social-communication/microsoft_teams\#microsoftteamslistchannels) +## MicrosoftTeams.ListChannels [Permalink for this section](https://docs.arcade.dev/mcp-servers/social-communication/microsoft_teams\#microsoftteamslistchannels) See Example > @@ -7066,7 +7066,7 @@ Lists channels in Microsoft Teams (including shared incoming channels). - **offset** ( `integer`, optional) The offset to start from. - **team\_id\_or\_name** ( `string`, optional) The ID or name of the team to list the channels of (optional). If not provided: in case the user is a member of a single team, the tool will use it; otherwise an error will be returned with a list of all teams to pick from. -## MicrosoftTeams.SearchChannels [Permalink for this section](https://docs.arcade.dev/toolkits/social-communication/microsoft_teams\#microsoftteamssearchchannels) +## MicrosoftTeams.SearchChannels [Permalink for this section](https://docs.arcade.dev/mcp-servers/social-communication/microsoft_teams\#microsoftteamssearchchannels) See Example > @@ -7075,12 +7075,12 @@ Searches for channels in a given Microsoft Teams team. **Parameters** - **keywords** ( `array[string]`, required) The keywords to search for in channel names. -- **match\_type** ( `Enum` [MatchType](https://docs.arcade.dev/toolkits/social-communication/microsoft_teams/reference#MatchType), optional) The type of match to use for the search. Defaults to β€˜partial\_match\_all\_keywords’. +- **match\_type** ( `Enum` [MatchType](https://docs.arcade.dev/mcp-servers/social-communication/microsoft_teams/reference#MatchType), optional) The type of match to use for the search. Defaults to β€˜partial\_match\_all\_keywords’. - **limit** ( `integer`, optional) The maximum number of channels to return. Defaults to 50. Max of 100. - **offset** ( `integer`, optional) The offset to start from. - **team\_id\_or\_name** ( `string`, optional) The ID or name of the team to search the channels of (optional). If not provided: in case the user is a member of a single team, the tool will use it; otherwise an error will be returned with a list of all teams to pick from. -## MicrosoftTeams.GetChannelMessages [Permalink for this section](https://docs.arcade.dev/toolkits/social-communication/microsoft_teams\#microsoftteamsgetchannelmessages) +## MicrosoftTeams.GetChannelMessages [Permalink for this section](https://docs.arcade.dev/mcp-servers/social-communication/microsoft_teams\#microsoftteamsgetchannelmessages) See Example > @@ -7093,7 +7093,7 @@ Retrieves the messages in a Microsoft Teams channel. - **limit** ( `integer`, optional) The maximum number of messages to return. Defaults to 50, max is 50. - **team\_id\_or\_name** ( `string`, optional) The ID or name of the team to get the messages of. If not provided: in case the user is a member of a single team, the tool will use it; otherwise an error will be returned with a list of all teams to pick from. -## MicrosoftTeams.GetChannelMessageReplies [Permalink for this section](https://docs.arcade.dev/toolkits/social-communication/microsoft_teams\#microsoftteamsgetchannelmessagereplies) +## MicrosoftTeams.GetChannelMessageReplies [Permalink for this section](https://docs.arcade.dev/mcp-servers/social-communication/microsoft_teams\#microsoftteamsgetchannelmessagereplies) See Example > @@ -7105,7 +7105,7 @@ Retrieves the replies to a Microsoft Teams channel message. - **channel\_id\_or\_name** ( `string`, required) The ID or name of the channel to get the replies of. - **team\_id\_or\_name** ( `string`, optional) The ID or name of the team to get the replies of. If not provided: in case the user is a member of a single team, the tool will use it; otherwise an error will be returned with a list of all teams to pick from. -## MicrosoftTeams.SendMessageToChannel [Permalink for this section](https://docs.arcade.dev/toolkits/social-communication/microsoft_teams\#microsoftteamssendmessagetochannel) +## MicrosoftTeams.SendMessageToChannel [Permalink for this section](https://docs.arcade.dev/mcp-servers/social-communication/microsoft_teams\#microsoftteamssendmessagetochannel) See Example > @@ -7117,7 +7117,7 @@ Sends a message to a Microsoft Teams channel. - **channel\_id\_or\_name** ( `string`, required) The ID or name of the channel to send the message to. - **team\_id\_or\_name** ( `string`, optional) The ID or name of the team to send the message to. If not provided: in case the user is a member of a single team, the tool will use it; otherwise an error will be returned with a list of all teams to pick from. -## MicrosoftTeams.ReplyToChannelMessage [Permalink for this section](https://docs.arcade.dev/toolkits/social-communication/microsoft_teams\#microsoftteamsreplytochannelmessage) +## MicrosoftTeams.ReplyToChannelMessage [Permalink for this section](https://docs.arcade.dev/mcp-servers/social-communication/microsoft_teams\#microsoftteamsreplytochannelmessage) See Example > @@ -7130,7 +7130,7 @@ Sends a reply to a Microsoft Teams channel message. - **channel\_id\_or\_name** ( `string`, required) The ID or name of the channel to send the message to. - **team\_id\_or\_name** ( `string`, optional) The ID or name of the team to send the message to. If not provided: in case the user is a member of a single team, the tool will use it; otherwise an error will be returned with a list of all teams to pick from. -## MicrosoftTeams.ListTeams [Permalink for this section](https://docs.arcade.dev/toolkits/social-communication/microsoft_teams\#microsoftteamslistteams) +## MicrosoftTeams.ListTeams [Permalink for this section](https://docs.arcade.dev/mcp-servers/social-communication/microsoft_teams\#microsoftteamslistteams) See Example > @@ -7138,9 +7138,9 @@ Lists the teams the current user is associated with in Microsoft Teams. **Parameters** -- **membership\_type** ( `Enum` [TeamMembershipType](https://docs.arcade.dev/toolkits/social-communication/microsoft_teams/reference#TeamMembershipType), optional) The type of membership to filter by. Defaults to β€˜direct\_member\_of\_the\_team’. +- **membership\_type** ( `Enum` [TeamMembershipType](https://docs.arcade.dev/mcp-servers/social-communication/microsoft_teams/reference#TeamMembershipType), optional) The type of membership to filter by. Defaults to β€˜direct\_member\_of\_the\_team’. -## MicrosoftTeams.SearchTeams [Permalink for this section](https://docs.arcade.dev/toolkits/social-communication/microsoft_teams\#microsoftteamssearchteams) +## MicrosoftTeams.SearchTeams [Permalink for this section](https://docs.arcade.dev/mcp-servers/social-communication/microsoft_teams\#microsoftteamssearchteams) See Example > @@ -7152,7 +7152,7 @@ Searches for teams available to the current user in Microsoft Teams. - **limit** ( `integer`, optional) The maximum number of teams to return. Defaults to 10, max is 50. - **next\_page\_token** ( `string`, optional) The token to use to get the next page of results. -## MicrosoftTeams.GetTeam [Permalink for this section](https://docs.arcade.dev/toolkits/social-communication/microsoft_teams\#microsoftteamsgetteam) +## MicrosoftTeams.GetTeam [Permalink for this section](https://docs.arcade.dev/mcp-servers/social-communication/microsoft_teams\#microsoftteamsgetteam) See Example > @@ -7163,7 +7163,7 @@ Retrieves metadata about a team in Microsoft Teams. - **team\_id** ( `string`, optional) The ID of the team to get. - **team\_name** ( `string`, optional) The name of the team to get. Prefer providing a team\_id, when available, for optimal performance. -## MicrosoftTeams.ListTeamMembers [Permalink for this section](https://docs.arcade.dev/toolkits/social-communication/microsoft_teams\#microsoftteamslistteammembers) +## MicrosoftTeams.ListTeamMembers [Permalink for this section](https://docs.arcade.dev/mcp-servers/social-communication/microsoft_teams\#microsoftteamslistteammembers) See Example > @@ -7176,7 +7176,7 @@ Lists the members of a team in Microsoft Teams. - **limit** ( `integer`, optional) The maximum number of members to return. Defaults to 50, max is 999. - **offset** ( `integer`, optional) The number of members to skip. Defaults to 0. -## MicrosoftTeams.SearchTeamMembers [Permalink for this section](https://docs.arcade.dev/toolkits/social-communication/microsoft_teams\#microsoftteamssearchteammembers) +## MicrosoftTeams.SearchTeamMembers [Permalink for this section](https://docs.arcade.dev/mcp-servers/social-communication/microsoft_teams\#microsoftteamssearchteammembers) See Example > @@ -7190,7 +7190,7 @@ Searches for members of a team in Microsoft Teams. - **limit** ( `integer`, optional) The maximum number of members to return. Defaults to 50, max is 100. - **offset** ( `integer`, optional) The number of members to skip. Defaults to 0. -## MicrosoftTeams.GetChatMessageById [Permalink for this section](https://docs.arcade.dev/toolkits/social-communication/microsoft_teams\#microsoftteamsgetchatmessagebyid) +## MicrosoftTeams.GetChatMessageById [Permalink for this section](https://docs.arcade.dev/mcp-servers/social-communication/microsoft_teams\#microsoftteamsgetchatmessagebyid) See Example > @@ -7203,7 +7203,7 @@ Retrieves a Microsoft Teams chat message. - **user\_ids** ( `array[string]`, optional) The IDs of the users in the chat to get the message from. - **user\_names** ( `array[string]`, optional) The names of the users in the chat to get the message from. Prefer providing user\_ids, when available, since the performance is better. -## MicrosoftTeams.GetChatMessages [Permalink for this section](https://docs.arcade.dev/toolkits/social-communication/microsoft_teams\#microsoftteamsgetchatmessages) +## MicrosoftTeams.GetChatMessages [Permalink for this section](https://docs.arcade.dev/mcp-servers/social-communication/microsoft_teams\#microsoftteamsgetchatmessages) See Example > @@ -7218,7 +7218,7 @@ Retrieves messages from a Microsoft Teams chat (individual or group). - **end\_datetime** ( `string`, optional) The end date to filter messages. Provide a string in the format β€˜YYYY-MM-DD’ or β€˜YYYY-MM-DD HH:MM:SS’. Defaults to None (no end date filter). - **limit** ( `integer`, optional) The maximum number of messages to return. Defaults to 50, max is 50. -## MicrosoftTeams.GetChatMetadata [Permalink for this section](https://docs.arcade.dev/toolkits/social-communication/microsoft_teams\#microsoftteamsgetchatmetadata) +## MicrosoftTeams.GetChatMetadata [Permalink for this section](https://docs.arcade.dev/mcp-servers/social-communication/microsoft_teams\#microsoftteamsgetchatmetadata) See Example > @@ -7230,7 +7230,7 @@ Retrieves metadata about a Microsoft Teams chat. - **user\_ids** ( `array[string]`, optional) The IDs of the users in the chat to get metadata about. - **user\_names** ( `array[string]`, optional) The names of the users in the chat to get messages from. Prefer providing user\_ids, when available, since the performance is better. -## MicrosoftTeams.ListChats [Permalink for this section](https://docs.arcade.dev/toolkits/social-communication/microsoft_teams\#microsoftteamslistchats) +## MicrosoftTeams.ListChats [Permalink for this section](https://docs.arcade.dev/mcp-servers/social-communication/microsoft_teams\#microsoftteamslistchats) See Example > @@ -7241,7 +7241,7 @@ List the Microsoft Teams chats to which the current user is a member of. - **limit** ( `integer`, optional) The maximum number of chats to return. Defaults to 50, max is 50. - **next\_page\_token** ( `string`, optional) The token to use to get the next page of results. -## MicrosoftTeams.SendMessageToChat [Permalink for this section](https://docs.arcade.dev/toolkits/social-communication/microsoft_teams\#microsoftteamssendmessagetochat) +## MicrosoftTeams.SendMessageToChat [Permalink for this section](https://docs.arcade.dev/mcp-servers/social-communication/microsoft_teams\#microsoftteamssendmessagetochat) See Example > @@ -7254,7 +7254,7 @@ Sends a message to a Microsoft Teams chat. - **user\_ids** ( `array[string]`, optional) The IDs of the users in the chat to send the message. - **user\_names** ( `array[string]`, optional) The names of the users in the chat to send the message. Prefer providing user\_ids, when available, since the performance is better. -## MicrosoftTeams.ReplyToChatMessage [Permalink for this section](https://docs.arcade.dev/toolkits/social-communication/microsoft_teams\#microsoftteamsreplytochatmessage) +## MicrosoftTeams.ReplyToChatMessage [Permalink for this section](https://docs.arcade.dev/mcp-servers/social-communication/microsoft_teams\#microsoftteamsreplytochatmessage) See Example > @@ -7268,7 +7268,7 @@ Sends a reply to a Microsoft Teams chat message. - **user\_ids** ( `array[string]`, optional) The IDs of the users in the chat to send the message. - **user\_names** ( `array[string]`, optional) The names of the users in the chat to send the message. Prefer providing user\_ids, when available, since the performance is better. -## MicrosoftTeams.CreateChat [Permalink for this section](https://docs.arcade.dev/toolkits/social-communication/microsoft_teams\#microsoftteamscreatechat) +## MicrosoftTeams.CreateChat [Permalink for this section](https://docs.arcade.dev/mcp-servers/social-communication/microsoft_teams\#microsoftteamscreatechat) See Example > @@ -7279,7 +7279,7 @@ Creates a Microsoft Teams chat. - **user\_ids** ( `array[string]`, optional) The IDs of the users to create a chat with. - **user\_names** ( `array[string]`, optional) The names of the users to create a chat with. -## MicrosoftTeams.SearchPeople [Permalink for this section](https://docs.arcade.dev/toolkits/social-communication/microsoft_teams\#microsoftteamssearchpeople) +## MicrosoftTeams.SearchPeople [Permalink for this section](https://docs.arcade.dev/mcp-servers/social-communication/microsoft_teams\#microsoftteamssearchpeople) See Example > @@ -7288,11 +7288,11 @@ Searches for people the user has interacted with in Microsoft Teams and other 36 **Parameters** - **keywords** ( `array[string]`, required) The keywords to match against people’s names. Provide one or more expressions. -- **match\_type** ( `Enum` [PartialMatchType](https://docs.arcade.dev/toolkits/social-communication/microsoft_teams/reference#PartialMatchType), optional) The type of match to use for the keywords. Defaults to match\_any\_of\_the\_keywords. +- **match\_type** ( `Enum` [PartialMatchType](https://docs.arcade.dev/mcp-servers/social-communication/microsoft_teams/reference#PartialMatchType), optional) The type of match to use for the keywords. Defaults to match\_any\_of\_the\_keywords. - **limit** ( `integer`, optional) The maximum number of people to return. Defaults to 50, max is 100. - **next\_page\_token** ( `string`, optional) The next page token to use for pagination. -## MicrosoftTeams.SearchMessages [Permalink for this section](https://docs.arcade.dev/toolkits/social-communication/microsoft_teams\#microsoftteamssearchmessages) +## MicrosoftTeams.SearchMessages [Permalink for this section](https://docs.arcade.dev/mcp-servers/social-communication/microsoft_teams\#microsoftteamssearchmessages) See Example > @@ -7304,7 +7304,7 @@ Searches for messages across Microsoft Teams chats and channels. - **limit** ( `integer`, optional) The maximum number of messages to return. Defaults to 50, max is 50. - **offset** ( `integer`, optional) The offset to start from. -## Auth [Permalink for this section](https://docs.arcade.dev/toolkits/social-communication/microsoft_teams\#auth) +## Auth [Permalink for this section](https://docs.arcade.dev/mcp-servers/social-communication/microsoft_teams\#auth) The Arcade MicrosoftTeams toolkit uses the [Microsoft auth provider](https://docs.arcade.dev/home/auth-providers/microsoft) to connect to users’ MicrosoftTeams accounts. Please refer to the [Microsoft auth provider](https://docs.arcade.dev/home/auth-providers/microsoft) documentation to learn how to configure auth. @@ -7322,7 +7322,7 @@ Arcade tools can be self-hosted on your own infrastructure. Learn more about sel pip install arcade_microsoft_teams\\ ```](https://docs.arcade.dev/home/hosting-overview) -[Zoom](https://docs.arcade.dev/toolkits/social-communication/zoom "Zoom") [Reference](https://docs.arcade.dev/toolkits/social-communication/microsoft_teams/reference "Reference") +[Zoom](https://docs.arcade.dev/mcp-servers/social-communication/zoom "Zoom") [Reference](https://docs.arcade.dev/mcp-servers/social-communication/microsoft_teams/reference "Reference") Frame @@ -7334,13 +7334,13 @@ This will be shown if an incident or maintenance is posted on your status page. [View latest updates](https://status.arcade.dev/?utm_source=embed) ## Close.io Productivity Tools -[Integrations](https://docs.arcade.dev/toolkits "Integrations") [Productivity & Docs](https://docs.arcade.dev/toolkits/productivity/asana "Productivity & Docs") Close.io +[Integrations](https://docs.arcade.dev/toolkits "Integrations") [Productivity & Docs](https://docs.arcade.dev/mcp-servers/productivity/asana "Productivity & Docs") Close.io # Close.io Coming Soon -[Reference](https://docs.arcade.dev/toolkits/productivity/clickup/reference "Reference") [Sharepoint](https://docs.arcade.dev/toolkits/productivity/sharepoint "Sharepoint") +[Reference](https://docs.arcade.dev/mcp-servers/productivity/clickup/reference "Reference") [Sharepoint](https://docs.arcade.dev/mcp-servers/productivity/sharepoint "Sharepoint") Frame @@ -7388,7 +7388,7 @@ This will be shown if an incident or maintenance is posted on your status page. - [Tool Authorization Status](https://docs.arcade.dev/home/auth/tool-auth-status): Check tool authorization status and requirements for users. - [Create Tool with Auth](https://docs.arcade.dev/home/build-tools/create-a-tool-with-auth): Learn to add user authorization to custom tools using Arcade. - [Create Tools with Secrets](https://docs.arcade.dev/home/build-tools/create-a-tool-with-secrets): Learn to create tools using sensitive secrets securely. -- [Create Arcade Toolkit](https://docs.arcade.dev/home/build-tools/create-a-toolkit): Guide to create and publish a custom Arcade toolkit. +- [Create Arcade Toolkit](https://docs.arcade.dev/home/build-tools/create-a-mcp-server): Guide to create and publish a custom Arcade toolkit. - [Handle Tool Errors](https://docs.arcade.dev/home/build-tools/handle-tool-errors): Guide to effectively handle tool errors in Arcade SDK. - [Retryable Tool Error](https://docs.arcade.dev/home/build-tools/retry-tools-with-improved-prompt): Learn to use RetryableToolError for improved tool calls. - [Understanding ToolContext](https://docs.arcade.dev/home/build-tools/tool-context): Learn about ToolContext for managing user authorization. @@ -7435,85 +7435,85 @@ This will be shown if an incident or maintenance is posted on your status page. - [Tool Calling Overview](https://docs.arcade.dev/home/use-tools/tools-overview): Explore tool calling for enhanced AI interactions and applications. - [Arcade Tools with Vercel AI](https://docs.arcade.dev/home/vercelai/use-arcade-tools): Learn to integrate Arcade tools with Vercel AI SDK. - [Arcade Integrations Overview](https://docs.arcade.dev/toolkits): Explore various integrations for productivity, communication, and development. -- [Arcade Toolkit Template](https://docs.arcade.dev/toolkits/community-toolkit-template): Community-driven toolkit for Arcade development and contributions. -- [Contribute a Toolkit](https://docs.arcade.dev/toolkits/contribute-a-toolkit): Learn how to contribute your toolkit to Arcade documentation. -- [Zendesk Customer Support](https://docs.arcade.dev/toolkits/customer-support/zendesk): Toolkit for managing customer support tickets in Zendesk. -- [Zendesk Toolkit Reference](https://docs.arcade.dev/toolkits/customer-support/zendesk/reference): Reference for Zendesk ticket statuses and sorting options. -- [Clickhouse Database Toolkit](https://docs.arcade.dev/toolkits/databases/clickhouse): Interact with Clickhouse databases using read-only tools and features. -- [MongoDB Toolkit Overview](https://docs.arcade.dev/toolkits/databases/mongodb): Explore MongoDB databases with read-only access tools. -- [PostgreSQL Toolkit](https://docs.arcade.dev/toolkits/databases/postgres): Interact with PostgreSQL databases using read-only tools. -- [E2B Toolkit Overview](https://docs.arcade.dev/toolkits/development/e2b): Run code in a sandboxed environment with E2B toolkit. -- [Firecrawl Toolkit](https://docs.arcade.dev/toolkits/development/firecrawl/firecrawl): Scrape, crawl, and map websites with Firecrawl toolkit. -- [Firecrawl Toolkit Reference](https://docs.arcade.dev/toolkits/development/firecrawl/reference): Explore Firecrawl Toolkit formats for web scraping options. -- [GitHub Toolkit Integration](https://docs.arcade.dev/toolkits/development/github/github): Integrate GitHub with agents for repository management and automation. -- [GitHub Toolkit Reference](https://docs.arcade.dev/toolkits/development/github/reference): Comprehensive reference for GitHub Toolkit features and options. -- [Imgflip Meme Toolkit](https://docs.arcade.dev/toolkits/entertainment/imgflip): Create and search memes easily with Imgflip toolkit. -- [Spotify Toolkit Overview](https://docs.arcade.dev/toolkits/entertainment/spotify): Interact with Spotify tracks using Arcade's toolkit features. -- [Twitch Auth Configuration](https://docs.arcade.dev/toolkits/entertainment/twitch): Guide to configuring Twitch authentication for Arcade tools. -- [Stripe Payment Toolkit](https://docs.arcade.dev/toolkits/payments/stripe): Interact with Stripe API for payments and invoicing. -- [Asana Toolkit Integration](https://docs.arcade.dev/toolkits/productivity/asana): Integrate Asana for task and project management easily. -- [Asana Toolkit Reference](https://docs.arcade.dev/toolkits/productivity/asana/reference): Comprehensive Asana reference for tag colors and task sorting. -- [ClickUp Toolkit](https://docs.arcade.dev/toolkits/productivity/clickup): Integrate ClickUp for task management and collaboration tools. -- [Clickup Toolkit Reference](https://docs.arcade.dev/toolkits/productivity/clickup/reference): Comprehensive reference for Clickup toolkit enumerations and values. -- [Close.io Productivity](https://docs.arcade.dev/toolkits/productivity/closeio): Explore Close.io for productivity and integration tools. -- [Confluence Toolkit](https://docs.arcade.dev/toolkits/productivity/confluence): Toolkit for integrating and managing Confluence content easily. -- [Dropbox Toolkit Integration](https://docs.arcade.dev/toolkits/productivity/dropbox/dropbox): Integrate Dropbox for file management and agent interaction. -- [Dropbox Item Categories](https://docs.arcade.dev/toolkits/productivity/dropbox/reference): Comprehensive reference for Dropbox item categories and integrations. -- [Arcade Gmail Toolkit](https://docs.arcade.dev/toolkits/productivity/gmail): Manage emails effortlessly with the Arcade Gmail toolkit. -- [Gmail Toolkit Reference](https://docs.arcade.dev/toolkits/productivity/gmail/reference): Reference for Gmail toolkit enumerations and date ranges. -- [Google Calendar Toolkit](https://docs.arcade.dev/toolkits/productivity/google_calendar): Integrate Google Calendar for event management and scheduling. -- [Google Calendar Reference](https://docs.arcade.dev/toolkits/productivity/google_calendar/reference): Reference for Google Calendar toolkit enumerations and options. -- [Google Contacts Toolkit](https://docs.arcade.dev/toolkits/productivity/google_contacts): Interact with Google Contacts to manage and search contacts. -- [Google Docs Toolkit](https://docs.arcade.dev/toolkits/productivity/google_docs): Toolkit for integrating and managing Google Docs documents easily. -- [Google Docs Reference](https://docs.arcade.dev/toolkits/productivity/google_docs/reference): Reference for Google Docs toolkit enumerations and formats. -- [Google Drive Toolkit](https://docs.arcade.dev/toolkits/productivity/google_drive): Toolkit for managing and accessing Google Drive files efficiently. -- [Google Drive Reference](https://docs.arcade.dev/toolkits/productivity/google_drive/reference): Reference for Google Drive toolkit enumerations and file types. -- [Google Sheets Toolkit](https://docs.arcade.dev/toolkits/productivity/google_sheets): Integrate Google Sheets with agents for enhanced productivity. -- [Google Sheets Reference](https://docs.arcade.dev/toolkits/productivity/google_sheets/reference): Reference for Google Sheets toolkit enumerations and orderings. -- [Google Slides Toolkit](https://docs.arcade.dev/toolkits/productivity/google_slides): Interact with Google Slides to create, comment, and search presentations. -- [Jira Toolkit](https://docs.arcade.dev/toolkits/productivity/jira): Comprehensive toolkit for managing Jira issues and projects. -- [Jira Environment Variables](https://docs.arcade.dev/toolkits/productivity/jira/environment_variables): Manage Jira API settings with environment variables for performance. -- [Jira Toolkit Reference](https://docs.arcade.dev/toolkits/productivity/jira/reference): Reference for Jira toolkit enumerations and configurations. -- [Linear Toolkit](https://docs.arcade.dev/toolkits/productivity/linear): Streamlined toolkit for interacting with Linear's issue tracking. -- [Notion Toolkit](https://docs.arcade.dev/toolkits/productivity/notion): Toolkit for integrating and managing Notion pages easily. -- [Arcade Obsidian Toolkit](https://docs.arcade.dev/toolkits/productivity/obsidian): Community-driven toolkit for enhancing productivity in Obsidian. -- [Outlook Calendar Toolkit](https://docs.arcade.dev/toolkits/productivity/outlook_calendar): Create and manage events using Outlook Calendar integration. -- [Outlook Mail Toolkit](https://docs.arcade.dev/toolkits/productivity/outlook_mail): Toolkit for managing emails using Outlook API features. -- [Outlook Mail Reference](https://docs.arcade.dev/toolkits/productivity/outlook_mail/reference): Reference for Outlook Mail toolkit enumerations and filters. -- [SharePoint Toolkit](https://docs.arcade.dev/toolkits/productivity/sharepoint): Toolkit for efficient SharePoint site interactions and management. -- [Hubspot CRM Integration](https://docs.arcade.dev/toolkits/sales/hubspot): Integrate Hubspot CRM with agents for seamless data access. -- [Salesforce CRM Toolkit](https://docs.arcade.dev/toolkits/sales/salesforce): Integrate Salesforce CRM with custom auth and tools. -- [Google Finance Toolkit](https://docs.arcade.dev/toolkits/search/google_finance): Retrieve real-time and historical stock data easily. -- [Google Flights Toolkit](https://docs.arcade.dev/toolkits/search/google_flights): Search for flights easily with Arcade's Google Flights toolkit. -- [Google Hotels Toolkit](https://docs.arcade.dev/toolkits/search/google_hotels): Search for hotels globally with Arcade's Google Hotels toolkit. -- [Google Jobs Toolkit](https://docs.arcade.dev/toolkits/search/google_jobs): Search for job openings using Google Jobs toolkit. -- [Google Maps Toolkit](https://docs.arcade.dev/toolkits/search/google_maps): Integrate Google Maps for directions between locations easily. -- [Google News Toolkit](https://docs.arcade.dev/toolkits/search/google_news): Search for news stories using Google News toolkit. -- [Google Search Toolkit](https://docs.arcade.dev/toolkits/search/google_search): Enable agents to perform Google searches using SerpAPI. -- [Google Shopping Search](https://docs.arcade.dev/toolkits/search/google_shopping): Search for products easily using Google Shopping toolkit. -- [Walmart Product Search](https://docs.arcade.dev/toolkits/search/walmart): Search for Walmart products and get product details easily. -- [YouTube Video Search](https://docs.arcade.dev/toolkits/search/youtube): Search for YouTube videos and get video details easily. -- [Discord Auth Configuration](https://docs.arcade.dev/toolkits/social-communication/discord): Guide to configure Discord auth with Arcade tools. -- [LinkedIn Toolkit](https://docs.arcade.dev/toolkits/social-communication/linkedin): Toolkit for integrating LinkedIn interactions in applications. -- [Microsoft Teams Toolkit](https://docs.arcade.dev/toolkits/social-communication/microsoft_teams): Toolkit for managing Microsoft Teams interactions and communications. -- [Microsoft Teams Reference](https://docs.arcade.dev/toolkits/social-communication/microsoft_teams/reference): Reference for Microsoft Teams toolkit enumerations and types. -- [Reddit Toolkit](https://docs.arcade.dev/toolkits/social-communication/reddit): Toolkit for Reddit interactions, including posting and commenting. -- [Slack Toolkit Overview](https://docs.arcade.dev/toolkits/social-communication/slack): Integrate Slack for efficient communication and user management. -- [Slack Environment Variables](https://docs.arcade.dev/toolkits/social-communication/slack/environment_variables): Manage Slack API requests with environment variable settings. -- [Arcade Slack Integration](https://docs.arcade.dev/toolkits/social-communication/slack/install): Integrate Arcade with Slack for enhanced team communication. -- [Slack Toolkit Reference](https://docs.arcade.dev/toolkits/social-communication/slack/reference): Reference for Slack toolkit conversation types and integrations. -- [Teams Toolkit Reference](https://docs.arcade.dev/toolkits/social-communication/teams/reference): Reference for Teams toolkit enumerations and match types. -- [Arcade Twilio Toolkit](https://docs.arcade.dev/toolkits/social-communication/twilio/readme): Toolkit for sending SMS and WhatsApp messages via Twilio. -- [Twilio Toolkit](https://docs.arcade.dev/toolkits/social-communication/twilio/reference): Twilio toolkit for sending SMS and WhatsApp messages. -- [X Toolkit](https://docs.arcade.dev/toolkits/social-communication/x): Toolkit for agents to interact with X (formerly Twitter). -- [Zoom Toolkit Integration](https://docs.arcade.dev/toolkits/social-communication/zoom): Integrate Zoom for meeting management and invitations. -- [Arcade Zoom Integration](https://docs.arcade.dev/toolkits/social-communication/zoom/install): Integrate Arcade with Zoom for efficient meeting management. -- [404 Error Page](https://docs.arcade.dev/toolkits/development/code-sandbox): Page not found error with status updates available. -- [404 Error Page](https://docs.arcade.dev/toolkits/productivity/google/reference): Page not found error with status updates available. +- [Arcade Toolkit Template](https://docs.arcade.dev/mcp-servers/community-toolkit-template): Community-driven toolkit for Arcade development and contributions. +- [Contribute a Toolkit](https://docs.arcade.dev/mcp-servers/contribute-a-toolkit): Learn how to contribute your toolkit to Arcade documentation. +- [Zendesk Customer Support](https://docs.arcade.dev/mcp-servers/customer-support/zendesk): Toolkit for managing customer support tickets in Zendesk. +- [Zendesk Toolkit Reference](https://docs.arcade.dev/mcp-servers/customer-support/zendesk/reference): Reference for Zendesk ticket statuses and sorting options. +- [Clickhouse Database Toolkit](https://docs.arcade.dev/mcp-servers/databases/clickhouse): Interact with Clickhouse databases using read-only tools and features. +- [MongoDB Toolkit Overview](https://docs.arcade.dev/mcp-servers/databases/mongodb): Explore MongoDB databases with read-only access tools. +- [PostgreSQL Toolkit](https://docs.arcade.dev/mcp-servers/databases/postgres): Interact with PostgreSQL databases using read-only tools. +- [E2B Toolkit Overview](https://docs.arcade.dev/mcp-servers/development/e2b): Run code in a sandboxed environment with E2B toolkit. +- [Firecrawl Toolkit](https://docs.arcade.dev/mcp-servers/development/firecrawl/firecrawl): Scrape, crawl, and map websites with Firecrawl toolkit. +- [Firecrawl Toolkit Reference](https://docs.arcade.dev/mcp-servers/development/firecrawl/reference): Explore Firecrawl Toolkit formats for web scraping options. +- [GitHub Toolkit Integration](https://docs.arcade.dev/mcp-servers/development/github/github): Integrate GitHub with agents for repository management and automation. +- [GitHub Toolkit Reference](https://docs.arcade.dev/mcp-servers/development/github/reference): Comprehensive reference for GitHub Toolkit features and options. +- [Imgflip Meme Toolkit](https://docs.arcade.dev/mcp-servers/entertainment/imgflip): Create and search memes easily with Imgflip toolkit. +- [Spotify Toolkit Overview](https://docs.arcade.dev/mcp-servers/entertainment/spotify): Interact with Spotify tracks using Arcade's toolkit features. +- [Twitch Auth Configuration](https://docs.arcade.dev/mcp-servers/entertainment/twitch): Guide to configuring Twitch authentication for Arcade tools. +- [Stripe Payment Toolkit](https://docs.arcade.dev/mcp-servers/payments/stripe): Interact with Stripe API for payments and invoicing. +- [Asana Toolkit Integration](https://docs.arcade.dev/mcp-servers/productivity/asana): Integrate Asana for task and project management easily. +- [Asana Toolkit Reference](https://docs.arcade.dev/mcp-servers/productivity/asana/reference): Comprehensive Asana reference for tag colors and task sorting. +- [ClickUp Toolkit](https://docs.arcade.dev/mcp-servers/productivity/clickup): Integrate ClickUp for task management and collaboration tools. +- [Clickup Toolkit Reference](https://docs.arcade.dev/mcp-servers/productivity/clickup/reference): Comprehensive reference for Clickup toolkit enumerations and values. +- [Close.io Productivity](https://docs.arcade.dev/mcp-servers/productivity/closeio): Explore Close.io for productivity and integration tools. +- [Confluence Toolkit](https://docs.arcade.dev/mcp-servers/productivity/confluence): Toolkit for integrating and managing Confluence content easily. +- [Dropbox Toolkit Integration](https://docs.arcade.dev/mcp-servers/productivity/dropbox/dropbox): Integrate Dropbox for file management and agent interaction. +- [Dropbox Item Categories](https://docs.arcade.dev/mcp-servers/productivity/dropbox/reference): Comprehensive reference for Dropbox item categories and integrations. +- [Arcade Gmail Toolkit](https://docs.arcade.dev/mcp-servers/productivity/gmail): Manage emails effortlessly with the Arcade Gmail toolkit. +- [Gmail Toolkit Reference](https://docs.arcade.dev/mcp-servers/productivity/gmail/reference): Reference for Gmail toolkit enumerations and date ranges. +- [Google Calendar Toolkit](https://docs.arcade.dev/mcp-servers/productivity/google_calendar): Integrate Google Calendar for event management and scheduling. +- [Google Calendar Reference](https://docs.arcade.dev/mcp-servers/productivity/google_calendar/reference): Reference for Google Calendar toolkit enumerations and options. +- [Google Contacts Toolkit](https://docs.arcade.dev/mcp-servers/productivity/google_contacts): Interact with Google Contacts to manage and search contacts. +- [Google Docs Toolkit](https://docs.arcade.dev/mcp-servers/productivity/google_docs): Toolkit for integrating and managing Google Docs documents easily. +- [Google Docs Reference](https://docs.arcade.dev/mcp-servers/productivity/google_docs/reference): Reference for Google Docs toolkit enumerations and formats. +- [Google Drive Toolkit](https://docs.arcade.dev/mcp-servers/productivity/google_drive): Toolkit for managing and accessing Google Drive files efficiently. +- [Google Drive Reference](https://docs.arcade.dev/mcp-servers/productivity/google_drive/reference): Reference for Google Drive toolkit enumerations and file types. +- [Google Sheets Toolkit](https://docs.arcade.dev/mcp-servers/productivity/google_sheets): Integrate Google Sheets with agents for enhanced productivity. +- [Google Sheets Reference](https://docs.arcade.dev/mcp-servers/productivity/google_sheets/reference): Reference for Google Sheets toolkit enumerations and orderings. +- [Google Slides Toolkit](https://docs.arcade.dev/mcp-servers/productivity/google_slides): Interact with Google Slides to create, comment, and search presentations. +- [Jira Toolkit](https://docs.arcade.dev/mcp-servers/productivity/jira): Comprehensive toolkit for managing Jira issues and projects. +- [Jira Environment Variables](https://docs.arcade.dev/mcp-servers/productivity/jira/environment_variables): Manage Jira API settings with environment variables for performance. +- [Jira Toolkit Reference](https://docs.arcade.dev/mcp-servers/productivity/jira/reference): Reference for Jira toolkit enumerations and configurations. +- [Linear Toolkit](https://docs.arcade.dev/mcp-servers/productivity/linear): Streamlined toolkit for interacting with Linear's issue tracking. +- [Notion Toolkit](https://docs.arcade.dev/mcp-servers/productivity/notion): Toolkit for integrating and managing Notion pages easily. +- [Arcade Obsidian Toolkit](https://docs.arcade.dev/mcp-servers/productivity/obsidian): Community-driven toolkit for enhancing productivity in Obsidian. +- [Outlook Calendar Toolkit](https://docs.arcade.dev/mcp-servers/productivity/outlook_calendar): Create and manage events using Outlook Calendar integration. +- [Outlook Mail Toolkit](https://docs.arcade.dev/mcp-servers/productivity/outlook_mail): Toolkit for managing emails using Outlook API features. +- [Outlook Mail Reference](https://docs.arcade.dev/mcp-servers/productivity/outlook_mail/reference): Reference for Outlook Mail toolkit enumerations and filters. +- [SharePoint Toolkit](https://docs.arcade.dev/mcp-servers/productivity/sharepoint): Toolkit for efficient SharePoint site interactions and management. +- [Hubspot CRM Integration](https://docs.arcade.dev/mcp-servers/sales/hubspot): Integrate Hubspot CRM with agents for seamless data access. +- [Salesforce CRM Toolkit](https://docs.arcade.dev/mcp-servers/sales/salesforce): Integrate Salesforce CRM with custom auth and tools. +- [Google Finance Toolkit](https://docs.arcade.dev/mcp-servers/search/google_finance): Retrieve real-time and historical stock data easily. +- [Google Flights Toolkit](https://docs.arcade.dev/mcp-servers/search/google_flights): Search for flights easily with Arcade's Google Flights toolkit. +- [Google Hotels Toolkit](https://docs.arcade.dev/mcp-servers/search/google_hotels): Search for hotels globally with Arcade's Google Hotels toolkit. +- [Google Jobs Toolkit](https://docs.arcade.dev/mcp-servers/search/google_jobs): Search for job openings using Google Jobs toolkit. +- [Google Maps Toolkit](https://docs.arcade.dev/mcp-servers/search/google_maps): Integrate Google Maps for directions between locations easily. +- [Google News Toolkit](https://docs.arcade.dev/mcp-servers/search/google_news): Search for news stories using Google News toolkit. +- [Google Search Toolkit](https://docs.arcade.dev/mcp-servers/search/google_search): Enable agents to perform Google searches using SerpAPI. +- [Google Shopping Search](https://docs.arcade.dev/mcp-servers/search/google_shopping): Search for products easily using Google Shopping toolkit. +- [Walmart Product Search](https://docs.arcade.dev/mcp-servers/search/walmart): Search for Walmart products and get product details easily. +- [YouTube Video Search](https://docs.arcade.dev/mcp-servers/search/youtube): Search for YouTube videos and get video details easily. +- [Discord Auth Configuration](https://docs.arcade.dev/mcp-servers/social-communication/discord): Guide to configure Discord auth with Arcade tools. +- [LinkedIn Toolkit](https://docs.arcade.dev/mcp-servers/social-communication/linkedin): Toolkit for integrating LinkedIn interactions in applications. +- [Microsoft Teams Toolkit](https://docs.arcade.dev/mcp-servers/social-communication/microsoft_teams): Toolkit for managing Microsoft Teams interactions and communications. +- [Microsoft Teams Reference](https://docs.arcade.dev/mcp-servers/social-communication/microsoft_teams/reference): Reference for Microsoft Teams toolkit enumerations and types. +- [Reddit Toolkit](https://docs.arcade.dev/mcp-servers/social-communication/reddit): Toolkit for Reddit interactions, including posting and commenting. +- [Slack Toolkit Overview](https://docs.arcade.dev/mcp-servers/social-communication/slack): Integrate Slack for efficient communication and user management. +- [Slack Environment Variables](https://docs.arcade.dev/mcp-servers/social-communication/slack/environment_variables): Manage Slack API requests with environment variable settings. +- [Arcade Slack Integration](https://docs.arcade.dev/mcp-servers/social-communication/slack/install): Integrate Arcade with Slack for enhanced team communication. +- [Slack Toolkit Reference](https://docs.arcade.dev/mcp-servers/social-communication/slack/reference): Reference for Slack toolkit conversation types and integrations. +- [Teams Toolkit Reference](https://docs.arcade.dev/mcp-servers/social-communication/teams/reference): Reference for Teams toolkit enumerations and match types. +- [Arcade Twilio Toolkit](https://docs.arcade.dev/mcp-servers/social-communication/twilio/readme): Toolkit for sending SMS and WhatsApp messages via Twilio. +- [Twilio Toolkit](https://docs.arcade.dev/mcp-servers/social-communication/twilio/reference): Twilio toolkit for sending SMS and WhatsApp messages. +- [X Toolkit](https://docs.arcade.dev/mcp-servers/social-communication/x): Toolkit for agents to interact with X (formerly Twitter). +- [Zoom Toolkit Integration](https://docs.arcade.dev/mcp-servers/social-communication/zoom): Integrate Zoom for meeting management and invitations. +- [Arcade Zoom Integration](https://docs.arcade.dev/mcp-servers/social-communication/zoom/install): Integrate Arcade with Zoom for efficient meeting management. +- [404 Error Page](https://docs.arcade.dev/mcp-servers/development/code-sandbox): Page not found error with status updates available. +- [404 Error Page](https://docs.arcade.dev/mcp-servers/productivity/google/reference): Page not found error with status updates available. ``` ## Arcade Tools Overview -https://docs.arcade.dev2025-09-27T01:29:11.415Zdaily0.7https://docs.arcade.dev/home2025-09-27T01:29:11.415Zdaily0.7https://docs.arcade.dev/home/api-keys2025-09-27T01:29:11.415Zdaily0.7https://docs.arcade.dev/home/arcade-cli2025-09-27T01:29:11.415Zdaily0.7https://docs.arcade.dev/home/arcade-clients2025-09-27T01:29:11.415Zdaily0.7https://docs.arcade.dev/home/auth-providers2025-09-27T01:29:11.415Zdaily0.7https://docs.arcade.dev/home/auth-providers/asana2025-09-27T01:29:11.415Zdaily0.7https://docs.arcade.dev/home/auth-providers/atlassian2025-09-27T01:29:11.415Zdaily0.7https://docs.arcade.dev/home/auth-providers/clickup2025-09-27T01:29:11.415Zdaily0.7https://docs.arcade.dev/home/auth-providers/discord2025-09-27T01:29:11.415Zdaily0.7https://docs.arcade.dev/home/auth-providers/dropbox2025-09-27T01:29:11.415Zdaily0.7https://docs.arcade.dev/home/auth-providers/github2025-09-27T01:29:11.415Zdaily0.7https://docs.arcade.dev/home/auth-providers/google2025-09-27T01:29:11.415Zdaily0.7https://docs.arcade.dev/home/auth-providers/hubspot2025-09-27T01:29:11.415Zdaily0.7https://docs.arcade.dev/home/auth-providers/linear2025-09-27T01:29:11.415Zdaily0.7https://docs.arcade.dev/home/auth-providers/linkedin2025-09-27T01:29:11.415Zdaily0.7https://docs.arcade.dev/home/auth-providers/microsoft2025-09-27T01:29:11.415Zdaily0.7https://docs.arcade.dev/home/auth-providers/notion2025-09-27T01:29:11.415Zdaily0.7https://docs.arcade.dev/home/auth-providers/oauth22025-09-27T01:29:11.415Zdaily0.7https://docs.arcade.dev/home/auth-providers/reddit2025-09-27T01:29:11.415Zdaily0.7https://docs.arcade.dev/home/auth-providers/salesforce2025-09-27T01:29:11.415Zdaily0.7https://docs.arcade.dev/home/auth-providers/slack2025-09-27T01:29:11.415Zdaily0.7https://docs.arcade.dev/home/auth-providers/spotify2025-09-27T01:29:11.415Zdaily0.7https://docs.arcade.dev/home/auth-providers/twitch2025-09-27T01:29:11.415Zdaily0.7https://docs.arcade.dev/home/auth-providers/x2025-09-27T01:29:11.415Zdaily0.7https://docs.arcade.dev/home/auth-providers/zendesk2025-09-27T01:29:11.415Zdaily0.7https://docs.arcade.dev/home/auth-providers/zoom2025-09-27T01:29:11.415Zdaily0.7https://docs.arcade.dev/home/auth/auth-tool-calling2025-09-27T01:29:11.415Zdaily0.7https://docs.arcade.dev/home/auth/call-third-party-apis-directly2025-09-27T01:29:11.415Zdaily0.7https://docs.arcade.dev/home/auth/how-arcade-helps2025-09-27T01:29:11.415Zdaily0.7https://docs.arcade.dev/home/auth/secure-auth-production2025-09-27T01:29:11.415Zdaily0.7https://docs.arcade.dev/home/auth/tool-auth-status2025-09-27T01:29:11.415Zdaily0.7https://docs.arcade.dev/home/build-tools/create-a-tool-with-auth2025-09-27T01:29:11.415Zdaily0.7https://docs.arcade.dev/home/build-tools/create-a-tool-with-secrets2025-09-27T01:29:11.415Zdaily0.7https://docs.arcade.dev/home/build-tools/create-a-toolkit2025-09-27T01:29:11.415Zdaily0.7https://docs.arcade.dev/home/build-tools/handle-tool-errors2025-09-27T01:29:11.415Zdaily0.7https://docs.arcade.dev/home/build-tools/retry-tools-with-improved-prompt2025-09-27T01:29:11.415Zdaily0.7https://docs.arcade.dev/home/build-tools/tool-context2025-09-27T01:29:11.415Zdaily0.7https://docs.arcade.dev/home/changelog2025-09-27T01:29:11.415Zdaily0.7https://docs.arcade.dev/home/contact-us2025-09-27T01:29:11.415Zdaily0.7https://docs.arcade.dev/home/crewai/custom-auth-flow2025-09-27T01:29:11.415Zdaily0.7https://docs.arcade.dev/home/crewai/use-arcade-tools2025-09-27T01:29:11.415Zdaily0.7https://docs.arcade.dev/home/evaluate-tools/create-an-evaluation-suite2025-09-27T01:29:11.415Zdaily0.7https://docs.arcade.dev/home/evaluate-tools/run-evaluations2025-09-27T01:29:11.415Zdaily0.7https://docs.arcade.dev/home/evaluate-tools/why-evaluate-tools2025-09-27T01:29:11.415Zdaily0.7https://docs.arcade.dev/home/faq2025-09-27T01:29:11.415Zdaily0.7https://docs.arcade.dev/home/glossary2025-09-27T01:29:11.415Zdaily0.7https://docs.arcade.dev/home/google-adk/overview2025-09-27T01:29:11.415Zdaily0.7https://docs.arcade.dev/home/google-adk/use-arcade-tools2025-09-27T01:29:11.415Zdaily0.7https://docs.arcade.dev/home/hosting-overview2025-09-27T01:29:11.415Zdaily0.7https://docs.arcade.dev/home/hybrid-deployment/hybrid-worker2025-09-27T01:29:11.415Zdaily0.7https://docs.arcade.dev/home/langchain/auth-langchain-tools2025-09-27T01:29:11.415Zdaily0.7https://docs.arcade.dev/home/langchain/use-arcade-tools2025-09-27T01:29:11.415Zdaily0.7https://docs.arcade.dev/home/langchain/user-auth-interrupts2025-09-27T01:29:11.415Zdaily0.7https://docs.arcade.dev/home/local-deployment/configure/arcade-deploy2025-09-27T01:29:11.415Zdaily0.7https://docs.arcade.dev/home/local-deployment/configure/engine2025-09-27T01:29:11.415Zdaily0.7https://docs.arcade.dev/home/local-deployment/configure/overview2025-09-27T01:29:11.415Zdaily0.7https://docs.arcade.dev/home/local-deployment/configure/templates2025-09-27T01:29:11.415Zdaily0.7https://docs.arcade.dev/home/local-deployment/install/docker2025-09-27T01:29:11.415Zdaily0.7https://docs.arcade.dev/home/local-deployment/install/local2025-09-27T01:29:11.415Zdaily0.7https://docs.arcade.dev/home/local-deployment/install/overview2025-09-27T01:29:11.415Zdaily0.7https://docs.arcade.dev/home/local-deployment/install/toolkits2025-09-27T01:29:11.415Zdaily0.7https://docs.arcade.dev/home/mastra/overview2025-09-27T01:29:11.415Zdaily0.7https://docs.arcade.dev/home/mastra/use-arcade-tools2025-09-27T01:29:11.415Zdaily0.7https://docs.arcade.dev/home/mastra/user-auth-interrupts2025-09-27T01:29:11.415Zdaily0.7https://docs.arcade.dev/home/mcp-desktop-clients/claude-desktop-client2025-09-27T01:29:11.416Zdaily0.7https://docs.arcade.dev/home/mcp-desktop-clients/vscode-client2025-09-27T01:29:11.416Zdaily0.7https://docs.arcade.dev/home/mcp-overview2025-09-27T01:29:11.416Zdaily0.7https://docs.arcade.dev/home/migrate-to-v22025-09-27T01:29:11.416Zdaily0.7https://docs.arcade.dev/home/oai-agents/overview2025-09-27T01:29:11.416Zdaily0.7https://docs.arcade.dev/home/oai-agents/use-arcade-tools2025-09-27T01:29:11.416Zdaily0.7https://docs.arcade.dev/home/oai-agents/user-auth-interrupts2025-09-27T01:29:11.416Zdaily0.7https://docs.arcade.dev/home/quickstart2025-09-27T01:29:11.416Zdaily0.7https://docs.arcade.dev/home/registry-early-access2025-09-27T01:29:11.416Zdaily0.7https://docs.arcade.dev/home/serve-tools/arcade-deploy2025-09-27T01:29:11.416Zdaily0.7https://docs.arcade.dev/home/serve-tools/docker-worker2025-09-27T01:29:11.416Zdaily0.7https://docs.arcade.dev/home/serve-tools/modal-worker2025-09-27T01:29:11.416Zdaily0.7https://docs.arcade.dev/home/use-tools/get-tool-definitions2025-09-27T01:29:11.416Zdaily0.7https://docs.arcade.dev/home/use-tools/tools-overview2025-09-27T01:29:11.416Zdaily0.7https://docs.arcade.dev/home/use-tools/types-of-tools2025-09-27T01:29:11.416Zdaily0.7https://docs.arcade.dev/home/vercelai/use-arcade-tools2025-09-27T01:29:11.416Zdaily0.7https://docs.arcade.dev/toolkits2025-09-27T01:29:11.416Zdaily0.7https://docs.arcade.dev/toolkits/community-toolkit-template2025-09-27T01:29:11.416Zdaily0.7https://docs.arcade.dev/toolkits/contribute-a-toolkit2025-09-27T01:29:11.416Zdaily0.7https://docs.arcade.dev/toolkits/customer-support/zendesk2025-09-27T01:29:11.416Zdaily0.7https://docs.arcade.dev/toolkits/customer-support/zendesk/reference2025-09-27T01:29:11.416Zdaily0.7https://docs.arcade.dev/toolkits/databases/clickhouse2025-09-27T01:29:11.416Zdaily0.7https://docs.arcade.dev/toolkits/databases/mongodb2025-09-27T01:29:11.416Zdaily0.7https://docs.arcade.dev/toolkits/databases/postgres2025-09-27T01:29:11.416Zdaily0.7https://docs.arcade.dev/toolkits/development/e2b2025-09-27T01:29:11.416Zdaily0.7https://docs.arcade.dev/toolkits/development/firecrawl/firecrawl2025-09-27T01:29:11.416Zdaily0.7https://docs.arcade.dev/toolkits/development/firecrawl/reference2025-09-27T01:29:11.416Zdaily0.7https://docs.arcade.dev/toolkits/development/github/github2025-09-27T01:29:11.416Zdaily0.7https://docs.arcade.dev/toolkits/development/github/reference2025-09-27T01:29:11.416Zdaily0.7https://docs.arcade.dev/toolkits/entertainment/imgflip2025-09-27T01:29:11.416Zdaily0.7https://docs.arcade.dev/toolkits/entertainment/spotify2025-09-27T01:29:11.416Zdaily0.7https://docs.arcade.dev/toolkits/entertainment/twitch2025-09-27T01:29:11.416Zdaily0.7https://docs.arcade.dev/toolkits/payments/stripe2025-09-27T01:29:11.416Zdaily0.7https://docs.arcade.dev/toolkits/productivity/asana2025-09-27T01:29:11.416Zdaily0.7https://docs.arcade.dev/toolkits/productivity/asana/reference2025-09-27T01:29:11.416Zdaily0.7https://docs.arcade.dev/toolkits/productivity/clickup2025-09-27T01:29:11.416Zdaily0.7https://docs.arcade.dev/toolkits/productivity/clickup/reference2025-09-27T01:29:11.416Zdaily0.7https://docs.arcade.dev/toolkits/productivity/closeio2025-09-27T01:29:11.416Zdaily0.7https://docs.arcade.dev/toolkits/productivity/confluence2025-09-27T01:29:11.416Zdaily0.7https://docs.arcade.dev/toolkits/productivity/dropbox/dropbox2025-09-27T01:29:11.416Zdaily0.7https://docs.arcade.dev/toolkits/productivity/dropbox/reference2025-09-27T01:29:11.416Zdaily0.7https://docs.arcade.dev/toolkits/productivity/gmail2025-09-27T01:29:11.416Zdaily0.7https://docs.arcade.dev/toolkits/productivity/gmail/reference2025-09-27T01:29:11.416Zdaily0.7https://docs.arcade.dev/toolkits/productivity/google\_calendar2025-09-27T01:29:11.416Zdaily0.7https://docs.arcade.dev/toolkits/productivity/google\_calendar/reference2025-09-27T01:29:11.416Zdaily0.7https://docs.arcade.dev/toolkits/productivity/google\_contacts2025-09-27T01:29:11.416Zdaily0.7https://docs.arcade.dev/toolkits/productivity/google\_docs2025-09-27T01:29:11.416Zdaily0.7https://docs.arcade.dev/toolkits/productivity/google\_docs/reference2025-09-27T01:29:11.416Zdaily0.7https://docs.arcade.dev/toolkits/productivity/google\_drive2025-09-27T01:29:11.416Zdaily0.7https://docs.arcade.dev/toolkits/productivity/google\_drive/reference2025-09-27T01:29:11.416Zdaily0.7https://docs.arcade.dev/toolkits/productivity/google\_sheets2025-09-27T01:29:11.416Zdaily0.7https://docs.arcade.dev/toolkits/productivity/google\_sheets/reference2025-09-27T01:29:11.416Zdaily0.7https://docs.arcade.dev/toolkits/productivity/google\_slides2025-09-27T01:29:11.416Zdaily0.7https://docs.arcade.dev/toolkits/productivity/jira2025-09-27T01:29:11.416Zdaily0.7https://docs.arcade.dev/toolkits/productivity/jira/environment\_variables2025-09-27T01:29:11.416Zdaily0.7https://docs.arcade.dev/toolkits/productivity/jira/reference2025-09-27T01:29:11.416Zdaily0.7https://docs.arcade.dev/toolkits/productivity/linear2025-09-27T01:29:11.416Zdaily0.7https://docs.arcade.dev/toolkits/productivity/notion2025-09-27T01:29:11.416Zdaily0.7https://docs.arcade.dev/toolkits/productivity/obsidian2025-09-27T01:29:11.416Zdaily0.7https://docs.arcade.dev/toolkits/productivity/outlook\_calendar2025-09-27T01:29:11.416Zdaily0.7https://docs.arcade.dev/toolkits/productivity/outlook\_mail2025-09-27T01:29:11.416Zdaily0.7https://docs.arcade.dev/toolkits/productivity/outlook\_mail/reference2025-09-27T01:29:11.416Zdaily0.7https://docs.arcade.dev/toolkits/productivity/sharepoint2025-09-27T01:29:11.416Zdaily0.7https://docs.arcade.dev/toolkits/sales/hubspot2025-09-27T01:29:11.416Zdaily0.7https://docs.arcade.dev/toolkits/sales/hubspot/reference2025-09-27T01:29:11.416Zdaily0.7https://docs.arcade.dev/toolkits/sales/salesforce2025-09-27T01:29:11.416Zdaily0.7https://docs.arcade.dev/toolkits/search/google\_finance2025-09-27T01:29:11.416Zdaily0.7https://docs.arcade.dev/toolkits/search/google\_flights2025-09-27T01:29:11.416Zdaily0.7https://docs.arcade.dev/toolkits/search/google\_hotels2025-09-27T01:29:11.416Zdaily0.7https://docs.arcade.dev/toolkits/search/google\_jobs2025-09-27T01:29:11.416Zdaily0.7https://docs.arcade.dev/toolkits/search/google\_maps2025-09-27T01:29:11.416Zdaily0.7https://docs.arcade.dev/toolkits/search/google\_news2025-09-27T01:29:11.416Zdaily0.7https://docs.arcade.dev/toolkits/search/google\_search2025-09-27T01:29:11.416Zdaily0.7https://docs.arcade.dev/toolkits/search/google\_shopping2025-09-27T01:29:11.416Zdaily0.7https://docs.arcade.dev/toolkits/search/walmart2025-09-27T01:29:11.416Zdaily0.7https://docs.arcade.dev/toolkits/search/youtube2025-09-27T01:29:11.416Zdaily0.7https://docs.arcade.dev/toolkits/social-communication/discord2025-09-27T01:29:11.416Zdaily0.7https://docs.arcade.dev/toolkits/social-communication/linkedin2025-09-27T01:29:11.416Zdaily0.7https://docs.arcade.dev/toolkits/social-communication/microsoft\_teams2025-09-27T01:29:11.416Zdaily0.7https://docs.arcade.dev/toolkits/social-communication/microsoft\_teams/reference2025-09-27T01:29:11.416Zdaily0.7https://docs.arcade.dev/toolkits/social-communication/reddit2025-09-27T01:29:11.416Zdaily0.7https://docs.arcade.dev/toolkits/social-communication/slack2025-09-27T01:29:11.416Zdaily0.7https://docs.arcade.dev/toolkits/social-communication/slack/environment\_variables2025-09-27T01:29:11.416Zdaily0.7https://docs.arcade.dev/toolkits/social-communication/slack/install2025-09-27T01:29:11.416Zdaily0.7https://docs.arcade.dev/toolkits/social-communication/slack/reference2025-09-27T01:29:11.416Zdaily0.7https://docs.arcade.dev/toolkits/social-communication/slack\_api2025-09-27T01:29:11.416Zdaily0.7https://docs.arcade.dev/toolkits/social-communication/teams/reference2025-09-27T01:29:11.416Zdaily0.7https://docs.arcade.dev/toolkits/social-communication/twilio/readme2025-09-27T01:29:11.416Zdaily0.7https://docs.arcade.dev/toolkits/social-communication/twilio/reference2025-09-27T01:29:11.416Zdaily0.7https://docs.arcade.dev/toolkits/social-communication/x2025-09-27T01:29:11.416Zdaily0.7https://docs.arcade.dev/toolkits/social-communication/zoom2025-09-27T01:29:11.416Zdaily0.7https://docs.arcade.dev/toolkits/social-communication/zoom/install2025-09-27T01:29:11.416Zdaily0.7 +https://docs.arcade.dev2025-09-27T01:29:11.415Zdaily0.7https://docs.arcade.dev/home2025-09-27T01:29:11.415Zdaily0.7https://docs.arcade.dev/home/api-keys2025-09-27T01:29:11.415Zdaily0.7https://docs.arcade.dev/home/arcade-cli2025-09-27T01:29:11.415Zdaily0.7https://docs.arcade.dev/home/arcade-clients2025-09-27T01:29:11.415Zdaily0.7https://docs.arcade.dev/home/auth-providers2025-09-27T01:29:11.415Zdaily0.7https://docs.arcade.dev/home/auth-providers/asana2025-09-27T01:29:11.415Zdaily0.7https://docs.arcade.dev/home/auth-providers/atlassian2025-09-27T01:29:11.415Zdaily0.7https://docs.arcade.dev/home/auth-providers/clickup2025-09-27T01:29:11.415Zdaily0.7https://docs.arcade.dev/home/auth-providers/discord2025-09-27T01:29:11.415Zdaily0.7https://docs.arcade.dev/home/auth-providers/dropbox2025-09-27T01:29:11.415Zdaily0.7https://docs.arcade.dev/home/auth-providers/github2025-09-27T01:29:11.415Zdaily0.7https://docs.arcade.dev/home/auth-providers/google2025-09-27T01:29:11.415Zdaily0.7https://docs.arcade.dev/home/auth-providers/hubspot2025-09-27T01:29:11.415Zdaily0.7https://docs.arcade.dev/home/auth-providers/linear2025-09-27T01:29:11.415Zdaily0.7https://docs.arcade.dev/home/auth-providers/linkedin2025-09-27T01:29:11.415Zdaily0.7https://docs.arcade.dev/home/auth-providers/microsoft2025-09-27T01:29:11.415Zdaily0.7https://docs.arcade.dev/home/auth-providers/notion2025-09-27T01:29:11.415Zdaily0.7https://docs.arcade.dev/home/auth-providers/oauth22025-09-27T01:29:11.415Zdaily0.7https://docs.arcade.dev/home/auth-providers/reddit2025-09-27T01:29:11.415Zdaily0.7https://docs.arcade.dev/home/auth-providers/salesforce2025-09-27T01:29:11.415Zdaily0.7https://docs.arcade.dev/home/auth-providers/slack2025-09-27T01:29:11.415Zdaily0.7https://docs.arcade.dev/home/auth-providers/spotify2025-09-27T01:29:11.415Zdaily0.7https://docs.arcade.dev/home/auth-providers/twitch2025-09-27T01:29:11.415Zdaily0.7https://docs.arcade.dev/home/auth-providers/x2025-09-27T01:29:11.415Zdaily0.7https://docs.arcade.dev/home/auth-providers/zendesk2025-09-27T01:29:11.415Zdaily0.7https://docs.arcade.dev/home/auth-providers/zoom2025-09-27T01:29:11.415Zdaily0.7https://docs.arcade.dev/home/auth/auth-tool-calling2025-09-27T01:29:11.415Zdaily0.7https://docs.arcade.dev/home/auth/call-third-party-apis-directly2025-09-27T01:29:11.415Zdaily0.7https://docs.arcade.dev/home/auth/how-arcade-helps2025-09-27T01:29:11.415Zdaily0.7https://docs.arcade.dev/home/auth/secure-auth-production2025-09-27T01:29:11.415Zdaily0.7https://docs.arcade.dev/home/auth/tool-auth-status2025-09-27T01:29:11.415Zdaily0.7https://docs.arcade.dev/home/build-tools/create-a-tool-with-auth2025-09-27T01:29:11.415Zdaily0.7https://docs.arcade.dev/home/build-tools/create-a-tool-with-secrets2025-09-27T01:29:11.415Zdaily0.7https://docs.arcade.dev/home/build-tools/create-a-mcp-server2025-09-27T01:29:11.415Zdaily0.7https://docs.arcade.dev/home/build-tools/handle-tool-errors2025-09-27T01:29:11.415Zdaily0.7https://docs.arcade.dev/home/build-tools/retry-tools-with-improved-prompt2025-09-27T01:29:11.415Zdaily0.7https://docs.arcade.dev/home/build-tools/tool-context2025-09-27T01:29:11.415Zdaily0.7https://docs.arcade.dev/home/changelog2025-09-27T01:29:11.415Zdaily0.7https://docs.arcade.dev/home/contact-us2025-09-27T01:29:11.415Zdaily0.7https://docs.arcade.dev/home/crewai/custom-auth-flow2025-09-27T01:29:11.415Zdaily0.7https://docs.arcade.dev/home/crewai/use-arcade-tools2025-09-27T01:29:11.415Zdaily0.7https://docs.arcade.dev/home/evaluate-tools/create-an-evaluation-suite2025-09-27T01:29:11.415Zdaily0.7https://docs.arcade.dev/home/evaluate-tools/run-evaluations2025-09-27T01:29:11.415Zdaily0.7https://docs.arcade.dev/home/evaluate-tools/why-evaluate-tools2025-09-27T01:29:11.415Zdaily0.7https://docs.arcade.dev/home/faq2025-09-27T01:29:11.415Zdaily0.7https://docs.arcade.dev/home/glossary2025-09-27T01:29:11.415Zdaily0.7https://docs.arcade.dev/home/google-adk/overview2025-09-27T01:29:11.415Zdaily0.7https://docs.arcade.dev/home/google-adk/use-arcade-tools2025-09-27T01:29:11.415Zdaily0.7https://docs.arcade.dev/home/hosting-overview2025-09-27T01:29:11.415Zdaily0.7https://docs.arcade.dev/home/hybrid-deployment/hybrid-worker2025-09-27T01:29:11.415Zdaily0.7https://docs.arcade.dev/home/langchain/auth-langchain-tools2025-09-27T01:29:11.415Zdaily0.7https://docs.arcade.dev/home/langchain/use-arcade-tools2025-09-27T01:29:11.415Zdaily0.7https://docs.arcade.dev/home/langchain/user-auth-interrupts2025-09-27T01:29:11.415Zdaily0.7https://docs.arcade.dev/home/local-deployment/configure/arcade-deploy2025-09-27T01:29:11.415Zdaily0.7https://docs.arcade.dev/home/local-deployment/configure/engine2025-09-27T01:29:11.415Zdaily0.7https://docs.arcade.dev/home/local-deployment/configure/overview2025-09-27T01:29:11.415Zdaily0.7https://docs.arcade.dev/home/local-deployment/configure/templates2025-09-27T01:29:11.415Zdaily0.7https://docs.arcade.dev/home/local-deployment/install/docker2025-09-27T01:29:11.415Zdaily0.7https://docs.arcade.dev/home/local-deployment/install/local2025-09-27T01:29:11.415Zdaily0.7https://docs.arcade.dev/home/local-deployment/install/overview2025-09-27T01:29:11.415Zdaily0.7https://docs.arcade.dev/home/local-deployment/install/toolkits2025-09-27T01:29:11.415Zdaily0.7https://docs.arcade.dev/home/mastra/overview2025-09-27T01:29:11.415Zdaily0.7https://docs.arcade.dev/home/mastra/use-arcade-tools2025-09-27T01:29:11.415Zdaily0.7https://docs.arcade.dev/home/mastra/user-auth-interrupts2025-09-27T01:29:11.415Zdaily0.7https://docs.arcade.dev/home/mcp-desktop-clients/claude-desktop-client2025-09-27T01:29:11.416Zdaily0.7https://docs.arcade.dev/home/mcp-desktop-clients/vscode-client2025-09-27T01:29:11.416Zdaily0.7https://docs.arcade.dev/home/mcp-overview2025-09-27T01:29:11.416Zdaily0.7https://docs.arcade.dev/home/migrate-to-v22025-09-27T01:29:11.416Zdaily0.7https://docs.arcade.dev/home/oai-agents/overview2025-09-27T01:29:11.416Zdaily0.7https://docs.arcade.dev/home/oai-agents/use-arcade-tools2025-09-27T01:29:11.416Zdaily0.7https://docs.arcade.dev/home/oai-agents/user-auth-interrupts2025-09-27T01:29:11.416Zdaily0.7https://docs.arcade.dev/home/quickstart2025-09-27T01:29:11.416Zdaily0.7https://docs.arcade.dev/home/registry-early-access2025-09-27T01:29:11.416Zdaily0.7https://docs.arcade.dev/home/serve-tools/arcade-deploy2025-09-27T01:29:11.416Zdaily0.7https://docs.arcade.dev/home/serve-tools/docker-worker2025-09-27T01:29:11.416Zdaily0.7https://docs.arcade.dev/home/serve-tools/modal-worker2025-09-27T01:29:11.416Zdaily0.7https://docs.arcade.dev/home/use-tools/get-tool-definitions2025-09-27T01:29:11.416Zdaily0.7https://docs.arcade.dev/home/use-tools/tools-overview2025-09-27T01:29:11.416Zdaily0.7https://docs.arcade.dev/home/use-tools/types-of-tools2025-09-27T01:29:11.416Zdaily0.7https://docs.arcade.dev/home/vercelai/use-arcade-tools2025-09-27T01:29:11.416Zdaily0.7https://docs.arcade.dev/toolkits2025-09-27T01:29:11.416Zdaily0.7https://docs.arcade.dev/mcp-servers/community-toolkit-template2025-09-27T01:29:11.416Zdaily0.7https://docs.arcade.dev/mcp-servers/contribute-a-toolkit2025-09-27T01:29:11.416Zdaily0.7https://docs.arcade.dev/mcp-servers/customer-support/zendesk2025-09-27T01:29:11.416Zdaily0.7https://docs.arcade.dev/mcp-servers/customer-support/zendesk/reference2025-09-27T01:29:11.416Zdaily0.7https://docs.arcade.dev/mcp-servers/databases/clickhouse2025-09-27T01:29:11.416Zdaily0.7https://docs.arcade.dev/mcp-servers/databases/mongodb2025-09-27T01:29:11.416Zdaily0.7https://docs.arcade.dev/mcp-servers/databases/postgres2025-09-27T01:29:11.416Zdaily0.7https://docs.arcade.dev/mcp-servers/development/e2b2025-09-27T01:29:11.416Zdaily0.7https://docs.arcade.dev/mcp-servers/development/firecrawl/firecrawl2025-09-27T01:29:11.416Zdaily0.7https://docs.arcade.dev/mcp-servers/development/firecrawl/reference2025-09-27T01:29:11.416Zdaily0.7https://docs.arcade.dev/mcp-servers/development/github/github2025-09-27T01:29:11.416Zdaily0.7https://docs.arcade.dev/mcp-servers/development/github/reference2025-09-27T01:29:11.416Zdaily0.7https://docs.arcade.dev/mcp-servers/entertainment/imgflip2025-09-27T01:29:11.416Zdaily0.7https://docs.arcade.dev/mcp-servers/entertainment/spotify2025-09-27T01:29:11.416Zdaily0.7https://docs.arcade.dev/mcp-servers/entertainment/twitch2025-09-27T01:29:11.416Zdaily0.7https://docs.arcade.dev/mcp-servers/payments/stripe2025-09-27T01:29:11.416Zdaily0.7https://docs.arcade.dev/mcp-servers/productivity/asana2025-09-27T01:29:11.416Zdaily0.7https://docs.arcade.dev/mcp-servers/productivity/asana/reference2025-09-27T01:29:11.416Zdaily0.7https://docs.arcade.dev/mcp-servers/productivity/clickup2025-09-27T01:29:11.416Zdaily0.7https://docs.arcade.dev/mcp-servers/productivity/clickup/reference2025-09-27T01:29:11.416Zdaily0.7https://docs.arcade.dev/mcp-servers/productivity/closeio2025-09-27T01:29:11.416Zdaily0.7https://docs.arcade.dev/mcp-servers/productivity/confluence2025-09-27T01:29:11.416Zdaily0.7https://docs.arcade.dev/mcp-servers/productivity/dropbox/dropbox2025-09-27T01:29:11.416Zdaily0.7https://docs.arcade.dev/mcp-servers/productivity/dropbox/reference2025-09-27T01:29:11.416Zdaily0.7https://docs.arcade.dev/mcp-servers/productivity/gmail2025-09-27T01:29:11.416Zdaily0.7https://docs.arcade.dev/mcp-servers/productivity/gmail/reference2025-09-27T01:29:11.416Zdaily0.7https://docs.arcade.dev/mcp-servers/productivity/google\_calendar2025-09-27T01:29:11.416Zdaily0.7https://docs.arcade.dev/mcp-servers/productivity/google\_calendar/reference2025-09-27T01:29:11.416Zdaily0.7https://docs.arcade.dev/mcp-servers/productivity/google\_contacts2025-09-27T01:29:11.416Zdaily0.7https://docs.arcade.dev/mcp-servers/productivity/google\_docs2025-09-27T01:29:11.416Zdaily0.7https://docs.arcade.dev/mcp-servers/productivity/google\_docs/reference2025-09-27T01:29:11.416Zdaily0.7https://docs.arcade.dev/mcp-servers/productivity/google\_drive2025-09-27T01:29:11.416Zdaily0.7https://docs.arcade.dev/mcp-servers/productivity/google\_drive/reference2025-09-27T01:29:11.416Zdaily0.7https://docs.arcade.dev/mcp-servers/productivity/google\_sheets2025-09-27T01:29:11.416Zdaily0.7https://docs.arcade.dev/mcp-servers/productivity/google\_sheets/reference2025-09-27T01:29:11.416Zdaily0.7https://docs.arcade.dev/mcp-servers/productivity/google\_slides2025-09-27T01:29:11.416Zdaily0.7https://docs.arcade.dev/mcp-servers/productivity/jira2025-09-27T01:29:11.416Zdaily0.7https://docs.arcade.dev/mcp-servers/productivity/jira/environment\_variables2025-09-27T01:29:11.416Zdaily0.7https://docs.arcade.dev/mcp-servers/productivity/jira/reference2025-09-27T01:29:11.416Zdaily0.7https://docs.arcade.dev/mcp-servers/productivity/linear2025-09-27T01:29:11.416Zdaily0.7https://docs.arcade.dev/mcp-servers/productivity/notion2025-09-27T01:29:11.416Zdaily0.7https://docs.arcade.dev/mcp-servers/productivity/obsidian2025-09-27T01:29:11.416Zdaily0.7https://docs.arcade.dev/mcp-servers/productivity/outlook\_calendar2025-09-27T01:29:11.416Zdaily0.7https://docs.arcade.dev/mcp-servers/productivity/outlook\_mail2025-09-27T01:29:11.416Zdaily0.7https://docs.arcade.dev/mcp-servers/productivity/outlook\_mail/reference2025-09-27T01:29:11.416Zdaily0.7https://docs.arcade.dev/mcp-servers/productivity/sharepoint2025-09-27T01:29:11.416Zdaily0.7https://docs.arcade.dev/mcp-servers/sales/hubspot2025-09-27T01:29:11.416Zdaily0.7https://docs.arcade.dev/mcp-servers/sales/hubspot/reference2025-09-27T01:29:11.416Zdaily0.7https://docs.arcade.dev/mcp-servers/sales/salesforce2025-09-27T01:29:11.416Zdaily0.7https://docs.arcade.dev/mcp-servers/search/google\_finance2025-09-27T01:29:11.416Zdaily0.7https://docs.arcade.dev/mcp-servers/search/google\_flights2025-09-27T01:29:11.416Zdaily0.7https://docs.arcade.dev/mcp-servers/search/google\_hotels2025-09-27T01:29:11.416Zdaily0.7https://docs.arcade.dev/mcp-servers/search/google\_jobs2025-09-27T01:29:11.416Zdaily0.7https://docs.arcade.dev/mcp-servers/search/google\_maps2025-09-27T01:29:11.416Zdaily0.7https://docs.arcade.dev/mcp-servers/search/google\_news2025-09-27T01:29:11.416Zdaily0.7https://docs.arcade.dev/mcp-servers/search/google\_search2025-09-27T01:29:11.416Zdaily0.7https://docs.arcade.dev/mcp-servers/search/google\_shopping2025-09-27T01:29:11.416Zdaily0.7https://docs.arcade.dev/mcp-servers/search/walmart2025-09-27T01:29:11.416Zdaily0.7https://docs.arcade.dev/mcp-servers/search/youtube2025-09-27T01:29:11.416Zdaily0.7https://docs.arcade.dev/mcp-servers/social-communication/discord2025-09-27T01:29:11.416Zdaily0.7https://docs.arcade.dev/mcp-servers/social-communication/linkedin2025-09-27T01:29:11.416Zdaily0.7https://docs.arcade.dev/mcp-servers/social-communication/microsoft\_teams2025-09-27T01:29:11.416Zdaily0.7https://docs.arcade.dev/mcp-servers/social-communication/microsoft\_teams/reference2025-09-27T01:29:11.416Zdaily0.7https://docs.arcade.dev/mcp-servers/social-communication/reddit2025-09-27T01:29:11.416Zdaily0.7https://docs.arcade.dev/mcp-servers/social-communication/slack2025-09-27T01:29:11.416Zdaily0.7https://docs.arcade.dev/mcp-servers/social-communication/slack/environment\_variables2025-09-27T01:29:11.416Zdaily0.7https://docs.arcade.dev/mcp-servers/social-communication/slack/install2025-09-27T01:29:11.416Zdaily0.7https://docs.arcade.dev/mcp-servers/social-communication/slack/reference2025-09-27T01:29:11.416Zdaily0.7https://docs.arcade.dev/mcp-servers/social-communication/slack\_api2025-09-27T01:29:11.416Zdaily0.7https://docs.arcade.dev/mcp-servers/social-communication/teams/reference2025-09-27T01:29:11.416Zdaily0.7https://docs.arcade.dev/mcp-servers/social-communication/twilio/readme2025-09-27T01:29:11.416Zdaily0.7https://docs.arcade.dev/mcp-servers/social-communication/twilio/reference2025-09-27T01:29:11.416Zdaily0.7https://docs.arcade.dev/mcp-servers/social-communication/x2025-09-27T01:29:11.416Zdaily0.7https://docs.arcade.dev/mcp-servers/social-communication/zoom2025-09-27T01:29:11.416Zdaily0.7https://docs.arcade.dev/mcp-servers/social-communication/zoom/install2025-09-27T01:29:11.416Zdaily0.7 ## OAuth 2.0 Setup [Home](https://docs.arcade.dev/home "Home") [Customizing Auth](https://docs.arcade.dev/home/auth-providers "Customizing Auth") OAuth 2.0 @@ -7941,7 +7941,7 @@ token = auth_response.context.token ## Using OAuth 2.0 in custom tools [Permalink for this section](https://docs.arcade.dev/home/auth-providers/oauth2\#using-oauth-20-in-custom-tools) -You can author your own [custom tools](https://docs.arcade.dev/home/build-tools/create-a-toolkit) that interact with any OAuth 2.0-compatible APIs. +You can author your own [custom tools](https://docs.arcade.dev/home/build-tools/create-a-mcp-server) that interact with any OAuth 2.0-compatible APIs. Use the `OAuth2()` auth class to specify that a tool requires OAuth 2.0 authorization. In your tool function, `context.authorization` will be automatically populated with the following properties: @@ -7986,11 +7986,11 @@ This will be shown if an incident or maintenance is posted on your status page. [View latest updates](https://status.arcade.dev/?utm_source=embed) ## Slack Environment Variables -[Integrations](https://docs.arcade.dev/toolkits "Integrations") [Social & Communication](https://docs.arcade.dev/toolkits/social-communication/discord "Social & Communication") [Slack](https://docs.arcade.dev/toolkits/social-communication/slack "Slack") Environment Variables +[Integrations](https://docs.arcade.dev/toolkits "Integrations") [Social & Communication](https://docs.arcade.dev/mcp-servers/social-communication/discord "Social & Communication") [Slack](https://docs.arcade.dev/mcp-servers/social-communication/slack "Slack") Environment Variables # Slack Environment Variables -### `SLACK_MAX_CONCURRENT_REQUESTS` [Permalink for this section](https://docs.arcade.dev/toolkits/social-communication/slack/environment_variables\#slack_max_concurrent_requests) +### `SLACK_MAX_CONCURRENT_REQUESTS` [Permalink for this section](https://docs.arcade.dev/mcp-servers/social-communication/slack/environment_variables\#slack_max_concurrent_requests) Arcade uses asynchronous calls to request Slack API endpoints. In some tools, multiple concurrent HTTP requests may be issued to speed up execution. This environment variable controls the maximum number of concurrent requests to Slack API in any tool execution. @@ -7998,19 +7998,19 @@ The value must be a numeric string with an integer greater than or equal to 1. **Default:** `3` -### `MAX_PAGINATION_SIZE_LIMIT` [Permalink for this section](https://docs.arcade.dev/toolkits/social-communication/slack/environment_variables\#max_pagination_size_limit) +### `MAX_PAGINATION_SIZE_LIMIT` [Permalink for this section](https://docs.arcade.dev/mcp-servers/social-communication/slack/environment_variables\#max_pagination_size_limit) This environment variable controls the maximum number of items requested in a single call to a Slack API endpoint. Some of the Slack tools allow the tool caller to request a larger number of items per tool call, but the tool will paginate the results internally while respecting the `MAX_PAGINATION_SIZE_LIMIT`. **Default:** `200` (Slack supports, but discourages a limit larger than 200) -### `MAX_PAGINATION_TIMEOUT_SECONDS` [Permalink for this section](https://docs.arcade.dev/toolkits/social-communication/slack/environment_variables\#max_pagination_timeout_seconds) +### `MAX_PAGINATION_TIMEOUT_SECONDS` [Permalink for this section](https://docs.arcade.dev/mcp-servers/social-communication/slack/environment_variables\#max_pagination_timeout_seconds) Controls the maximum number of seconds any given Slack tool should wait while paginating responses from the Slack API. **Default:** `30` (expressed in seconds) -[Slack](https://docs.arcade.dev/toolkits/social-communication/slack "Slack") [Reference](https://docs.arcade.dev/toolkits/social-communication/slack/reference "Reference") +[Slack](https://docs.arcade.dev/mcp-servers/social-communication/slack "Slack") [Reference](https://docs.arcade.dev/mcp-servers/social-communication/slack/reference "Reference") Frame @@ -8084,13 +8084,13 @@ This will be shown if an incident or maintenance is posted on your status page. [View latest updates](https://status.arcade.dev/?utm_source=embed) ## Google Sheets Reference -[Integrations](https://docs.arcade.dev/toolkits "Integrations") [Productivity & Docs](https://docs.arcade.dev/toolkits/productivity/asana "Productivity & Docs") [Google Sheets](https://docs.arcade.dev/toolkits/productivity/google_sheets "Google Sheets") Reference +[Integrations](https://docs.arcade.dev/toolkits "Integrations") [Productivity & Docs](https://docs.arcade.dev/mcp-servers/productivity/asana "Productivity & Docs") [Google Sheets](https://docs.arcade.dev/mcp-servers/productivity/google_sheets "Google Sheets") Reference # GoogleSheets Reference Below is a reference of enumerations used by some tools in the GoogleSheets toolkit: -## OrderBy [Permalink for this section](https://docs.arcade.dev/toolkits/productivity/google_sheets/reference\#orderby) +## OrderBy [Permalink for this section](https://docs.arcade.dev/mcp-servers/productivity/google_sheets/reference\#orderby) - **CREATED\_TIME**: `createdTime` - **CREATED\_TIME\_DESC**: `createdTime desc` @@ -8115,7 +8115,7 @@ Below is a reference of enumerations used by some tools in the GoogleSheets tool - **VIEWED\_BY\_ME\_TIME**: `viewedByMeTime` - **VIEWED\_BY\_ME\_TIME\_DESC**: `viewedByMeTime desc` -[Google Sheets](https://docs.arcade.dev/toolkits/productivity/google_sheets "Google Sheets") [Jira](https://docs.arcade.dev/toolkits/productivity/jira "Jira") +[Google Sheets](https://docs.arcade.dev/mcp-servers/productivity/google_sheets "Google Sheets") [Jira](https://docs.arcade.dev/mcp-servers/productivity/jira "Jira") Frame @@ -8127,7 +8127,7 @@ This will be shown if an incident or maintenance is posted on your status page. [View latest updates](https://status.arcade.dev/?utm_source=embed) ## Outlook Calendar Toolkit -[Integrations](https://docs.arcade.dev/toolkits "Integrations") [Productivity & Docs](https://docs.arcade.dev/toolkits/productivity/asana "Productivity & Docs") Outlook Calendar +[Integrations](https://docs.arcade.dev/toolkits "Integrations") [Productivity & Docs](https://docs.arcade.dev/mcp-servers/productivity/asana "Productivity & Docs") Outlook Calendar # Outlook Calendar @@ -8139,13 +8139,13 @@ This will be shown if an incident or maintenance is posted on your status page. [![PyPI Version](https://img.shields.io/pypi/v/arcade_outlook_calendar)](https://pypi.org/project/arcade_outlook_calendar/)[![License](https://img.shields.io/badge/License-MIT-yellow.svg)](https://github.com/arcadeai/arcade-ai/blob/main/LICENSE)[![Python Versions](https://img.shields.io/pypi/pyversions/arcade_outlook_calendar)](https://pypi.org/project/arcade_outlook_calendar/)[![Wheel Status](https://img.shields.io/pypi/wheel/arcade_outlook_calendar)](https://pypi.org/project/arcade_outlook_calendar/)[![Downloads](https://img.shields.io/pypi/dm/arcade_outlook_calendar)](https://pypi.org/project/arcade_outlook_calendar/) -The Arcade Outlook Calendar toolkit provides pre-built tools for working with calendar events using the Outlook API. Use these tools to: +The Arcade Outlook Calendar MCP Server provides pre-built tools for working with calendar events using the Outlook API. Use these tools to: - Create events - List events - Get an event -## Available Tools [Permalink for this section](https://docs.arcade.dev/toolkits/productivity/outlook_calendar\#available-tools) +## Available Tools [Permalink for this section](https://docs.arcade.dev/mcp-servers/productivity/outlook_calendar\#available-tools) These tools are currently available in the Arcade Outlook Calendar toolkit. @@ -8158,10 +8158,10 @@ These tools are currently available in the Arcade Outlook Calendar toolkit. 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](https://docs.arcade.dev/home/build-tools/create-a-toolkit) with the [Google auth\\ +own tools](https://docs.arcade.dev/home/build-tools/create-a-mcp-server) with the [Google auth\\ provider](https://docs.arcade.dev/home/auth-providers/google#using-google-auth-in-custom-tools). -## OutlookCalendar.WhoAmI [Permalink for this section](https://docs.arcade.dev/toolkits/productivity/outlook_calendar\#outlookcalendarwhoami) +## OutlookCalendar.WhoAmI [Permalink for this section](https://docs.arcade.dev/mcp-servers/productivity/outlook_calendar\#outlookcalendarwhoami) Get information about the current user and their Outlook Calendar environment. @@ -8173,7 +8173,7 @@ This tool does not take any parameters. * * * -## OutlookCalendar.CreateEvent [Permalink for this section](https://docs.arcade.dev/toolkits/productivity/outlook_calendar\#outlookcalendarcreateevent) +## OutlookCalendar.CreateEvent [Permalink for this section](https://docs.arcade.dev/mcp-servers/productivity/outlook_calendar\#outlookcalendarcreateevent) Create an event in the authenticated user’s default calendar. @@ -8195,7 +8195,7 @@ See Example > * * * -## OutlookCalendar.GetEvent [Permalink for this section](https://docs.arcade.dev/toolkits/productivity/outlook_calendar\#outlookcalendargetevent) +## OutlookCalendar.GetEvent [Permalink for this section](https://docs.arcade.dev/mcp-servers/productivity/outlook_calendar\#outlookcalendargetevent) Get an event by its ID from the user’s calendar. @@ -8207,7 +8207,7 @@ See Example > * * * -## OutlookCalendar.ListEventsInTimeRange [Permalink for this section](https://docs.arcade.dev/toolkits/productivity/outlook_calendar\#outlookcalendarlisteventsintimerange) +## OutlookCalendar.ListEventsInTimeRange [Permalink for this section](https://docs.arcade.dev/mcp-servers/productivity/outlook_calendar\#outlookcalendarlisteventsintimerange) List events in the user’s calendar in a specific time range. @@ -8225,7 +8225,7 @@ See Example > * * * -## Auth [Permalink for this section](https://docs.arcade.dev/toolkits/productivity/outlook_calendar\#auth) +## Auth [Permalink for this section](https://docs.arcade.dev/mcp-servers/productivity/outlook_calendar\#auth) The Arcade Outlook Calendar toolkit uses the [Microsoft auth provider](https://docs.arcade.dev/home/auth-providers/microsoft) to connect to users’ Microsoft accounts. @@ -8249,7 +8249,7 @@ Arcade tools can be self-hosted on your own infrastructure. Learn more about sel pip install arcade_outlook_calendar\\ ```](https://docs.arcade.dev/home/hosting-overview) -[Obsidian](https://docs.arcade.dev/toolkits/productivity/obsidian "Obsidian") [Outlook Mail](https://docs.arcade.dev/toolkits/productivity/outlook_mail "Outlook Mail") +[Obsidian](https://docs.arcade.dev/mcp-servers/productivity/obsidian "Obsidian") [Outlook Mail](https://docs.arcade.dev/mcp-servers/productivity/outlook_mail "Outlook Mail") Frame @@ -8261,20 +8261,20 @@ This will be shown if an incident or maintenance is posted on your status page. [View latest updates](https://status.arcade.dev/?utm_source=embed) ## Slack Toolkit Reference -[Integrations](https://docs.arcade.dev/toolkits "Integrations") [Social & Communication](https://docs.arcade.dev/toolkits/social-communication/discord "Social & Communication") [Slack](https://docs.arcade.dev/toolkits/social-communication/slack "Slack") Reference +[Integrations](https://docs.arcade.dev/toolkits "Integrations") [Social & Communication](https://docs.arcade.dev/mcp-servers/social-communication/discord "Social & Communication") [Slack](https://docs.arcade.dev/mcp-servers/social-communication/slack "Slack") Reference # Slack Reference Below is a reference of enumerations used by some tools in the Slack toolkit: -## ConversationType [Permalink for this section](https://docs.arcade.dev/toolkits/social-communication/slack/reference\#conversationtype) +## ConversationType [Permalink for this section](https://docs.arcade.dev/mcp-servers/social-communication/slack/reference\#conversationtype) - **PUBLIC\_CHANNEL**: `public_channel` - **PRIVATE\_CHANNEL**: `private_channel` - **MULTI\_PERSON\_DIRECT\_MESSAGE**: `multi_person_direct_message` - **DIRECT\_MESSAGE**: `direct_message` -[Environment Variables](https://docs.arcade.dev/toolkits/social-communication/slack/environment_variables "Environment Variables") [Readme](https://docs.arcade.dev/toolkits/social-communication/twilio/readme "Readme") +[Environment Variables](https://docs.arcade.dev/mcp-servers/social-communication/slack/environment_variables "Environment Variables") [Readme](https://docs.arcade.dev/mcp-servers/social-communication/twilio/readme "Readme") Frame @@ -8460,7 +8460,7 @@ This will be shown if an incident or maintenance is posted on your status page. [View latest updates](https://status.arcade.dev/?utm_source=embed) ## Walmart Product Search -[Integrations](https://docs.arcade.dev/toolkits "Integrations") [Search Tools](https://docs.arcade.dev/toolkits/search/google_finance "Search Tools") Walmart +[Integrations](https://docs.arcade.dev/toolkits "Integrations") [Search Tools](https://docs.arcade.dev/mcp-servers/search/google_finance "Search Tools") Walmart # Walmart Search @@ -8472,12 +8472,12 @@ This will be shown if an incident or maintenance is posted on your status page. [![PyPI Version](https://img.shields.io/pypi/v/arcade_walmart)](https://pypi.org/project/arcade_walmart/)[![License](https://img.shields.io/badge/License-MIT-yellow.svg)](https://github.com/arcadeai/arcade-ai/blob/main/LICENSE)[![Python Versions](https://img.shields.io/pypi/pyversions/arcade_walmart)](https://pypi.org/project/arcade_walmart/)[![Wheel Status](https://img.shields.io/pypi/wheel/arcade_walmart)](https://pypi.org/project/arcade_walmart/)[![Downloads](https://img.shields.io/pypi/dm/arcade_walmart)](https://pypi.org/project/arcade_walmart/) -The Arcade Walmart Search toolkit provides a pre-built set of tools for interacting with Walmart. These tools make it easy to build agents and AI apps that can: +The Arcade Walmart Search MCP Server provides a pre-built set of tools for interacting with Walmart. These tools make it easy to build agents and AI apps that can: - Search for products listed on Walmart stores; - Get details about a product. -## Available Tools [Permalink for this section](https://docs.arcade.dev/toolkits/search/walmart\#available-tools) +## Available Tools [Permalink for this section](https://docs.arcade.dev/mcp-servers/search/walmart\#available-tools) | Tool Name | Description | | --- | --- | @@ -8486,9 +8486,9 @@ The Arcade Walmart Search toolkit provides a pre-built set of tools for interact 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](https://docs.arcade.dev/home/build-tools/create-a-toolkit). +own tools](https://docs.arcade.dev/home/build-tools/create-a-mcp-server). -## Walmart.SearchProducts [Permalink for this section](https://docs.arcade.dev/toolkits/search/walmart\#walmartsearchproducts) +## Walmart.SearchProducts [Permalink for this section](https://docs.arcade.dev/mcp-servers/search/walmart\#walmartsearchproducts) See Example > @@ -8497,13 +8497,13 @@ Search for products listed on Walmart stores. **Parameters** - **keywords** _(string, required)_ Keywords to search for. E.g. β€˜apple iphone’ or β€˜samsung galaxy’ -- **sort\_by** _(enum [WalmartSortBy](https://docs.arcade.dev/toolkits/search/walmart#walmartsortby), optional, Defaults to `WalmartSortBy.RELEVANCE`)_ Sort the results by the specified criteria. Defaults to `WalmartSortBy.RELEVANCE`. +- **sort\_by** _(enum [WalmartSortBy](https://docs.arcade.dev/mcp-servers/search/walmart#walmartsortby), optional, Defaults to `WalmartSortBy.RELEVANCE`)_ Sort the results by the specified criteria. Defaults to `WalmartSortBy.RELEVANCE`. - **min\_price** _(float, optional, Defaults to `None`)_ Minimum price to filter the results. - **max\_price** _(float, optional, Defaults to `None`)_ Maximum price to filter the results. - **next\_day\_delivery** _(bool, optional, Defaults to `False`)_ Whether to filter the results by next day delivery. Defaults to False (returns all products, regardless of delivery status). - **page** _(int, optional, Defaults to `1`)_ Page number to fetch. Defaults to 1 (first page of results). The maximum page value is 100. -## Walmart.GetProductDetails [Permalink for this section](https://docs.arcade.dev/toolkits/search/walmart\#walmartgetproductdetails) +## Walmart.GetProductDetails [Permalink for this section](https://docs.arcade.dev/mcp-servers/search/walmart\#walmartgetproductdetails) See Example > @@ -8513,7 +8513,7 @@ Get details about a product listed on Walmart. - **item\_id** _(string, required)_ Item ID. E.g. β€˜414600577’. This can be retrieved from the search results of the `SearchWalmartProducts` tool. -## Auth [Permalink for this section](https://docs.arcade.dev/toolkits/search/walmart\#auth) +## Auth [Permalink for this section](https://docs.arcade.dev/mcp-servers/search/walmart\#auth) The Arcade Walmart Search toolkit uses the [SerpAPI](https://serpapi.com/) to get product information from Walmart. @@ -8524,9 +8524,9 @@ Setting the `SERP_API_KEY` secret is only required if you are [self-hosting](htt * * * -## Reference [Permalink for this section](https://docs.arcade.dev/toolkits/search/walmart\#reference) +## Reference [Permalink for this section](https://docs.arcade.dev/mcp-servers/search/walmart\#reference) -## WalmartSortBy [Permalink for this section](https://docs.arcade.dev/toolkits/search/walmart\#walmartsortby) +## WalmartSortBy [Permalink for this section](https://docs.arcade.dev/mcp-servers/search/walmart\#walmartsortby) - **`RELEVANCE`**: `'relevance_according_to_keywords_searched'` \- Sort by relevance. - **`PRICE_LOW_TO_HIGH`**: `'lowest_price_first'` \- Sort by price from low to high. @@ -8549,7 +8549,7 @@ Arcade tools can be self-hosted on your own infrastructure. Learn more about sel pip install arcade_walmart\\ ```](https://docs.arcade.dev/home/hosting-overview) -[Google Shopping](https://docs.arcade.dev/toolkits/search/google_shopping "Google Shopping") [Youtube](https://docs.arcade.dev/toolkits/search/youtube "Youtube") +[Google Shopping](https://docs.arcade.dev/mcp-servers/search/google_shopping "Google Shopping") [Youtube](https://docs.arcade.dev/mcp-servers/search/youtube "Youtube") Frame @@ -8561,13 +8561,13 @@ This will be shown if an incident or maintenance is posted on your status page. [View latest updates](https://status.arcade.dev/?utm_source=embed) ## Zendesk Toolkit Reference -[Integrations](https://docs.arcade.dev/toolkits "Integrations") Customer Support [Zendesk](https://docs.arcade.dev/toolkits/customer-support/zendesk "Zendesk") Reference +[Integrations](https://docs.arcade.dev/toolkits "Integrations") Customer Support [Zendesk](https://docs.arcade.dev/mcp-servers/customer-support/zendesk "Zendesk") Reference # Zendesk Reference Below is a reference of enumerations used by some tools in the Zendesk toolkit: -## TicketStatus [Permalink for this section](https://docs.arcade.dev/toolkits/customer-support/zendesk/reference\#ticketstatus) +## TicketStatus [Permalink for this section](https://docs.arcade.dev/mcp-servers/customer-support/zendesk/reference\#ticketstatus) - **NEW**: `new` - **OPEN**: `open` @@ -8575,17 +8575,17 @@ Below is a reference of enumerations used by some tools in the Zendesk toolkit: - **SOLVED**: `solved` - **CLOSED**: `closed` -## SortOrder [Permalink for this section](https://docs.arcade.dev/toolkits/customer-support/zendesk/reference\#sortorder) +## SortOrder [Permalink for this section](https://docs.arcade.dev/mcp-servers/customer-support/zendesk/reference\#sortorder) - **ASC**: `asc` - **DESC**: `desc` -## ArticleSortBy [Permalink for this section](https://docs.arcade.dev/toolkits/customer-support/zendesk/reference\#articlesortby) +## ArticleSortBy [Permalink for this section](https://docs.arcade.dev/mcp-servers/customer-support/zendesk/reference\#articlesortby) - **CREATED\_AT**: `created_at` - **RELEVANCE**: `relevance` -[Zendesk](https://docs.arcade.dev/toolkits/customer-support/zendesk "Zendesk") [Contribute a toolkit](https://docs.arcade.dev/toolkits/contribute-a-toolkit "Contribute a toolkit") +[Zendesk](https://docs.arcade.dev/mcp-servers/customer-support/zendesk "Zendesk") [Contribute a toolkit](https://docs.arcade.dev/mcp-servers/contribute-a-toolkit "Contribute a toolkit") Frame @@ -8821,7 +8821,7 @@ This will be shown if an incident or maintenance is posted on your status page. [View latest updates](https://status.arcade.dev/?utm_source=embed) ## Google Calendar Toolkit -[Integrations](https://docs.arcade.dev/toolkits "Integrations") [Productivity & Docs](https://docs.arcade.dev/toolkits/productivity/asana "Productivity & Docs") Google Calendar +[Integrations](https://docs.arcade.dev/toolkits "Integrations") [Productivity & Docs](https://docs.arcade.dev/mcp-servers/productivity/asana "Productivity & Docs") Google Calendar # Google Calendar @@ -8833,13 +8833,13 @@ This will be shown if an incident or maintenance is posted on your status page. [![PyPI Version](https://img.shields.io/pypi/v/arcade_google_calendar)](https://pypi.org/project/arcade_google_calendar/)[![License](https://img.shields.io/badge/License-MIT-yellow.svg)](https://github.com/arcadeai/arcade-ai/blob/main/LICENSE)[![Python Versions](https://img.shields.io/pypi/pyversions/arcade_google_calendar)](https://pypi.org/project/arcade_google_calendar/)[![Wheel Status](https://img.shields.io/pypi/wheel/arcade_google_calendar)](https://pypi.org/project/arcade_google_calendar/)[![Downloads](https://img.shields.io/pypi/dm/arcade_google_calendar)](https://pypi.org/project/arcade_google_calendar/) -The Arcade Google Calendar toolkit provides a pre-built set of tools for interacting with a user’s Google Calendar. These tools make it easy to build agents and apps that can: +The Arcade Google Calendar MCP Server provides a pre-built set of tools for interacting with a user’s Google Calendar. These tools make it easy to build agents and apps that can: - Discover calendars accessible to the user and inspect user/profile/calendar environment (ListCalendars, WhoAmI). - Create, update, list, and delete events (CreateEvent, UpdateEvent, ListEvents, DeleteEvent). - Find available meeting times across attendees within a date/time range (FindTimeSlotsWhenEveryoneIsFree). -## Available Tools [Permalink for this section](https://docs.arcade.dev/toolkits/productivity/google_calendar\#available-tools) +## Available Tools [Permalink for this section](https://docs.arcade.dev/mcp-servers/productivity/google_calendar\#available-tools) These tools are currently available in the Arcade Google Calendar toolkit. @@ -8855,10 +8855,10 @@ These tools are currently available in the Arcade Google Calendar toolkit. 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](https://docs.arcade.dev/home/build-tools/create-a-toolkit) with the [Google auth\\ +own tools](https://docs.arcade.dev/home/build-tools/create-a-mcp-server) with the [Google auth\\ provider](https://docs.arcade.dev/home/auth-providers/google#using-google-auth-in-custom-tools). -## GoogleCalendar.ListCalendars [Permalink for this section](https://docs.arcade.dev/toolkits/productivity/google_calendar\#googlecalendarlistcalendars) +## GoogleCalendar.ListCalendars [Permalink for this section](https://docs.arcade.dev/mcp-servers/productivity/google_calendar\#googlecalendarlistcalendars) See Example > @@ -8871,7 +8871,7 @@ List all calendars accessible by the user. - **`show_hidden`** ( `boolean`, optional) Whether to show hidden calendars. Defaults to False - **`next_page_token`** ( `string`, optional) The token to retrieve the next page of calendars. Optional. -## GoogleCalendar.CreateEvent [Permalink for this section](https://docs.arcade.dev/toolkits/productivity/google_calendar\#googlecalendarcreateevent) +## GoogleCalendar.CreateEvent [Permalink for this section](https://docs.arcade.dev/mcp-servers/productivity/google_calendar\#googlecalendarcreateevent) See Example > @@ -8885,12 +8885,12 @@ Create a new event/meeting/sync/meetup in the specified calendar. - **`calendar_id`** ( `string`, optional) The ID of the calendar to create the event in, usually β€˜primary’. - **`description`** ( `string`, optional) The description of the event - **`location`** ( `string`, optional) The location of the event -- **`visibility`** ( `Enum` [EventVisibility](https://docs.arcade.dev/toolkits/productivity/google_calendar/reference#EventVisibility), optional) The visibility of the event +- **`visibility`** ( `Enum` [EventVisibility](https://docs.arcade.dev/mcp-servers/productivity/google_calendar/reference#EventVisibility), optional) The visibility of the event - **`attendee_emails`** ( `array[string]`, optional) The list of attendee emails. Must be valid email addresses e.g., [username@domain.com](mailto:username@domain.com). -- **`send_notifications_to_attendees`** ( `Enum` [SendUpdatesOptions](https://docs.arcade.dev/toolkits/productivity/google_calendar/reference#SendUpdatesOptions), optional) Should attendees be notified by email of the invitation? (none, all, external\_only) +- **`send_notifications_to_attendees`** ( `Enum` [SendUpdatesOptions](https://docs.arcade.dev/mcp-servers/productivity/google_calendar/reference#SendUpdatesOptions), optional) Should attendees be notified by email of the invitation? (none, all, external\_only) - **`add_google_meet`** ( `boolean`, optional) Whether to add a Google Meet link to the event. Defaults to False. -## GoogleCalendar.ListEvents [Permalink for this section](https://docs.arcade.dev/toolkits/productivity/google_calendar\#googlecalendarlistevents) +## GoogleCalendar.ListEvents [Permalink for this section](https://docs.arcade.dev/mcp-servers/productivity/google_calendar\#googlecalendarlistevents) See Example > @@ -8910,7 +8910,7 @@ For example: If min\_end\_datetime is set to 2024-09-15T09:00:00 and max\_start\ - **`calendar_id`** ( `string`, optional) The ID of the calendar to list events from - **`max_results`** ( `integer`, optional) The maximum number of events to return -## GoogleCalendar.UpdateEvent [Permalink for this section](https://docs.arcade.dev/toolkits/productivity/google_calendar\#googlecalendarupdateevent) +## GoogleCalendar.UpdateEvent [Permalink for this section](https://docs.arcade.dev/mcp-servers/productivity/google_calendar\#googlecalendarupdateevent) See Example > @@ -8927,13 +8927,13 @@ Update an existing event in the specified calendar with the provided details. On - **`updated_summary`** ( `string`, optional) The updated title of the event - **`updated_description`** ( `string`, optional) The updated description of the event - **`updated_location`** ( `string`, optional) The updated location of the event -- **`updated_visibility`** ( `Enum` [EventVisibility](https://docs.arcade.dev/toolkits/productivity/google_calendar/reference#EventVisibility), optional) The visibility of the event +- **`updated_visibility`** ( `Enum` [EventVisibility](https://docs.arcade.dev/mcp-servers/productivity/google_calendar/reference#EventVisibility), optional) The visibility of the event - **`attendee_emails_to_add`** ( `array[string]`, optional) The list of attendee emails to add. Must be valid email addresses e.g., [username@domain.com](mailto:username@domain.com). - **`attendee_emails_to_remove`** ( `array[string]`, optional) The list of attendee emails to remove. Must be valid email addresses e.g., [username@domain.com](mailto:username@domain.com). -- **`send_notifications_to_attendees`** ( `Enum` [SendUpdatesOptions](https://docs.arcade.dev/toolkits/productivity/google_calendar/reference#SendUpdatesOptions), optional) Should attendees be notified of the update? (none, all, external\_only) -- **`update_google_meet`** ( `Enum` [UpdateGoogleMeetOptions](https://docs.arcade.dev/toolkits/productivity/google_calendar/reference#UpdateGoogleMeetOptions), optional) Whether to update the Google Meet link to the event. (none, add, remove) +- **`send_notifications_to_attendees`** ( `Enum` [SendUpdatesOptions](https://docs.arcade.dev/mcp-servers/productivity/google_calendar/reference#SendUpdatesOptions), optional) Should attendees be notified of the update? (none, all, external\_only) +- **`update_google_meet`** ( `Enum` [UpdateGoogleMeetOptions](https://docs.arcade.dev/mcp-servers/productivity/google_calendar/reference#UpdateGoogleMeetOptions), optional) Whether to update the Google Meet link to the event. (none, add, remove) -## GoogleCalendar.DeleteEvent [Permalink for this section](https://docs.arcade.dev/toolkits/productivity/google_calendar\#googlecalendardeleteevent) +## GoogleCalendar.DeleteEvent [Permalink for this section](https://docs.arcade.dev/mcp-servers/productivity/google_calendar\#googlecalendardeleteevent) See Example > @@ -8943,9 +8943,9 @@ Delete an event from Google Calendar. - **`event_id`** ( `string`, required) The ID of the event to delete - **`calendar_id`** ( `string`, optional) The ID of the calendar containing the event -- **`send_updates`** ( `Enum` [SendUpdatesOptions](https://docs.arcade.dev/toolkits/productivity/google_calendar/reference#SendUpdatesOptions), optional) Specifies which attendees to notify about the deletion +- **`send_updates`** ( `Enum` [SendUpdatesOptions](https://docs.arcade.dev/mcp-servers/productivity/google_calendar/reference#SendUpdatesOptions), optional) Specifies which attendees to notify about the deletion -## GoogleCalendar.FindTimeSlotsWhenEveryoneIsFree [Permalink for this section](https://docs.arcade.dev/toolkits/productivity/google_calendar\#googlecalendarfindtimeslotswheneveryoneisfree) +## GoogleCalendar.FindTimeSlotsWhenEveryoneIsFree [Permalink for this section](https://docs.arcade.dev/mcp-servers/productivity/google_calendar\#googlecalendarfindtimeslotswheneveryoneisfree) See Example > @@ -8959,7 +8959,7 @@ Provides time slots when everyone is free within a given date range and time bou - **`start_time_boundary`** ( `string`, optional) Will return free slots in any given day starting from this time in the format β€˜HH:MM’. Defaults to β€˜08:00’, which is a usual business hour start time. - **`end_time_boundary`** ( `string`, optional) Will return free slots in any given day until this time in the format β€˜HH:MM’. Defaults to β€˜18:00’, which is a usual business hour end time. -## GoogleCalendar.WhoAmI [Permalink for this section](https://docs.arcade.dev/toolkits/productivity/google_calendar\#googlecalendarwhoami) +## GoogleCalendar.WhoAmI [Permalink for this section](https://docs.arcade.dev/mcp-servers/productivity/google_calendar\#googlecalendarwhoami) See Example > @@ -8971,7 +8971,7 @@ This tool does not take any parameters. * * * -## Auth [Permalink for this section](https://docs.arcade.dev/toolkits/productivity/google_calendar\#auth) +## Auth [Permalink for this section](https://docs.arcade.dev/mcp-servers/productivity/google_calendar\#auth) The Arcade Google Calendar toolkit uses the [Google auth provider](https://docs.arcade.dev/home/auth-providers/google) to connect to users’ Google accounts. @@ -8981,9 +8981,9 @@ With a self-hosted installation of Arcade, you need to [configure the Google aut * * * -## Reference [Permalink for this section](https://docs.arcade.dev/toolkits/productivity/google_calendar\#reference) +## Reference [Permalink for this section](https://docs.arcade.dev/mcp-servers/productivity/google_calendar\#reference) -### EventVisibility [Permalink for this section](https://docs.arcade.dev/toolkits/productivity/google_calendar\#eventvisibility) +### EventVisibility [Permalink for this section](https://docs.arcade.dev/mcp-servers/productivity/google_calendar\#eventvisibility) Defines the visibility of an event. @@ -8992,13 +8992,13 @@ Defines the visibility of an event. - **`PRIVATE`**: Private visibility. - **`CONFIDENTIAL`**: Confidential visibility. -### SendUpdatesOptions [Permalink for this section](https://docs.arcade.dev/toolkits/productivity/google_calendar\#sendupdatesoptions) +### SendUpdatesOptions [Permalink for this section](https://docs.arcade.dev/mcp-servers/productivity/google_calendar\#sendupdatesoptions) - **`NONE`**: No notifications are sent. - **`ALL`**: Notifications are sent to all guests. - **`EXTERNAL_ONLY`**: Notifications are sent to non-Google Calendar guests only. -## UpdateGoogleMeetOptions [Permalink for this section](https://docs.arcade.dev/toolkits/productivity/google_calendar\#updategooglemeetoptions) +## UpdateGoogleMeetOptions [Permalink for this section](https://docs.arcade.dev/mcp-servers/productivity/google_calendar\#updategooglemeetoptions) - **`NONE`**: No action is taken. - **`ADD`**: Add the Google Meet link to the event. @@ -9018,7 +9018,7 @@ Arcade tools can be self-hosted on your own infrastructure. Learn more about sel pip install arcade_google_calendar\\ ```](https://docs.arcade.dev/home/hosting-overview) -[Reference](https://docs.arcade.dev/toolkits/productivity/gmail/reference "Reference") [Reference](https://docs.arcade.dev/toolkits/productivity/google_calendar/reference "Reference") +[Reference](https://docs.arcade.dev/mcp-servers/productivity/gmail/reference "Reference") [Reference](https://docs.arcade.dev/mcp-servers/productivity/google_calendar/reference "Reference") Frame @@ -9243,13 +9243,13 @@ This will be shown if an incident or maintenance is posted on your status page. [View latest updates](https://status.arcade.dev/?utm_source=embed) ## Clickup Toolkit Reference -[Integrations](https://docs.arcade.dev/toolkits "Integrations") [Productivity & Docs](https://docs.arcade.dev/toolkits/productivity/asana "Productivity & Docs") [Clickup](https://docs.arcade.dev/toolkits/productivity/clickup "Clickup") Reference +[Integrations](https://docs.arcade.dev/toolkits "Integrations") [Productivity & Docs](https://docs.arcade.dev/mcp-servers/productivity/asana "Productivity & Docs") [Clickup](https://docs.arcade.dev/mcp-servers/productivity/clickup "Clickup") Reference # Clickup Reference Below is a reference of enumerations used by some tools in the Clickup toolkit: -## TaskPriority [Permalink for this section](https://docs.arcade.dev/toolkits/productivity/clickup/reference\#taskpriority) +## TaskPriority [Permalink for this section](https://docs.arcade.dev/mcp-servers/productivity/clickup/reference\#taskpriority) Task priority values are used in the `Clickup.CreateTask` tool to set the priority of a new task. Those are default values and cannot be changed by the user. @@ -9258,7 +9258,7 @@ Task priority values are used in the `Clickup.CreateTask` tool to set the priori - **NORMAL**: `NORMAL` - **LOW**: `LOW` -## FilterScope [Permalink for this section](https://docs.arcade.dev/toolkits/productivity/clickup/reference\#filterscope) +## FilterScope [Permalink for this section](https://docs.arcade.dev/mcp-servers/productivity/clickup/reference\#filterscope) Filter scope values are used in the `Clickup.GetTasksByScope` tool to filter tasks by scope. The following enumeration values represent the possible scopes supported by the Clickup API: @@ -9267,7 +9267,7 @@ Filter scope values are used in the `Clickup.GetTasksByScope` tool to filter tas - **FOLDERS**: `folders` - **LISTS**: `lists` -## TaskOrderBy [Permalink for this section](https://docs.arcade.dev/toolkits/productivity/clickup/reference\#taskorderby) +## TaskOrderBy [Permalink for this section](https://docs.arcade.dev/mcp-servers/productivity/clickup/reference\#taskorderby) Task order by values are used in the `Clickup.GetTasksByScope` tool to order tasks by a specific field. The following enumeration values represent the possible order by fields supported by the Clickup API: @@ -9275,14 +9275,14 @@ Task order by values are used in the `Clickup.GetTasksByScope` tool to order tas - **UPDATED**: `updated` - **DUE\_DATE**: `due_date` -## CommentResolution [Permalink for this section](https://docs.arcade.dev/toolkits/productivity/clickup/reference\#commentresolution) +## CommentResolution [Permalink for this section](https://docs.arcade.dev/mcp-servers/productivity/clickup/reference\#commentresolution) Comment resolution values are used in the comment tools to set the resolution of a comment. The following enumeration values represent the possible resolutions supported by the Clickup API: - **SET\_AS\_RESOLVED**: `resolved` - **SET\_AS\_UNRESOLVED**: `unresolved` -[Clickup](https://docs.arcade.dev/toolkits/productivity/clickup "Clickup") [Close.io](https://docs.arcade.dev/toolkits/productivity/closeio "Close.io") +[Clickup](https://docs.arcade.dev/mcp-servers/productivity/clickup "Clickup") [Close.io](https://docs.arcade.dev/mcp-servers/productivity/closeio "Close.io") Frame @@ -9320,7 +9320,7 @@ The hybrid worker model uses a bidirectional connection between your local envir ### Setup your toolkits [Permalink for this section](https://docs.arcade.dev/home/hybrid-deployment/hybrid-worker\#setup-your-toolkits) -Follow the [Creating a Toolkit](https://docs.arcade.dev/home/build-tools/create-a-toolkit) guide to create your toolkits. +Follow the [Creating a Toolkit](https://docs.arcade.dev/home/build-tools/create-a-mcp-server) guide to create your toolkits. Alternatively, you can install an Arcade Toolkit: @@ -9385,7 +9385,7 @@ You can now test your worker by making requests through the Arcade API or using ## Next steps [Permalink for this section](https://docs.arcade.dev/home/hybrid-deployment/hybrid-worker\#next-steps) -- [Create custom tools](https://docs.arcade.dev/home/build-tools/create-a-toolkit) for your hybrid worker +- [Create custom tools](https://docs.arcade.dev/home/build-tools/create-a-mcp-server) for your hybrid worker - [Set up authentication](https://docs.arcade.dev/home/build-tools/create-a-tool-with-auth) for secure access to resources - [Configure secrets](https://docs.arcade.dev/home/build-tools/create-a-tool-with-secrets) for your worker @@ -9733,24 +9733,24 @@ This will be shown if an incident or maintenance is posted on your status page. [View latest updates](https://status.arcade.dev/?utm_source=embed) ## Hubspot Toolkit Reference -[Integrations](https://docs.arcade.dev/toolkits "Integrations") Sales [Hubspot](https://docs.arcade.dev/toolkits/sales/hubspot "Hubspot") Reference +[Integrations](https://docs.arcade.dev/toolkits "Integrations") Sales [Hubspot](https://docs.arcade.dev/mcp-servers/sales/hubspot "Hubspot") Reference # Hubspot Reference Below is a reference of enumerations used by some of the tools in the Hubspot toolkit: -## HubspotCallDirection [Permalink for this section](https://docs.arcade.dev/toolkits/sales/hubspot/reference\#hubspotcalldirection) +## HubspotCallDirection [Permalink for this section](https://docs.arcade.dev/mcp-servers/sales/hubspot/reference\#hubspotcalldirection) - **INBOUND**: `INBOUND` - **OUTBOUND**: `OUTBOUND` -## HubspotEmailDirection [Permalink for this section](https://docs.arcade.dev/toolkits/sales/hubspot/reference\#hubspotemaildirection) +## HubspotEmailDirection [Permalink for this section](https://docs.arcade.dev/mcp-servers/sales/hubspot/reference\#hubspotemaildirection) - **EMAIL**: `EMAIL` - **INCOMING\_EMAIL**: `INCOMING_EMAIL` - **FORWARDED\_EMAIL**: `FORWARDED_EMAIL` -## HubspotEmailStatus [Permalink for this section](https://docs.arcade.dev/toolkits/sales/hubspot/reference\#hubspotemailstatus) +## HubspotEmailStatus [Permalink for this section](https://docs.arcade.dev/mcp-servers/sales/hubspot/reference\#hubspotemailstatus) - **BOUNCED**: `BOUNCED` - **FAILED**: `FAILED` @@ -9758,7 +9758,7 @@ Below is a reference of enumerations used by some of the tools in the Hubspot to - **SENDING**: `SENDING` - **SENT**: `SENT` -## HubspotMeetingOutcome [Permalink for this section](https://docs.arcade.dev/toolkits/sales/hubspot/reference\#hubspotmeetingoutcome) +## HubspotMeetingOutcome [Permalink for this section](https://docs.arcade.dev/mcp-servers/sales/hubspot/reference\#hubspotmeetingoutcome) - **SCHEDULED**: `SCHEDULED` - **COMPLETED**: `COMPLETED` @@ -9766,7 +9766,7 @@ Below is a reference of enumerations used by some of the tools in the Hubspot to - **NO\_SHOW**: `NO_SHOW` - **CANCELED**: `CANCELED` -## HubspotCommunicationChannel [Permalink for this section](https://docs.arcade.dev/toolkits/sales/hubspot/reference\#hubspotcommunicationchannel) +## HubspotCommunicationChannel [Permalink for this section](https://docs.arcade.dev/mcp-servers/sales/hubspot/reference\#hubspotcommunicationchannel) - **SMS**: `SMS` - **WHATS\_APP**: `WHATS_APP` @@ -9774,7 +9774,7 @@ Below is a reference of enumerations used by some of the tools in the Hubspot to - **PHYSICAL\_MAIL**: `PHYSICAL_MAIL` - **CUSTOM\_CHANNEL\_CONVERSATION**: `CUSTOM_CHANNEL_CONVERSATION` -## HubspotActivityType [Permalink for this section](https://docs.arcade.dev/toolkits/sales/hubspot/reference\#hubspotactivitytype) +## HubspotActivityType [Permalink for this section](https://docs.arcade.dev/mcp-servers/sales/hubspot/reference\#hubspotactivitytype) - **NOTE**: `note` - **CALL**: `call` @@ -9783,24 +9783,24 @@ Below is a reference of enumerations used by some of the tools in the Hubspot to - **TASK**: `task` - **COMMUNICATION**: `communication` -## HubspotSortOrder [Permalink for this section](https://docs.arcade.dev/toolkits/sales/hubspot/reference\#hubspotsortorder) +## HubspotSortOrder [Permalink for this section](https://docs.arcade.dev/mcp-servers/sales/hubspot/reference\#hubspotsortorder) - **LATEST\_MODIFIED**: `LATEST_MODIFIED` - **OLDEST\_MODIFIED**: `OLDEST_MODIFIED` - **ALPHABETICAL**: `ALPHABETICAL` -## HubspotDealType [Permalink for this section](https://docs.arcade.dev/toolkits/sales/hubspot/reference\#hubspotdealtype) +## HubspotDealType [Permalink for this section](https://docs.arcade.dev/mcp-servers/sales/hubspot/reference\#hubspotdealtype) - **NEW\_BUSINESS**: `newbusiness` - **EXISTING\_BUSINESS**: `existingbusiness` -## HubspotDealPriority [Permalink for this section](https://docs.arcade.dev/toolkits/sales/hubspot/reference\#hubspotdealpriority) +## HubspotDealPriority [Permalink for this section](https://docs.arcade.dev/mcp-servers/sales/hubspot/reference\#hubspotdealpriority) - **LOW**: `low` - **MEDIUM**: `medium` - **HIGH**: `high` -[Hubspot](https://docs.arcade.dev/toolkits/sales/hubspot "Hubspot") [Salesforce](https://docs.arcade.dev/toolkits/sales/salesforce "Salesforce") +[Hubspot](https://docs.arcade.dev/mcp-servers/sales/hubspot "Hubspot") [Salesforce](https://docs.arcade.dev/mcp-servers/sales/salesforce "Salesforce") Frame @@ -9812,13 +9812,13 @@ This will be shown if an incident or maintenance is posted on your status page. [View latest updates](https://status.arcade.dev/?utm_source=embed) ## Arcade Obsidian Toolkit -[Integrations](https://docs.arcade.dev/toolkits "Integrations") [Productivity & Docs](https://docs.arcade.dev/toolkits/productivity/asana "Productivity & Docs") Obsidian +[Integrations](https://docs.arcade.dev/toolkits "Integrations") [Productivity & Docs](https://docs.arcade.dev/mcp-servers/productivity/asana "Productivity & Docs") Obsidian # Arcade Obsidian Toolkit The Arcade Obsidian Toolkit is a community contributed toolkit verified by the Arcade team. To learn more about the toolkit, please visit the [Arcade Obsidian GitHub repository](https://github.com/spartee/arcade-obsidian). -[Notion](https://docs.arcade.dev/toolkits/productivity/notion "Notion") [Outlook Calendar](https://docs.arcade.dev/toolkits/productivity/outlook_calendar "Outlook Calendar") +[Notion](https://docs.arcade.dev/mcp-servers/productivity/notion "Notion") [Outlook Calendar](https://docs.arcade.dev/mcp-servers/productivity/outlook_calendar "Outlook Calendar") Frame @@ -9830,7 +9830,7 @@ This will be shown if an incident or maintenance is posted on your status page. [View latest updates](https://status.arcade.dev/?utm_source=embed) ## Retryable Tool Error -[Home](https://docs.arcade.dev/home "Home") [Build tools](https://docs.arcade.dev/home/build-tools/create-a-toolkit "Build tools") Retry tools with improved prompt +[Home](https://docs.arcade.dev/home "Home") [Build tools](https://docs.arcade.dev/home/build-tools/create-a-mcp-server "Build tools") Retry tools with improved prompt # RetryableToolError in Arcade @@ -10079,7 +10079,7 @@ async def list_emails( This is similar to the pattern used in the generic OAuth2 provider, but instead of using the `OAuth2` class, you use the `Google` class and specify the `id` of the auth provider you want to use. -See the docs about [Authoring Tools](https://docs.arcade.dev/home/build-tools/create-a-toolkit) for more information on how to create and serve a toolkit. +See the docs about [Authoring Tools](https://docs.arcade.dev/home/build-tools/create-a-mcp-server) for more information on how to create and serve a toolkit. [Configuration Templates](https://docs.arcade.dev/home/local-deployment/configure/templates "Configuration Templates") [Asana](https://docs.arcade.dev/home/auth-providers/asana "Asana") @@ -10093,34 +10093,34 @@ This will be shown if an incident or maintenance is posted on your status page. [View latest updates](https://status.arcade.dev/?utm_source=embed) ## Teams Toolkit Reference -[Integrations](https://docs.arcade.dev/toolkits "Integrations") [Social & Communication](https://docs.arcade.dev/toolkits/social-communication/discord "Social & Communication") teamsReference +[Integrations](https://docs.arcade.dev/toolkits "Integrations") [Social & Communication](https://docs.arcade.dev/mcp-servers/social-communication/discord "Social & Communication") teamsReference # Teams Reference Below is a reference of enumerations used by some tools in the Teams toolkit: -## PartialMatchType [Permalink for this section](https://docs.arcade.dev/toolkits/social-communication/teams/reference\#partialmatchtype) +## PartialMatchType [Permalink for this section](https://docs.arcade.dev/mcp-servers/social-communication/teams/reference\#partialmatchtype) - **PARTIAL\_ALL**: `match_all_keywords` - **PARTIAL\_ANY**: `match_any_of_the_keywords` -## MatchType [Permalink for this section](https://docs.arcade.dev/toolkits/social-communication/teams/reference\#matchtype) +## MatchType [Permalink for this section](https://docs.arcade.dev/mcp-servers/social-communication/teams/reference\#matchtype) - **EXACT**: `exact_match` - **PARTIAL\_ALL**: `partial_match_all_keywords` - **PARTIAL\_ANY**: `partial_match_any_of_the_keywords` -## TeamMembershipType [Permalink for this section](https://docs.arcade.dev/toolkits/social-communication/teams/reference\#teammembershiptype) +## TeamMembershipType [Permalink for this section](https://docs.arcade.dev/mcp-servers/social-communication/teams/reference\#teammembershiptype) - **DIRECT\_MEMBER**: `direct_member_of_the_team` - **MEMBER\_OF\_SHARED\_CHANNEL**: `member_of_a_shared_channel_in_another_team` -## PartialMatchType [Permalink for this section](https://docs.arcade.dev/toolkits/social-communication/teams/reference\#partialmatchtype-1) +## PartialMatchType [Permalink for this section](https://docs.arcade.dev/mcp-servers/social-communication/teams/reference\#partialmatchtype-1) - **PARTIAL\_ALL**: `match_all_keywords` - **PARTIAL\_ANY**: `match_any_of_the_keywords` -[Slack API](https://docs.arcade.dev/toolkits/social-communication/slack_api "Slack API") [Imgflip](https://docs.arcade.dev/toolkits/entertainment/imgflip "Imgflip") +[Slack API](https://docs.arcade.dev/mcp-servers/social-communication/slack_api "Slack API") [Imgflip](https://docs.arcade.dev/mcp-servers/entertainment/imgflip "Imgflip") Frame @@ -10179,7 +10179,7 @@ This will be shown if an incident or maintenance is posted on your status page. [View latest updates](https://status.arcade.dev/?utm_source=embed) ## Arcade Gmail Toolkit -[Integrations](https://docs.arcade.dev/toolkits "Integrations") [Productivity & Docs](https://docs.arcade.dev/toolkits/productivity/asana "Productivity & Docs") Gmail +[Integrations](https://docs.arcade.dev/toolkits "Integrations") [Productivity & Docs](https://docs.arcade.dev/mcp-servers/productivity/asana "Productivity & Docs") Gmail # Gmail @@ -10191,7 +10191,7 @@ This will be shown if an incident or maintenance is posted on your status page. [![PyPI Version](https://img.shields.io/pypi/v/arcade_gmail)](https://pypi.org/project/arcade_gmail/)[![License](https://img.shields.io/badge/License-MIT-yellow.svg)](https://github.com/arcadeai/arcade-ai/blob/main/LICENSE)[![Python Versions](https://img.shields.io/pypi/pyversions/arcade_gmail)](https://pypi.org/project/arcade_gmail/)[![Wheel Status](https://img.shields.io/pypi/wheel/arcade_gmail)](https://pypi.org/project/arcade_gmail/)[![Downloads](https://img.shields.io/pypi/dm/arcade_gmail)](https://pypi.org/project/arcade_gmail/) -The Arcade Gmail toolkit provides a pre-built set of tools for interacting with Gmail. These tools make it easy to build agents and AI apps that can: +The Arcade Gmail MCP Server provides a pre-built set of tools for interacting with Gmail. These tools make it easy to build agents and AI apps that can: - Send, read, and manage emails - Compose and update draft emails @@ -10199,7 +10199,7 @@ The Arcade Gmail toolkit provides a pre-built set of tools for interacting with - Search for emails by header - List emails in the user’s mailbox -## Available Tools [Permalink for this section](https://docs.arcade.dev/toolkits/productivity/gmail\#available-tools) +## Available Tools [Permalink for this section](https://docs.arcade.dev/mcp-servers/productivity/gmail\#available-tools) These tools are currently available in the Arcade Gmail toolkit. @@ -10221,10 +10221,10 @@ These tools are currently available in the Arcade Gmail toolkit. 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](https://docs.arcade.dev/home/build-tools/create-a-toolkit) with the [Google auth\\ +own tools](https://docs.arcade.dev/home/build-tools/create-a-mcp-server) with the [Google auth\\ provider](https://docs.arcade.dev/home/auth-providers/google#using-google-auth-in-custom-tools). -## Gmail.SendEmail [Permalink for this section](https://docs.arcade.dev/toolkits/productivity/gmail\#gmailsendemail) +## Gmail.SendEmail [Permalink for this section](https://docs.arcade.dev/mcp-servers/productivity/gmail\#gmailsendemail) See Example > @@ -10240,7 +10240,7 @@ Send an email using the Gmail API. * * * -## Gmail.SendDraftEmail [Permalink for this section](https://docs.arcade.dev/toolkits/productivity/gmail\#gmailsenddraftemail) +## Gmail.SendDraftEmail [Permalink for this section](https://docs.arcade.dev/mcp-servers/productivity/gmail\#gmailsenddraftemail) See Example > @@ -10252,7 +10252,7 @@ Send a draft email using the Gmail API. * * * -## Gmail.WriteDraftEmail [Permalink for this section](https://docs.arcade.dev/toolkits/productivity/gmail\#gmailwritedraftemail) +## Gmail.WriteDraftEmail [Permalink for this section](https://docs.arcade.dev/mcp-servers/productivity/gmail\#gmailwritedraftemail) See Example > @@ -10268,7 +10268,7 @@ Compose a new email draft using the Gmail API. * * * -## Gmail.UpdateDraftEmail [Permalink for this section](https://docs.arcade.dev/toolkits/productivity/gmail\#gmailupdatedraftemail) +## Gmail.UpdateDraftEmail [Permalink for this section](https://docs.arcade.dev/mcp-servers/productivity/gmail\#gmailupdatedraftemail) See Example > @@ -10285,7 +10285,7 @@ Update an existing email draft. * * * -## Gmail.DeleteDraftEmail [Permalink for this section](https://docs.arcade.dev/toolkits/productivity/gmail\#gmaildeletedraftemail) +## Gmail.DeleteDraftEmail [Permalink for this section](https://docs.arcade.dev/mcp-servers/productivity/gmail\#gmaildeletedraftemail) See Example > @@ -10297,7 +10297,7 @@ Delete a draft email using the Gmail API. * * * -## Gmail.TrashEmail [Permalink for this section](https://docs.arcade.dev/toolkits/productivity/gmail\#gmailtrashemail) +## Gmail.TrashEmail [Permalink for this section](https://docs.arcade.dev/mcp-servers/productivity/gmail\#gmailtrashemail) The `TrashEmail` tool is currently only available on a self-hosted instance of the Arcade Engine. To learn more about self-hosting, see the [self-hosting documentation](https://docs.arcade.dev/home/local-deployment/install/local#install-the-engine). @@ -10311,7 +10311,7 @@ Move an email to the trash folder. * * * -## Gmail.ListDraftEmails [Permalink for this section](https://docs.arcade.dev/toolkits/productivity/gmail\#gmaillistdraftemails) +## Gmail.ListDraftEmails [Permalink for this section](https://docs.arcade.dev/mcp-servers/productivity/gmail\#gmaillistdraftemails) See Example > @@ -10323,7 +10323,7 @@ List draft emails in the user’s mailbox. * * * -## Gmail.ListEmailsByHeader [Permalink for this section](https://docs.arcade.dev/toolkits/productivity/gmail\#gmaillistemailsbyheader) +## Gmail.ListEmailsByHeader [Permalink for this section](https://docs.arcade.dev/mcp-servers/productivity/gmail\#gmaillistemailsbyheader) See Example > @@ -10342,7 +10342,7 @@ _At least one of the following parameters must be provided: `sender`, `recipient * * * -## Gmail.ListEmails [Permalink for this section](https://docs.arcade.dev/toolkits/productivity/gmail\#gmaillistemails) +## Gmail.ListEmails [Permalink for this section](https://docs.arcade.dev/mcp-servers/productivity/gmail\#gmaillistemails) See Example > @@ -10354,7 +10354,7 @@ Read emails from a Gmail account and extract plain text content. * * * -## Gmail.SearchThreads [Permalink for this section](https://docs.arcade.dev/toolkits/productivity/gmail\#gmailsearchthreads) +## Gmail.SearchThreads [Permalink for this section](https://docs.arcade.dev/mcp-servers/productivity/gmail\#gmailsearchthreads) See Example > @@ -10374,7 +10374,7 @@ Search for threads in the user’s mailbox * * * -## Gmail.ListThreads [Permalink for this section](https://docs.arcade.dev/toolkits/productivity/gmail\#gmaillistthreads) +## Gmail.ListThreads [Permalink for this section](https://docs.arcade.dev/mcp-servers/productivity/gmail\#gmaillistthreads) See Example > @@ -10388,7 +10388,7 @@ List threads in the user’s mailbox. * * * -## Gmail.GetThread [Permalink for this section](https://docs.arcade.dev/toolkits/productivity/gmail\#gmailgetthread) +## Gmail.GetThread [Permalink for this section](https://docs.arcade.dev/mcp-servers/productivity/gmail\#gmailgetthread) See Example > @@ -10398,7 +10398,7 @@ Get the specified thread by ID. - **`thread_id`** _(string, required)_ The ID of the thread to retrieve. -## Gmail.WhoAmI [Permalink for this section](https://docs.arcade.dev/toolkits/productivity/gmail\#gmailwhoami) +## Gmail.WhoAmI [Permalink for this section](https://docs.arcade.dev/mcp-servers/productivity/gmail\#gmailwhoami) See Example > @@ -10408,7 +10408,7 @@ Get comprehensive user profile and Gmail account information. This tool does not take any parameters. -## Auth [Permalink for this section](https://docs.arcade.dev/toolkits/productivity/gmail\#auth) +## Auth [Permalink for this section](https://docs.arcade.dev/mcp-servers/productivity/gmail\#auth) The Arcade Gmail toolkit uses the [Google auth provider](https://docs.arcade.dev/home/auth-providers/google) to connect to users’ Google accounts. @@ -10418,9 +10418,9 @@ With a self-hosted installation of Arcade, you need to [configure the Google aut * * * -## Reference [Permalink for this section](https://docs.arcade.dev/toolkits/productivity/gmail\#reference) +## Reference [Permalink for this section](https://docs.arcade.dev/mcp-servers/productivity/gmail\#reference) -### GmailReplyToWhom [Permalink for this section](https://docs.arcade.dev/toolkits/productivity/gmail\#gmailreplytowhom) +### GmailReplyToWhom [Permalink for this section](https://docs.arcade.dev/mcp-servers/productivity/gmail\#gmailreplytowhom) The type of recipient to reply to. @@ -10441,7 +10441,7 @@ Arcade tools can be self-hosted on your own infrastructure. Learn more about sel pip install arcade_gmail\\ ```](https://docs.arcade.dev/home/hosting-overview) -[Reference](https://docs.arcade.dev/toolkits/productivity/dropbox/reference "Reference") [Reference](https://docs.arcade.dev/toolkits/productivity/gmail/reference "Reference") +[Reference](https://docs.arcade.dev/mcp-servers/productivity/dropbox/reference "Reference") [Reference](https://docs.arcade.dev/mcp-servers/productivity/gmail/reference "Reference") Frame @@ -10453,7 +10453,7 @@ This will be shown if an incident or maintenance is posted on your status page. [View latest updates](https://status.arcade.dev/?utm_source=embed) ## Tool Error Handling Guide -[Home](https://docs.arcade.dev/home "Home") [Build tools](https://docs.arcade.dev/home/build-tools/create-a-toolkit "Build tools") Handle tool errors +[Home](https://docs.arcade.dev/home "Home") [Build tools](https://docs.arcade.dev/home/build-tools/create-a-mcp-server "Build tools") Handle tool errors # Tool Error Handling @@ -10807,11 +10807,11 @@ To solve this, many AI models support tool calling (sometimes referred to as β€˜ Say a colleague shares a document with you on Google Drive, and you’d like an LLM to help you analyze it. -You could go to your Drive/Docs, open the document, copy its contents, and paste it into your chat. But what if the LLM could do this for you? The Arcade Google Docs toolkit provides a [`SearchAndRetrieveDocuments`](https://docs.arcade.dev/toolkits/productivity/google_docs#searchandretrievedocuments) tool. By calling it, the LLM can find and read the document without you having to do anything. +You could go to your Drive/Docs, open the document, copy its contents, and paste it into your chat. But what if the LLM could do this for you? The Arcade Google Docs MCP Server provides a [`SearchAndRetrieveDocuments`](https://docs.arcade.dev/mcp-servers/productivity/google_docs#searchandretrievedocuments) tool. By calling it, the LLM can find and read the document without you having to do anything. -After analyzing the document, you decide that a meeting is needed with your colleague. You can ask the LLM to schedule a meeting and it will use the [Google Calendar toolkit](https://docs.arcade.dev/toolkits/productivity/google_calendar) to do it without you needing to leave the chat. +After analyzing the document, you decide that a meeting is needed with your colleague. You can ask the LLM to schedule a meeting and it will use the [Google Calendar toolkit](https://docs.arcade.dev/mcp-servers/productivity/google_calendar) to do it without you needing to leave the chat. -Or you could ask the LLM to send a summary of the analysis to your colleague by email and it would use the [Gmail toolkit](https://docs.arcade.dev/toolkits/productivity/gmail) for that. +Or you could ask the LLM to send a summary of the analysis to your colleague by email and it would use the [Gmail toolkit](https://docs.arcade.dev/mcp-servers/productivity/gmail) for that. ## Possibilities for Application and AI Agent developers [Permalink for this section](https://docs.arcade.dev/home/use-tools/tools-overview\#possibilities-for-application-and-ai-agent-developers) @@ -10861,7 +10861,7 @@ This process shows the general outline of the Tool Augmented Generation (TAG) pr ### Next steps [Permalink for this section](https://docs.arcade.dev/home/use-tools/tools-overview\#next-steps) - Explore the [Toolkits](https://docs.arcade.dev/toolkits) available on Arcade -- Build your own [custom toolkit](https://docs.arcade.dev/home/build-tools/create-a-toolkit) +- Build your own [custom toolkit](https://docs.arcade.dev/home/build-tools/create-a-mcp-server) [Use Arcade in Visual Studio Code](https://docs.arcade.dev/home/mcp-desktop-clients/vscode-client "Use Arcade in Visual Studio Code") [Tool formats](https://docs.arcade.dev/home/use-tools/get-tool-definitions "Tool formats") @@ -10875,7 +10875,7 @@ This will be shown if an incident or maintenance is posted on your status page. [View latest updates](https://status.arcade.dev/?utm_source=embed) ## Google Slides Toolkit -[Integrations](https://docs.arcade.dev/toolkits "Integrations") [Productivity & Docs](https://docs.arcade.dev/toolkits/productivity/asana "Productivity & Docs") Google Slides +[Integrations](https://docs.arcade.dev/toolkits "Integrations") [Productivity & Docs](https://docs.arcade.dev/mcp-servers/productivity/asana "Productivity & Docs") Google Slides # GoogleSlides @@ -10887,14 +10887,14 @@ This will be shown if an incident or maintenance is posted on your status page. [![PyPI Version](https://img.shields.io/pypi/v/arcade_google_slides)](https://pypi.org/project/arcade_google_slides/)[![License](https://img.shields.io/badge/License-MIT-yellow.svg)](https://github.com/arcadeai/arcade-ai/blob/main/LICENSE)[![Python Versions](https://img.shields.io/pypi/pyversions/arcade_google_slides)](https://pypi.org/project/arcade_google_slides/)[![Wheel Status](https://img.shields.io/pypi/wheel/arcade_google_slides)](https://pypi.org/project/arcade_google_slides/)[![Downloads](https://img.shields.io/pypi/dm/arcade_google_slides)](https://pypi.org/project/arcade_google_slides/) -The GoogleSlides toolkit provides a set of tools for interacting with Google Slides presentations. These tools enable users and AI applications to: +The GoogleSlides MCP Server provides a set of tools for interacting with Google Slides presentations. These tools enable users and AI applications to: - Create new presentations and add slides. - Comment on specific slides and list all comments in a presentation. - Search for presentations in Google Drive. - Retrieve and convert presentation content to markdown format. -## Available Tools [Permalink for this section](https://docs.arcade.dev/toolkits/productivity/google_slides\#available-tools) +## Available Tools [Permalink for this section](https://docs.arcade.dev/mcp-servers/productivity/google_slides\#available-tools) | Tool Name | Description | | --- | --- | @@ -10909,9 +10909,9 @@ The GoogleSlides toolkit provides a set of tools for interacting with Google Sli 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](https://docs.arcade.dev/home/build-tools/create-a-toolkit). +own tools](https://docs.arcade.dev/home/build-tools/create-a-mcp-server). -## GoogleSlides.CommentOnPresentation [Permalink for this section](https://docs.arcade.dev/toolkits/productivity/google_slides\#googleslidescommentonpresentation) +## GoogleSlides.CommentOnPresentation [Permalink for this section](https://docs.arcade.dev/mcp-servers/productivity/google_slides\#googleslidescommentonpresentation) See Example > @@ -10922,7 +10922,7 @@ Comment on a specific slide by its index in a Google Slides presentation. - **presentation\_id** ( `string`, required) The ID of the presentation to comment on - **comment\_text** ( `string`, required) The comment to add to the slide -## GoogleSlides.ListPresentationComments [Permalink for this section](https://docs.arcade.dev/toolkits/productivity/google_slides\#googleslideslistpresentationcomments) +## GoogleSlides.ListPresentationComments [Permalink for this section](https://docs.arcade.dev/mcp-servers/productivity/google_slides\#googleslideslistpresentationcomments) See Example > @@ -10933,7 +10933,7 @@ List all comments on the specified Google Slides presentation. - **presentation\_id** ( `string`, required) The ID of the presentation to list comments for - **include\_deleted** ( `boolean`, optional) Whether to include deleted comments in the results. Defaults to False. -## GoogleSlides.CreatePresentation [Permalink for this section](https://docs.arcade.dev/toolkits/productivity/google_slides\#googleslidescreatepresentation) +## GoogleSlides.CreatePresentation [Permalink for this section](https://docs.arcade.dev/mcp-servers/productivity/google_slides\#googleslidescreatepresentation) See Example > @@ -10944,7 +10944,7 @@ Create a new Google Slides presentation - **title** ( `string`, required) The title of the presentation to create - **subtitle** ( `string`, optional) The subtitle of the presentation to create -## GoogleSlides.CreateSlide [Permalink for this section](https://docs.arcade.dev/toolkits/productivity/google_slides\#googleslidescreateslide) +## GoogleSlides.CreateSlide [Permalink for this section](https://docs.arcade.dev/mcp-servers/productivity/google_slides\#googleslidescreateslide) See Example > @@ -10956,7 +10956,7 @@ Create a new slide at the end of the specified presentation - **slide\_title** ( `string`, required) The title of the slide to create - **slide\_body** ( `string`, required) The body (text) of the slide to create -## GoogleSlides.SearchPresentations [Permalink for this section](https://docs.arcade.dev/toolkits/productivity/google_slides\#googleslidessearchpresentations) +## GoogleSlides.SearchPresentations [Permalink for this section](https://docs.arcade.dev/mcp-servers/productivity/google_slides\#googleslidessearchpresentations) See Example > @@ -10969,11 +10969,11 @@ Searches for presentations in the user’s Google Drive. - **search\_only\_in\_shared\_drive\_id** ( `string`, optional) The ID of the shared drive to restrict the search to. If provided, the search will only return presentations from this drive. Defaults to None, which searches across all drives. - **include\_shared\_drives** ( `boolean`, optional) Whether to include presentations from shared drives. Defaults to False (searches only in the user’s β€˜My Drive’). - **include\_organization\_domain\_presentations** ( `boolean`, optional) Whether to include presentations from the organization’s domain. This is applicable to admin users who have permissions to view organization-wide presentations in a Google Workspace account. Defaults to False. -- **order\_by** ( `Enum` [OrderBy](https://docs.arcade.dev/toolkits/productivity/google_slides#orderby), optional) Sort order. Defaults to listing the most recently modified presentations first +- **order\_by** ( `Enum` [OrderBy](https://docs.arcade.dev/mcp-servers/productivity/google_slides#orderby), optional) Sort order. Defaults to listing the most recently modified presentations first - **limit** ( `integer`, optional) The number of presentations to list - **pagination\_token** ( `string`, optional) The pagination token to continue a previous request -## GoogleSlides.WhoAmI [Permalink for this section](https://docs.arcade.dev/toolkits/productivity/google_slides\#googleslideswhoami) +## GoogleSlides.WhoAmI [Permalink for this section](https://docs.arcade.dev/mcp-servers/productivity/google_slides\#googleslideswhoami) See Example > @@ -10983,7 +10983,7 @@ Get comprehensive user profile and Google Slides environment information. This tool does not take any parameters. -## GoogleSlides.GenerateGoogleFilePickerUrl [Permalink for this section](https://docs.arcade.dev/toolkits/productivity/google_slides\#googleslidesgenerategooglefilepickerurl) +## GoogleSlides.GenerateGoogleFilePickerUrl [Permalink for this section](https://docs.arcade.dev/mcp-servers/productivity/google_slides\#googleslidesgenerategooglefilepickerurl) See Example > @@ -10993,7 +10993,7 @@ Generate a Google File Picker URL for user-driven file selection and authorizati This tool does not take any parameters. -## GoogleSlides.GetPresentationAsMarkdown [Permalink for this section](https://docs.arcade.dev/toolkits/productivity/google_slides\#googleslidesgetpresentationasmarkdown) +## GoogleSlides.GetPresentationAsMarkdown [Permalink for this section](https://docs.arcade.dev/mcp-servers/productivity/google_slides\#googleslidesgetpresentationasmarkdown) See Example > @@ -11003,15 +11003,15 @@ Get the specified Google Slides presentation and convert it to markdown. - **presentation\_id** ( `string`, required) The ID of the presentation to retrieve. -## Auth [Permalink for this section](https://docs.arcade.dev/toolkits/productivity/google_slides\#auth) +## Auth [Permalink for this section](https://docs.arcade.dev/mcp-servers/productivity/google_slides\#auth) The Arcade GoogleSlides toolkit uses the [Google auth provider](https://docs.arcade.dev/home/auth-providers/google) to connect to users’ GoogleSlides accounts. Please refer to the [Google auth provider](https://docs.arcade.dev/home/auth-providers/google) documentation to learn how to configure auth. -## GoogleSlides Reference [Permalink for this section](https://docs.arcade.dev/toolkits/productivity/google_slides\#googleslides-reference) +## GoogleSlides Reference [Permalink for this section](https://docs.arcade.dev/mcp-servers/productivity/google_slides\#googleslides-reference) Below is a reference of enumerations used by some tools in the GoogleSlides toolkit: -### OrderBy [Permalink for this section](https://docs.arcade.dev/toolkits/productivity/google_slides\#orderby) +### OrderBy [Permalink for this section](https://docs.arcade.dev/mcp-servers/productivity/google_slides\#orderby) - **CREATED\_TIME**: `createdTime` - **CREATED\_TIME\_DESC**: `createdTime desc` @@ -11050,7 +11050,7 @@ Arcade tools can be self-hosted on your own infrastructure. Learn more about sel pip install arcade_google_slides\\ ```](https://docs.arcade.dev/home/hosting-overview) -[Reference](https://docs.arcade.dev/toolkits/productivity/google_drive/reference "Reference") [Google Sheets](https://docs.arcade.dev/toolkits/productivity/google_sheets "Google Sheets") +[Reference](https://docs.arcade.dev/mcp-servers/productivity/google_drive/reference "Reference") [Google Sheets](https://docs.arcade.dev/mcp-servers/productivity/google_sheets "Google Sheets") Frame @@ -11062,7 +11062,7 @@ This will be shown if an incident or maintenance is posted on your status page. [View latest updates](https://status.arcade.dev/?utm_source=embed) ## Zoom Toolkit Integration -[Integrations](https://docs.arcade.dev/toolkits "Integrations") [Social & Communication](https://docs.arcade.dev/toolkits/social-communication/discord "Social & Communication") Zoom +[Integrations](https://docs.arcade.dev/toolkits "Integrations") [Social & Communication](https://docs.arcade.dev/mcp-servers/social-communication/discord "Social & Communication") Zoom # Zoom @@ -11074,12 +11074,12 @@ This will be shown if an incident or maintenance is posted on your status page. [![PyPI Version](https://img.shields.io/pypi/v/arcade_zoom)](https://pypi.org/project/arcade_zoom/)[![License](https://img.shields.io/badge/License-MIT-yellow.svg)](https://github.com/arcadeai/arcade-ai/blob/main/LICENSE)[![Python Versions](https://img.shields.io/pypi/pyversions/arcade_zoom)](https://pypi.org/project/arcade_zoom/)[![Wheel Status](https://img.shields.io/pypi/wheel/arcade_zoom)](https://pypi.org/project/arcade_zoom/)[![Downloads](https://img.shields.io/pypi/dm/arcade_zoom)](https://pypi.org/project/arcade_zoom/) -The Arcade Zoom toolkit provides tools for interacting with Zoom. With these tools, you can build agents and AI applications that can: +The Arcade Zoom MCP Server provides tools for interacting with Zoom. With these tools, you can build agents and AI applications that can: - List upcoming meetings - Retrieve meeting invitation details -## Available Tools [Permalink for this section](https://docs.arcade.dev/toolkits/social-communication/zoom\#available-tools) +## Available Tools [Permalink for this section](https://docs.arcade.dev/mcp-servers/social-communication/zoom\#available-tools) These tools are currently available in the Arcade Zoom toolkit. @@ -11090,10 +11090,10 @@ These tools are currently available in the Arcade Zoom toolkit. 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](https://docs.arcade.dev/home/build-tools/create-a-toolkit) with the [Zoom auth\\ +tools](https://docs.arcade.dev/home/build-tools/create-a-mcp-server) with the [Zoom auth\\ provider](https://docs.arcade.dev/home/auth-providers/zoom#using-zoom-auth-in-custom-tools). -## Zoom.ListUpcomingMeetings [Permalink for this section](https://docs.arcade.dev/toolkits/social-communication/zoom\#zoomlistupcomingmeetings) +## Zoom.ListUpcomingMeetings [Permalink for this section](https://docs.arcade.dev/mcp-servers/social-communication/zoom\#zoomlistupcomingmeetings) List a Zoom user’s upcoming meetings within the next 24 hours. @@ -11103,7 +11103,7 @@ List a Zoom user’s upcoming meetings within the next 24 hours. * * * -## Zoom.GetMeetingInvitation [Permalink for this section](https://docs.arcade.dev/toolkits/social-communication/zoom\#zoomgetmeetinginvitation) +## Zoom.GetMeetingInvitation [Permalink for this section](https://docs.arcade.dev/mcp-servers/social-communication/zoom\#zoomgetmeetinginvitation) Retrieve the invitation note for a specific Zoom meeting. @@ -11113,7 +11113,7 @@ Retrieve the invitation note for a specific Zoom meeting. * * * -## Auth [Permalink for this section](https://docs.arcade.dev/toolkits/social-communication/zoom\#auth) +## Auth [Permalink for this section](https://docs.arcade.dev/mcp-servers/social-communication/zoom\#auth) The Arcade Zoom toolkit uses the [Zoom auth provider](https://docs.arcade.dev/home/auth-providers/zoom) to connect to users’ Zoom accounts. @@ -11135,7 +11135,7 @@ Arcade tools can be self-hosted on your own infrastructure. Learn more about sel pip install arcade_zoom\\ ```](https://docs.arcade.dev/home/hosting-overview) -[X](https://docs.arcade.dev/toolkits/social-communication/x "X") [Microsoft Teams](https://docs.arcade.dev/toolkits/social-communication/microsoft_teams "Microsoft Teams") +[X](https://docs.arcade.dev/mcp-servers/social-communication/x "X") [Microsoft Teams](https://docs.arcade.dev/mcp-servers/social-communication/microsoft_teams "Microsoft Teams") Frame @@ -11247,18 +11247,18 @@ This will be shown if an incident or maintenance is posted on your status page. The Discord auth provider enables tools and agents to call the Discord API on behalf of a user. Behind the scenes, the Arcade Engine and the Discord auth provider seamlessly manage Discord OAuth 2.0 authorization for your users. -### What’s documented here [Permalink for this section](https://docs.arcade.dev/toolkits/social-communication/discord\#whats-documented-here) +### What’s documented here [Permalink for this section](https://docs.arcade.dev/mcp-servers/social-communication/discord\#whats-documented-here) This page describes how to use and configure Discord auth with Arcade. This auth provider is used by: -- Your [app code](https://docs.arcade.dev/toolkits/social-communication/discord#using-discord-auth-in-app-code) that needs to call Discord APIs -- Or, your [custom tools](https://docs.arcade.dev/toolkits/social-communication/discord#using-discord-auth-in-custom-tools) that need to call Discord APIs +- Your [app code](https://docs.arcade.dev/mcp-servers/social-communication/discord#using-discord-auth-in-app-code) that needs to call Discord APIs +- Or, your [custom tools](https://docs.arcade.dev/mcp-servers/social-communication/discord#using-discord-auth-in-custom-tools) that need to call Discord APIs -## Configuring Discord auth [Permalink for this section](https://docs.arcade.dev/toolkits/social-communication/discord\#configuring-discord-auth) +## Configuring Discord auth [Permalink for this section](https://docs.arcade.dev/mcp-servers/social-communication/discord\#configuring-discord-auth) -### Create a Discord app [Permalink for this section](https://docs.arcade.dev/toolkits/social-communication/discord\#create-a-discord-app) +### Create a Discord app [Permalink for this section](https://docs.arcade.dev/mcp-servers/social-communication/discord\#create-a-discord-app) - Create a Discord Application in the [Discord developer portal](https://discord.com/developers/applications) - In the OAuth2 tab, set the redirect URI to the redirect URL generated by Arcade (see below) @@ -11266,7 +11266,7 @@ This auth provider is used by: Next, add the Discord app to your Arcade Engine configuration. You can do this in the Arcade Dashboard, or by editing the `engine.yaml` file directly (for a self-hosted instance). -### Configuring Discord auth with the Arcade Dashboard [Permalink for this section](https://docs.arcade.dev/toolkits/social-communication/discord\#configuring-discord-auth-with-the-arcade-dashboard) +### Configuring Discord auth with the Arcade Dashboard [Permalink for this section](https://docs.arcade.dev/mcp-servers/social-communication/discord\#configuring-discord-auth-with-the-arcade-dashboard) 1. Navigate to the OAuth section of the Arcade Dashboard and click **Add OAuth Provider**. 2. Select **Discord** as the provider. @@ -11277,9 +11277,9 @@ Next, add the Discord app to your Arcade Engine configuration. You can do this i When you use tools that require Discord auth using your Arcade account credentials, the Arcade Engine will automatically use this Discord OAuth provider. -### Configuring Discord auth in self-hosted Arcade Engine configuration [Permalink for this section](https://docs.arcade.dev/toolkits/social-communication/discord\#configuring-discord-auth-in-self-hosted-arcade-engine-configuration) +### Configuring Discord auth in self-hosted Arcade Engine configuration [Permalink for this section](https://docs.arcade.dev/mcp-servers/social-communication/discord\#configuring-discord-auth-in-self-hosted-arcade-engine-configuration) -### Set environment variables [Permalink for this section](https://docs.arcade.dev/toolkits/social-communication/discord\#set-environment-variables) +### Set environment variables [Permalink for this section](https://docs.arcade.dev/mcp-servers/social-communication/discord\#set-environment-variables) Set the following environment variables: @@ -11298,7 +11298,7 @@ DISCORD_CLIENT_ID="" See [Engine configuration](https://docs.arcade.dev/home/local-deployment/configure/engine) for more information on how to set environment variables and configure the Arcade Engine. -### Edit the Engine configuration [Permalink for this section](https://docs.arcade.dev/toolkits/social-communication/discord\#edit-the-engine-configuration) +### Edit the Engine configuration [Permalink for this section](https://docs.arcade.dev/mcp-servers/social-communication/discord\#edit-the-engine-configuration) Edit the `engine.yaml` file and add a `discord` item to the `auth.providers` section: @@ -11314,7 +11314,7 @@ auth: client_secret: ${env:DISCORD_CLIENT_SECRET} ``` -## Using Discord auth in app code [Permalink for this section](https://docs.arcade.dev/toolkits/social-communication/discord\#using-discord-auth-in-app-code) +## Using Discord auth in app code [Permalink for this section](https://docs.arcade.dev/mcp-servers/social-communication/discord\#using-discord-auth-in-app-code) Use the Discord auth provider in your own agents and AI apps to get a user token for the Discord API. See [authorizing agents with Arcade](https://docs.arcade.dev/home/auth/how-arcade-helps) to understand how this works. @@ -11347,9 +11347,9 @@ token = auth_response.context.token # Do something interesting with the token... ``` -## Using Discord auth in custom tools [Permalink for this section](https://docs.arcade.dev/toolkits/social-communication/discord\#using-discord-auth-in-custom-tools) +## Using Discord auth in custom tools [Permalink for this section](https://docs.arcade.dev/mcp-servers/social-communication/discord\#using-discord-auth-in-custom-tools) -You can author your own [custom tools](https://docs.arcade.dev/home/build-tools/create-a-toolkit) that interact with the Discord API. +You can author your own [custom tools](https://docs.arcade.dev/home/build-tools/create-a-mcp-server) that interact with the Discord API. Use the `Discord()` auth class to specify that a tool requires authorization with Discord. The `context.authorization.token` field will be automatically populated with the user’s Discord token: @@ -11384,7 +11384,7 @@ async def list_servers( return response.json() ``` -[Sharepoint](https://docs.arcade.dev/toolkits/productivity/sharepoint "Sharepoint") [LinkedIn](https://docs.arcade.dev/toolkits/social-communication/linkedin "LinkedIn") +[Sharepoint](https://docs.arcade.dev/mcp-servers/productivity/sharepoint "Sharepoint") [LinkedIn](https://docs.arcade.dev/mcp-servers/social-communication/linkedin "LinkedIn") Frame @@ -11434,13 +11434,13 @@ This will be shown if an incident or maintenance is posted on your status page. [View latest updates](https://status.arcade.dev/?utm_source=embed) ## Asana Toolkit Reference -[Integrations](https://docs.arcade.dev/toolkits "Integrations") Productivity & Docs [Asana](https://docs.arcade.dev/toolkits/productivity/asana "Asana") Reference +[Integrations](https://docs.arcade.dev/toolkits "Integrations") Productivity & Docs [Asana](https://docs.arcade.dev/mcp-servers/productivity/asana "Asana") Reference # Asana Reference Below is a reference of enumerations used by some tools in the Asana toolkit: -## TagColor [Permalink for this section](https://docs.arcade.dev/toolkits/productivity/asana/reference\#tagcolor) +## TagColor [Permalink for this section](https://docs.arcade.dev/mcp-servers/productivity/asana/reference\#tagcolor) - **DARK\_GREEN**: `'dark-green'` - **DARK\_RED**: `'dark-red'` @@ -11461,7 +11461,7 @@ Below is a reference of enumerations used by some tools in the Asana toolkit: - **LIGHT\_BROWN**: `'light-brown'` - **LIGHT\_WARM\_GRAY**: `'light-warm-gray'` -## TaskSortBy [Permalink for this section](https://docs.arcade.dev/toolkits/productivity/asana/reference\#tasksortby) +## TaskSortBy [Permalink for this section](https://docs.arcade.dev/mcp-servers/productivity/asana/reference\#tasksortby) - **DUE\_DATE**: `'due_date'` - **CREATED\_AT**: `'created_at'` @@ -11469,12 +11469,12 @@ Below is a reference of enumerations used by some tools in the Asana toolkit: - **MODIFIED\_AT**: `'modified_at'` - **LIKES**: `'likes'` -## SortOrder [Permalink for this section](https://docs.arcade.dev/toolkits/productivity/asana/reference\#sortorder) +## SortOrder [Permalink for this section](https://docs.arcade.dev/mcp-servers/productivity/asana/reference\#sortorder) - **ASCENDING**: `'ascending'` - **DESCENDING**: `'descending'` -[Asana](https://docs.arcade.dev/toolkits/productivity/asana "Asana") [Confluence](https://docs.arcade.dev/toolkits/productivity/confluence "Confluence") +[Asana](https://docs.arcade.dev/mcp-servers/productivity/asana "Asana") [Confluence](https://docs.arcade.dev/mcp-servers/productivity/confluence "Confluence") Frame @@ -11604,7 +11604,7 @@ You just need to change the toolkit parameter in the `list` method. For example, const slackToolkit = await arcade.tools.list({ toolkit: "slack", limit: 30 }) ``` -Browse our [complete toolkit catalog](https://docs.arcade.dev/toolkits) to see all available toolkits and their capabilities. Each toolkit comes with pre-built tools that are ready to use with your AI applications. Arcade also is the best way to create your own custom tools and toolkits - learn more [here](https://docs.arcade.dev/home/build-tools/create-a-toolkit). +Browse our [complete toolkit catalog](https://docs.arcade.dev/toolkits) to see all available toolkits and their capabilities. Each toolkit comes with pre-built tools that are ready to use with your AI applications. Arcade also is the best way to create your own custom tools and toolkits - learn more [here](https://docs.arcade.dev/home/build-tools/create-a-mcp-server). [Managing user authorization](https://docs.arcade.dev/home/oai-agents/user-auth-interrupts "Managing user authorization") [MCP Overview](https://docs.arcade.dev/home/mcp-overview "MCP Overview") @@ -11626,17 +11626,17 @@ This will be shown if an incident or maintenance is posted on your status page. **Author:** Arcade -**Code:** [GitHub](https://github.com/ArcadeAI/arcade-ai/tree/main/toolkits/postgres) +**Code:** [GitHub](https://github.com/ArcadeAI/arcade-ai/tree/main/mcp-servers/postgres) **Auth:** database connection string [![PyPI Version](https://img.shields.io/pypi/v/arcade_postgres)](https://pypi.org/project/arcade_postgres/)[![License](https://img.shields.io/badge/License-MIT-yellow.svg)](https://github.com/arcadeai/arcade-ai/blob/main/LICENSE)[![Python Versions](https://img.shields.io/pypi/pyversions/arcade_postgres)](https://pypi.org/project/arcade_postgres/)[![Wheel Status](https://img.shields.io/pypi/wheel/arcade_postgres)](https://pypi.org/project/arcade_postgres/)[![Downloads](https://img.shields.io/pypi/dm/arcade_postgres)](https://pypi.org/project/arcade_postgres/) -The Arcade Postgres toolkit provides a pre-built set of tools for interacting with PostgreSQL databases in a read-only manner. This toolkit enables agents to discover database schemas, explore table structures, and execute SELECT queries safely. This toolkit is a companion to the blog post [Designing SQL Tools for AI Agents](https://blog.arcade.dev/sql-tools-ai-agents-security). +The Arcade Postgres MCP Server provides a pre-built set of tools for interacting with PostgreSQL databases in a read-only manner. This toolkit enables agents to discover database schemas, explore table structures, and execute SELECT queries safely. This toolkit is a companion to the blog post [Designing SQL Tools for AI Agents](https://blog.arcade.dev/sql-tools-ai-agents-security). This toolkit is meant to be an example of how to build a toolkit for a database, and is not intended to be used in production - you won’t find it listed in the Arcade dashboard or APIs. For production use, we recommend forking this repository and building your own toolkit with use-case specific tools. -## Key Features [Permalink for this section](https://docs.arcade.dev/toolkits/databases/postgres\#key-features) +## Key Features [Permalink for this section](https://docs.arcade.dev/mcp-servers/databases/postgres\#key-features) This toolkit demonstrates several important concepts for LLM-powered database interactions: @@ -11648,7 +11648,7 @@ This toolkit demonstrates several important concepts for LLM-powered database in - **Read-Only Access**: Enforce read-only access to prevent data modification - **Row Limits**: Automatically limit query results to prevent overwhelming responses -## Available Tools [Permalink for this section](https://docs.arcade.dev/toolkits/databases/postgres\#available-tools) +## Available Tools [Permalink for this section](https://docs.arcade.dev/mcp-servers/databases/postgres\#available-tools) | Tool Name | Description | | --- | --- | @@ -11659,13 +11659,13 @@ This toolkit demonstrates several important concepts for LLM-powered database in Note that all tools require the `POSTGRES_DATABASE_CONNECTION_STRING` secret to be set. -## Postgres.DiscoverSchemas [Permalink for this section](https://docs.arcade.dev/toolkits/databases/postgres\#postgresdiscoverschemas) +## Postgres.DiscoverSchemas [Permalink for this section](https://docs.arcade.dev/mcp-servers/databases/postgres\#postgresdiscoverschemas) Discover all schemas in a PostgreSQL database. This tool returns a list of all available schemas, excluding the `information_schema` for security. See Example > -## Postgres.DiscoverTables [Permalink for this section](https://docs.arcade.dev/toolkits/databases/postgres\#postgresdiscovertables) +## Postgres.DiscoverTables [Permalink for this section](https://docs.arcade.dev/mcp-servers/databases/postgres\#postgresdiscovertables) Discover all tables in a specific schema. This tool should be used before any other tool that requires a table name. @@ -11675,7 +11675,7 @@ Discover all tables in a specific schema. This tool should be used before any ot See Example > -## Postgres.GetTableSchema [Permalink for this section](https://docs.arcade.dev/toolkits/databases/postgres\#postgresgettableschema) +## Postgres.GetTableSchema [Permalink for this section](https://docs.arcade.dev/mcp-servers/databases/postgres\#postgresgettableschema) Get the detailed schema of a specific table. This tool provides column information including data types, primary key indicators, and index information. Always use this tool before executing any query. @@ -11686,7 +11686,7 @@ Get the detailed schema of a specific table. This tool provides column informati See Example > -## Postgres.ExecuteSelectQuery [Permalink for this section](https://docs.arcade.dev/toolkits/databases/postgres\#postgresexecuteselectquery) +## Postgres.ExecuteSelectQuery [Permalink for this section](https://docs.arcade.dev/mcp-servers/databases/postgres\#postgresexecuteselectquery) Execute a SELECT query with comprehensive clause support. This tool allows you to build complex queries using individual clauses while maintaining safety and performance. @@ -11728,7 +11728,7 @@ LIMIT {limit} OFFSET {offset} See Example > -## Usage Workflow [Permalink for this section](https://docs.arcade.dev/toolkits/databases/postgres\#usage-workflow) +## Usage Workflow [Permalink for this section](https://docs.arcade.dev/mcp-servers/databases/postgres\#usage-workflow) For optimal results, follow this workflow when using the Postgres toolkit: @@ -11753,7 +11753,7 @@ Arcade tools can be self-hosted on your own infrastructure. Learn more about sel pip install arcade_postgres\\ ```](https://docs.arcade.dev/home/hosting-overview) -[Salesforce](https://docs.arcade.dev/toolkits/sales/salesforce "Salesforce") [MongoDB](https://docs.arcade.dev/toolkits/databases/mongodb "MongoDB") +[Salesforce](https://docs.arcade.dev/mcp-servers/sales/salesforce "Salesforce") [MongoDB](https://docs.arcade.dev/mcp-servers/databases/mongodb "MongoDB") Frame @@ -11765,7 +11765,7 @@ This will be shown if an incident or maintenance is posted on your status page. [View latest updates](https://status.arcade.dev/?utm_source=embed) ## Google Docs Toolkit -[Integrations](https://docs.arcade.dev/toolkits "Integrations") [Productivity & Docs](https://docs.arcade.dev/toolkits/productivity/asana "Productivity & Docs") Google Docs +[Integrations](https://docs.arcade.dev/toolkits "Integrations") [Productivity & Docs](https://docs.arcade.dev/mcp-servers/productivity/asana "Productivity & Docs") Google Docs # Google Docs @@ -11779,11 +11779,11 @@ This Toolkit is not available in Arcade Cloud. You can use these tools with a [s [![PyPI Version](https://img.shields.io/pypi/v/arcade_google_docs)](https://pypi.org/project/arcade_google_docs/)[![License](https://img.shields.io/badge/License-MIT-yellow.svg)](https://github.com/arcadeai/arcade-ai/blob/main/LICENSE)[![Python Versions](https://img.shields.io/pypi/pyversions/arcade_google_docs)](https://pypi.org/project/arcade_google_docs/)[![Wheel Status](https://img.shields.io/pypi/wheel/arcade_google_docs)](https://pypi.org/project/arcade_google_docs/)[![Downloads](https://img.shields.io/pypi/dm/arcade_google_docs)](https://pypi.org/project/arcade_google_docs/) -The Arcade Google Docs toolkit provides a pre-built set of tools for interacting with Google Docs. These tools make it easy to build agents and AI apps that can: +The Arcade Google Docs MCP Server provides a pre-built set of tools for interacting with Google Docs. These tools make it easy to build agents and AI apps that can: - Create, update, list, and delete documents -## Available Tools [Permalink for this section](https://docs.arcade.dev/toolkits/productivity/google_docs\#available-tools) +## Available Tools [Permalink for this section](https://docs.arcade.dev/mcp-servers/productivity/google_docs\#available-tools) These tools are currently available in the Arcade Google Docs toolkit. @@ -11803,10 +11803,10 @@ These tools are currently available in the Arcade Google Docs toolkit. 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](https://docs.arcade.dev/home/build-tools/create-a-toolkit) with the [Google auth\\ +own tools](https://docs.arcade.dev/home/build-tools/create-a-mcp-server) with the [Google auth\\ provider](https://docs.arcade.dev/home/auth-providers/google#using-google-auth-in-custom-tools). -## GoogleDocs.WhoAmI [Permalink for this section](https://docs.arcade.dev/toolkits/productivity/google_docs\#googledocswhoami) +## GoogleDocs.WhoAmI [Permalink for this section](https://docs.arcade.dev/mcp-servers/productivity/google_docs\#googledocswhoami) See Example > @@ -11818,7 +11818,7 @@ This tool does not take any parameters. * * * -## GoogleDocs.GetDocumentById [Permalink for this section](https://docs.arcade.dev/toolkits/productivity/google_docs\#googledocsgetdocumentbyid) +## GoogleDocs.GetDocumentById [Permalink for this section](https://docs.arcade.dev/mcp-servers/productivity/google_docs\#googledocsgetdocumentbyid) See Example > @@ -11830,7 +11830,7 @@ Get the latest version of the specified Google Docs document. * * * -## GoogleDocs.GetDocumentAsDocMD [Permalink for this section](https://docs.arcade.dev/toolkits/productivity/google_docs\#googledocsgetdocumentasdocmd) +## GoogleDocs.GetDocumentAsDocMD [Permalink for this section](https://docs.arcade.dev/mcp-servers/productivity/google_docs\#googledocsgetdocumentasdocmd) See Example > @@ -11842,7 +11842,7 @@ Get the latest version of the specified Google Docs document in DocMD format. Th * * * -## GoogleDocs.EditDocument [Permalink for this section](https://docs.arcade.dev/toolkits/productivity/google_docs\#googledocseditdocument) +## GoogleDocs.EditDocument [Permalink for this section](https://docs.arcade.dev/mcp-servers/productivity/google_docs\#googledocseditdocument) See Example > @@ -11854,11 +11854,11 @@ Note that this tool is agentic, and requires the secret OPENAI\_API\_KEY to be s - **`document_id`** _(string, required)_ The ID of the document to edit. - **`edit_requests`** _(list\[str\], required)_ A list of natural language descriptions of the desired changes to the document. Each entry should be a single, self-contained edit request that can be fully understood independently. Note: Each request may result in zero, one, or multiple actual edits depending on what changes are needed (e.g., a request might be ignored if the change already exists in the document). -- **`reasoning_effort`** _(enum ( [ReasoningEffort](https://docs.arcade.dev/toolkits/productivity/google_docs#reasoningeffort)), optional)_ The effort to put into reasoning about the edits. Defaults to medium. +- **`reasoning_effort`** _(enum ( [ReasoningEffort](https://docs.arcade.dev/mcp-servers/productivity/google_docs#reasoningeffort)), optional)_ The effort to put into reasoning about the edits. Defaults to medium. * * * -## GoogleDocs.InsertTextAtEndOfDocument [Permalink for this section](https://docs.arcade.dev/toolkits/productivity/google_docs\#googledocsinserttextatendofdocument) +## GoogleDocs.InsertTextAtEndOfDocument [Permalink for this section](https://docs.arcade.dev/mcp-servers/productivity/google_docs\#googledocsinserttextatendofdocument) See Example > @@ -11871,7 +11871,7 @@ Insert text at the end of an existing Google Docs document. * * * -## GoogleDocs.CreateBlankDocument [Permalink for this section](https://docs.arcade.dev/toolkits/productivity/google_docs\#googledocscreateblankdocument) +## GoogleDocs.CreateBlankDocument [Permalink for this section](https://docs.arcade.dev/mcp-servers/productivity/google_docs\#googledocscreateblankdocument) See Example > @@ -11883,7 +11883,7 @@ Create a blank Google Docs document with the specified title. * * * -## GoogleDocs.CreateDocumentFromText [Permalink for this section](https://docs.arcade.dev/toolkits/productivity/google_docs\#googledocscreatedocumentfromtext) +## GoogleDocs.CreateDocumentFromText [Permalink for this section](https://docs.arcade.dev/mcp-servers/productivity/google_docs\#googledocscreatedocumentfromtext) See Example > @@ -11896,7 +11896,7 @@ Create a Google Docs document with the specified title and text content. * * * -## GoogleDocs.SearchDocuments [Permalink for this section](https://docs.arcade.dev/toolkits/productivity/google_docs\#googledocssearchdocuments) +## GoogleDocs.SearchDocuments [Permalink for this section](https://docs.arcade.dev/mcp-servers/productivity/google_docs\#googledocssearchdocuments) See Example > @@ -11909,11 +11909,11 @@ Search Google documents in the user’s Google Drive. Excludes documents that ar - **`search_only_in_shared_drive_id`** _(str, optional)_ The ID of the shared drive to restrict the search to. If provided, the search will only return documents from this drive. Defaults to None, which searches across all drives. - **`include_shared_drives`** _(bool, optional)_ Whether to include documents from shared drives in the search results. Defaults to False (searches only in the user’s β€˜My Drive’). - **`include_organization_domain_documents`** _(bool, optional)_ Whether to include documents from the organization’s domain. This is applicable to admin users who have permissions to view organization-wide documents in a Google Workspace account. Defaults to False. -- **`order_by`** _(enum ( [OrderBy](https://docs.arcade.dev/toolkits/productivity/google_docs#orderby)), optional)_ Sort order. Defaults to listing the most recently modified documents first. +- **`order_by`** _(enum ( [OrderBy](https://docs.arcade.dev/mcp-servers/productivity/google_docs#orderby)), optional)_ Sort order. Defaults to listing the most recently modified documents first. - **`limit`** _(int, optional)_ The number of documents to list. Defaults to `50`. - **`pagination_token`** _(str, optional)_ The pagination token to continue a previous request -## GoogleDrive.SearchAndRetrieveDocuments [Permalink for this section](https://docs.arcade.dev/toolkits/productivity/google_docs\#googledrivesearchandretrievedocuments) +## GoogleDrive.SearchAndRetrieveDocuments [Permalink for this section](https://docs.arcade.dev/mcp-servers/productivity/google_docs\#googledrivesearchandretrievedocuments) See Example > @@ -11921,19 +11921,19 @@ Searches for documents in the user’s Google Drive and returns a list of docume **Parameters** -- **`document_format`** _(enum ( [DocumentFormat](https://docs.arcade.dev/toolkits/productivity/google_docs#documentformat)), optional)_ The format of the document to be returned. Defaults to Markdown. +- **`document_format`** _(enum ( [DocumentFormat](https://docs.arcade.dev/mcp-servers/productivity/google_docs#documentformat)), optional)_ The format of the document to be returned. Defaults to Markdown. - **`document_contains`** _(list\[str\], optional)_ Keywords or phrases that must be in the document title or body. Provide a list of keywords or phrases if needed. - **`document_not_contains`** _(list\[str\], optional)_ Keywords or phrases that must not be in the document title or body. Provide a list of keywords or phrases if needed. - **`search_only_in_shared_drive_id`** _(str, optional)_ The ID of the shared drive to restrict the search to. If provided, the search will only return documents from this drive. Defaults to None, which searches across all drives. - **`include_shared_drives`** _(bool, optional)_ Whether to include documents from shared drives in the search results. Defaults to False (searches only in the user’s β€˜My Drive’). - **`include_organization_domain_documents`** _(bool, optional)_ Whether to include documents from the organization’s domain. This is applicable to admin users who have permissions to view organization-wide documents in a Google Workspace account. Defaults to False. -- **`order_by`** _(enum ( [OrderBy](https://docs.arcade.dev/toolkits/productivity/google_docs#orderby)), optional)_ Sort order. Defaults to listing the most recently modified documents first. +- **`order_by`** _(enum ( [OrderBy](https://docs.arcade.dev/mcp-servers/productivity/google_docs#orderby)), optional)_ Sort order. Defaults to listing the most recently modified documents first. - **`limit`** _(int, optional)_ The number of documents to list. Defaults to `50`. - **`pagination_token`** _(str, optional)_ The pagination token to continue a previous request * * * -## GoogleDocs.ListDocumentComments [Permalink for this section](https://docs.arcade.dev/toolkits/productivity/google_docs\#googledocslistdocumentcomments) +## GoogleDocs.ListDocumentComments [Permalink for this section](https://docs.arcade.dev/mcp-servers/productivity/google_docs\#googledocslistdocumentcomments) See Example > @@ -11946,7 +11946,7 @@ List all comments on the specified Google Docs document. * * * -## GoogleDocs.CommentOnDocument [Permalink for this section](https://docs.arcade.dev/toolkits/productivity/google_docs\#googledocscommentondocument) +## GoogleDocs.CommentOnDocument [Permalink for this section](https://docs.arcade.dev/mcp-servers/productivity/google_docs\#googledocscommentondocument) See Example > @@ -11959,7 +11959,7 @@ Comment on a specific document by its ID. * * * -## Auth [Permalink for this section](https://docs.arcade.dev/toolkits/productivity/google_docs\#auth) +## Auth [Permalink for this section](https://docs.arcade.dev/mcp-servers/productivity/google_docs\#auth) The Arcade Docs toolkit uses the [Google auth provider](https://docs.arcade.dev/home/auth-providers/google) to connect to users’ Google accounts. @@ -11969,9 +11969,9 @@ With a self-hosted installation of Arcade, you need to [configure the Google aut * * * -## Reference [Permalink for this section](https://docs.arcade.dev/toolkits/productivity/google_docs\#reference) +## Reference [Permalink for this section](https://docs.arcade.dev/mcp-servers/productivity/google_docs\#reference) -### DocumentFormat [Permalink for this section](https://docs.arcade.dev/toolkits/productivity/google_docs\#documentformat) +### DocumentFormat [Permalink for this section](https://docs.arcade.dev/mcp-servers/productivity/google_docs\#documentformat) The format of the document to be returned. @@ -11979,7 +11979,7 @@ The format of the document to be returned. - **`HTML`**: HTML format. - **`GOOGLE_API_JSON`**: Original JSON format returned by the Google API. -### OrderBy [Permalink for this section](https://docs.arcade.dev/toolkits/productivity/google_docs\#orderby) +### OrderBy [Permalink for this section](https://docs.arcade.dev/mcp-servers/productivity/google_docs\#orderby) Sort keys for ordering files in Google Drive. Each key has both ascending and descending options. @@ -12006,7 +12006,7 @@ Sort keys for ordering files in Google Drive. Each key has both ascending and de - **`VIEWED_BY_ME_TIME`**: The last time the file was viewed by the user (ascending). - **`VIEWED_BY_ME_TIME_DESC`**: The last time the file was viewed by the user (descending). -### ReasoningEffort [Permalink for this section](https://docs.arcade.dev/toolkits/productivity/google_docs\#reasoningeffort) +### ReasoningEffort [Permalink for this section](https://docs.arcade.dev/mcp-servers/productivity/google_docs\#reasoningeffort) The effort to put into reasoning about document edits. @@ -12029,7 +12029,7 @@ Arcade tools can be self-hosted on your own infrastructure. Learn more about sel pip install arcade_google_docs\\ ```](https://docs.arcade.dev/home/hosting-overview) -[Google Contacts](https://docs.arcade.dev/toolkits/productivity/google_contacts "Google Contacts") [Reference](https://docs.arcade.dev/toolkits/productivity/google_docs/reference "Reference") +[Google Contacts](https://docs.arcade.dev/mcp-servers/productivity/google_contacts "Google Contacts") [Reference](https://docs.arcade.dev/mcp-servers/productivity/google_docs/reference "Reference") Frame @@ -12041,26 +12041,26 @@ This will be shown if an incident or maintenance is posted on your status page. [View latest updates](https://status.arcade.dev/?utm_source=embed) ## Google Calendar Reference -[Integrations](https://docs.arcade.dev/toolkits "Integrations") [Productivity & Docs](https://docs.arcade.dev/toolkits/productivity/asana "Productivity & Docs") [Google Calendar](https://docs.arcade.dev/toolkits/productivity/google_calendar "Google Calendar") Reference +[Integrations](https://docs.arcade.dev/toolkits "Integrations") [Productivity & Docs](https://docs.arcade.dev/mcp-servers/productivity/asana "Productivity & Docs") [Google Calendar](https://docs.arcade.dev/mcp-servers/productivity/google_calendar "Google Calendar") Reference # GoogleCalendar Reference Below is a reference of enumerations used by some tools in the GoogleCalendar toolkit: -## EventVisibility [Permalink for this section](https://docs.arcade.dev/toolkits/productivity/google_calendar/reference\#eventvisibility) +## EventVisibility [Permalink for this section](https://docs.arcade.dev/mcp-servers/productivity/google_calendar/reference\#eventvisibility) - **DEFAULT**: `default` - **PUBLIC**: `public` - **PRIVATE**: `private` - **CONFIDENTIAL**: `confidential` -## SendUpdatesOptions [Permalink for this section](https://docs.arcade.dev/toolkits/productivity/google_calendar/reference\#sendupdatesoptions) +## SendUpdatesOptions [Permalink for this section](https://docs.arcade.dev/mcp-servers/productivity/google_calendar/reference\#sendupdatesoptions) - **NONE**: `none` - **ALL**: `all` - **EXTERNAL\_ONLY**: `externalOnly` -[Google Calendar](https://docs.arcade.dev/toolkits/productivity/google_calendar "Google Calendar") [Google Contacts](https://docs.arcade.dev/toolkits/productivity/google_contacts "Google Contacts") +[Google Calendar](https://docs.arcade.dev/mcp-servers/productivity/google_calendar "Google Calendar") [Google Contacts](https://docs.arcade.dev/mcp-servers/productivity/google_contacts "Google Contacts") Frame @@ -12072,7 +12072,7 @@ This will be shown if an incident or maintenance is posted on your status page. [View latest updates](https://status.arcade.dev/?utm_source=embed) ## Google Contacts Toolkit -[Integrations](https://docs.arcade.dev/toolkits "Integrations") [Productivity & Docs](https://docs.arcade.dev/toolkits/productivity/asana "Productivity & Docs") Google Contacts +[Integrations](https://docs.arcade.dev/toolkits "Integrations") [Productivity & Docs](https://docs.arcade.dev/mcp-servers/productivity/asana "Productivity & Docs") Google Contacts # Google Contacts @@ -12084,12 +12084,12 @@ This will be shown if an incident or maintenance is posted on your status page. [![PyPI Version](https://img.shields.io/pypi/v/arcade_google_contacts)](https://pypi.org/project/arcade_google_contacts/)[![License](https://img.shields.io/badge/License-MIT-yellow.svg)](https://github.com/arcadeai/arcade-ai/blob/main/LICENSE)[![Python Versions](https://img.shields.io/pypi/pyversions/arcade_google_contacts)](https://pypi.org/project/arcade_google_contacts/)[![Wheel Status](https://img.shields.io/pypi/wheel/arcade_google_contacts)](https://pypi.org/project/arcade_google_contacts/)[![Downloads](https://img.shields.io/pypi/dm/arcade_google_contacts)](https://pypi.org/project/arcade_google_contacts/) -The Arcade Google Contacts toolkit provides a pre-built set of tools for interacting with Google Contacts. These tools make it easy to build agents and AI apps that can: +The Arcade Google Contacts MCP Server provides a pre-built set of tools for interacting with Google Contacts. These tools make it easy to build agents and AI apps that can: - Create new contacts - Search for contacts by name or email -## Available Tools [Permalink for this section](https://docs.arcade.dev/toolkits/productivity/google_contacts\#available-tools) +## Available Tools [Permalink for this section](https://docs.arcade.dev/mcp-servers/productivity/google_contacts\#available-tools) These tools are currently available in the Arcade Google Contacts toolkit. @@ -12102,10 +12102,10 @@ These tools are currently available in the Arcade Google Contacts toolkit. 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](https://docs.arcade.dev/home/build-tools/create-a-toolkit) with the [Google auth\\ +own tools](https://docs.arcade.dev/home/build-tools/create-a-mcp-server) with the [Google auth\\ provider](https://docs.arcade.dev/home/auth-providers/google#using-google-auth-in-custom-tools). -## GoogleContacts.SearchContactsByEmail [Permalink for this section](https://docs.arcade.dev/toolkits/productivity/google_contacts\#googlecontactssearchcontactsbyemail) +## GoogleContacts.SearchContactsByEmail [Permalink for this section](https://docs.arcade.dev/mcp-servers/productivity/google_contacts\#googlecontactssearchcontactsbyemail) Search the user’s contacts in Google Contacts by email address. @@ -12118,7 +12118,7 @@ See Example > * * * -## GoogleContacts.SearchContactsByName [Permalink for this section](https://docs.arcade.dev/toolkits/productivity/google_contacts\#googlecontactssearchcontactsbyname) +## GoogleContacts.SearchContactsByName [Permalink for this section](https://docs.arcade.dev/mcp-servers/productivity/google_contacts\#googlecontactssearchcontactsbyname) Search the user’s contacts in Google Contacts by name. @@ -12131,7 +12131,7 @@ See Example > * * * -## GoogleContacts.CreateContact [Permalink for this section](https://docs.arcade.dev/toolkits/productivity/google_contacts\#googlecontactscreatecontact) +## GoogleContacts.CreateContact [Permalink for this section](https://docs.arcade.dev/mcp-servers/productivity/google_contacts\#googlecontactscreatecontact) Create a new contact record in Google Contacts. @@ -12145,7 +12145,7 @@ See Example > * * * -## GoogleContacts.WhoAmI [Permalink for this section](https://docs.arcade.dev/toolkits/productivity/google_contacts\#googlecontactswhoami) +## GoogleContacts.WhoAmI [Permalink for this section](https://docs.arcade.dev/mcp-servers/productivity/google_contacts\#googlecontactswhoami) See Example > @@ -12157,7 +12157,7 @@ This tool does not take any parameters. * * * -## Auth [Permalink for this section](https://docs.arcade.dev/toolkits/productivity/google_contacts\#auth) +## Auth [Permalink for this section](https://docs.arcade.dev/mcp-servers/productivity/google_contacts\#auth) The Arcade Google Contacts toolkit uses the [Google auth provider](https://docs.arcade.dev/home/auth-providers/google) to connect to users’ Google accounts. @@ -12179,7 +12179,7 @@ Arcade tools can be self-hosted on your own infrastructure. Learn more about sel pip install arcade_google_contacts\\ ```](https://docs.arcade.dev/home/hosting-overview) -[Reference](https://docs.arcade.dev/toolkits/productivity/google_calendar/reference "Reference") [Google Docs](https://docs.arcade.dev/toolkits/productivity/google_docs "Google Docs") +[Reference](https://docs.arcade.dev/mcp-servers/productivity/google_calendar/reference "Reference") [Google Docs](https://docs.arcade.dev/mcp-servers/productivity/google_docs "Google Docs") Frame @@ -12209,9 +12209,9 @@ A β€˜toolkit’ is a collection of tools that can be used by an agent, grouped l A β€˜tool’ is a function that can be called by an agent which performs some action - commonly via an API, filesystem, database, etc. Tools are written in Python and deployed by running a worker which contains the toolkit’s code. Tools are defined by the `@tool()` decorator and will be passed `ToolContext` as the first argument. If a tool has dependencies that are not met (a secret is not provided, for example), the tool will fail to execute. -Tools are commonly referred to by a qualified name that includes their toolkit. For example, [Gmail.SendEmail](https://docs.arcade.dev/toolkits/productivity/gmail#gmailsendemail) +Tools are commonly referred to by a qualified name that includes their toolkit. For example, [Gmail.SendEmail](https://docs.arcade.dev/mcp-servers/productivity/gmail#gmailsendemail) -_Learn more about [tools](https://docs.arcade.dev/home/build-tools/create-a-toolkit)._ +_Learn more about [tools](https://docs.arcade.dev/home/build-tools/create-a-mcp-server)._ #### Optimized tools [Permalink for this section](https://docs.arcade.dev/home/glossary\#optimized-tools) @@ -12323,7 +12323,7 @@ _Learn more about workers [here](https://docs.arcade.dev/home/hybrid-deployment/ The Arcade TDK is a command-line application that helps you create, test, and deploy tools. -_Learn more about the TDK [here](https://docs.arcade.dev/home/build-tools/create-a-toolkit)._ +_Learn more about the TDK [here](https://docs.arcade.dev/home/build-tools/create-a-mcp-server)._ ### Evaluations (Evals) [Permalink for this section](https://docs.arcade.dev/home/glossary\#evaluations-evals) @@ -12350,7 +12350,7 @@ This will be shown if an incident or maintenance is posted on your status page. The Google auth provider enables tools and agents to call Google/Google Workspace APIs on behalf of a user. Behind the scenes, the Arcade Engine and the Google auth provider seamlessly manage Google OAuth 2.0 authorization for your users. Want to quickly get started with Google services in your agent or AI app? The -pre-built [Arcade Gmail toolkit](https://docs.arcade.dev/toolkits/productivity/gmail) is what +pre-built [Arcade Gmail toolkit](https://docs.arcade.dev/mcp-servers/productivity/gmail) is what you want! ### What’s documented here [Permalink for this section](https://docs.arcade.dev/home/auth-providers/google\#whats-documented-here) @@ -12359,7 +12359,7 @@ This page describes how to use and configure Google auth with Arcade. This auth provider is used by: -- The [Arcade Gmail toolkit](https://docs.arcade.dev/toolkits/productivity/gmail), which provides pre-built tools for interacting with Google services +- The [Arcade Gmail toolkit](https://docs.arcade.dev/mcp-servers/productivity/gmail), which provides pre-built tools for interacting with Google services - Your [app code](https://docs.arcade.dev/home/auth-providers/google#using-google-auth-in-app-code) that needs to call Google APIs - Or, your [custom tools](https://docs.arcade.dev/home/auth-providers/google#using-google-auth-in-custom-tools) that need to call Google APIs @@ -12482,9 +12482,9 @@ print(email_messages) ## Using Google auth in custom tools [Permalink for this section](https://docs.arcade.dev/home/auth-providers/google\#using-google-auth-in-custom-tools) -You can use the pre-built Arcade Google toolkits, like [Arcade Gmail toolkit](https://docs.arcade.dev/toolkits/productivity/gmail), to quickly build agents and AI apps that interact with Google services like Gmail, Calendar, Drive, and more. +You can use the pre-built Arcade Google toolkits, like [Arcade Gmail toolkit](https://docs.arcade.dev/mcp-servers/productivity/gmail), to quickly build agents and AI apps that interact with Google services like Gmail, Calendar, Drive, and more. -If the pre-built tools in the Google toolkits don’t meet your needs, you can author your own [custom tools](https://docs.arcade.dev/home/build-tools/create-a-toolkit) that interact with Google APIs. +If the pre-built tools in the Google toolkits don’t meet your needs, you can author your own [custom tools](https://docs.arcade.dev/home/build-tools/create-a-mcp-server) that interact with Google APIs. Use the `Google()` auth class to specify that a tool requires authorization with Google. The `context.authorization.token` field will be automatically populated with the user’s Google token: @@ -12537,7 +12537,7 @@ This will be shown if an incident or maintenance is posted on your status page. [View latest updates](https://status.arcade.dev/?utm_source=embed) ## Google Jobs Toolkit -[Integrations](https://docs.arcade.dev/toolkits "Integrations") [Search Tools](https://docs.arcade.dev/toolkits/search/google_finance "Search Tools") Google Jobs +[Integrations](https://docs.arcade.dev/toolkits "Integrations") [Search Tools](https://docs.arcade.dev/mcp-servers/search/google_finance "Search Tools") Google Jobs # Google Jobs @@ -12549,11 +12549,11 @@ This will be shown if an incident or maintenance is posted on your status page. [![PyPI Version](https://img.shields.io/pypi/v/arcade_google-jobs)](https://pypi.org/project/arcade_google-jobs/)[![License](https://img.shields.io/badge/License-MIT-yellow.svg)](https://github.com/arcadeai/arcade-ai/blob/main/LICENSE)[![Python Versions](https://img.shields.io/pypi/pyversions/arcade_google-jobs)](https://pypi.org/project/arcade_google-jobs/)[![Wheel Status](https://img.shields.io/pypi/wheel/arcade_google-jobs)](https://pypi.org/project/arcade_google-jobs/)[![Downloads](https://img.shields.io/pypi/dm/arcade_google-jobs)](https://pypi.org/project/arcade_google-jobs/) -The Arcade Google Jobs toolkit provides a pre-built set of tools for interacting with Google Jobs. These tools make it easy to build agents and AI apps that can: +The Arcade Google Jobs MCP Server provides a pre-built set of tools for interacting with Google Jobs. These tools make it easy to build agents and AI apps that can: - Search for job openings with Google Jobs. -## Available Tools [Permalink for this section](https://docs.arcade.dev/toolkits/search/google_jobs\#available-tools) +## Available Tools [Permalink for this section](https://docs.arcade.dev/mcp-servers/search/google_jobs\#available-tools) | Tool Name | Description | | --- | --- | @@ -12561,9 +12561,9 @@ The Arcade Google Jobs toolkit provides a pre-built set of tools for interacting 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](https://docs.arcade.dev/home/build-tools/create-a-toolkit). +own tools](https://docs.arcade.dev/home/build-tools/create-a-mcp-server). -## GoogleJobs.SearchJobs [Permalink for this section](https://docs.arcade.dev/toolkits/search/google_jobs\#googlejobssearchjobs) +## GoogleJobs.SearchJobs [Permalink for this section](https://docs.arcade.dev/mcp-servers/search/google_jobs\#googlejobssearchjobs) See Example > @@ -12577,7 +12577,7 @@ Search for job openings with Google Jobs. - **`limit`** _(int, optional, Defaults to 10)_ Maximum number of results to retrieve. Defaults to 10 (max supported by the API). - **`next_page_token`** _(string, optional, Defaults to `None`)_ Next page token to paginate results. Defaults to None (start from the first page). -## Auth [Permalink for this section](https://docs.arcade.dev/toolkits/search/google_jobs\#auth) +## Auth [Permalink for this section](https://docs.arcade.dev/mcp-servers/search/google_jobs\#auth) The Arcade Google Jobs toolkit uses the [SerpAPI](https://serpapi.com/) to get job data from Google Jobs. @@ -12586,7 +12586,7 @@ The Arcade Google Jobs toolkit uses the [SerpAPI](https://serpapi.com/) to get j Setting the `SERP_API_KEY` secret is only required if you are [self-hosting](https://docs.arcade.dev/home/local-deployment/install/overview) Arcade. If you’re using Arcade Cloud, the secret is already set for you. To manage your secrets, go to the [Secrets page](https://api.arcade.dev/dashboard/auth/secrets) in the Arcade Dashboard. -## Default parameters [Permalink for this section](https://docs.arcade.dev/toolkits/search/google_jobs\#default-parameters) +## Default parameters [Permalink for this section](https://docs.arcade.dev/mcp-servers/search/google_jobs\#default-parameters) Language is configurable through environment variables. When set, they will be used as default for Google Jobs tools. @@ -12599,9 +12599,9 @@ The language code is a 2-character code that determines the language in which th - `ARCADE_GOOGLE_LANGUAGE`: a default value for all Google search tools. If not set, defaults to β€˜en’ (English). - `ARCADE_GOOGLE_JOBS_LANGUAGE`: a default value for the jobs search tools. If not set, defaults to `ARCADE_GOOGLE_LANGUAGE`. -A list of supported language codes can be found [here](https://docs.arcade.dev/toolkits/search/google_jobs#languagecodes). +A list of supported language codes can be found [here](https://docs.arcade.dev/mcp-servers/search/google_jobs#languagecodes). -## LanguageCodes [Permalink for this section](https://docs.arcade.dev/toolkits/search/google_jobs\#languagecodes) +## LanguageCodes [Permalink for this section](https://docs.arcade.dev/mcp-servers/search/google_jobs\#languagecodes) - **`ar`**: Arabic - **`bn`**: Bengali @@ -12649,7 +12649,7 @@ Arcade tools can be self-hosted on your own infrastructure. Learn more about sel pip install arcade_google_jobs\\ ```](https://docs.arcade.dev/home/hosting-overview) -[Google Hotels](https://docs.arcade.dev/toolkits/search/google_hotels "Google Hotels") [Google Maps](https://docs.arcade.dev/toolkits/search/google_maps "Google Maps") +[Google Hotels](https://docs.arcade.dev/mcp-servers/search/google_hotels "Google Hotels") [Google Maps](https://docs.arcade.dev/mcp-servers/search/google_maps "Google Maps") Frame @@ -12773,7 +12773,7 @@ token = auth_response.context.token ## Using Twitch auth in custom tools [Permalink for this section](https://docs.arcade.dev/home/auth-providers/twitch\#using-twitch-auth-in-custom-tools) -You can author your own [custom tools](https://docs.arcade.dev/home/build-tools/create-a-toolkit) that interact with the Twitch API. +You can author your own [custom tools](https://docs.arcade.dev/home/build-tools/create-a-mcp-server) that interact with the Twitch API. Use the `Twitch()` auth class to specify that a tool requires authorization with Twitch. The `context.authorization.token` field will be automatically populated with the user’s Twitch token: @@ -13047,9 +13047,9 @@ token = auth_response.context.token ## Using Notion auth in custom tools [Permalink for this section](https://docs.arcade.dev/home/auth-providers/notion\#using-notion-auth-in-custom-tools) -You can use the pre-built [Arcade Notion toolkit](https://docs.arcade.dev/toolkits/development/github/github) to quickly build agents and AI apps that interact with Notion. +You can use the pre-built [Arcade Notion toolkit](https://docs.arcade.dev/mcp-servers/development/github/github) to quickly build agents and AI apps that interact with Notion. -If the pre-built tools in the Notion toolkit don’t meet your needs, you can author your own [custom tools](https://docs.arcade.dev/home/build-tools/create-a-toolkit) that interact with the Notion API. +If the pre-built tools in the Notion toolkit don’t meet your needs, you can author your own [custom tools](https://docs.arcade.dev/home/build-tools/create-a-mcp-server) that interact with the Notion API. Use the `Notion()` auth class to specify that a tool requires authorization with Notion. The `context.authorization.token` field will be automatically populated with the user’s Notion token: @@ -13128,9 +13128,9 @@ API keys are administrator credentials. Anyone who has your API key can make req Once you have your API key, you can: - [Start using tools](https://docs.arcade.dev/home/quickstart) -- [Create custom tools](https://docs.arcade.dev/home/build-tools/create-a-toolkit) +- [Create custom tools](https://docs.arcade.dev/home/build-tools/create-a-mcp-server) -[Quickstart](https://docs.arcade.dev/home/quickstart "Quickstart") [Create a toolkit](https://docs.arcade.dev/home/build-tools/create-a-toolkit "Create a toolkit") +[Quickstart](https://docs.arcade.dev/home/quickstart "Quickstart") [Create a toolkit](https://docs.arcade.dev/home/build-tools/create-a-mcp-server "Create a toolkit") Frame @@ -13251,7 +13251,7 @@ token = auth_response.context.token ## Using Discord auth in custom tools [Permalink for this section](https://docs.arcade.dev/home/auth-providers/discord\#using-discord-auth-in-custom-tools) -You can author your own [custom tools](https://docs.arcade.dev/home/build-tools/create-a-toolkit) that interact with the Discord API. +You can author your own [custom tools](https://docs.arcade.dev/home/build-tools/create-a-mcp-server) that interact with the Discord API. Use the `Discord()` auth class to specify that a tool requires authorization with Discord. The `context.authorization.token` field will be automatically populated with the user’s Discord token: @@ -13304,7 +13304,7 @@ This will be shown if an incident or maintenance is posted on your status page. The Arcade CLI is a command-line tool that allows you to manage your Arcade deployments, generate, test, and manage your toolkits, and more. -This same package contains the SDK that you will use to [build your own toolkits](https://docs.arcade.dev/home/build-tools/create-a-toolkit). +This same package contains the SDK that you will use to [build your own toolkits](https://docs.arcade.dev/home/build-tools/create-a-mcp-server). ## Installation [Permalink for this section](https://docs.arcade.dev/home/arcade-cli\#installation) @@ -13609,7 +13609,7 @@ This will be shown if an incident or maintenance is posted on your status page. The Asana auth provider enables tools and agents to call Asana APIs on behalf of a user. Behind the scenes, the Arcade Engine and the Asana auth provider seamlessly manage Asana OAuth 2.0 authorization for your users. Want to quickly get started with Asana services in your agent or AI app? The -pre-built [Arcade Asana toolkit](https://docs.arcade.dev/toolkits/productivity/asana) is what you +pre-built [Arcade Asana toolkit](https://docs.arcade.dev/mcp-servers/productivity/asana) is what you want! ## What’s documented here [Permalink for this section](https://docs.arcade.dev/home/auth-providers/asana\#whats-documented-here) @@ -13618,7 +13618,7 @@ This page describes how to use and configure Asana auth with Arcade. This auth provider is used by: -- The [Arcade Asana toolkit](https://docs.arcade.dev/toolkits/productivity/asana), which provides pre-built tools for interacting with Asana +- The [Arcade Asana toolkit](https://docs.arcade.dev/mcp-servers/productivity/asana), which provides pre-built tools for interacting with Asana - Your [app code](https://docs.arcade.dev/home/auth-providers/asana#using-asana-auth-in-app-code) that needs to call Asana APIs - Or, your [custom tools](https://docs.arcade.dev/home/auth-providers/asana#using-asana-auth-in-custom-tools) that need to call Asana APIs @@ -13626,7 +13626,7 @@ This auth provider is used by: Arcade offers a default Asana auth provider that you can use in the Arcade Cloud Platform. In this case, your users will see `Arcade` as the name of the application that’s requesting permission. -If you choose to use Arcade’s Asana auth, you don’t need to configure anything. Follow the [Asana toolkit examples](https://docs.arcade.dev/toolkits/productivity/asana) to get started calling Asana tools. +If you choose to use Arcade’s Asana auth, you don’t need to configure anything. Follow the [Asana toolkit examples](https://docs.arcade.dev/mcp-servers/productivity/asana) to get started calling Asana tools. ## Use Your Own Asana App Credentials [Permalink for this section](https://docs.arcade.dev/home/auth-providers/asana\#use-your-own-asana-app-credentials) @@ -13698,9 +13698,9 @@ When you use tools that require Asana auth using your Arcade account credentials ## Using the Arcade Asana Toolkit [Permalink for this section](https://docs.arcade.dev/home/auth-providers/asana\#using-the-arcade-asana-toolkit) -The [Arcade Asana toolkit](https://docs.arcade.dev/toolkits/productivity/asana) provides tools to interact with various Asana objects, such as tasks, projects, teams, and users. +The [Arcade Asana toolkit](https://docs.arcade.dev/mcp-servers/productivity/asana) provides tools to interact with various Asana objects, such as tasks, projects, teams, and users. -Refer to the [toolkit documentation and examples](https://docs.arcade.dev/toolkits/productivity/asana) to learn how to use the toolkit to build agents and AI apps that interact with Asana services. +Refer to the [toolkit documentation and examples](https://docs.arcade.dev/mcp-servers/productivity/asana) to learn how to use the toolkit to build agents and AI apps that interact with Asana services. ## Using Asana auth in app code [Permalink for this section](https://docs.arcade.dev/home/auth-providers/asana\#using-asana-auth-in-app-code) @@ -13745,9 +13745,9 @@ You can use the auth token to call the [Get multiple tasks endpoint](https://dev ## Using Asana auth in custom tools [Permalink for this section](https://docs.arcade.dev/home/auth-providers/asana\#using-asana-auth-in-custom-tools) -You can use the pre-built [Arcade Asana toolkit](https://docs.arcade.dev/toolkits/productivity/asana) to quickly build agents and AI apps that interact with Asana. +You can use the pre-built [Arcade Asana toolkit](https://docs.arcade.dev/mcp-servers/productivity/asana) to quickly build agents and AI apps that interact with Asana. -If the pre-built tools in the Asana toolkit don’t meet your needs, you can author your own [custom tools](https://docs.arcade.dev/home/build-tools/create-a-toolkit) that interact with Asana API. +If the pre-built tools in the Asana toolkit don’t meet your needs, you can author your own [custom tools](https://docs.arcade.dev/home/build-tools/create-a-mcp-server) that interact with Asana API. Use the `Asana()` auth class to specify that a tool requires authorization with Asana. The authentication token needed to call the Asana API is available in the tool context through the `context.get_auth_token_or_empty()` method. @@ -13921,7 +13921,7 @@ These APIs give you programmatic control over tool calling. ### Next steps [Permalink for this section](https://docs.arcade.dev/home/auth/auth-tool-calling\#next-steps) -Arcade also allows you to [build your own tools](https://docs.arcade.dev/home/build-tools/create-a-toolkit) to integrate any custom functionality or API to your Agent or AI workflows. +Arcade also allows you to [build your own tools](https://docs.arcade.dev/home/build-tools/create-a-mcp-server) to integrate any custom functionality or API to your Agent or AI workflows. Your tools can use the [service providers supported by Arcade](https://docs.arcade.dev/home/auth-providers) or you can integrate with any [OAuth2-compatible service](https://docs.arcade.dev/home/auth-providers/oauth2). @@ -13937,13 +13937,13 @@ This will be shown if an incident or maintenance is posted on your status page. [View latest updates](https://status.arcade.dev/?utm_source=embed) ## Jira Toolkit Reference -[Integrations](https://docs.arcade.dev/toolkits "Integrations") [Productivity & Docs](https://docs.arcade.dev/toolkits/productivity/asana "Productivity & Docs") [Jira](https://docs.arcade.dev/toolkits/productivity/jira "Jira") Reference +[Integrations](https://docs.arcade.dev/toolkits "Integrations") [Productivity & Docs](https://docs.arcade.dev/mcp-servers/productivity/asana "Productivity & Docs") [Jira](https://docs.arcade.dev/mcp-servers/productivity/jira "Jira") Reference # Jira Reference Below is a reference of enumerations used by some tools in the Jira toolkit: -## SprintState [Permalink for this section](https://docs.arcade.dev/toolkits/productivity/jira/reference\#sprintstate) +## SprintState [Permalink for this section](https://docs.arcade.dev/mcp-servers/productivity/jira/reference\#sprintstate) Sprint states are used in the `Jira.ListSprints` tool to filter sprints. The following enumeration values represent the possible states supported by the Jira API, either individually or in combination: @@ -13955,17 +13955,17 @@ Sprint states are used in the `Jira.ListSprints` tool to filter sprints. The fol - **ACTIVE\_AND\_CLOSED**: `active_and_closed` - **ALL**: `all` -## PrioritySchemeOrderBy [Permalink for this section](https://docs.arcade.dev/toolkits/productivity/jira/reference\#priorityschemeorderby) +## PrioritySchemeOrderBy [Permalink for this section](https://docs.arcade.dev/mcp-servers/productivity/jira/reference\#priorityschemeorderby) - **NAME\_ASCENDING**: `name ascending` - **NAME\_DESCENDING**: `name descending` -## IssueCommentOrderBy [Permalink for this section](https://docs.arcade.dev/toolkits/productivity/jira/reference\#issuecommentorderby) +## IssueCommentOrderBy [Permalink for this section](https://docs.arcade.dev/mcp-servers/productivity/jira/reference\#issuecommentorderby) - **CREATED\_DATE\_ASCENDING**: `created_date_ascending` - **CREATED\_DATE\_DESCENDING**: `created_date_descending` -[Environment Variables](https://docs.arcade.dev/toolkits/productivity/jira/environment_variables "Environment Variables") [Linear](https://docs.arcade.dev/toolkits/productivity/linear "Linear") +[Environment Variables](https://docs.arcade.dev/mcp-servers/productivity/jira/environment_variables "Environment Variables") [Linear](https://docs.arcade.dev/mcp-servers/productivity/linear "Linear") Frame @@ -13977,7 +13977,7 @@ This will be shown if an incident or maintenance is posted on your status page. [View latest updates](https://status.arcade.dev/?utm_source=embed) ## Confluence Toolkit -[Integrations](https://docs.arcade.dev/toolkits "Integrations") [Productivity & Docs](https://docs.arcade.dev/toolkits/productivity/asana "Productivity & Docs") Confluence +[Integrations](https://docs.arcade.dev/toolkits "Integrations") [Productivity & Docs](https://docs.arcade.dev/mcp-servers/productivity/asana "Productivity & Docs") Confluence # Confluence @@ -13989,12 +13989,12 @@ This will be shown if an incident or maintenance is posted on your status page. [![PyPI Version](https://img.shields.io/pypi/v/arcade_confluence)](https://pypi.org/project/arcade_confluence/)[![License](https://img.shields.io/badge/License-MIT-yellow.svg)](https://github.com/arcadeai/arcade-ai/blob/main/LICENSE)[![Python Versions](https://img.shields.io/pypi/pyversions/arcade_confluence)](https://pypi.org/project/arcade_confluence/)[![Wheel Status](https://img.shields.io/pypi/wheel/arcade_confluence)](https://pypi.org/project/arcade_confluence/)[![Downloads](https://img.shields.io/pypi/dm/arcade_confluence)](https://pypi.org/project/arcade_confluence/) -The Arcade Confluence toolkit provides a pre-built set of tools for interacting with Confluence. These tools make it easy to build agents and AI apps that can: +The Arcade Confluence MCP Server provides a pre-built set of tools for interacting with Confluence. These tools make it easy to build agents and AI apps that can: - Work with pages, spaces, and attachments - Search for content -## Available tools [Permalink for this section](https://docs.arcade.dev/toolkits/productivity/confluence\#available-tools) +## Available tools [Permalink for this section](https://docs.arcade.dev/mcp-servers/productivity/confluence\#available-tools) These tools are currently available in the Arcade Confluence toolkit. @@ -14013,9 +14013,9 @@ These tools are currently available in the Arcade Confluence toolkit. | Confluence.ListSpaces | List all spaces sorted by name in ascending order. | | Confluence.GetSpaceHierarchy | Retrieve the full hierarchical structure of a Confluence space as a tree structure. | -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](https://docs.arcade.dev/home/build-tools/create-a-toolkit) with the [Confluence auth provider](https://docs.arcade.dev/home/auth-providers/atlassian). +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](https://docs.arcade.dev/home/build-tools/create-a-mcp-server) with the [Confluence auth provider](https://docs.arcade.dev/home/auth-providers/atlassian). -## Confluence.CreatePage [Permalink for this section](https://docs.arcade.dev/toolkits/productivity/confluence\#confluencecreatepage) +## Confluence.CreatePage [Permalink for this section](https://docs.arcade.dev/mcp-servers/productivity/confluence\#confluencecreatepage) Create a new page at the root of the given space. @@ -14032,7 +14032,7 @@ See Example > * * * -## Confluence.UpdatePageContent [Permalink for this section](https://docs.arcade.dev/toolkits/productivity/confluence\#confluenceupdatepagecontent) +## Confluence.UpdatePageContent [Permalink for this section](https://docs.arcade.dev/mcp-servers/productivity/confluence\#confluenceupdatepagecontent) Update a page’s content. @@ -14040,11 +14040,11 @@ Update a page’s content. - **`page_identifier`** _(string, required)_: The ID or title of the page to update. Numerical titles are NOT supported - **`content`** _(string, required)_: The content of the page. Only plain text is supported -- **`update_mode`** _(enum ( [PageUpdateMode](https://docs.arcade.dev/toolkits/productivity/confluence#pageupdatemode)), optional)_: The mode of update. Defaults to β€˜append’ +- **`update_mode`** _(enum ( [PageUpdateMode](https://docs.arcade.dev/mcp-servers/productivity/confluence#pageupdatemode)), optional)_: The mode of update. Defaults to β€˜append’ See Example > -## Confluence.RenamePage [Permalink for this section](https://docs.arcade.dev/toolkits/productivity/confluence\#confluencerenamepage) +## Confluence.RenamePage [Permalink for this section](https://docs.arcade.dev/mcp-servers/productivity/confluence\#confluencerenamepage) Rename a page by changing its title. @@ -14057,7 +14057,7 @@ See Example > * * * -## Confluence.GetPage [Permalink for this section](https://docs.arcade.dev/toolkits/productivity/confluence\#confluencegetpage) +## Confluence.GetPage [Permalink for this section](https://docs.arcade.dev/mcp-servers/productivity/confluence\#confluencegetpage) Retrieve a SINGLE page’s content by its ID or title. @@ -14073,7 +14073,7 @@ See Example > * * * -## Confluence.GetPagesById [Permalink for this section](https://docs.arcade.dev/toolkits/productivity/confluence\#confluencegetpagesbyid) +## Confluence.GetPagesById [Permalink for this section](https://docs.arcade.dev/mcp-servers/productivity/confluence\#confluencegetpagesbyid) Get the content of MULTIPLE pages by their ID in a single efficient request. @@ -14087,14 +14087,14 @@ See Example > * * * -## Confluence.ListPages [Permalink for this section](https://docs.arcade.dev/toolkits/productivity/confluence\#confluencelistpages) +## Confluence.ListPages [Permalink for this section](https://docs.arcade.dev/mcp-servers/productivity/confluence\#confluencelistpages) Get the content of multiple pages by their ID. **Parameters** - **`space_ids`** _(list of strings, optional)_: Restrict the response to only include pages in these spaces. Only space IDs are supported. Titles of spaces are NOT supported. If not provided, then no restriction is applied. Maximum of 100 space ids supported -- **`sort_by`** _(enum ( [PageSortOrder](https://docs.arcade.dev/toolkits/productivity/confluence#pagesortorder)), optional)_: The order of the pages to sort by. Defaults to created-date-newest-to-oldest +- **`sort_by`** _(enum ( [PageSortOrder](https://docs.arcade.dev/mcp-servers/productivity/confluence#pagesortorder)), optional)_: The order of the pages to sort by. Defaults to created-date-newest-to-oldest - **`limit`** _(int, optional)_: The maximum number of pages to return. Defaults to 25. Max is 250 - **`pagination_token`** _(string, optional)_: The pagination token to use for the next page of results @@ -14102,13 +14102,13 @@ See Example > * * * -## Confluence.ListAttachments [Permalink for this section](https://docs.arcade.dev/toolkits/productivity/confluence\#confluencelistattachments) +## Confluence.ListAttachments [Permalink for this section](https://docs.arcade.dev/mcp-servers/productivity/confluence\#confluencelistattachments) List attachments in a workspace. **Parameters** -- **`sort_order`** _(enum ( [AttachmentSortOrder](https://docs.arcade.dev/toolkits/productivity/confluence#attachmentsortorder)), optional)_: The order of the attachments to sort by. Defaults to created-date-newest-to-oldest +- **`sort_order`** _(enum ( [AttachmentSortOrder](https://docs.arcade.dev/mcp-servers/productivity/confluence#attachmentsortorder)), optional)_: The order of the attachments to sort by. Defaults to created-date-newest-to-oldest - **`limit`** _(int, optional)_: The maximum number of attachments to return. Defaults to 25. Max is 250 - **`pagination_token`** _(string, optional)_: The pagination token to use for the next page of results @@ -14116,7 +14116,7 @@ See Example > * * * -## Confluence.GetAttachmentsForPage [Permalink for this section](https://docs.arcade.dev/toolkits/productivity/confluence\#confluencegetattachmentsforpage) +## Confluence.GetAttachmentsForPage [Permalink for this section](https://docs.arcade.dev/mcp-servers/productivity/confluence\#confluencegetattachmentsforpage) Get attachments for a page by its ID or title. @@ -14132,7 +14132,7 @@ See Example > * * * -## Confluence.SearchContent [Permalink for this section](https://docs.arcade.dev/toolkits/productivity/confluence\#confluencesearchcontent) +## Confluence.SearchContent [Permalink for this section](https://docs.arcade.dev/mcp-servers/productivity/confluence\#confluencesearchcontent) Search for content in Confluence. @@ -14164,7 +14164,7 @@ See Example > * * * -## Confluence.GetSpace [Permalink for this section](https://docs.arcade.dev/toolkits/productivity/confluence\#confluencegetspace) +## Confluence.GetSpace [Permalink for this section](https://docs.arcade.dev/mcp-servers/productivity/confluence\#confluencegetspace) Get the details of a space by its ID or key. @@ -14176,7 +14176,7 @@ See Example > * * * -## Confluence.ListSpaces [Permalink for this section](https://docs.arcade.dev/toolkits/productivity/confluence\#confluencelistspaces) +## Confluence.ListSpaces [Permalink for this section](https://docs.arcade.dev/mcp-servers/productivity/confluence\#confluencelistspaces) List all spaces sorted by name in ascending order. @@ -14189,7 +14189,7 @@ See Example > * * * -## Confluence.GetSpaceHierarchy [Permalink for this section](https://docs.arcade.dev/toolkits/productivity/confluence\#confluencegetspacehierarchy) +## Confluence.GetSpaceHierarchy [Permalink for this section](https://docs.arcade.dev/mcp-servers/productivity/confluence\#confluencegetspacehierarchy) Retrieve the full hierarchical structure of a Confluence space as a tree structure. @@ -14205,7 +14205,7 @@ smart links, etc. organized by parent-child relationships. See Example > -## Auth [Permalink for this section](https://docs.arcade.dev/toolkits/productivity/confluence\#auth) +## Auth [Permalink for this section](https://docs.arcade.dev/mcp-servers/productivity/confluence\#auth) The Arcade Notion toolkit uses the [Notion auth provider](https://docs.arcade.dev/home/auth-providers/notion) to connect to users’ Notion accounts. @@ -14215,9 +14215,9 @@ With a self-hosted installation of Arcade, you need to [configure the Notion aut * * * -## Reference [Permalink for this section](https://docs.arcade.dev/toolkits/productivity/confluence\#reference) +## Reference [Permalink for this section](https://docs.arcade.dev/mcp-servers/productivity/confluence\#reference) -### PageUpdateMode [Permalink for this section](https://docs.arcade.dev/toolkits/productivity/confluence\#pageupdatemode) +### PageUpdateMode [Permalink for this section](https://docs.arcade.dev/mcp-servers/productivity/confluence\#pageupdatemode) The mode of update. @@ -14225,7 +14225,7 @@ The mode of update. - **`append`** _(string: β€œappend”)_ - **`replace`** _(string: β€œreplace”)_ -### PageSortOrder [Permalink for this section](https://docs.arcade.dev/toolkits/productivity/confluence\#pagesortorder) +### PageSortOrder [Permalink for this section](https://docs.arcade.dev/mcp-servers/productivity/confluence\#pagesortorder) The order of the pages to sort by. @@ -14238,7 +14238,7 @@ The order of the pages to sort by. - **`modified-date-oldest-to-newest`**: Sort by modified date from oldest to newest. - **`modified-date-newest-to-oldest`**: Sort by modified date from newest to oldest. -### AttachmentSortOrder [Permalink for this section](https://docs.arcade.dev/toolkits/productivity/confluence\#attachmentsortorder) +### AttachmentSortOrder [Permalink for this section](https://docs.arcade.dev/mcp-servers/productivity/confluence\#attachmentsortorder) The order of the attachments to sort by. @@ -14261,7 +14261,7 @@ Arcade tools can be self-hosted on your own infrastructure. Learn more about sel pip install arcade_confluence\\ ```](https://docs.arcade.dev/home/hosting-overview) -[Reference](https://docs.arcade.dev/toolkits/productivity/asana/reference "Reference") [Dropbox](https://docs.arcade.dev/toolkits/productivity/dropbox/dropbox "Dropbox") +[Reference](https://docs.arcade.dev/mcp-servers/productivity/asana/reference "Reference") [Dropbox](https://docs.arcade.dev/mcp-servers/productivity/dropbox/dropbox "Dropbox") Frame @@ -14500,11 +14500,11 @@ This will be shown if an incident or maintenance is posted on your status page. [View latest updates](https://status.arcade.dev/?utm_source=embed) ## Arcade Zoom Integration -[Integrations](https://docs.arcade.dev/toolkits "Integrations") [Social & Communication](https://docs.arcade.dev/toolkits/social-communication/discord "Social & Communication") [Zoom](https://docs.arcade.dev/toolkits/social-communication/zoom "Zoom") Install +[Integrations](https://docs.arcade.dev/toolkits "Integrations") [Social & Communication](https://docs.arcade.dev/mcp-servers/social-communication/discord "Social & Communication") [Zoom](https://docs.arcade.dev/mcp-servers/social-communication/zoom "Zoom") Install # Arcade for Zoom -## Integrate Arcade with your Zoom account [Permalink for this section](https://docs.arcade.dev/toolkits/social-communication/zoom/install\#integrate-arcade-with-your-zoom-account) +## Integrate Arcade with your Zoom account [Permalink for this section](https://docs.arcade.dev/mcp-servers/social-communication/zoom/install\#integrate-arcade-with-your-zoom-account) Arcade securely connects your AI agents to APIs, data, code, and other systems via Tools. Our Zoom integration allows Arcade’s tools to connect to your Zoom account, helping you manage meetings and gather information more efficiently. @@ -14519,15 +14519,15 @@ Arcade’s Zoom app brings Arcade’s powerful AI tool-calling capabilities to y - Find the participants and/or registrants for a specific meeting - and more! -For more details on what tools are available and what scopes they require, see the [Zoom toolkit documentation](https://docs.arcade.dev/toolkits/social-communication/zoom). +For more details on what tools are available and what scopes they require, see the [Zoom toolkit documentation](https://docs.arcade.dev/mcp-servers/social-communication/zoom). The Arcade Zoom app requires an active Arcade account. If you don’t have one yet, [sign up for free](https://api.arcade.dev/signup). -## How it works [Permalink for this section](https://docs.arcade.dev/toolkits/social-communication/zoom/install\#how-it-works) +## How it works [Permalink for this section](https://docs.arcade.dev/mcp-servers/social-communication/zoom/install\#how-it-works) -### Start using Arcade’s Zoom tools [Permalink for this section](https://docs.arcade.dev/toolkits/social-communication/zoom/install\#start-using-arcades-zoom-tools) +### Start using Arcade’s Zoom tools [Permalink for this section](https://docs.arcade.dev/mcp-servers/social-communication/zoom/install\#start-using-arcades-zoom-tools) -Use Arcade’s [tools for Zoom](https://docs.arcade.dev/toolkits/social-communication/zoom) to: +Use Arcade’s [tools for Zoom](https://docs.arcade.dev/mcp-servers/social-communication/zoom) to: - List your upcoming meetings - Get meeting invitation details @@ -14538,7 +14538,7 @@ Try leveraging the Arcade Zoom tools in the Arcade Playground by [chatting with When using LLMs with Zoom, responses may sometimes contain inaccuracies. Always review AI-generated content before taking action. -## Support and troubleshooting [Permalink for this section](https://docs.arcade.dev/toolkits/social-communication/zoom/install\#support-and-troubleshooting) +## Support and troubleshooting [Permalink for this section](https://docs.arcade.dev/mcp-servers/social-communication/zoom/install\#support-and-troubleshooting) If you encounter any issues connecting Arcade to your Zoom account: @@ -14547,15 +14547,15 @@ If you encounter any issues connecting Arcade to your Zoom account: 3. Check that you’re using a compatible browser (Chrome, Firefox, Safari, or Edge) 4. Clear your browser cache and cookies, then try again -### Adding the Arcade Zoom app to your Zoom account [Permalink for this section](https://docs.arcade.dev/toolkits/social-communication/zoom/install\#adding-the-arcade-zoom-app-to-your-zoom-account) +### Adding the Arcade Zoom app to your Zoom account [Permalink for this section](https://docs.arcade.dev/mcp-servers/social-communication/zoom/install\#adding-the-arcade-zoom-app-to-your-zoom-account) If using the Arcade playground directly did not work, you can try adding the Arcade Zoom app to your Zoom account by clicking the β€œConnect with Zoom” button below. -[![](https://docs.arcade.dev/images/icons/zoom_fav.svg)Connect with Zoom](https://docs.arcade.dev/toolkits/social-communication/zoom/install#) +[![](https://docs.arcade.dev/images/icons/zoom_fav.svg)Connect with Zoom](https://docs.arcade.dev/mcp-servers/social-communication/zoom/install#) You’ll need to have a Zoom account with appropriate permissions to allow Arcade to access your Zoom data. -### Authorize the requested permissions [Permalink for this section](https://docs.arcade.dev/toolkits/social-communication/zoom/install\#authorize-the-requested-permissions) +### Authorize the requested permissions [Permalink for this section](https://docs.arcade.dev/mcp-servers/social-communication/zoom/install\#authorize-the-requested-permissions) When connecting Arcade to your Zoom account, depending on which Arcade tools you’ll be using, you’ll be asked to authorize specific permissions: @@ -14566,13 +14566,13 @@ When connecting Arcade to your Zoom account, depending on which Arcade tools you These permissions ensure Arcade can perform the necessary functions while protecting your privacy and security. -### Removing the Arcade Zoom app [Permalink for this section](https://docs.arcade.dev/toolkits/social-communication/zoom/install\#removing-the-arcade-zoom-app) +### Removing the Arcade Zoom app [Permalink for this section](https://docs.arcade.dev/mcp-servers/social-communication/zoom/install\#removing-the-arcade-zoom-app) To remove the Arcade Zoom app from your Zoom account, you can do so by going to the [Zoom App Marketplace](https://marketplace.zoom.us/user/installed) and uninstalling the app. Arcade only stores authentication tokens, not your Zoom data. These tokens become invalid when you uninstall the app and will eventually expire. To remove tokens immediately, delete the Zoom Auth Provider from the [Arcade Dashboard](https://api.arcade.dev/dashboard/auth/oauth). -## Privacy and security [Permalink for this section](https://docs.arcade.dev/toolkits/social-communication/zoom/install\#privacy-and-security) +## Privacy and security [Permalink for this section](https://docs.arcade.dev/mcp-servers/social-communication/zoom/install\#privacy-and-security) Arcade takes the security of your Zoom data seriously: @@ -14581,18 +14581,18 @@ Arcade takes the security of your Zoom data seriously: - All communication between Arcade and Zoom is encrypted - You can revoke Arcade’s access to your Zoom account at any time through your [Zoom App Marketplace](https://marketplace.zoom.us/user/installed) -## Next steps [Permalink for this section](https://docs.arcade.dev/toolkits/social-communication/zoom/install\#next-steps) +## Next steps [Permalink for this section](https://docs.arcade.dev/mcp-servers/social-communication/zoom/install\#next-steps) The Arcade Zoom app is a sample of what Arcade can do with your Zoom account. For your own applications, you might want to [create your own Zoom app](https://docs.arcade.dev/home/auth-providers/zoom). Creating your own Zoom application will allow you to brand the app, customize the permissions, and more. -## Need help? [Permalink for this section](https://docs.arcade.dev/toolkits/social-communication/zoom/install\#need-help) +## Need help? [Permalink for this section](https://docs.arcade.dev/mcp-servers/social-communication/zoom/install\#need-help) If you have any questions or need assistance: -- Check our [Zoom toolkit documentation](https://docs.arcade.dev/toolkits/social-communication/zoom) +- Check our [Zoom toolkit documentation](https://docs.arcade.dev/mcp-servers/social-communication/zoom) - [Contact our support team](https://docs.arcade.dev/home/contact-us) -[Zoom](https://docs.arcade.dev/toolkits/social-communication/zoom "Zoom") [Reference](https://docs.arcade.dev/toolkits/social-communication/microsoft_teams/reference "Reference") +[Zoom](https://docs.arcade.dev/mcp-servers/social-communication/zoom "Zoom") [Reference](https://docs.arcade.dev/mcp-servers/social-communication/microsoft_teams/reference "Reference") Frame @@ -14655,11 +14655,11 @@ This will be shown if an incident or maintenance is posted on your status page. [View latest updates](https://status.arcade.dev/?utm_source=embed) ## Arcade Slack Integration -[Integrations](https://docs.arcade.dev/toolkits "Integrations") [Social & Communication](https://docs.arcade.dev/toolkits/social-communication/discord "Social & Communication") [Slack](https://docs.arcade.dev/toolkits/social-communication/slack "Slack") Install +[Integrations](https://docs.arcade.dev/toolkits "Integrations") [Social & Communication](https://docs.arcade.dev/mcp-servers/social-communication/discord "Social & Communication") [Slack](https://docs.arcade.dev/mcp-servers/social-communication/slack "Slack") Install # Arcade for Slack -## Integrate Arcade with your Slack workspace [Permalink for this section](https://docs.arcade.dev/toolkits/social-communication/slack/install\#integrate-arcade-with-your-slack-workspace) +## Integrate Arcade with your Slack workspace [Permalink for this section](https://docs.arcade.dev/mcp-servers/social-communication/slack/install\#integrate-arcade-with-your-slack-workspace) Arcade securely connects your AI agents to APIs, data, code, and other systems via Tools. Our integration for Slack allows Arcade’s tools to connect to your Slack workspace, helping your team work more efficiently. @@ -14674,27 +14674,27 @@ Arcade’s sample app for Slack brings Arcade’s powerful AI tool-calling capab - Generate content, summaries, and responses for messages you receive - and more! -For more details on what tools are available and what scopes they require, see the [Slack toolkit documentation](https://docs.arcade.dev/toolkits/social-communication/slack). +For more details on what tools are available and what scopes they require, see the [Slack toolkit documentation](https://docs.arcade.dev/mcp-servers/social-communication/slack). The Arcade app for Slack requires an active Arcade account. If you don’t have one yet, [sign up for free](https://api.arcade.dev/signup). -## How it works [Permalink for this section](https://docs.arcade.dev/toolkits/social-communication/slack/install\#how-it-works) +## How it works [Permalink for this section](https://docs.arcade.dev/mcp-servers/social-communication/slack/install\#how-it-works) -### Install the Arcade app for Slack [Permalink for this section](https://docs.arcade.dev/toolkits/social-communication/slack/install\#install-the-arcade-app-for-slack) +### Install the Arcade app for Slack [Permalink for this section](https://docs.arcade.dev/mcp-servers/social-communication/slack/install\#install-the-arcade-app-for-slack) Click the β€œAdd to Slack” button below to install Arcade in your workspace. -[![Add to Slack](https://platform.slack-edge.com/img/add_to_slack.png)](https://docs.arcade.dev/toolkits/social-communication/slack/install#) +[![Add to Slack](https://platform.slack-edge.com/img/add_to_slack.png)](https://docs.arcade.dev/mcp-servers/social-communication/slack/install#) You’ll need to be a workspace admin or have permission to install apps to add Arcade to your Slack workspace. -### Invite Arcade to your channels [Permalink for this section](https://docs.arcade.dev/toolkits/social-communication/slack/install\#invite-arcade-to-your-channels) +### Invite Arcade to your channels [Permalink for this section](https://docs.arcade.dev/mcp-servers/social-communication/slack/install\#invite-arcade-to-your-channels) Invite Arcade to any channel or direct message by typing `/invite @Arcade` to allow it to read and interact with content in that channel. -### Start using Arcade’s Slack tools [Permalink for this section](https://docs.arcade.dev/toolkits/social-communication/slack/install\#start-using-arcades-slack-tools) +### Start using Arcade’s Slack tools [Permalink for this section](https://docs.arcade.dev/mcp-servers/social-communication/slack/install\#start-using-arcades-slack-tools) -Use Arcade’s [tools for Slack](https://docs.arcade.dev/toolkits/social-communication/slack) to: +Use Arcade’s [tools for Slack](https://docs.arcade.dev/mcp-servers/social-communication/slack) to: - Send messages to channels and DMs - Find information in conversations @@ -14704,18 +14704,18 @@ Try leveraging the Arcade tools for Slack in the Arcade Playground by [chatting When using LLMs with Slack, responses may sometimes contain inaccuracies. Always review AI-generated content before taking action. -## Next steps [Permalink for this section](https://docs.arcade.dev/toolkits/social-communication/slack/install\#next-steps) +## Next steps [Permalink for this section](https://docs.arcade.dev/mcp-servers/social-communication/slack/install\#next-steps) The Arcade app for Slack is a sample for what Arcade can do with your Slack workspace. It’s likely that for your own applications you’ll need to [create your own app for Slack](https://docs.arcade.dev/home/auth-providers/slack). Creating your own application for Slack will allow you to brand the app, customize the permissions, and more. -## Need help? [Permalink for this section](https://docs.arcade.dev/toolkits/social-communication/slack/install\#need-help) +## Need help? [Permalink for this section](https://docs.arcade.dev/mcp-servers/social-communication/slack/install\#need-help) If you have any questions or need assistance: -- Check our [Slack toolkit documentation](https://docs.arcade.dev/toolkits/social-communication/slack) +- Check our [Slack toolkit documentation](https://docs.arcade.dev/mcp-servers/social-communication/slack) - [Contact our support team](https://docs.arcade.dev/home/contact-us) -[Slack](https://docs.arcade.dev/toolkits/social-communication/slack "Slack") [Reference](https://docs.arcade.dev/toolkits/social-communication/slack/reference "Reference") +[Slack](https://docs.arcade.dev/mcp-servers/social-communication/slack "Slack") [Reference](https://docs.arcade.dev/mcp-servers/social-communication/slack/reference "Reference") Frame @@ -14856,7 +14856,7 @@ This will be shown if an incident or maintenance is posted on your status page. [View latest updates](https://status.arcade.dev/?utm_source=embed) ## MongoDB Toolkit Overview -[Integrations](https://docs.arcade.dev/toolkits "Integrations") [Databases](https://docs.arcade.dev/toolkits/databases/postgres "Databases") MongoDB +[Integrations](https://docs.arcade.dev/toolkits "Integrations") [Databases](https://docs.arcade.dev/mcp-servers/databases/postgres "Databases") MongoDB # MongoDB @@ -14864,17 +14864,17 @@ This will be shown if an incident or maintenance is posted on your status page. **Author:** Arcade -**Code:** [GitHub](https://github.com/ArcadeAI/arcade-ai/tree/main/toolkits/mongodb) +**Code:** [GitHub](https://github.com/ArcadeAI/arcade-ai/tree/main/mcp-servers/mongodb) **Auth:** database connection string [![PyPI Version](https://img.shields.io/pypi/v/arcade_mongodb)](https://pypi.org/project/arcade_mongodb/)[![License](https://img.shields.io/badge/License-MIT-yellow.svg)](https://github.com/arcadeai/arcade-ai/blob/main/LICENSE)[![Python Versions](https://img.shields.io/pypi/pyversions/arcade_mongodb)](https://pypi.org/project/arcade_mongodb/)[![Wheel Status](https://img.shields.io/pypi/wheel/arcade_mongodb)](https://pypi.org/project/arcade_mongodb/)[![Downloads](https://img.shields.io/pypi/dm/arcade_mongodb)](https://pypi.org/project/arcade_mongodb/) -The Arcade MongoDB toolkit provides a pre-built set of tools for interacting with MongoDB databases in a read-only manner. This toolkit enables agents to discover databases and collections, explore document structures, and execute queries safely. This toolkit is a companion to the blog post [Designing SQL Tools for AI Agents](https://blog.arcade.dev/sql-tools-ai-agents-security). +The Arcade MongoDB MCP Server provides a pre-built set of tools for interacting with MongoDB databases in a read-only manner. This toolkit enables agents to discover databases and collections, explore document structures, and execute queries safely. This toolkit is a companion to the blog post [Designing SQL Tools for AI Agents](https://blog.arcade.dev/sql-tools-ai-agents-security). This toolkit is meant to be an example of how to build a toolkit for a database, and is not intended to be used in production - you won’t find it listed in the Arcade dashboard or APIs. For production use, we recommend forking this repository and building your own toolkit with use-case specific tools. -## Key Features [Permalink for this section](https://docs.arcade.dev/toolkits/databases/mongodb\#key-features) +## Key Features [Permalink for this section](https://docs.arcade.dev/mcp-servers/databases/mongodb\#key-features) This toolkit demonstrates several important concepts for LLM-powered database interactions: @@ -14888,7 +14888,7 @@ This toolkit demonstrates several important concepts for LLM-powered database in - **Read-Only Access**: Enforce read-only access to prevent data modification - **Result Limits**: Automatically limit query results to prevent overwhelming responses -## Available Tools [Permalink for this section](https://docs.arcade.dev/toolkits/databases/mongodb\#available-tools) +## Available Tools [Permalink for this section](https://docs.arcade.dev/mcp-servers/databases/mongodb\#available-tools) | Tool Name | Description | | --- | --- | @@ -14901,13 +14901,13 @@ This toolkit demonstrates several important concepts for LLM-powered database in Note that all tools require the `MONGODB_CONNECTION_STRING` secret to be set. -## MongoDB.DiscoverDatabases [Permalink for this section](https://docs.arcade.dev/toolkits/databases/mongodb\#mongodbdiscoverdatabases) +## MongoDB.DiscoverDatabases [Permalink for this section](https://docs.arcade.dev/mcp-servers/databases/mongodb\#mongodbdiscoverdatabases) Discover all databases in the MongoDB instance. This tool returns a list of all available databases, excluding system databases like `admin`, `config`, and `local` for security. See Example > -## MongoDB.DiscoverCollections [Permalink for this section](https://docs.arcade.dev/toolkits/databases/mongodb\#mongodbdiscovercollections) +## MongoDB.DiscoverCollections [Permalink for this section](https://docs.arcade.dev/mcp-servers/databases/mongodb\#mongodbdiscovercollections) Discover all collections in a specific database. This tool should be used before any other tool that requires a collection name. @@ -14917,7 +14917,7 @@ Discover all collections in a specific database. This tool should be used before See Example > -## MongoDB.GetCollectionSchema [Permalink for this section](https://docs.arcade.dev/toolkits/databases/mongodb\#mongodbgetcollectionschema) +## MongoDB.GetCollectionSchema [Permalink for this section](https://docs.arcade.dev/mcp-servers/databases/mongodb\#mongodbgetcollectionschema) Get the schema structure of a collection by sampling documents. Since MongoDB is schema-less, this tool samples a configurable number of documents to infer the schema structure and data types. Always use this tool before executing any query. @@ -14929,7 +14929,7 @@ Get the schema structure of a collection by sampling documents. Since MongoDB is See Example > -## MongoDB.FindDocuments [Permalink for this section](https://docs.arcade.dev/toolkits/databases/mongodb\#mongodbfinddocuments) +## MongoDB.FindDocuments [Permalink for this section](https://docs.arcade.dev/mcp-servers/databases/mongodb\#mongodbfinddocuments) Find documents in a collection with filtering, projection, and sorting. This tool allows you to build complex queries using MongoDB’s query operators while maintaining safety and performance. @@ -14954,7 +14954,7 @@ Find documents in a collection with filtering, projection, and sorting. This too See Example > -## MongoDB.CountDocuments [Permalink for this section](https://docs.arcade.dev/toolkits/databases/mongodb\#mongodbcountdocuments) +## MongoDB.CountDocuments [Permalink for this section](https://docs.arcade.dev/mcp-servers/databases/mongodb\#mongodbcountdocuments) Count documents in a collection matching the given filter. This tool is useful for getting quick counts without retrieving the actual documents. @@ -14966,7 +14966,7 @@ Count documents in a collection matching the given filter. This tool is useful f See Example > -## MongoDB.AggregateDocuments [Permalink for this section](https://docs.arcade.dev/toolkits/databases/mongodb\#mongodbaggregatedocuments) +## MongoDB.AggregateDocuments [Permalink for this section](https://docs.arcade.dev/mcp-servers/databases/mongodb\#mongodbaggregatedocuments) Execute aggregation pipelines for complex data analysis. This tool allows you to run sophisticated data processing operations including grouping, filtering, and transformations. @@ -14988,7 +14988,7 @@ Execute aggregation pipelines for complex data analysis. This tool allows you to See Example > -## Usage Workflow [Permalink for this section](https://docs.arcade.dev/toolkits/databases/mongodb\#usage-workflow) +## Usage Workflow [Permalink for this section](https://docs.arcade.dev/mcp-servers/databases/mongodb\#usage-workflow) For optimal results, follow this workflow when using the MongoDB toolkit: @@ -15013,7 +15013,7 @@ Arcade tools can be self-hosted on your own infrastructure. Learn more about sel pip install arcade_mongodb\\ ```](https://docs.arcade.dev/home/hosting-overview) -[Postgres](https://docs.arcade.dev/toolkits/databases/postgres "Postgres") [Clickhouse](https://docs.arcade.dev/toolkits/databases/clickhouse "Clickhouse") +[Postgres](https://docs.arcade.dev/mcp-servers/databases/postgres "Postgres") [Clickhouse](https://docs.arcade.dev/mcp-servers/databases/clickhouse "Clickhouse") Frame @@ -15031,7 +15031,7 @@ This will be shown if an incident or maintenance is posted on your status page. The Arcade YOUR-TOOLKIT-NAME Toolkit is a community contributed toolkit meaning that it is created and maintained by the community. To learn more about the toolkit, please visit the [Arcade YOUR-TOOLKIT-NAME GitHub repository](https://github.com/YOUR-GITHUB-USERNAME/YOUR-TOOLKIT-REPO-NAME). -[Contribute a toolkit](https://docs.arcade.dev/toolkits/contribute-a-toolkit "Contribute a toolkit") +[Contribute a toolkit](https://docs.arcade.dev/mcp-servers/contribute-a-toolkit "Contribute a toolkit") Frame @@ -15153,7 +15153,7 @@ token = auth_response.context.token ## Using Dropbox auth in custom tools [Permalink for this section](https://docs.arcade.dev/home/auth-providers/dropbox\#using-dropbox-auth-in-custom-tools) -You can author your own [custom tools](https://docs.arcade.dev/home/build-tools/create-a-toolkit) that interact with the Dropbox API. +You can author your own [custom tools](https://docs.arcade.dev/home/build-tools/create-a-mcp-server) that interact with the Dropbox API. Use the `Dropbox()` auth class to specify that a tool requires authorization with Dropbox. The `context.authorization.token` field will be automatically populated with the user’s Dropbox token: @@ -15200,13 +15200,13 @@ This will be shown if an incident or maintenance is posted on your status page. [View latest updates](https://status.arcade.dev/?utm_source=embed) ## Google Drive Reference -[Integrations](https://docs.arcade.dev/toolkits "Integrations") [Productivity & Docs](https://docs.arcade.dev/toolkits/productivity/asana "Productivity & Docs") [Google Drive](https://docs.arcade.dev/toolkits/productivity/google_drive "Google Drive") Reference +[Integrations](https://docs.arcade.dev/toolkits "Integrations") [Productivity & Docs](https://docs.arcade.dev/mcp-servers/productivity/asana "Productivity & Docs") [Google Drive](https://docs.arcade.dev/mcp-servers/productivity/google_drive "Google Drive") Reference # GoogleDrive Reference Below is a reference of enumerations used by some tools in the GoogleDrive toolkit: -## OrderBy [Permalink for this section](https://docs.arcade.dev/toolkits/productivity/google_drive/reference\#orderby) +## OrderBy [Permalink for this section](https://docs.arcade.dev/mcp-servers/productivity/google_drive/reference\#orderby) - **CREATED\_TIME**: `createdTime` - **CREATED\_TIME\_DESC**: `createdTime desc` @@ -15231,7 +15231,7 @@ Below is a reference of enumerations used by some tools in the GoogleDrive toolk - **VIEWED\_BY\_ME\_TIME**: `viewedByMeTime` - **VIEWED\_BY\_ME\_TIME\_DESC**: `viewedByMeTime desc` -## GoogleDriveFileType [Permalink for this section](https://docs.arcade.dev/toolkits/productivity/google_drive/reference\#googledrivefiletype) +## GoogleDriveFileType [Permalink for this section](https://docs.arcade.dev/mcp-servers/productivity/google_drive/reference\#googledrivefiletype) - **SPREADSHEET**: `spreadsheet` - **SLIDES**: `slides` @@ -15246,7 +15246,7 @@ Below is a reference of enumerations used by some tools in the GoogleDrive toolk - **SITES**: `sites` - **PDF**: `pdf` -[Google Drive](https://docs.arcade.dev/toolkits/productivity/google_drive "Google Drive") [Google Slides](https://docs.arcade.dev/toolkits/productivity/google_slides "Google Slides") +[Google Drive](https://docs.arcade.dev/mcp-servers/productivity/google_drive "Google Drive") [Google Slides](https://docs.arcade.dev/mcp-servers/productivity/google_slides "Google Slides") Frame @@ -15270,14 +15270,14 @@ This will be shown if an incident or maintenance is posted on your status page. [![PyPI Version](https://img.shields.io/pypi/v/arcade_asana)](https://pypi.org/project/arcade_asana/)[![License](https://img.shields.io/badge/License-MIT-yellow.svg)](https://github.com/arcadeai/arcade-ai/blob/main/LICENSE)[![Python Versions](https://img.shields.io/pypi/pyversions/arcade_asana)](https://pypi.org/project/arcade_asana/)[![Wheel Status](https://img.shields.io/pypi/wheel/arcade_asana)](https://pypi.org/project/arcade_asana/)[![Downloads](https://img.shields.io/pypi/dm/arcade_asana)](https://pypi.org/project/arcade_asana/) -The Arcade Asana toolkit provides a pre-built set of tools for interacting with Asana. These tools make it easy to build agents and AI apps that can: +The Arcade Asana MCP Server provides a pre-built set of tools for interacting with Asana. These tools make it easy to build agents and AI apps that can: - Manage teams, projects, and workspaces. - Create, update, and search for tasks. - Retrieve data about tasks, projects, workspaces, users, etc. - Manage task attachments. -## Available Tools [Permalink for this section](https://docs.arcade.dev/toolkits/productivity/asana\#available-tools) +## Available Tools [Permalink for this section](https://docs.arcade.dev/mcp-servers/productivity/asana\#available-tools) | Tool Name | Description | | --- | --- | @@ -15303,9 +15303,9 @@ The Arcade Asana toolkit provides a pre-built set of tools for interacting with 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](https://docs.arcade.dev/home/build-tools/create-a-toolkit). +own tools](https://docs.arcade.dev/home/build-tools/create-a-mcp-server). -## Asana.GetProjectById [Permalink for this section](https://docs.arcade.dev/toolkits/productivity/asana\#asanagetprojectbyid) +## Asana.GetProjectById [Permalink for this section](https://docs.arcade.dev/mcp-servers/productivity/asana\#asanagetprojectbyid) See Example > @@ -15315,7 +15315,7 @@ Get a project by its ID. - **project\_id** _(string, required)_ The ID of the project. E.g. β€˜1234567890’ -## Asana.ListProjects [Permalink for this section](https://docs.arcade.dev/toolkits/productivity/asana\#asanalistprojects) +## Asana.ListProjects [Permalink for this section](https://docs.arcade.dev/mcp-servers/productivity/asana\#asanalistprojects) See Example > @@ -15328,7 +15328,7 @@ List projects associated to one or more teams. - **limit** _(int, optional, Defaults to `100`)_ The maximum number of projects to return. Min is 1, max is 100. Defaults to 100. - **next\_page\_token** _(string, optional)_ The token to retrieve the next page of projects. Defaults to None (start from the first page). -## Asana.GetTagById [Permalink for this section](https://docs.arcade.dev/toolkits/productivity/asana\#asanagettagbyid) +## Asana.GetTagById [Permalink for this section](https://docs.arcade.dev/mcp-servers/productivity/asana\#asanagettagbyid) See Example > @@ -15338,7 +15338,7 @@ Get a tag by its ID. - **tag\_id** _(string, required)_ The ID of the tag. E.g. β€˜1234567890’ -## Asana.CreateTag [Permalink for this section](https://docs.arcade.dev/toolkits/productivity/asana\#asanacreatetag) +## Asana.CreateTag [Permalink for this section](https://docs.arcade.dev/mcp-servers/productivity/asana\#asanacreatetag) See Example > @@ -15348,10 +15348,10 @@ Create a tag. - **name** _(string, required)_ The name of the tag. E.g. β€˜Priority’. - **description** _(string, optional)_ The description of the tag. Defaults to None (no description). -- **color** _(list of enum [TagColor](https://docs.arcade.dev/toolkits/productivity/asana/reference#tagcolor), optional)_ The color of the tag. Defaults to None (no color). +- **color** _(list of enum [TagColor](https://docs.arcade.dev/mcp-servers/productivity/asana/reference#tagcolor), optional)_ The color of the tag. Defaults to None (no color). - **workspace\_id** _(string, None)_ The ID of the workspace to create the tag in. If not provided, it will associate the tag to the user’s workspace, if there’s only one. Otherwise, it will raise an error. -## Asana.ListTags [Permalink for this section](https://docs.arcade.dev/toolkits/productivity/asana\#asanalisttags) +## Asana.ListTags [Permalink for this section](https://docs.arcade.dev/mcp-servers/productivity/asana\#asanalisttags) See Example > @@ -15363,7 +15363,7 @@ List tags associated to one or more workspaces. - **limit** _(int, optional, Defaults to `100`)_ Maximum number of items to return. Defaults to 100. Maximum allowed is 100. - **next\_page\_token** _(string, optional)_ The token to retrieve the next page of tags. Defaults to None (start from the first page). -## Asana.GetTasksWithoutId [Permalink for this section](https://docs.arcade.dev/toolkits/productivity/asana\#asanagettaskswithoutid) +## Asana.GetTasksWithoutId [Permalink for this section](https://docs.arcade.dev/mcp-servers/productivity/asana\#asanagettaskswithoutid) See Example > @@ -15386,10 +15386,10 @@ Search and retrieve tasks using full-text and filters when you don’t have the - \\*\\* start\_on\_or\_before\*\* _(string, optional)_ Match tasks that started on OR BEFORE this date. Format: YYYY-MM-DD. Ex: β€˜2025-01-01’. Defaults to None (searches tasks started on any date or without a start date). - **completed** _(bool, optional)_ Match tasks that are completed. Defaults to False (tasks that are NOT completed). - **limit** _(int, optional, Defaults to `20`)_ Maximum number of tasks to return. Min of 1, max of 20. Defaults to 20. -- **sort\_by** _(enum [TaskSortBy](https://docs.arcade.dev/toolkits/productivity/asana/reference#tasksortby), optional)_ The field to sort the tasks by. Defaults to TaskSortBy.MODIFIED\_AT. -- **sort\_order** _(enum [SortOrder](https://docs.arcade.dev/toolkits/productivity/asana/reference#sortorder), optional)_ The order to sort the tasks by. Defaults to SortOrder.DESCENDING. +- **sort\_by** _(enum [TaskSortBy](https://docs.arcade.dev/mcp-servers/productivity/asana/reference#tasksortby), optional)_ The field to sort the tasks by. Defaults to TaskSortBy.MODIFIED\_AT. +- **sort\_order** _(enum [SortOrder](https://docs.arcade.dev/mcp-servers/productivity/asana/reference#sortorder), optional)_ The order to sort the tasks by. Defaults to SortOrder.DESCENDING. -## Asana.GetTaskById [Permalink for this section](https://docs.arcade.dev/toolkits/productivity/asana\#asanagettaskbyid) +## Asana.GetTaskById [Permalink for this section](https://docs.arcade.dev/mcp-servers/productivity/asana\#asanagettaskbyid) See Example > @@ -15400,7 +15400,7 @@ Get a task by its ID. - **task\_id** _(string, required)_ The ID of the task. E.g. β€˜1234567890’ - **max\_subtasks** _(int, optional)_ The maximum number of subtasks to return. Min of 0 (no subtasks), max of 100. Defaults to 100. -## Asana.GetSubtasksFromATask [Permalink for this section](https://docs.arcade.dev/toolkits/productivity/asana\#asanagetsubtasksfromatask) +## Asana.GetSubtasksFromATask [Permalink for this section](https://docs.arcade.dev/mcp-servers/productivity/asana\#asanagetsubtasksfromatask) See Example > @@ -15412,7 +15412,7 @@ Get subtasks associated to a task. - **limit** _(int, optional, Defaults to `100`)_ Maximum number of subtasks to return. Defaults to 100. Maximum allowed is 100. - **next\_page\_token** _(string, optional)_ The token to retrieve the next page of subtasks. Defaults to None (start from the first page). -## Asana.UpdateTask [Permalink for this section](https://docs.arcade.dev/toolkits/productivity/asana\#asanaupdatetask) +## Asana.UpdateTask [Permalink for this section](https://docs.arcade.dev/mcp-servers/productivity/asana\#asanaupdatetask) See Example > @@ -15428,7 +15428,7 @@ Update a task. - **due\_date** _(string, optional)_ The new due date of the task. Format: YYYY-MM-DD. Ex: β€˜2025-01-01’. Defaults to None (does not change the current due date). - **assignee\_id** _(string, optional)_ The ID of the user to assign the task to. Defaults to None (does not change the current assignee). -## Asana.MarkTaskAsCompleted [Permalink for this section](https://docs.arcade.dev/toolkits/productivity/asana\#asanamarktaskascompleted) +## Asana.MarkTaskAsCompleted [Permalink for this section](https://docs.arcade.dev/mcp-servers/productivity/asana\#asanamarktaskascompleted) See Example > @@ -15438,7 +15438,7 @@ Mark a task as completed. - **task\_id** _(string, required)_ The ID of the task. E.g. β€˜1234567890’ -## Asana.CreateTask [Permalink for this section](https://docs.arcade.dev/toolkits/productivity/asana\#asanacreatetask) +## Asana.CreateTask [Permalink for this section](https://docs.arcade.dev/mcp-servers/productivity/asana\#asanacreatetask) See Example > @@ -15460,7 +15460,7 @@ Observations: A new task must be associated to at least one of the following: parent\_task\_id, project, or workspace\_id. If none of these are provided and the account has only one workspace, the task will be associated to that workspace. If none are provided and the account has multiple workspaces, an error will be raised with a list of available workspaces. -## Asana.AttachFileToTask [Permalink for this section](https://docs.arcade.dev/toolkits/productivity/asana\#asanaattachfiletotask) +## Asana.AttachFileToTask [Permalink for this section](https://docs.arcade.dev/mcp-servers/productivity/asana\#asanaattachfiletotask) See Example > @@ -15483,7 +15483,7 @@ Provide exactly one of `file_content_str`, `file_content_base64`, or `file_conte - Use `file_content_base64` for binary files like images, PDFs, etc. - Use `file_content_url` if the file is hosted on an external URL -## Asana.ListUsers [Permalink for this section](https://docs.arcade.dev/toolkits/productivity/asana\#asanalistusers) +## Asana.ListUsers [Permalink for this section](https://docs.arcade.dev/mcp-servers/productivity/asana\#asanalistusers) See Example > @@ -15495,7 +15495,7 @@ List users that are members of one or more workspaces. - **limit** _(int, optional, Defaults to `500`)_ The maximum number of users to retrieve. Min is 1, max is 500. Defaults to 500. - **next\_page\_token** _(string, optional)_ The token to retrieve the next page of users. Defaults to None (start from the first page). -## Asana.GetUserById [Permalink for this section](https://docs.arcade.dev/toolkits/productivity/asana\#asanagetuserbyid) +## Asana.GetUserById [Permalink for this section](https://docs.arcade.dev/mcp-servers/productivity/asana\#asanagetuserbyid) See Example > @@ -15505,7 +15505,7 @@ Get a user by their ID. - **user\_id** _(string, required)_ The ID of the user. E.g. β€˜1234567890’ -## Asana.GetTeamById [Permalink for this section](https://docs.arcade.dev/toolkits/productivity/asana\#asanagetteambyid) +## Asana.GetTeamById [Permalink for this section](https://docs.arcade.dev/mcp-servers/productivity/asana\#asanagetteambyid) See Example > @@ -15515,7 +15515,7 @@ Get a team by its ID. - **team\_id** _(string, required)_ The ID of the team. E.g. β€˜1234567890’ -## Asana.ListTeamsTheCurrentUserIsAMemberOf [Permalink for this section](https://docs.arcade.dev/toolkits/productivity/asana\#asanalistteamsthecurrentuserisamemberof) +## Asana.ListTeamsTheCurrentUserIsAMemberOf [Permalink for this section](https://docs.arcade.dev/mcp-servers/productivity/asana\#asanalistteamsthecurrentuserisamemberof) See Example > @@ -15527,7 +15527,7 @@ List the teams the current user is a member of. - **limit** _(int, optional, Defaults to `100`)_ The maximum number of teams to retrieve. Min is 1, max is 100. Defaults to 100. - **next\_page\_token** _(string, optional)_ The token to retrieve the next page of teams. Defaults to None (start from the first page). -## Asana.ListTeams [Permalink for this section](https://docs.arcade.dev/toolkits/productivity/asana\#asanalistteams) +## Asana.ListTeams [Permalink for this section](https://docs.arcade.dev/mcp-servers/productivity/asana\#asanalistteams) See Example > @@ -15537,7 +15537,7 @@ List teams associated to a workspace. - **workspace\_id** _(string, optional)_ The workspace ID to list teams from. Defaults to None. If no workspace ID is provided, it will use the current user’s workspace, if there’s only one. If the user has multiple workspaces, it will raise an error listing the available workspaces. -## Asana.GetWorkspaceById [Permalink for this section](https://docs.arcade.dev/toolkits/productivity/asana\#asanagetworkspacebyid) +## Asana.GetWorkspaceById [Permalink for this section](https://docs.arcade.dev/mcp-servers/productivity/asana\#asanagetworkspacebyid) See Example > @@ -15547,7 +15547,7 @@ Get a workspace by its ID. - **workspace\_id** _(string, required)_ The ID of the workspace. E.g. β€˜1234567890’ -## Asana.ListWorkspaces [Permalink for this section](https://docs.arcade.dev/toolkits/productivity/asana\#asanalistworkspaces) +## Asana.ListWorkspaces [Permalink for this section](https://docs.arcade.dev/mcp-servers/productivity/asana\#asanalistworkspaces) See Example > @@ -15558,7 +15558,7 @@ List the user workspaces. - **limit** _(int, optional, Defaults to `100`)_ The maximum number of workspaces to retrieve. Min is 1, max is 100. Defaults to 100. - **next\_page\_token** _(string, optional)_ The token to retrieve the next page of workspaces. Defaults to None (start from the first page). -## Auth [Permalink for this section](https://docs.arcade.dev/toolkits/productivity/asana\#auth) +## Auth [Permalink for this section](https://docs.arcade.dev/mcp-servers/productivity/asana\#auth) The Arcade Asana toolkit uses the [Asana auth provider](https://docs.arcade.dev/home/auth-providers/asana) to connect to users’ Asana accounts. @@ -15580,7 +15580,7 @@ Arcade tools can be self-hosted on your own infrastructure. Learn more about sel pip install arcade_asana\\ ```](https://docs.arcade.dev/home/hosting-overview) -[Overview](https://docs.arcade.dev/toolkits "Overview") [Reference](https://docs.arcade.dev/toolkits/productivity/asana/reference "Reference") +[Overview](https://docs.arcade.dev/toolkits "Overview") [Reference](https://docs.arcade.dev/mcp-servers/productivity/asana/reference "Reference") Frame @@ -15592,7 +15592,7 @@ This will be shown if an incident or maintenance is posted on your status page. [View latest updates](https://status.arcade.dev/?utm_source=embed) ## YouTube Video Search -[Integrations](https://docs.arcade.dev/toolkits "Integrations") [Search Tools](https://docs.arcade.dev/toolkits/search/google_finance "Search Tools") Youtube +[Integrations](https://docs.arcade.dev/toolkits "Integrations") [Search Tools](https://docs.arcade.dev/mcp-servers/search/google_finance "Search Tools") Youtube # YouTube Search @@ -15604,12 +15604,12 @@ This will be shown if an incident or maintenance is posted on your status page. [![PyPI Version](https://img.shields.io/pypi/v/arcade_youtube)](https://pypi.org/project/arcade_youtube/)[![License](https://img.shields.io/badge/License-MIT-yellow.svg)](https://github.com/arcadeai/arcade-ai/blob/main/LICENSE)[![Python Versions](https://img.shields.io/pypi/pyversions/arcade_youtube)](https://pypi.org/project/arcade_youtube/)[![Wheel Status](https://img.shields.io/pypi/wheel/arcade_youtube)](https://pypi.org/project/arcade_youtube/)[![Downloads](https://img.shields.io/pypi/dm/arcade_youtube)](https://pypi.org/project/arcade_youtube/) -The Arcade YouTube Search toolkit provides a pre-built set of tools for interacting with YouTube. These tools make it easy to build agents and AI apps that can: +The Arcade YouTube Search MCP Server provides a pre-built set of tools for interacting with YouTube. These tools make it easy to build agents and AI apps that can: - Search for videos on YouTube; - Get details about a video. -## Available Tools [Permalink for this section](https://docs.arcade.dev/toolkits/search/youtube\#available-tools) +## Available Tools [Permalink for this section](https://docs.arcade.dev/mcp-servers/search/youtube\#available-tools) | Tool Name | Description | | --- | --- | @@ -15618,9 +15618,9 @@ The Arcade YouTube Search toolkit provides a pre-built set of tools for interact 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](https://docs.arcade.dev/home/build-tools/create-a-toolkit). +own tools](https://docs.arcade.dev/home/build-tools/create-a-mcp-server). -## Youtube.SearchForVideos [Permalink for this section](https://docs.arcade.dev/toolkits/search/youtube\#youtubesearchforvideos) +## Youtube.SearchForVideos [Permalink for this section](https://docs.arcade.dev/mcp-servers/search/youtube\#youtubesearchforvideos) See Example > @@ -15629,11 +15629,11 @@ Search for videos on YouTube. **Parameters** - **keywords** _(string, required)_ Keywords to search for. E.g. β€˜apple iphone’ or β€˜samsung galaxy’ -- **`language_code`** _(string, optional, Defaults to β€˜en’ English)_ 2-character language code to use in the YouTube search. A list of supported language codes can be found [here](https://docs.arcade.dev/toolkits/search/youtube#languagecodes). -- **`country_code`** _(string, optional, Defaults to β€˜us’ United States)_ 2-character country code to use in the YouTube search. A list of supported country codes can be found [here](https://docs.arcade.dev/toolkits/search/youtube#countrycodes). +- **`language_code`** _(string, optional, Defaults to β€˜en’ English)_ 2-character language code to use in the YouTube search. A list of supported language codes can be found [here](https://docs.arcade.dev/mcp-servers/search/youtube#languagecodes). +- **`country_code`** _(string, optional, Defaults to β€˜us’ United States)_ 2-character country code to use in the YouTube search. A list of supported country codes can be found [here](https://docs.arcade.dev/mcp-servers/search/youtube#countrycodes). - **`next_page_token`** _(string, optional, Defaults to β€˜None’)_ The next page token to use for pagination. Defaults to `None` (start from the first page). -## Youtube.GetYoutubeVideoDetails [Permalink for this section](https://docs.arcade.dev/toolkits/search/youtube\#youtubegetyoutubevideodetails) +## Youtube.GetYoutubeVideoDetails [Permalink for this section](https://docs.arcade.dev/mcp-servers/search/youtube\#youtubegetyoutubevideodetails) See Example > @@ -15642,10 +15642,10 @@ Get details about a video on YouTube. **Parameters** - **video\_id** _(string, required)_ Video ID. E.g. β€˜414600577’. This can be retrieved from the search results of the `SearchYoutubeVideos` tool. -- **`language_code`** _(string, optional, Defaults to β€˜en’ English)_ 2-character language code to return information about the video. A list of supported language codes can be found [here](https://docs.arcade.dev/toolkits/search/youtube#languagecodes). -- **`country_code`** _(string, optional, Defaults to β€˜us’ United States)_ 2-character country code to return information about the video. A list of supported country codes can be found [here](https://docs.arcade.dev/toolkits/search/youtube#countrycodes). +- **`language_code`** _(string, optional, Defaults to β€˜en’ English)_ 2-character language code to return information about the video. A list of supported language codes can be found [here](https://docs.arcade.dev/mcp-servers/search/youtube#languagecodes). +- **`country_code`** _(string, optional, Defaults to β€˜us’ United States)_ 2-character country code to return information about the video. A list of supported country codes can be found [here](https://docs.arcade.dev/mcp-servers/search/youtube#countrycodes). -## Auth [Permalink for this section](https://docs.arcade.dev/toolkits/search/youtube\#auth) +## Auth [Permalink for this section](https://docs.arcade.dev/mcp-servers/search/youtube\#auth) The Arcade YouTube Search toolkit uses the [SerpAPI](https://serpapi.com/) to get video information from YouTube. @@ -15654,7 +15654,7 @@ The Arcade YouTube Search toolkit uses the [SerpAPI](https://serpapi.com/) to ge Setting the `SERP_API_KEY` secret is only required if you are [self-hosting](https://docs.arcade.dev/home/local-deployment/install/overview) Arcade. If you’re using Arcade Cloud, the secret is already set for you. To manage your secrets, go to the [Secrets page](https://api.arcade.dev/dashboard/auth/secrets) in the Arcade Dashboard. -## Default parameter values [Permalink for this section](https://docs.arcade.dev/toolkits/search/youtube\#default-parameter-values) +## Default parameter values [Permalink for this section](https://docs.arcade.dev/mcp-servers/search/youtube\#default-parameter-values) Language and Country are configurable through environment variables. When set, they will be used as default for YouTube tools. @@ -15667,7 +15667,7 @@ The language code is a 2-character code that determines the language in which th - `ARCADE_GOOGLE_LANGUAGE`: a default value for all Google Search tools. If not set, defaults to β€˜en’ (English). - `ARCADE_YOUTUBE_SEARCH_LANGUAGE`: a default value for the YouTube Search tools. If not set, defaults to `ARCADE_GOOGLE_LANGUAGE`. -A list of supported language codes can be found [here](https://docs.arcade.dev/toolkits/search/youtube#languagecodes). +A list of supported language codes can be found [here](https://docs.arcade.dev/mcp-servers/search/youtube#languagecodes). **Country** @@ -15676,13 +15676,13 @@ The country code is a 2-character code that determines the country in which the - `ARCADE_GOOGLE_COUNTRY`: a default value for all Google Search tools. If not set, defaults to `None`. - `ARCADE_YOUTUBE_SEARCH_COUNTRY`: a default value for the YouTube Search tools. If not set, defaults to `ARCADE_GOOGLE_COUNTRY`. If `ARCADE_GOOGLE_COUNTRY` is not set, the default country for YouTube tools will be `us` (United States). -A list of supported country codes can be found [here](https://docs.arcade.dev/toolkits/search/youtube#countrycodes). +A list of supported country codes can be found [here](https://docs.arcade.dev/mcp-servers/search/youtube#countrycodes). * * * -## Reference [Permalink for this section](https://docs.arcade.dev/toolkits/search/youtube\#reference) +## Reference [Permalink for this section](https://docs.arcade.dev/mcp-servers/search/youtube\#reference) -## LanguageCodes [Permalink for this section](https://docs.arcade.dev/toolkits/search/youtube\#languagecodes) +## LanguageCodes [Permalink for this section](https://docs.arcade.dev/mcp-servers/search/youtube\#languagecodes) - **`ar`**: Arabic - **`bn`**: Bengali @@ -15716,7 +15716,7 @@ A list of supported country codes can be found [here](https://docs.arcade.dev/to - **`zh-cn`**: Chinese (Simplified) - **`zh-tw`**: Chinese (Traditional) -## CountryCodes [Permalink for this section](https://docs.arcade.dev/toolkits/search/youtube\#countrycodes) +## CountryCodes [Permalink for this section](https://docs.arcade.dev/mcp-servers/search/youtube\#countrycodes) - **`af`**: Afghanistan - **`al`**: Albania @@ -15977,7 +15977,7 @@ Arcade tools can be self-hosted on your own infrastructure. Learn more about sel pip install arcade_youtube\\ ```](https://docs.arcade.dev/home/hosting-overview) -[Walmart](https://docs.arcade.dev/toolkits/search/walmart "Walmart") [Hubspot](https://docs.arcade.dev/toolkits/sales/hubspot "Hubspot") +[Walmart](https://docs.arcade.dev/mcp-servers/search/walmart "Walmart") [Hubspot](https://docs.arcade.dev/mcp-servers/sales/hubspot "Hubspot") Frame @@ -15989,7 +15989,7 @@ This will be shown if an incident or maintenance is posted on your status page. [View latest updates](https://status.arcade.dev/?utm_source=embed) ## Clickhouse Database Toolkit -[Integrations](https://docs.arcade.dev/toolkits "Integrations") [Databases](https://docs.arcade.dev/toolkits/databases/postgres "Databases") Clickhouse +[Integrations](https://docs.arcade.dev/toolkits "Integrations") [Databases](https://docs.arcade.dev/mcp-servers/databases/postgres "Databases") Clickhouse # Clickhouse @@ -15997,17 +15997,17 @@ This will be shown if an incident or maintenance is posted on your status page. **Author:** Arcade -**Code:** [GitHub](https://github.com/ArcadeAI/arcade-ai/tree/main/toolkits/clickhouse) +**Code:** [GitHub](https://github.com/ArcadeAI/arcade-ai/tree/main/mcp-servers/clickhouse) **Auth:** database connection string [![PyPI Version](https://img.shields.io/pypi/v/arcade_clickhouse)](https://pypi.org/project/arcade_clickhouse/)[![License](https://img.shields.io/badge/License-MIT-yellow.svg)](https://github.com/arcadeai/arcade-ai/blob/main/LICENSE)[![Python Versions](https://img.shields.io/pypi/pyversions/arcade_clickhouse)](https://pypi.org/project/arcade_clickhouse/)[![Wheel Status](https://img.shields.io/pypi/wheel/arcade_clickhouse)](https://pypi.org/project/arcade_clickhouse/)[![Downloads](https://img.shields.io/pypi/dm/arcade_clickhouse)](https://pypi.org/project/arcade_clickhouse/) -The Arcade Clickhouse toolkit provides a pre-built set of tools for interacting with Clickhouse databases in a read-only manner. This toolkit enables agents to discover database schemas, explore table structures, and execute SELECT queries safely. This toolkit is a companion to the blog post [Designing SQL Tools for AI Agents](https://blog.arcade.dev/sql-tools-ai-agents-security). +The Arcade Clickhouse MCP Server provides a pre-built set of tools for interacting with Clickhouse databases in a read-only manner. This toolkit enables agents to discover database schemas, explore table structures, and execute SELECT queries safely. This toolkit is a companion to the blog post [Designing SQL Tools for AI Agents](https://blog.arcade.dev/sql-tools-ai-agents-security). This toolkit is meant to be an example of how to build a toolkit for a database, and is not intended to be used in production - you won’t find it listed in the Arcade dashboard or APIs. For production use, we recommend forking this repository and building your own toolkit with use-case specific tools. -## Key Features [Permalink for this section](https://docs.arcade.dev/toolkits/databases/clickhouse\#key-features) +## Key Features [Permalink for this section](https://docs.arcade.dev/mcp-servers/databases/clickhouse\#key-features) This toolkit demonstrates several important concepts for LLM-powered database interactions: @@ -16019,7 +16019,7 @@ This toolkit demonstrates several important concepts for LLM-powered database in - **Read-Only Access**: Enforce read-only access to prevent data modification - **Row Limits**: Automatically limit query results to prevent overwhelming responses -## Available Tools [Permalink for this section](https://docs.arcade.dev/toolkits/databases/clickhouse\#available-tools) +## Available Tools [Permalink for this section](https://docs.arcade.dev/mcp-servers/databases/clickhouse\#available-tools) | Tool Name | Description | | --- | --- | @@ -16031,19 +16031,19 @@ This toolkit demonstrates several important concepts for LLM-powered database in Note that all tools require the `CLICKHOUSE_DATABASE_CONNECTION_STRING` secret to be set. -## Clickhouse.DiscoverDatabases [Permalink for this section](https://docs.arcade.dev/toolkits/databases/clickhouse\#clickhousediscoverdatabases) +## Clickhouse.DiscoverDatabases [Permalink for this section](https://docs.arcade.dev/mcp-servers/databases/clickhouse\#clickhousediscoverdatabases) Discover all databases in a Clickhouse database. This tool returns a list of all available databases. See Example > -## Clickhouse.DiscoverSchemas [Permalink for this section](https://docs.arcade.dev/toolkits/databases/clickhouse\#clickhousediscoverschemas) +## Clickhouse.DiscoverSchemas [Permalink for this section](https://docs.arcade.dev/mcp-servers/databases/clickhouse\#clickhousediscoverschemas) Discover all schemas in a Clickhouse database. This tool returns a list of all available schemas, excluding the `information_schema` for security. See Example > -## Clickhouse.DiscoverTables [Permalink for this section](https://docs.arcade.dev/toolkits/databases/clickhouse\#clickhousediscovertables) +## Clickhouse.DiscoverTables [Permalink for this section](https://docs.arcade.dev/mcp-servers/databases/clickhouse\#clickhousediscovertables) Discover all tables in a specific schema. This tool should be used before any other tool that requires a table name. @@ -16053,7 +16053,7 @@ Discover all tables in a specific schema. This tool should be used before any ot See Example > -## Clickhouse.GetTableSchema [Permalink for this section](https://docs.arcade.dev/toolkits/databases/clickhouse\#clickhousegettableschema) +## Clickhouse.GetTableSchema [Permalink for this section](https://docs.arcade.dev/mcp-servers/databases/clickhouse\#clickhousegettableschema) Get the detailed schema of a specific table. This tool provides column information including data types, primary key indicators, and index information. Always use this tool before executing any query. @@ -16064,7 +16064,7 @@ Get the detailed schema of a specific table. This tool provides column informati See Example > -## Clickhouse.ExecuteSelectQuery [Permalink for this section](https://docs.arcade.dev/toolkits/databases/clickhouse\#clickhouseexecuteselectquery) +## Clickhouse.ExecuteSelectQuery [Permalink for this section](https://docs.arcade.dev/mcp-servers/databases/clickhouse\#clickhouseexecuteselectquery) Execute a SELECT query with comprehensive clause support. This tool allows you to build complex queries using individual clauses while maintaining safety and performance. @@ -16106,7 +16106,7 @@ LIMIT {limit} OFFSET {offset} See Example > -## Usage Workflow [Permalink for this section](https://docs.arcade.dev/toolkits/databases/clickhouse\#usage-workflow) +## Usage Workflow [Permalink for this section](https://docs.arcade.dev/mcp-servers/databases/clickhouse\#usage-workflow) For optimal results, follow this workflow when using the Clickhouse toolkit: @@ -16131,7 +16131,7 @@ Arcade tools can be self-hosted on your own infrastructure. Learn more about sel pip install arcade_clickhouse\\ ```](https://docs.arcade.dev/home/hosting-overview) -[MongoDB](https://docs.arcade.dev/toolkits/databases/mongodb "MongoDB") [Zendesk](https://docs.arcade.dev/toolkits/customer-support/zendesk "Zendesk") +[MongoDB](https://docs.arcade.dev/mcp-servers/databases/mongodb "MongoDB") [Zendesk](https://docs.arcade.dev/mcp-servers/customer-support/zendesk "Zendesk") Frame @@ -16146,7 +16146,7 @@ This will be shown if an incident or maintenance is posted on your status page. https://docs.arcade.dev/sitemap-0.xml ## X Toolkit for Agents -[Integrations](https://docs.arcade.dev/toolkits "Integrations") [Social & Communication](https://docs.arcade.dev/toolkits/social-communication/discord "Social & Communication") X +[Integrations](https://docs.arcade.dev/toolkits "Integrations") [Social & Communication](https://docs.arcade.dev/mcp-servers/social-communication/discord "Social & Communication") X # X (formerly Twitter) @@ -16158,7 +16158,7 @@ https://docs.arcade.dev/sitemap-0.xml [![PyPI Version](https://img.shields.io/pypi/v/arcade_x)](https://pypi.org/project/arcade_x/)[![License](https://img.shields.io/badge/License-MIT-yellow.svg)](https://github.com/arcadeai/arcade-ai/blob/main/LICENSE)[![Python Versions](https://img.shields.io/pypi/pyversions/arcade_x)](https://pypi.org/project/arcade_x/)[![Wheel Status](https://img.shields.io/pypi/wheel/arcade_x)](https://pypi.org/project/arcade_x/)[![Downloads](https://img.shields.io/pypi/dm/arcade_x)](https://pypi.org/project/arcade_x/) -The Arcade X (formerly Twitter) toolkit provides a pre-built set of tools for interacting with X (formerly Twitter). These tools make it easy to build agents and AI apps that can: +The Arcade X (formerly Twitter) MCP Server provides a pre-built set of tools for interacting with X (formerly Twitter). These tools make it easy to build agents and AI apps that can: - Post tweets - Reply to tweets @@ -16168,7 +16168,7 @@ The Arcade X (formerly Twitter) toolkit provides a pre-built set of tools for in - Search for tweets by keywords - Look up a user by username -## Available Tools [Permalink for this section](https://docs.arcade.dev/toolkits/social-communication/x\#available-tools) +## Available Tools [Permalink for this section](https://docs.arcade.dev/mcp-servers/social-communication/x\#available-tools) | Tool Name | Description | | --- | --- | @@ -16182,9 +16182,9 @@ The Arcade X (formerly Twitter) toolkit provides a pre-built set of tools for in 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](https://docs.arcade.dev/home/build-tools/create-a-toolkit). +own tools](https://docs.arcade.dev/home/build-tools/create-a-mcp-server). -## X.LookupSingleUserByUsername [Permalink for this section](https://docs.arcade.dev/toolkits/social-communication/x\#xlookupsingleuserbyusername) +## X.LookupSingleUserByUsername [Permalink for this section](https://docs.arcade.dev/mcp-servers/social-communication/x\#xlookupsingleuserbyusername) See Example > @@ -16194,7 +16194,7 @@ Look up a user on X (Twitter) by their username. - **username** ( `string`, required) The username of the X (Twitter) user to look up -## X.PostTweet [Permalink for this section](https://docs.arcade.dev/toolkits/social-communication/x\#xposttweet) +## X.PostTweet [Permalink for this section](https://docs.arcade.dev/mcp-servers/social-communication/x\#xposttweet) See Example > @@ -16205,7 +16205,7 @@ Post a tweet to X (Twitter). - **tweet\_text** ( `string`, required) The text content of the tweet you want to post - **quote\_tweet\_id** ( `string`, optional) The ID of the tweet you want to quote. Optional. -## X.ReplyToTweet [Permalink for this section](https://docs.arcade.dev/toolkits/social-communication/x\#xreplytotweet) +## X.ReplyToTweet [Permalink for this section](https://docs.arcade.dev/mcp-servers/social-communication/x\#xreplytotweet) See Example > @@ -16217,7 +16217,7 @@ Reply to a tweet on X (Twitter). - **tweet\_text** ( `string`, required) The text content of the tweet you want to post - **quote\_tweet\_id** ( `string`, optional) The ID of the tweet you want to quote. Optional. -## X.DeleteTweetById [Permalink for this section](https://docs.arcade.dev/toolkits/social-communication/x\#xdeletetweetbyid) +## X.DeleteTweetById [Permalink for this section](https://docs.arcade.dev/mcp-servers/social-communication/x\#xdeletetweetbyid) See Example > @@ -16227,7 +16227,7 @@ Delete a tweet on X (Twitter). - **tweet\_id** ( `string`, required) The ID of the tweet you want to delete -## X.SearchRecentTweetsByUsername [Permalink for this section](https://docs.arcade.dev/toolkits/social-communication/x\#xsearchrecenttweetsbyusername) +## X.SearchRecentTweetsByUsername [Permalink for this section](https://docs.arcade.dev/mcp-servers/social-communication/x\#xsearchrecenttweetsbyusername) See Example > @@ -16239,7 +16239,7 @@ Search for recent tweets (last 7 days) on X (Twitter) by username. - **max\_results** ( `integer`, optional) The maximum number of results to return. Must be in range \[1, 100\] inclusive - **next\_token** ( `string`, optional) The pagination token starting from which to return results -## X.SearchRecentTweetsByKeywords [Permalink for this section](https://docs.arcade.dev/toolkits/social-communication/x\#xsearchrecenttweetsbykeywords) +## X.SearchRecentTweetsByKeywords [Permalink for this section](https://docs.arcade.dev/mcp-servers/social-communication/x\#xsearchrecenttweetsbykeywords) See Example > @@ -16252,7 +16252,7 @@ Search for recent tweets (last 7 days) on X (Twitter) by required keywords and p - **max\_results** ( `integer`, optional) The maximum number of results to return. Must be in range \[1, 100\] inclusive - **next\_token** ( `string`, optional) The pagination token starting from which to return results -## X.LookupTweetById [Permalink for this section](https://docs.arcade.dev/toolkits/social-communication/x\#xlookuptweetbyid) +## X.LookupTweetById [Permalink for this section](https://docs.arcade.dev/mcp-servers/social-communication/x\#xlookuptweetbyid) See Example > @@ -16262,7 +16262,7 @@ Look up a tweet on X (Twitter) by tweet ID. - **tweet\_id** ( `string`, required) The ID of the tweet you want to look up -## Auth [Permalink for this section](https://docs.arcade.dev/toolkits/social-communication/x\#auth) +## Auth [Permalink for this section](https://docs.arcade.dev/mcp-servers/social-communication/x\#auth) The Arcade X toolkit uses the [X auth provider](https://docs.arcade.dev/home/auth-providers/x) to connect to users’ X accounts. Please refer to the [X auth provider](https://docs.arcade.dev/home/auth-providers/x) documentation to learn how to configure auth. @@ -16280,7 +16280,7 @@ Arcade tools can be self-hosted on your own infrastructure. Learn more about sel pip install arcade_x\\ ```](https://docs.arcade.dev/home/hosting-overview) -[Reference](https://docs.arcade.dev/toolkits/social-communication/twilio/reference "Reference") [Zoom](https://docs.arcade.dev/toolkits/social-communication/zoom "Zoom") +[Reference](https://docs.arcade.dev/mcp-servers/social-communication/twilio/reference "Reference") [Zoom](https://docs.arcade.dev/mcp-servers/social-communication/zoom "Zoom") Frame @@ -16300,7 +16300,7 @@ Arcade enables your AI agent to securely take real-world actions through user-sp Get started with a 5-minute quickstart. -[Get Started](https://docs.arcade.dev/home/quickstart) [Build a tool](https://docs.arcade.dev/home/build-tools/create-a-toolkit) +[Get Started](https://docs.arcade.dev/home/quickstart) [Build a tool](https://docs.arcade.dev/home/build-tools/create-a-mcp-server) Give your AI IDE access to Arcade.dev's documentation using our llms.txt files ( [short llms.txt](https://docs.arcade.dev/llms.txt), [llms-full.txt](https://docs.arcade.dev/llms-full.txt)), or use [context7](https://context7.com/arcadeai/docs). @@ -16358,7 +16358,7 @@ This will be shown if an incident or maintenance is posted on your status page. [View latest updates](https://status.arcade.dev/?utm_source=embed) ## Google News Toolkit -[Integrations](https://docs.arcade.dev/toolkits "Integrations") [Search Tools](https://docs.arcade.dev/toolkits/search/google_finance "Search Tools") Google News +[Integrations](https://docs.arcade.dev/toolkits "Integrations") [Search Tools](https://docs.arcade.dev/mcp-servers/search/google_finance "Search Tools") Google News # Google News @@ -16370,11 +16370,11 @@ This will be shown if an incident or maintenance is posted on your status page. [![PyPI Version](https://img.shields.io/pypi/v/arcade_google-news)](https://pypi.org/project/arcade_google-news/)[![License](https://img.shields.io/badge/License-MIT-yellow.svg)](https://github.com/arcadeai/arcade-ai/blob/main/LICENSE)[![Python Versions](https://img.shields.io/pypi/pyversions/arcade_google-news)](https://pypi.org/project/arcade_google-news/)[![Wheel Status](https://img.shields.io/pypi/wheel/arcade_google-news)](https://pypi.org/project/arcade_google-news/)[![Downloads](https://img.shields.io/pypi/dm/arcade_google-news)](https://pypi.org/project/arcade_google-news/) -The Arcade Google News toolkit provides a pre-built set of tools for interacting with Google News. These tools make it easy to build agents and AI apps that can: +The Arcade Google News MCP Server provides a pre-built set of tools for interacting with Google News. These tools make it easy to build agents and AI apps that can: - Search for news stories with Google News. -## Available Tools [Permalink for this section](https://docs.arcade.dev/toolkits/search/google_news\#available-tools) +## Available Tools [Permalink for this section](https://docs.arcade.dev/mcp-servers/search/google_news\#available-tools) | Tool Name | Description | | --- | --- | @@ -16382,9 +16382,9 @@ The Arcade Google News toolkit provides a pre-built set of tools for interacting 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](https://docs.arcade.dev/home/build-tools/create-a-toolkit). +own tools](https://docs.arcade.dev/home/build-tools/create-a-mcp-server). -## GoogleNews.SearchNews [Permalink for this section](https://docs.arcade.dev/toolkits/search/google_news\#googlenewssearchnews) +## GoogleNews.SearchNews [Permalink for this section](https://docs.arcade.dev/mcp-servers/search/google_news\#googlenewssearchnews) See Example > @@ -16397,7 +16397,7 @@ Search for news stories with Google News. - **`language`** _(string, optional, Defaults to β€˜en’ English)_ 2-character language code to search for news articles. E.g. β€˜en’ (English). Defaults to β€˜en’ (English). - **`limit`** _(int, optional, Defaults to `None`)_ Maximum number of news articles to return. Defaults to None (returns all results found by the API). -## Auth [Permalink for this section](https://docs.arcade.dev/toolkits/search/google_news\#auth) +## Auth [Permalink for this section](https://docs.arcade.dev/mcp-servers/search/google_news\#auth) The Arcade Google News toolkit uses the [SerpAPI](https://serpapi.com/) to get news data from Google News. @@ -16406,7 +16406,7 @@ The Arcade Google News toolkit uses the [SerpAPI](https://serpapi.com/) to get n Setting the `SERP_API_KEY` secret is only required if you are [self-hosting](https://docs.arcade.dev/home/local-deployment/install/overview) Arcade. If you’re using Arcade Cloud, the secret is already set for you. To manage your secrets, go to the [Secrets page](https://api.arcade.dev/dashboard/auth/secrets) in the Arcade Dashboard. -## Default parameters [Permalink for this section](https://docs.arcade.dev/toolkits/search/google_news\#default-parameters) +## Default parameters [Permalink for this section](https://docs.arcade.dev/mcp-servers/search/google_news\#default-parameters) Language and Country are configurable through environment variables. When set, they will be used as default for Google News tools. @@ -16419,7 +16419,7 @@ The language code is a 2-character code that determines the language in which th - `ARCADE_GOOGLE_LANGUAGE`: a default value for all Google search tools. If not set, defaults to β€˜en’ (English). - `ARCADE_GOOGLE_NEWS_LANGUAGE`: a default value for the news search tools. If not set, defaults to `ARCADE_GOOGLE_LANGUAGE`. -A list of supported language codes can be found [here](https://docs.arcade.dev/toolkits/search/google_news#languagecodes). +A list of supported language codes can be found [here](https://docs.arcade.dev/mcp-servers/search/google_news#languagecodes). **Country** @@ -16427,13 +16427,13 @@ The country code is a 2-character code that determines the country in which the - `ARCADE_GOOGLE_NEWS_COUNTRY`: a default value for the `SearchNews` tool. If not set, defaults to `None` (search news globally). -A list of supported country codes can be found [here](https://docs.arcade.dev/toolkits/search/google_news#countrycodes). +A list of supported country codes can be found [here](https://docs.arcade.dev/mcp-servers/search/google_news#countrycodes). * * * -## Reference [Permalink for this section](https://docs.arcade.dev/toolkits/search/google_news\#reference) +## Reference [Permalink for this section](https://docs.arcade.dev/mcp-servers/search/google_news\#reference) -## LanguageCodes [Permalink for this section](https://docs.arcade.dev/toolkits/search/google_news\#languagecodes) +## LanguageCodes [Permalink for this section](https://docs.arcade.dev/mcp-servers/search/google_news\#languagecodes) - **`ar`**: Arabic - **`bn`**: Bengali @@ -16467,7 +16467,7 @@ A list of supported country codes can be found [here](https://docs.arcade.dev/to - **`zh-cn`**: Chinese (Simplified) - **`zh-tw`**: Chinese (Traditional) -## CountryCodes [Permalink for this section](https://docs.arcade.dev/toolkits/search/google_news\#countrycodes) +## CountryCodes [Permalink for this section](https://docs.arcade.dev/mcp-servers/search/google_news\#countrycodes) - **`af`**: Afghanistan - **`al`**: Albania @@ -16728,7 +16728,7 @@ Arcade tools can be self-hosted on your own infrastructure. Learn more about sel pip install arcade_google_news\\ ```](https://docs.arcade.dev/home/hosting-overview) -[Google Maps](https://docs.arcade.dev/toolkits/search/google_maps "Google Maps") [Google Search](https://docs.arcade.dev/toolkits/search/google_search "Google Search") +[Google Maps](https://docs.arcade.dev/mcp-servers/search/google_maps "Google Maps") [Google Search](https://docs.arcade.dev/mcp-servers/search/google_search "Google Search") Frame @@ -16994,7 +16994,7 @@ token = auth_response.context.token ## Using Reddit auth in custom tools [Permalink for this section](https://docs.arcade.dev/home/auth-providers/reddit\#using-reddit-auth-in-custom-tools) -You can author your own [custom tools](https://docs.arcade.dev/home/build-tools/create-a-toolkit) that interact with the Reddit API. +You can author your own [custom tools](https://docs.arcade.dev/home/build-tools/create-a-mcp-server) that interact with the Reddit API. Use the `Reddit()` auth class to specify that a tool requires authorization with Reddit. The `context.authorization.token` field will be automatically populated with the user’s Reddit token: @@ -17046,16 +17046,16 @@ This will be shown if an incident or maintenance is posted on your status page. Arcade welcomes your toolkit contributions. By adding your toolkit to the Arcade documentation, you help other developers discover and use your tools. Follow these steps to submit your own toolkit. -## Prerequisites [Permalink for this section](https://docs.arcade.dev/toolkits/contribute-a-toolkit\#prerequisites) +## Prerequisites [Permalink for this section](https://docs.arcade.dev/mcp-servers/contribute-a-toolkit\#prerequisites) -- Build your toolkit. See [build a toolkit](https://docs.arcade.dev/home/build-tools/create-a-toolkit) for guidance. +- Build your toolkit. See [build a toolkit](https://docs.arcade.dev/home/build-tools/create-a-mcp-server) for guidance. - Publish your toolkit on PyPI. -## Submit your toolkit [Permalink for this section](https://docs.arcade.dev/toolkits/contribute-a-toolkit\#submit-your-toolkit) +## Submit your toolkit [Permalink for this section](https://docs.arcade.dev/mcp-servers/contribute-a-toolkit\#submit-your-toolkit) Open a pull request in the [Arcade Documentation GitHub repository](https://github.com/ArcadeAI/docs) that completes the [community toolkit checklist](https://github.com/ArcadeAI/docs/blob/main/.github/PULL_REQUEST_TEMPLATE/community_contributed_toolkit.md). The checklist will guide you through the necessary steps to ensure your toolkit contribution is successful. -## Review and merge [Permalink for this section](https://docs.arcade.dev/toolkits/contribute-a-toolkit\#review-and-merge) +## Review and merge [Permalink for this section](https://docs.arcade.dev/mcp-servers/contribute-a-toolkit\#review-and-merge) After submitting your pull request: @@ -17063,7 +17063,7 @@ After submitting your pull request: - Address any feedback from the reviewers. - Once approved, your toolkit will be added to the Arcade documentation for other developers to discover and use! -[Reference](https://docs.arcade.dev/toolkits/customer-support/zendesk/reference "Reference") +[Reference](https://docs.arcade.dev/mcp-servers/customer-support/zendesk/reference "Reference") Frame @@ -17083,13 +17083,13 @@ This will be shown if an incident or maintenance is posted on your status page. **Author:** Arcade -**Code:** [GitHub](https://github.com/ArcadeAI/arcade-ai/tree/main/toolkits/zendesk) +**Code:** [GitHub](https://github.com/ArcadeAI/arcade-ai/tree/main/mcp-servers/zendesk) **Auth:** User authorization [![PyPI Version](https://img.shields.io/pypi/v/arcade_zendesk)](https://pypi.org/project/arcade_zendesk/)[![License](https://img.shields.io/badge/License-MIT-yellow.svg)](https://github.com/arcadeai/arcade-ai/blob/main/LICENSE)[![Python Versions](https://img.shields.io/pypi/pyversions/arcade_zendesk)](https://pypi.org/project/arcade_zendesk/)[![Wheel Status](https://img.shields.io/pypi/wheel/arcade_zendesk)](https://pypi.org/project/arcade_zendesk/)[![Downloads](https://img.shields.io/pypi/dm/arcade_zendesk)](https://pypi.org/project/arcade_zendesk/) -The Zendesk toolkit provides a set of tools for managing customer support tickets and knowledge base articles. With this toolkit, users can: +The Zendesk MCP Server provides a set of tools for managing customer support tickets and knowledge base articles. With this toolkit, users can: - List and paginate through tickets in their Zendesk account. - Retrieve all comments for specific tickets, including the original description and conversation history. @@ -17099,7 +17099,7 @@ The Zendesk toolkit provides a set of tools for managing customer support ticket This toolkit streamlines the process of handling customer inquiries and accessing support resources. -## Available Tools [Permalink for this section](https://docs.arcade.dev/toolkits/customer-support/zendesk\#available-tools) +## Available Tools [Permalink for this section](https://docs.arcade.dev/mcp-servers/customer-support/zendesk\#available-tools) | Tool Name | Description | | --- | --- | @@ -17112,9 +17112,9 @@ This toolkit streamlines the process of handling customer inquiries and accessin 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](https://docs.arcade.dev/home/build-tools/create-a-toolkit). +own tools](https://docs.arcade.dev/home/build-tools/create-a-mcp-server). -## Zendesk.ListTickets [Permalink for this section](https://docs.arcade.dev/toolkits/customer-support/zendesk\#zendesklisttickets) +## Zendesk.ListTickets [Permalink for this section](https://docs.arcade.dev/mcp-servers/customer-support/zendesk\#zendesklisttickets) See Example > @@ -17122,16 +17122,16 @@ List tickets from your Zendesk account with offset-based pagination. **Parameters** -- **status** ( `Enum` [TicketStatus](https://docs.arcade.dev/toolkits/customer-support/zendesk/reference#TicketStatus), optional) The status of tickets to filter by. Defaults to β€˜open’ +- **status** ( `Enum` [TicketStatus](https://docs.arcade.dev/mcp-servers/customer-support/zendesk/reference#TicketStatus), optional) The status of tickets to filter by. Defaults to β€˜open’ - **limit** ( `integer`, optional) Number of tickets to return. Defaults to 30 - **offset** ( `integer`, optional) Number of tickets to skip before returning results. Defaults to 0 -- **sort\_order** ( `Enum` [SortOrder](https://docs.arcade.dev/toolkits/customer-support/zendesk/reference#SortOrder), optional) Sort order for tickets by ID. β€˜asc’ returns oldest first, β€˜desc’ returns newest first. Defaults to β€˜desc’ +- **sort\_order** ( `Enum` [SortOrder](https://docs.arcade.dev/mcp-servers/customer-support/zendesk/reference#SortOrder), optional) Sort order for tickets by ID. β€˜asc’ returns oldest first, β€˜desc’ returns newest first. Defaults to β€˜desc’ **Secrets** This tool requires the following secrets: `zendesk_subdomain` (learn how to [configure secrets](https://docs.arcade.dev/home/build-tools/create-a-tool-with-secrets#supplying-the-secret)) -## Zendesk.GetTicketComments [Permalink for this section](https://docs.arcade.dev/toolkits/customer-support/zendesk\#zendeskgetticketcomments) +## Zendesk.GetTicketComments [Permalink for this section](https://docs.arcade.dev/mcp-servers/customer-support/zendesk\#zendeskgetticketcomments) See Example > @@ -17145,7 +17145,7 @@ Get all comments for a specific Zendesk ticket, including the original descripti This tool requires the following secrets: `zendesk_subdomain` (learn how to [configure secrets](https://docs.arcade.dev/home/build-tools/create-a-tool-with-secrets#supplying-the-secret)) -## Zendesk.AddTicketComment [Permalink for this section](https://docs.arcade.dev/toolkits/customer-support/zendesk\#zendeskaddticketcomment) +## Zendesk.AddTicketComment [Permalink for this section](https://docs.arcade.dev/mcp-servers/customer-support/zendesk\#zendeskaddticketcomment) See Example > @@ -17161,7 +17161,7 @@ Add a comment to an existing Zendesk ticket. This tool requires the following secrets: `zendesk_subdomain` (learn how to [configure secrets](https://docs.arcade.dev/home/build-tools/create-a-tool-with-secrets#supplying-the-secret)) -## Zendesk.MarkTicketSolved [Permalink for this section](https://docs.arcade.dev/toolkits/customer-support/zendesk\#zendeskmarkticketsolved) +## Zendesk.MarkTicketSolved [Permalink for this section](https://docs.arcade.dev/mcp-servers/customer-support/zendesk\#zendeskmarkticketsolved) See Example > @@ -17177,7 +17177,7 @@ Mark a Zendesk ticket as solved, optionally with a final comment. This tool requires the following secrets: `zendesk_subdomain` (learn how to [configure secrets](https://docs.arcade.dev/home/build-tools/create-a-tool-with-secrets#supplying-the-secret)) -## Zendesk.SearchArticles [Permalink for this section](https://docs.arcade.dev/toolkits/customer-support/zendesk\#zendesksearcharticles) +## Zendesk.SearchArticles [Permalink for this section](https://docs.arcade.dev/mcp-servers/customer-support/zendesk\#zendesksearcharticles) See Example > @@ -17190,8 +17190,8 @@ Search for Help Center articles in your Zendesk knowledge base. - **created\_after** ( `string`, optional) Filter articles created after this date (format: YYYY-MM-DD) - **created\_before** ( `string`, optional) Filter articles created before this date (format: YYYY-MM-DD) - **created\_at** ( `string`, optional) Filter articles created on this exact date (format: YYYY-MM-DD) -- **sort\_by** ( `Enum` [ArticleSortBy](https://docs.arcade.dev/toolkits/customer-support/zendesk/reference#ArticleSortBy), optional) Field to sort articles by. Defaults to relevance according to the search query -- **sort\_order** ( `Enum` [SortOrder](https://docs.arcade.dev/toolkits/customer-support/zendesk/reference#SortOrder), optional) Sort order direction. Defaults to descending +- **sort\_by** ( `Enum` [ArticleSortBy](https://docs.arcade.dev/mcp-servers/customer-support/zendesk/reference#ArticleSortBy), optional) Field to sort articles by. Defaults to relevance according to the search query +- **sort\_order** ( `Enum` [SortOrder](https://docs.arcade.dev/mcp-servers/customer-support/zendesk/reference#SortOrder), optional) Sort order direction. Defaults to descending - **limit** ( `integer`, optional) Number of articles to return. Defaults to 30 - **offset** ( `integer`, optional) Number of articles to skip before returning results. Defaults to 0 - **include\_body** ( `boolean`, optional) Include article body content in results. Bodies will be cleaned of HTML and truncated @@ -17201,7 +17201,7 @@ Search for Help Center articles in your Zendesk knowledge base. This tool requires the following secrets: `zendesk_subdomain` (learn how to [configure secrets](https://docs.arcade.dev/home/build-tools/create-a-tool-with-secrets#supplying-the-secret)) -## Zendesk.WhoAmI [Permalink for this section](https://docs.arcade.dev/toolkits/customer-support/zendesk\#zendeskwhoami) +## Zendesk.WhoAmI [Permalink for this section](https://docs.arcade.dev/mcp-servers/customer-support/zendesk\#zendeskwhoami) See Example > @@ -17229,7 +17229,7 @@ Arcade tools can be self-hosted on your own infrastructure. Learn more about sel pip install arcade_zendesk\\ ```](https://docs.arcade.dev/home/hosting-overview) -[Clickhouse](https://docs.arcade.dev/toolkits/databases/clickhouse "Clickhouse") [Reference](https://docs.arcade.dev/toolkits/customer-support/zendesk/reference "Reference") +[Clickhouse](https://docs.arcade.dev/mcp-servers/databases/clickhouse "Clickhouse") [Reference](https://docs.arcade.dev/mcp-servers/customer-support/zendesk/reference "Reference") Frame @@ -17359,7 +17359,7 @@ You should see an output similar to this:, which is a list of the email messages For each item in the list/array, you could use the [`users.messages.get`](https://developers.google.com/workspace/gmail/api/reference/rest/v1/users.messages/get) endpoint to get the full message details. -Consider using the [Arcade Gmail toolkit](https://docs.arcade.dev/toolkits/productivity/gmail), which simplifies the process for retrieving email messages even further! The pattern described here is useful if you need to directly get a token to use with Google in other parts of your codebase. +Consider using the [Arcade Gmail toolkit](https://docs.arcade.dev/mcp-servers/productivity/gmail), which simplifies the process for retrieving email messages even further! The pattern described here is useful if you need to directly get a token to use with Google in other parts of your codebase. ### How it works [Permalink for this section](https://docs.arcade.dev/home/auth/call-third-party-apis-directly\#how-it-works) @@ -17533,7 +17533,7 @@ This will be shown if an incident or maintenance is posted on your status page. [View latest updates](https://status.arcade.dev/?utm_source=embed) ## SharePoint Toolkit -[Integrations](https://docs.arcade.dev/toolkits "Integrations") [Productivity & Docs](https://docs.arcade.dev/toolkits/productivity/asana "Productivity & Docs") Sharepoint +[Integrations](https://docs.arcade.dev/toolkits "Integrations") [Productivity & Docs](https://docs.arcade.dev/mcp-servers/productivity/asana "Productivity & Docs") Sharepoint # Sharepoint @@ -17545,7 +17545,7 @@ This will be shown if an incident or maintenance is posted on your status page. [![PyPI Version](https://img.shields.io/pypi/v/arcade_sharepoint)](https://pypi.org/project/arcade_sharepoint/)[![License](https://img.shields.io/badge/License-MIT-yellow.svg)](https://github.com/arcadeai/arcade-ai/blob/main/LICENSE)[![Python Versions](https://img.shields.io/pypi/pyversions/arcade_sharepoint)](https://pypi.org/project/arcade_sharepoint/)[![Wheel Status](https://img.shields.io/pypi/wheel/arcade_sharepoint)](https://pypi.org/project/arcade_sharepoint/)[![Downloads](https://img.shields.io/pypi/dm/arcade_sharepoint)](https://pypi.org/project/arcade_sharepoint/) -The SharePoint toolkit provides a comprehensive set of tools for interacting with SharePoint sites and their contents. Users can perform various actions, including: +The SharePoint MCP Server provides a comprehensive set of tools for interacting with SharePoint sites and their contents. Users can perform various actions, including: - Retrieve lists, items, and pages from SharePoint sites. - Access metadata and content of specific pages. @@ -17554,7 +17554,7 @@ The SharePoint toolkit provides a comprehensive set of tools for interacting wit This toolkit simplifies the process of accessing and managing SharePoint resources efficiently for AI Agents and chat bots. -## Available Tools [Permalink for this section](https://docs.arcade.dev/toolkits/productivity/sharepoint\#available-tools) +## Available Tools [Permalink for this section](https://docs.arcade.dev/mcp-servers/productivity/sharepoint\#available-tools) | Tool Name | Description | | --- | --- | @@ -17573,9 +17573,9 @@ This toolkit simplifies the process of accessing and managing SharePoint resourc 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](https://docs.arcade.dev/home/build-tools/create-a-toolkit). +own tools](https://docs.arcade.dev/home/build-tools/create-a-mcp-server). -## Sharepoint.GetListsFromSite [Permalink for this section](https://docs.arcade.dev/toolkits/productivity/sharepoint\#sharepointgetlistsfromsite) +## Sharepoint.GetListsFromSite [Permalink for this section](https://docs.arcade.dev/mcp-servers/productivity/sharepoint\#sharepointgetlistsfromsite) See Example > @@ -17585,7 +17585,7 @@ Retrieve lists from a SharePoint site. - **site** ( `string`, required) Site ID, SharePoint URL, or site name to get lists from. Prefer using a site ID whenever available for optimal performance. -## Sharepoint.GetItemsFromList [Permalink for this section](https://docs.arcade.dev/toolkits/productivity/sharepoint\#sharepointgetitemsfromlist) +## Sharepoint.GetItemsFromList [Permalink for this section](https://docs.arcade.dev/mcp-servers/productivity/sharepoint\#sharepointgetitemsfromlist) See Example > @@ -17596,7 +17596,7 @@ Retrieve items from a list in a SharePoint site. - **site** ( `string`, required) Site ID, SharePoint URL, or site name to get lists from. Prefer using a site ID whenever available for optimal performance. - **list\_id** ( `string`, required) The ID of the list to get items from. -## Sharepoint.GetPage [Permalink for this section](https://docs.arcade.dev/toolkits/productivity/sharepoint\#sharepointgetpage) +## Sharepoint.GetPage [Permalink for this section](https://docs.arcade.dev/mcp-servers/productivity/sharepoint\#sharepointgetpage) See Example > @@ -17608,7 +17608,7 @@ Retrieve metadata and the contents of a page in a SharePoint site. - **page\_id** ( `string`, required) The ID of the page to retrieve. - **include\_page\_content** ( `boolean`, optional) Whether to include the page content in the response. Defaults to True. If set to False, the tool will return only the page metadata. -## Sharepoint.ListPages [Permalink for this section](https://docs.arcade.dev/toolkits/productivity/sharepoint\#sharepointlistpages) +## Sharepoint.ListPages [Permalink for this section](https://docs.arcade.dev/mcp-servers/productivity/sharepoint\#sharepointlistpages) See Example > @@ -17619,7 +17619,7 @@ Retrieve pages from a SharePoint site. - **site** ( `string`, required) Site ID, SharePoint URL, or site name to retrieve base pages from. Prefer using a site ID whenever available for optimal performance. - **limit** ( `integer`, optional) The maximum number of pages to return. Defaults to 10, max is 200. -## Sharepoint.GetSite [Permalink for this section](https://docs.arcade.dev/toolkits/productivity/sharepoint\#sharepointgetsite) +## Sharepoint.GetSite [Permalink for this section](https://docs.arcade.dev/mcp-servers/productivity/sharepoint\#sharepointgetsite) See Example > @@ -17629,7 +17629,7 @@ Retrieve information about a specific SharePoint site by its ID, URL, or name. - **site** ( `string`, required) Site ID, SharePoint URL, or site name to search for. -## Sharepoint.SearchSites [Permalink for this section](https://docs.arcade.dev/toolkits/productivity/sharepoint\#sharepointsearchsites) +## Sharepoint.SearchSites [Permalink for this section](https://docs.arcade.dev/mcp-servers/productivity/sharepoint\#sharepointsearchsites) See Example > @@ -17641,7 +17641,7 @@ Search for SharePoint sites by name or description. - **limit** ( `integer`, optional) The maximum number of sites to return. Defaults to 10, max is 100. - **offset** ( `integer`, optional) The offset to start from. -## Sharepoint.ListSites [Permalink for this section](https://docs.arcade.dev/toolkits/productivity/sharepoint\#sharepointlistsites) +## Sharepoint.ListSites [Permalink for this section](https://docs.arcade.dev/mcp-servers/productivity/sharepoint\#sharepointlistsites) See Example > @@ -17652,7 +17652,7 @@ List all SharePoint sites accessible to the current user. - **limit** ( `integer`, optional) The maximum number of sites to return. Defaults to 10, max is 100. - **offset** ( `integer`, optional) The offset to start from. -## Sharepoint.GetFollowedSites [Permalink for this section](https://docs.arcade.dev/toolkits/productivity/sharepoint\#sharepointgetfollowedsites) +## Sharepoint.GetFollowedSites [Permalink for this section](https://docs.arcade.dev/mcp-servers/productivity/sharepoint\#sharepointgetfollowedsites) See Example > @@ -17662,7 +17662,7 @@ Retrieve a list of SharePoint sites that are followed by the current user. - **limit** ( `integer`, optional) The maximum number of sites to return. Defaults to 10, max is 100. -## Sharepoint.GetDrivesFromSite [Permalink for this section](https://docs.arcade.dev/toolkits/productivity/sharepoint\#sharepointgetdrivesfromsite) +## Sharepoint.GetDrivesFromSite [Permalink for this section](https://docs.arcade.dev/mcp-servers/productivity/sharepoint\#sharepointgetdrivesfromsite) See Example > @@ -17672,7 +17672,7 @@ Retrieve drives / document libraries from a SharePoint site. - **site** ( `string`, required) Site ID, SharePoint URL, or site name to get drives from. Prefer using a site ID whenever available for optimal performance. -## Sharepoint.ListRootItemsInDrive [Permalink for this section](https://docs.arcade.dev/toolkits/productivity/sharepoint\#sharepointlistrootitemsindrive) +## Sharepoint.ListRootItemsInDrive [Permalink for this section](https://docs.arcade.dev/mcp-servers/productivity/sharepoint\#sharepointlistrootitemsindrive) See Example > @@ -17684,7 +17684,7 @@ Retrieve items from the root of a drive in a SharePoint site. - **limit** ( `integer`, optional) The number of items to get. Defaults to 100, max is 500. - **offset** ( `integer`, optional) The number of items to skip. -## Sharepoint.ListItemsInFolder [Permalink for this section](https://docs.arcade.dev/toolkits/productivity/sharepoint\#sharepointlistitemsinfolder) +## Sharepoint.ListItemsInFolder [Permalink for this section](https://docs.arcade.dev/mcp-servers/productivity/sharepoint\#sharepointlistitemsinfolder) See Example > @@ -17697,7 +17697,7 @@ Retrieve items from a folder in a drive in a SharePoint site. - **limit** ( `integer`, optional) The number of items to get. Defaults to 100, max is 500. - **offset** ( `integer`, optional) The number of items to skip. -## Sharepoint.SearchDriveItems [Permalink for this section](https://docs.arcade.dev/toolkits/productivity/sharepoint\#sharepointsearchdriveitems) +## Sharepoint.SearchDriveItems [Permalink for this section](https://docs.arcade.dev/mcp-servers/productivity/sharepoint\#sharepointsearchdriveitems) See Example > @@ -17711,7 +17711,7 @@ Search for items in one or more Sharepoint drives. - **limit** ( `integer`, optional) The number of files to get. Defaults to 50, max is 500. - **offset** ( `integer`, optional) The number of files to skip. -## Auth [Permalink for this section](https://docs.arcade.dev/toolkits/productivity/sharepoint\#auth) +## Auth [Permalink for this section](https://docs.arcade.dev/mcp-servers/productivity/sharepoint\#auth) The Arcade Sharepoint toolkit uses the [Microsoft auth provider](https://docs.arcade.dev/home/auth-providers/microsoft) to connect to users’ Sharepoint accounts. Please refer to the [Microsoft auth provider](https://docs.arcade.dev/home/auth-providers/microsoft) documentation to learn how to configure auth. @@ -17729,7 +17729,7 @@ Arcade tools can be self-hosted on your own infrastructure. Learn more about sel pip install arcade_sharepoint\\ ```](https://docs.arcade.dev/home/hosting-overview) -[Close.io](https://docs.arcade.dev/toolkits/productivity/closeio "Close.io") [Discord](https://docs.arcade.dev/toolkits/social-communication/discord "Discord") +[Close.io](https://docs.arcade.dev/mcp-servers/productivity/closeio "Close.io") [Discord](https://docs.arcade.dev/mcp-servers/social-communication/discord "Discord") Frame @@ -17747,7 +17747,7 @@ This will be shown if an incident or maintenance is posted on your status page. In this guide, you’ll learn how to connect Visual Studio Code to Arcade.dev’s MCP server. -As of version 1.100.0, Visual Studio Code does not yet support [MCP authorization](https://modelcontextprotocol.io/specification/draft/basic/authorization). Only tools that do not require auth, such as math and [search](https://docs.arcade.dev/toolkits/search/google_search) tools, will work with Visual Studio Code. We’re working to improve this - stay tuned! +As of version 1.100.0, Visual Studio Code does not yet support [MCP authorization](https://modelcontextprotocol.io/specification/draft/basic/authorization). Only tools that do not require auth, such as math and [search](https://docs.arcade.dev/mcp-servers/search/google_search) tools, will work with Visual Studio Code. We’re working to improve this - stay tuned! ### Set up Visual Studio Code [Permalink for this section](https://docs.arcade.dev/home/mcp-desktop-clients/vscode-client\#set-up-visual-studio-code) @@ -17994,9 +17994,9 @@ This will be shown if an incident or maintenance is posted on your status page. [View latest updates](https://status.arcade.dev/?utm_source=embed) ## Dropbox Item Categories -[Integrations](https://docs.arcade.dev/toolkits "Integrations") [Productivity & Docs](https://docs.arcade.dev/toolkits/productivity/asana "Productivity & Docs") [Dropbox](https://docs.arcade.dev/toolkits/productivity/dropbox/dropbox "Dropbox") Reference +[Integrations](https://docs.arcade.dev/toolkits "Integrations") [Productivity & Docs](https://docs.arcade.dev/mcp-servers/productivity/asana "Productivity & Docs") [Dropbox](https://docs.arcade.dev/mcp-servers/productivity/dropbox/dropbox "Dropbox") Reference -## DropboxItemCategory [Permalink for this section](https://docs.arcade.dev/toolkits/productivity/dropbox/reference\#dropboxitemcategory) +## DropboxItemCategory [Permalink for this section](https://docs.arcade.dev/mcp-servers/productivity/dropbox/reference\#dropboxitemcategory) - **IMAGE**: `'image'` - **DOCUMENT**: `'document'` @@ -18008,7 +18008,7 @@ This will be shown if an incident or maintenance is posted on your status page. - **FOLDER**: `'folder'` - **PAPER**: `'paper'` -[Dropbox](https://docs.arcade.dev/toolkits/productivity/dropbox/dropbox "Dropbox") [Gmail](https://docs.arcade.dev/toolkits/productivity/gmail "Gmail") +[Dropbox](https://docs.arcade.dev/mcp-servers/productivity/dropbox/dropbox "Dropbox") [Gmail](https://docs.arcade.dev/mcp-servers/productivity/gmail "Gmail") Frame @@ -18124,7 +18124,7 @@ Ready to start building with Arcade and OpenAI Agents? Check out these guides: - [Using Arcade tools](https://docs.arcade.dev/home/oai-agents/use-arcade-tools) \- Learn the basics of using Arcade tools with OpenAI Agents - [Managing user authorization](https://docs.arcade.dev/home/oai-agents/user-auth-interrupts) \- Handle tool authorization efficiently -- [Creating custom tools](https://docs.arcade.dev/home/build-tools/create-a-toolkit) \- Build your own tools with the Arcade Tool SDK +- [Creating custom tools](https://docs.arcade.dev/home/build-tools/create-a-mcp-server) \- Build your own tools with the Arcade Tool SDK Enjoy exploring Arcade and building powerful AI-enabled applications! @@ -18140,7 +18140,7 @@ This will be shown if an incident or maintenance is posted on your status page. [View latest updates](https://status.arcade.dev/?utm_source=embed) ## Jira Toolkit -[Integrations](https://docs.arcade.dev/toolkits "Integrations") [Productivity & Docs](https://docs.arcade.dev/toolkits/productivity/asana "Productivity & Docs") Jira +[Integrations](https://docs.arcade.dev/toolkits "Integrations") [Productivity & Docs](https://docs.arcade.dev/mcp-servers/productivity/asana "Productivity & Docs") Jira # Jira @@ -18152,7 +18152,7 @@ This will be shown if an incident or maintenance is posted on your status page. [![PyPI Version](https://img.shields.io/pypi/v/arcade_jira)](https://pypi.org/project/arcade_jira/)[![License](https://img.shields.io/badge/License-MIT-yellow.svg)](https://github.com/arcadeai/arcade-ai/blob/main/LICENSE)[![Python Versions](https://img.shields.io/pypi/pyversions/arcade_jira)](https://pypi.org/project/arcade_jira/)[![Wheel Status](https://img.shields.io/pypi/wheel/arcade_jira)](https://pypi.org/project/arcade_jira/)[![Downloads](https://img.shields.io/pypi/dm/arcade_jira)](https://pypi.org/project/arcade_jira/) -The Jira toolkit provides a comprehensive set of tools for interacting with Jira, enabling users and AI applications to efficiently manage issues and projects. With this toolkit, you can: +The Jira MCP Server provides a comprehensive set of tools for interacting with Jira, enabling users and AI applications to efficiently manage issues and projects. With this toolkit, you can: - Create, update, and search for Jira issues using various parameters. - Retrieve detailed information about issues, projects, users, and issue types. @@ -18163,9 +18163,9 @@ The Jira toolkit provides a comprehensive set of tools for interacting with Jira This toolkit streamlines the process of issue management, making it easier to integrate Jira functionalities into applications and workflows. -## Handling multiple Atlassian Clouds [Permalink for this section](https://docs.arcade.dev/toolkits/productivity/jira\#handling-multiple-atlassian-clouds) +## Handling multiple Atlassian Clouds [Permalink for this section](https://docs.arcade.dev/mcp-servers/productivity/jira\#handling-multiple-atlassian-clouds) -A Jira user may have multiple Atlassian Clouds authorized via the same OAuth grant. In such cases, the Jira tools must be called with the `atlassian_cloud_id` argument. The [`Jira.GetAvailableAtlassianClouds`](https://docs.arcade.dev/toolkits/productivity/jira#jiragetavailableatlassianclouds) tool can be used to get the available Atlassian Clouds and their IDs. +A Jira user may have multiple Atlassian Clouds authorized via the same OAuth grant. In such cases, the Jira tools must be called with the `atlassian_cloud_id` argument. The [`Jira.GetAvailableAtlassianClouds`](https://docs.arcade.dev/mcp-servers/productivity/jira#jiragetavailableatlassianclouds) tool can be used to get the available Atlassian Clouds and their IDs. When a tool call does not receive a value for `atlassian_cloud_id` and the user only has a single Atlassian Cloud authorized, the tool will use that. Otherwise, an error will be raised. The error will contain an additional content listing the available Atlassian Clouds and their IDs. @@ -18178,7 +18178,7 @@ When the user selects an Atlassian Cloud, it may be appropriate to keep this inf 1. Make it clear to the chat’s end user which Atlassian Cloud is being used at any moment, to avoid, for example, having a Jira Issue being created in the wrong Atlassian Cloud; 2. Appropriately instruct the LLM and keep the relevant information in its context window, enabling it to correctly call the Jira tools, **especially in multi-turn conversations**. -## Available Tools [Permalink for this section](https://docs.arcade.dev/toolkits/productivity/jira\#available-tools) +## Available Tools [Permalink for this section](https://docs.arcade.dev/mcp-servers/productivity/jira\#available-tools) | Tool Name | Description | | --- | --- | @@ -18228,9 +18228,9 @@ When the user selects an Atlassian Cloud, it may be appropriate to keep this inf 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](https://docs.arcade.dev/home/build-tools/create-a-toolkit). +own tools](https://docs.arcade.dev/home/build-tools/create-a-mcp-server). -## Jira.ListIssueTypesByProject [Permalink for this section](https://docs.arcade.dev/toolkits/productivity/jira\#jiralistissuetypesbyproject) +## Jira.ListIssueTypesByProject [Permalink for this section](https://docs.arcade.dev/mcp-servers/productivity/jira\#jiralistissuetypesbyproject) See Example > @@ -18243,7 +18243,7 @@ Get the list of issue types (e.g. β€˜Task’, β€˜Epic’, etc.) available to a g - **offset** ( `integer`, optional) The number of issue types to skip. Defaults to 0 (start from the first issue type). - **atlassian\_cloud\_id** ( `string`, optional) The ID of the Atlassian Cloud to use (defaults to None). If not provided and the user has a single cloud authorized, the tool will use that. Otherwise, an error will be raised. -## Jira.GetIssueTypeById [Permalink for this section](https://docs.arcade.dev/toolkits/productivity/jira\#jiragetissuetypebyid) +## Jira.GetIssueTypeById [Permalink for this section](https://docs.arcade.dev/mcp-servers/productivity/jira\#jiragetissuetypebyid) See Example > @@ -18254,7 +18254,7 @@ Get the details of a Jira issue type by its ID. - **issue\_type\_id** ( `string`, required) The ID of the issue type to retrieve - **atlassian\_cloud\_id** ( `string`, optional) The ID of the Atlassian Cloud to use (defaults to None). If not provided and the user has a single cloud authorized, the tool will use that. Otherwise, an error will be raised. -## Jira.GetIssueById [Permalink for this section](https://docs.arcade.dev/toolkits/productivity/jira\#jiragetissuebyid) +## Jira.GetIssueById [Permalink for this section](https://docs.arcade.dev/mcp-servers/productivity/jira\#jiragetissuebyid) See Example > @@ -18265,7 +18265,7 @@ Get the details of a Jira issue by its ID. - **issue** ( `string`, required) The ID or key of the issue to retrieve - **atlassian\_cloud\_id** ( `string`, optional) The ID of the Atlassian Cloud to use (defaults to None). If not provided and the user has a single cloud authorized, the tool will use that. Otherwise, an error will be raised. -## Jira.GetIssuesWithoutId [Permalink for this section](https://docs.arcade.dev/toolkits/productivity/jira\#jiragetissueswithoutid) +## Jira.GetIssuesWithoutId [Permalink for this section](https://docs.arcade.dev/mcp-servers/productivity/jira\#jiragetissueswithoutid) See Example > @@ -18287,7 +18287,7 @@ Search for Jira issues when you don’t have the issue ID(s). - **next\_page\_token** ( `string`, optional) The token to use to get the next page of issues. Defaults to None (first page). - **atlassian\_cloud\_id** ( `string`, optional) The ID of the Atlassian Cloud to use (defaults to None). If not provided and the user has a single cloud authorized, the tool will use that. Otherwise, an error will be raised. -## Jira.ListIssues [Permalink for this section](https://docs.arcade.dev/toolkits/productivity/jira\#jiralistissues) +## Jira.ListIssues [Permalink for this section](https://docs.arcade.dev/mcp-servers/productivity/jira\#jiralistissues) See Example > @@ -18300,7 +18300,7 @@ Get the issues for a given project. - **next\_page\_token** ( `string`, optional) The token to use to get the next page of issues. Defaults to None (first page). - **atlassian\_cloud\_id** ( `string`, optional) The ID of the Atlassian Cloud to use (defaults to None). If not provided and the user has a single cloud authorized, the tool will use that. Otherwise, an error will be raised. -## Jira.SearchIssuesWithoutJql [Permalink for this section](https://docs.arcade.dev/toolkits/productivity/jira\#jirasearchissueswithoutjql) +## Jira.SearchIssuesWithoutJql [Permalink for this section](https://docs.arcade.dev/mcp-servers/productivity/jira\#jirasearchissueswithoutjql) See Example > @@ -18322,7 +18322,7 @@ Parameterized search for Jira issues (without having to provide a JQL query). - **next\_page\_token** ( `string`, optional) The token to use to get the next page of issues. Defaults to None (first page). - **atlassian\_cloud\_id** ( `string`, optional) The ID of the Atlassian Cloud to use (defaults to None). If not provided and the user has a single cloud authorized, the tool will use that. Otherwise, an error will be raised. -## Jira.SearchIssuesWithJql [Permalink for this section](https://docs.arcade.dev/toolkits/productivity/jira\#jirasearchissueswithjql) +## Jira.SearchIssuesWithJql [Permalink for this section](https://docs.arcade.dev/mcp-servers/productivity/jira\#jirasearchissueswithjql) See Example > @@ -18335,7 +18335,7 @@ Search for Jira issues using a JQL (Jira Query Language) query. - **next\_page\_token** ( `string`, optional) The token to use to get the next page of issues. Defaults to None (first page). - **atlassian\_cloud\_id** ( `string`, optional) The ID of the Atlassian Cloud to use (defaults to None). If not provided and the user has a single cloud authorized, the tool will use that. Otherwise, an error will be raised. -## Jira.CreateIssue [Permalink for this section](https://docs.arcade.dev/toolkits/productivity/jira\#jiracreateissue) +## Jira.CreateIssue [Permalink for this section](https://docs.arcade.dev/mcp-servers/productivity/jira\#jiracreateissue) See Example > @@ -18356,7 +18356,7 @@ Create a new Jira issue. - **reporter** ( `string`, optional) The name, email or ID of the user who is the reporter of the issue. If a name or email is provided, the tool will try to find a unique exact match among the available users. Defaults to None (no reporter). - **atlassian\_cloud\_id** ( `string`, optional) The ID of the Atlassian Cloud to use (defaults to None). If not provided and the user has a single cloud authorized, the tool will use that. Otherwise, an error will be raised. -## Jira.AddLabelsToIssue [Permalink for this section](https://docs.arcade.dev/toolkits/productivity/jira\#jiraaddlabelstoissue) +## Jira.AddLabelsToIssue [Permalink for this section](https://docs.arcade.dev/mcp-servers/productivity/jira\#jiraaddlabelstoissue) See Example > @@ -18369,7 +18369,7 @@ Add labels to an existing Jira issue. - **notify\_watchers** ( `boolean`, optional) Whether to notify the issue’s watchers. Defaults to True (notifies watchers). - **atlassian\_cloud\_id** ( `string`, optional) The ID of the Atlassian Cloud to use (defaults to None). If not provided and the user has a single cloud authorized, the tool will use that. Otherwise, an error will be raised. -## Jira.RemoveLabelsFromIssue [Permalink for this section](https://docs.arcade.dev/toolkits/productivity/jira\#jiraremovelabelsfromissue) +## Jira.RemoveLabelsFromIssue [Permalink for this section](https://docs.arcade.dev/mcp-servers/productivity/jira\#jiraremovelabelsfromissue) See Example > @@ -18382,7 +18382,7 @@ Remove labels from an existing Jira issue. - **notify\_watchers** ( `boolean`, optional) Whether to notify the issue’s watchers. Defaults to True (notifies watchers). - **atlassian\_cloud\_id** ( `string`, optional) The ID of the Atlassian Cloud to use (defaults to None). If not provided and the user has a single cloud authorized, the tool will use that. Otherwise, an error will be raised. -## Jira.UpdateIssue [Permalink for this section](https://docs.arcade.dev/toolkits/productivity/jira\#jiraupdateissue) +## Jira.UpdateIssue [Permalink for this section](https://docs.arcade.dev/mcp-servers/productivity/jira\#jiraupdateissue) See Example > @@ -18404,7 +18404,7 @@ Update an existing Jira issue. - **notify\_watchers** ( `boolean`, optional) Whether to notify the issue’s watchers. Defaults to True (notifies watchers). - **atlassian\_cloud\_id** ( `string`, optional) The ID of the Atlassian Cloud to use (defaults to None). If not provided and the user has a single cloud authorized, the tool will use that. Otherwise, an error will be raised. -## Jira.ListSprintsForBoards [Permalink for this section](https://docs.arcade.dev/toolkits/productivity/jira\#jiralistsprintsforboards) +## Jira.ListSprintsForBoards [Permalink for this section](https://docs.arcade.dev/mcp-servers/productivity/jira\#jiralistsprintsforboards) See Example > @@ -18415,13 +18415,13 @@ Retrieve sprints from Jira boards with filtering options for planning and tracki - **board\_identifiers\_list** ( `array[string]`, optional) List of board names or numeric IDs (as strings) to retrieve sprints from. Include all mentioned boards in a single list for best performance. Maximum 25 boards per operation. Optional, defaults to None. - **max\_sprints\_per\_board** ( `integer`, optional) Maximum sprints per board (1-50). Latest sprints first. Optional, defaults to 50. - **offset** ( `integer`, optional) Number of sprints to skip per board for pagination. Optional, defaults to 0. -- **state** ( `Enum` [SprintState](https://docs.arcade.dev/toolkits/productivity/jira/reference#SprintState), optional) Filter by sprint state. NOTE: Date filters (start\_date, end\_date, specific\_date) have higher priority than state filtering. Use state filtering only when no date criteria is specified. For temporal queries like β€˜last month’ or β€˜next week’, use date parameters instead. Optional, defaults to None (all states). +- **state** ( `Enum` [SprintState](https://docs.arcade.dev/mcp-servers/productivity/jira/reference#SprintState), optional) Filter by sprint state. NOTE: Date filters (start\_date, end\_date, specific\_date) have higher priority than state filtering. Use state filtering only when no date criteria is specified. For temporal queries like β€˜last month’ or β€˜next week’, use date parameters instead. Optional, defaults to None (all states). - **start\_date** ( `string`, optional) Start date filter in YYYY-MM-DD format. Can combine with end\_date. Optional, defaults to None. - **end\_date** ( `string`, optional) End date filter in YYYY-MM-DD format. Can combine with start\_date. Optional, defaults to None. - **specific\_date** ( `string`, optional) Specific date in YYYY-MM-DD to find sprints active on that date. Cannot combine with start\_date/end\_date. Optional, defaults to None. - **atlassian\_cloud\_id** ( `string`, optional) Atlassian Cloud ID to use. Optional, defaults to None (uses single authorized cloud). -## Jira.GetSprintIssues [Permalink for this section](https://docs.arcade.dev/toolkits/productivity/jira\#jiragetsprintissues) +## Jira.GetSprintIssues [Permalink for this section](https://docs.arcade.dev/mcp-servers/productivity/jira\#jiragetsprintissues) See Example > @@ -18434,7 +18434,7 @@ Get all issues that are currently assigned to a specific sprint with pagination - **offset** ( `integer`, optional) The number of issues to skip before starting to return results. Used for pagination when the sprint has many issues. Must be 0 or greater. Defaults to 0. - **atlassian\_cloud\_id** ( `string`, optional) The ID of the Atlassian Cloud to use (defaults to None). If not provided and the user has a single cloud authorized, the tool will use that. Otherwise, an error will be raised. -## Jira.AddIssuesToSprint [Permalink for this section](https://docs.arcade.dev/toolkits/productivity/jira\#jiraaddissuestosprint) +## Jira.AddIssuesToSprint [Permalink for this section](https://docs.arcade.dev/mcp-servers/productivity/jira\#jiraaddissuestosprint) See Example > @@ -18446,7 +18446,7 @@ Add a list of issues to a sprint. - **issue\_ids** ( `array[string]`, required) List of issue IDs or keys to add to the sprint. Must not be empty and cannot exceed 50 issues. - **atlassian\_cloud\_id** ( `string`, optional) The ID of the Atlassian Cloud to use (defaults to None). If not provided and the user has a single cloud authorized, the tool will use that. Otherwise, an error will be raised. -## Jira.MoveIssuesFromSprintToBacklog [Permalink for this section](https://docs.arcade.dev/toolkits/productivity/jira\#jiramoveissuesfromsprinttobacklog) +## Jira.MoveIssuesFromSprintToBacklog [Permalink for this section](https://docs.arcade.dev/mcp-servers/productivity/jira\#jiramoveissuesfromsprinttobacklog) See Example > @@ -18458,7 +18458,7 @@ Move issues from active or future sprints back to the board’s backlog. - **issue\_identifiers** ( `array[string]`, required) List of issue IDs or keys to move from the sprint to the backlog. Maximum 50 issues per call. Issues will be moved back to the board’s backlog. - **atlassian\_cloud\_id** ( `string`, optional) The ID of the Atlassian Cloud to use (defaults to None). If not provided and the user has a single cloud authorized, the tool will use that. Otherwise, an error will be raised. -## Jira.ListLabels [Permalink for this section](https://docs.arcade.dev/toolkits/productivity/jira\#jiralistlabels) +## Jira.ListLabels [Permalink for this section](https://docs.arcade.dev/mcp-servers/productivity/jira\#jiralistlabels) See Example > @@ -18470,7 +18470,7 @@ Get the existing labels (tags) in the user’s Jira instance. - **offset** ( `integer`, optional) The number of labels to skip. Defaults to 0 (starts from the first label) - **atlassian\_cloud\_id** ( `string`, optional) The ID of the Atlassian Cloud to use (defaults to None). If not provided and the user has a single cloud authorized, the tool will use that. Otherwise, an error will be raised. -## Jira.ListUsers [Permalink for this section](https://docs.arcade.dev/toolkits/productivity/jira\#jiralistusers) +## Jira.ListUsers [Permalink for this section](https://docs.arcade.dev/mcp-servers/productivity/jira\#jiralistusers) See Example > @@ -18483,7 +18483,7 @@ Browse users in Jira. - **offset** ( `integer`, optional) The number of users to skip before starting to return users. Defaults to 0 (start from the first user). - **atlassian\_cloud\_id** ( `string`, optional) The ID of the Atlassian Cloud to use (defaults to None). If not provided and the user has a single cloud authorized, the tool will use that. Otherwise, an error will be raised. -## Jira.GetUserById [Permalink for this section](https://docs.arcade.dev/toolkits/productivity/jira\#jiragetuserbyid) +## Jira.GetUserById [Permalink for this section](https://docs.arcade.dev/mcp-servers/productivity/jira\#jiragetuserbyid) See Example > @@ -18494,7 +18494,7 @@ Get user information by their ID. - **user\_id** ( `string`, required) The the user’s ID. - **atlassian\_cloud\_id** ( `string`, optional) The ID of the Atlassian Cloud to use (defaults to None). If not provided and the user has a single cloud authorized, the tool will use that. Otherwise, an error will be raised. -## Jira.GetUsersWithoutId [Permalink for this section](https://docs.arcade.dev/toolkits/productivity/jira\#jiragetuserswithoutid) +## Jira.GetUsersWithoutId [Permalink for this section](https://docs.arcade.dev/mcp-servers/productivity/jira\#jiragetuserswithoutid) See Example > @@ -18508,7 +18508,7 @@ Get users without their account ID, searching by display name and email address. - **offset** ( `integer`, optional) The number of users to skip before starting to return users. Defaults to 0 (start from the first user). - **atlassian\_cloud\_id** ( `string`, optional) The ID of the Atlassian Cloud to use (defaults to None). If not provided and the user has a single cloud authorized, the tool will use that. Otherwise, an error will be raised. -## Jira.GetAvailableAtlassianClouds [Permalink for this section](https://docs.arcade.dev/toolkits/productivity/jira\#jiragetavailableatlassianclouds) +## Jira.GetAvailableAtlassianClouds [Permalink for this section](https://docs.arcade.dev/mcp-servers/productivity/jira\#jiragetavailableatlassianclouds) See Example > @@ -18518,7 +18518,7 @@ Get available Atlassian Clouds. This tool does not take any parameters. -## Jira.AttachFileToIssue [Permalink for this section](https://docs.arcade.dev/toolkits/productivity/jira\#jiraattachfiletoissue) +## Jira.AttachFileToIssue [Permalink for this section](https://docs.arcade.dev/mcp-servers/productivity/jira\#jiraattachfiletoissue) See Example > @@ -18534,7 +18534,7 @@ Add an attachment to an issue. - **file\_type** ( `string`, optional) The type of the file to attach. E.g. β€˜application/pdf’, β€˜text’, β€˜image/png’. If not provided, the tool will try to infer the type from the filename. If the filename is not recognized, it will attach the file without specifying a type. Defaults to None (infer from filename or attach without type). - **atlassian\_cloud\_id** ( `string`, optional) The ID of the Atlassian Cloud to use (defaults to None). If not provided and the user has a single cloud authorized, the tool will use that. Otherwise, an error will be raised. -## Jira.ListIssueAttachmentsMetadata [Permalink for this section](https://docs.arcade.dev/toolkits/productivity/jira\#jiralistissueattachmentsmetadata) +## Jira.ListIssueAttachmentsMetadata [Permalink for this section](https://docs.arcade.dev/mcp-servers/productivity/jira\#jiralistissueattachmentsmetadata) See Example > @@ -18545,7 +18545,7 @@ Get the metadata about the files attached to an issue. - **issue** ( `string`, required) The ID or key of the issue to retrieve - **atlassian\_cloud\_id** ( `string`, optional) The ID of the Atlassian Cloud to use (defaults to None). If not provided and the user has a single cloud authorized, the tool will use that. Otherwise, an error will be raised. -## Jira.GetAttachmentMetadata [Permalink for this section](https://docs.arcade.dev/toolkits/productivity/jira\#jiragetattachmentmetadata) +## Jira.GetAttachmentMetadata [Permalink for this section](https://docs.arcade.dev/mcp-servers/productivity/jira\#jiragetattachmentmetadata) See Example > @@ -18556,7 +18556,7 @@ Get the metadata of an attachment. - **attachment\_id** ( `string`, required) The ID of the attachment to retrieve - **atlassian\_cloud\_id** ( `string`, optional) The ID of the Atlassian Cloud to use (defaults to None). If not provided and the user has a single cloud authorized, the tool will use that. Otherwise, an error will be raised. -## Jira.DownloadAttachment [Permalink for this section](https://docs.arcade.dev/toolkits/productivity/jira\#jiradownloadattachment) +## Jira.DownloadAttachment [Permalink for this section](https://docs.arcade.dev/mcp-servers/productivity/jira\#jiradownloadattachment) See Example > @@ -18567,7 +18567,7 @@ Download the contents of an attachment associated with an issue. - **attachment\_id** ( `string`, required) The ID of the attachment to download - **atlassian\_cloud\_id** ( `string`, optional) The ID of the Atlassian Cloud to use (defaults to None). If not provided and the user has a single cloud authorized, the tool will use that. Otherwise, an error will be raised. -## Jira.GetTransitionById [Permalink for this section](https://docs.arcade.dev/toolkits/productivity/jira\#jiragettransitionbyid) +## Jira.GetTransitionById [Permalink for this section](https://docs.arcade.dev/mcp-servers/productivity/jira\#jiragettransitionbyid) See Example > @@ -18579,7 +18579,7 @@ Get a transition by its ID. - **transition\_id** ( `string`, required) The ID of the transition - **atlassian\_cloud\_id** ( `string`, optional) The ID of the Atlassian Cloud to use (defaults to None). If not provided and the user has a single cloud authorized, the tool will use that. Otherwise, an error will be raised. -## Jira.GetTransitionsAvailableForIssue [Permalink for this section](https://docs.arcade.dev/toolkits/productivity/jira\#jiragettransitionsavailableforissue) +## Jira.GetTransitionsAvailableForIssue [Permalink for this section](https://docs.arcade.dev/mcp-servers/productivity/jira\#jiragettransitionsavailableforissue) See Example > @@ -18590,7 +18590,7 @@ Get the transitions available for an existing Jira issue. - **issue** ( `string`, required) The ID or key of the issue - **atlassian\_cloud\_id** ( `string`, optional) The ID of the Atlassian Cloud to use (defaults to None). If not provided and the user has a single cloud authorized, the tool will use that. Otherwise, an error will be raised. -## Jira.GetTransitionByStatusName [Permalink for this section](https://docs.arcade.dev/toolkits/productivity/jira\#jiragettransitionbystatusname) +## Jira.GetTransitionByStatusName [Permalink for this section](https://docs.arcade.dev/mcp-servers/productivity/jira\#jiragettransitionbystatusname) See Example > @@ -18602,7 +18602,7 @@ Get a transition available for an issue by the transition name. - **transition** ( `string`, required) The name of the transition status - **atlassian\_cloud\_id** ( `string`, optional) The ID of the Atlassian Cloud to use (defaults to None). If not provided and the user has a single cloud authorized, the tool will use that. Otherwise, an error will be raised. -## Jira.TransitionIssueToNewStatus [Permalink for this section](https://docs.arcade.dev/toolkits/productivity/jira\#jiratransitionissuetonewstatus) +## Jira.TransitionIssueToNewStatus [Permalink for this section](https://docs.arcade.dev/mcp-servers/productivity/jira\#jiratransitionissuetonewstatus) See Example > @@ -18614,7 +18614,7 @@ Transition a Jira issue to a new status. - **transition** ( `string`, required) The transition to perform. Provide the transition ID or its name (case insensitive). - **atlassian\_cloud\_id** ( `string`, optional) The ID of the Atlassian Cloud to use (defaults to None). If not provided and the user has a single cloud authorized, the tool will use that. Otherwise, an error will be raised. -## Jira.WhoAmI [Permalink for this section](https://docs.arcade.dev/toolkits/productivity/jira\#jirawhoami) +## Jira.WhoAmI [Permalink for this section](https://docs.arcade.dev/mcp-servers/productivity/jira\#jirawhoami) See Example > @@ -18624,7 +18624,7 @@ Fetches the current user’s profile information. This tool does not take any parameters. -## Jira.ListProjects [Permalink for this section](https://docs.arcade.dev/toolkits/productivity/jira\#jiralistprojects) +## Jira.ListProjects [Permalink for this section](https://docs.arcade.dev/mcp-servers/productivity/jira\#jiralistprojects) See Example > @@ -18636,7 +18636,7 @@ Browse projects available in Jira. - **offset** ( `integer`, optional) The number of projects to skip. Defaults to 0 (starts from the first project) - **atlassian\_cloud\_id** ( `string`, optional) The ID of the Atlassian Cloud to use (defaults to None). If not provided and the user has a single cloud authorized, the tool will use that. Otherwise, an error will be raised. -## Jira.SearchProjects [Permalink for this section](https://docs.arcade.dev/toolkits/productivity/jira\#jirasearchprojects) +## Jira.SearchProjects [Permalink for this section](https://docs.arcade.dev/mcp-servers/productivity/jira\#jirasearchprojects) See Example > @@ -18649,7 +18649,7 @@ Get the details of all Jira projects. - **offset** ( `integer`, optional) The number of projects to skip. Defaults to 0 (starts from the first project) - **atlassian\_cloud\_id** ( `string`, optional) The ID of the Atlassian Cloud to use (defaults to None). If not provided and the user has a single cloud authorized, the tool will use that. Otherwise, an error will be raised. -## Jira.GetProjectById [Permalink for this section](https://docs.arcade.dev/toolkits/productivity/jira\#jiragetprojectbyid) +## Jira.GetProjectById [Permalink for this section](https://docs.arcade.dev/mcp-servers/productivity/jira\#jiragetprojectbyid) See Example > @@ -18660,7 +18660,7 @@ Get the details of a Jira project by its ID or key. - **project** ( `string`, required) The ID or key of the project to retrieve - **atlassian\_cloud\_id** ( `string`, optional) The ID of the Atlassian Cloud to use (defaults to None). If not provided and the user has a single cloud authorized, the tool will use that. Otherwise, an error will be raised. -## Jira.GetBoards [Permalink for this section](https://docs.arcade.dev/toolkits/productivity/jira\#jiragetboards) +## Jira.GetBoards [Permalink for this section](https://docs.arcade.dev/mcp-servers/productivity/jira\#jiragetboards) See Example > @@ -18673,7 +18673,7 @@ Retrieve Jira boards either by specifying their names or IDs, or get all - **offset** ( `integer`, optional) Number of boards to skip for pagination. Must be 0 or greater. Defaults to 0. - **atlassian\_cloud\_id** ( `string`, optional) Atlassian Cloud ID to use. Defaults to None (uses single authorized cloud). -## Jira.GetBoardBacklogIssues [Permalink for this section](https://docs.arcade.dev/toolkits/productivity/jira\#jiragetboardbacklogissues) +## Jira.GetBoardBacklogIssues [Permalink for this section](https://docs.arcade.dev/mcp-servers/productivity/jira\#jiragetboardbacklogissues) See Example > @@ -18686,7 +18686,7 @@ Get all issues in a board’s backlog with pagination support. - **offset** ( `integer`, optional) The number of issues to skip before starting to return results. Used for pagination when the backlog has many issues. For example, offset=50 with limit=50 would return issues 51-100. Must be 0 or greater. Defaults to 0. - **atlassian\_cloud\_id** ( `string`, optional) The ID of the Atlassian Cloud to use (defaults to None). If not provided and the user has a single cloud authorized, the tool will use that. Otherwise, an error will be raised. -## Jira.GetPriorityById [Permalink for this section](https://docs.arcade.dev/toolkits/productivity/jira\#jiragetprioritybyid) +## Jira.GetPriorityById [Permalink for this section](https://docs.arcade.dev/mcp-servers/productivity/jira\#jiragetprioritybyid) See Example > @@ -18697,7 +18697,7 @@ Get the details of a priority by its ID. - **priority\_id** ( `string`, required) The ID of the priority to retrieve. - **atlassian\_cloud\_id** ( `string`, optional) The ID of the Atlassian Cloud to use (defaults to None). If not provided and the user has a single cloud authorized, the tool will use that. Otherwise, an error will be raised. -## Jira.ListPrioritySchemes [Permalink for this section](https://docs.arcade.dev/toolkits/productivity/jira\#jiralistpriorityschemes) +## Jira.ListPrioritySchemes [Permalink for this section](https://docs.arcade.dev/mcp-servers/productivity/jira\#jiralistpriorityschemes) See Example > @@ -18708,10 +18708,10 @@ Browse the priority schemes available in Jira. - **scheme\_name** ( `string`, optional) Filter by scheme name. Defaults to None (returns all scheme names). - **limit** ( `integer`, optional) The maximum number of priority schemes to return. Min of 1, max of 50. Defaults to 50. - **offset** ( `integer`, optional) The number of priority schemes to skip. Defaults to 0 (start from the first scheme). -- **order\_by** ( `Enum` [PrioritySchemeOrderBy](https://docs.arcade.dev/toolkits/productivity/jira/reference#PrioritySchemeOrderBy), optional) The order in which to return the priority schemes. Defaults to name ascending. +- **order\_by** ( `Enum` [PrioritySchemeOrderBy](https://docs.arcade.dev/mcp-servers/productivity/jira/reference#PrioritySchemeOrderBy), optional) The order in which to return the priority schemes. Defaults to name ascending. - **atlassian\_cloud\_id** ( `string`, optional) The ID of the Atlassian Cloud to use (defaults to None). If not provided and the user has a single cloud authorized, the tool will use that. Otherwise, an error will be raised. -## Jira.ListPrioritiesAssociatedWithAPriorityScheme [Permalink for this section](https://docs.arcade.dev/toolkits/productivity/jira\#jiralistprioritiesassociatedwithapriorityscheme) +## Jira.ListPrioritiesAssociatedWithAPriorityScheme [Permalink for this section](https://docs.arcade.dev/mcp-servers/productivity/jira\#jiralistprioritiesassociatedwithapriorityscheme) See Example > @@ -18724,7 +18724,7 @@ Browse the priorities associated with a priority scheme. - **offset** ( `integer`, optional) The number of priority schemes to skip. Defaults to 0 (start from the first scheme). - **atlassian\_cloud\_id** ( `string`, optional) The ID of the Atlassian Cloud to use (defaults to None). If not provided and the user has a single cloud authorized, the tool will use that. Otherwise, an error will be raised. -## Jira.ListProjectsAssociatedWithAPriorityScheme [Permalink for this section](https://docs.arcade.dev/toolkits/productivity/jira\#jiralistprojectsassociatedwithapriorityscheme) +## Jira.ListProjectsAssociatedWithAPriorityScheme [Permalink for this section](https://docs.arcade.dev/mcp-servers/productivity/jira\#jiralistprojectsassociatedwithapriorityscheme) See Example > @@ -18738,7 +18738,7 @@ Browse the projects associated with a priority scheme. - **offset** ( `integer`, optional) The number of projects to skip. Defaults to 0 (start from the first project). - **atlassian\_cloud\_id** ( `string`, optional) The ID of the Atlassian Cloud to use (defaults to None). If not provided and the user has a single cloud authorized, the tool will use that. Otherwise, an error will be raised. -## Jira.ListPrioritiesAvailableToAProject [Permalink for this section](https://docs.arcade.dev/toolkits/productivity/jira\#jiralistprioritiesavailabletoaproject) +## Jira.ListPrioritiesAvailableToAProject [Permalink for this section](https://docs.arcade.dev/mcp-servers/productivity/jira\#jiralistprioritiesavailabletoaproject) See Example > @@ -18749,7 +18749,7 @@ Browse the priorities available to be used in issues in the specified Jira proje - **project** ( `string`, required) The ID, key or name of the project to retrieve priorities for. - **atlassian\_cloud\_id** ( `string`, optional) The ID of the Atlassian Cloud to use (defaults to None). If not provided and the user has a single cloud authorized, the tool will use that. Otherwise, an error will be raised. -## Jira.ListPrioritiesAvailableToAnIssue [Permalink for this section](https://docs.arcade.dev/toolkits/productivity/jira\#jiralistprioritiesavailabletoanissue) +## Jira.ListPrioritiesAvailableToAnIssue [Permalink for this section](https://docs.arcade.dev/mcp-servers/productivity/jira\#jiralistprioritiesavailabletoanissue) See Example > @@ -18760,7 +18760,7 @@ Browse the priorities available to be used in the specified Jira issue. - **issue** ( `string`, required) The ID or key of the issue to retrieve priorities for. - **atlassian\_cloud\_id** ( `string`, optional) The ID of the Atlassian Cloud to use (defaults to None). If not provided and the user has a single cloud authorized, the tool will use that. Otherwise, an error will be raised. -## Jira.GetCommentById [Permalink for this section](https://docs.arcade.dev/toolkits/productivity/jira\#jiragetcommentbyid) +## Jira.GetCommentById [Permalink for this section](https://docs.arcade.dev/mcp-servers/productivity/jira\#jiragetcommentbyid) See Example > @@ -18773,7 +18773,7 @@ Get a comment by its ID. - **include\_adf\_content** ( `boolean`, optional) Whether to include the ADF (Atlassian Document Format) content of the comment in the response. Defaults to False (return only the HTML rendered content). - **atlassian\_cloud\_id** ( `string`, optional) The ID of the Atlassian Cloud to use (defaults to None). If not provided and the user has a single cloud authorized, the tool will use that. Otherwise, an error will be raised. -## Jira.GetIssueComments [Permalink for this section](https://docs.arcade.dev/toolkits/productivity/jira\#jiragetissuecomments) +## Jira.GetIssueComments [Permalink for this section](https://docs.arcade.dev/mcp-servers/productivity/jira\#jiragetissuecomments) See Example > @@ -18784,11 +18784,11 @@ Get the comments of a Jira issue by its ID. - **issue** ( `string`, required) The ID or key of the issue to retrieve - **limit** ( `integer`, optional) The maximum number of comments to retrieve. Min 1, max 100, default 100. - **offset** ( `integer`, optional) The number of comments to skip. Defaults to 0 (start from the first comment). -- **order\_by** ( `Enum` [IssueCommentOrderBy](https://docs.arcade.dev/toolkits/productivity/jira/reference#IssueCommentOrderBy), optional) The order in which to return the comments. Defaults to β€˜created\_date\_descending’ (most recent first). +- **order\_by** ( `Enum` [IssueCommentOrderBy](https://docs.arcade.dev/mcp-servers/productivity/jira/reference#IssueCommentOrderBy), optional) The order in which to return the comments. Defaults to β€˜created\_date\_descending’ (most recent first). - **include\_adf\_content** ( `boolean`, optional) Whether to include the ADF (Atlassian Document Format) content of the comment in the response. Defaults to False (return only the HTML rendered content). - **atlassian\_cloud\_id** ( `string`, optional) The ID of the Atlassian Cloud to use (defaults to None). If not provided and the user has a single cloud authorized, the tool will use that. Otherwise, an error will be raised. -## Jira.AddCommentToIssue [Permalink for this section](https://docs.arcade.dev/toolkits/productivity/jira\#jiraaddcommenttoissue) +## Jira.AddCommentToIssue [Permalink for this section](https://docs.arcade.dev/mcp-servers/productivity/jira\#jiraaddcommenttoissue) See Example > @@ -18802,7 +18802,7 @@ Add a comment to a Jira issue. - **mention\_users** ( `array[string]`, optional) The users to mention in the comment. Provide the user display name, email address, or ID. Ex: β€˜John Doe’ or β€˜ [john.doe@example.com](mailto:john.doe@example.com)’. Defaults to None (no user mentions). - **atlassian\_cloud\_id** ( `string`, optional) The ID of the Atlassian Cloud to use (defaults to None). If not provided and the user has a single cloud authorized, the tool will use that. Otherwise, an error will be raised. -## Auth [Permalink for this section](https://docs.arcade.dev/toolkits/productivity/jira\#auth) +## Auth [Permalink for this section](https://docs.arcade.dev/mcp-servers/productivity/jira\#auth) The Arcade Jira toolkit uses the [Atlassian auth provider](https://docs.arcade.dev/home/auth-providers/atlassian) to connect to users’ Jira accounts. Please refer to the [Atlassian auth provider](https://docs.arcade.dev/home/auth-providers/atlassian) documentation to learn how to configure auth. @@ -18820,7 +18820,7 @@ Arcade tools can be self-hosted on your own infrastructure. Learn more about sel pip install arcade_jira\\ ```](https://docs.arcade.dev/home/hosting-overview) -[Reference](https://docs.arcade.dev/toolkits/productivity/google_sheets/reference "Reference") [Environment Variables](https://docs.arcade.dev/toolkits/productivity/jira/environment_variables "Environment Variables") +[Reference](https://docs.arcade.dev/mcp-servers/productivity/google_sheets/reference "Reference") [Environment Variables](https://docs.arcade.dev/mcp-servers/productivity/jira/environment_variables "Environment Variables") Frame @@ -18832,7 +18832,7 @@ This will be shown if an incident or maintenance is posted on your status page. [View latest updates](https://status.arcade.dev/?utm_source=embed) ## Slack Integration Toolkit -[Integrations](https://docs.arcade.dev/toolkits "Integrations") [Social & Communication](https://docs.arcade.dev/toolkits/social-communication/discord "Social & Communication") Slack +[Integrations](https://docs.arcade.dev/toolkits "Integrations") [Social & Communication](https://docs.arcade.dev/mcp-servers/social-communication/discord "Social & Communication") Slack # Slack @@ -18844,7 +18844,7 @@ This will be shown if an incident or maintenance is posted on your status page. [![PyPI Version](https://img.shields.io/pypi/v/arcade_slack)](https://pypi.org/project/arcade_slack/)[![License](https://img.shields.io/badge/License-MIT-yellow.svg)](https://github.com/arcadeai/arcade-ai/blob/main/LICENSE)[![Python Versions](https://img.shields.io/pypi/pyversions/arcade_slack)](https://pypi.org/project/arcade_slack/)[![Wheel Status](https://img.shields.io/pypi/wheel/arcade_slack)](https://pypi.org/project/arcade_slack/)[![Downloads](https://img.shields.io/pypi/dm/arcade_slack)](https://pypi.org/project/arcade_slack/) -The Slack toolkit provides a comprehensive set of tools for interacting with the Slack platform, enabling users and AI applications to efficiently manage conversations and user information. With this toolkit, you can: +The Slack MCP Server provides a comprehensive set of tools for interacting with the Slack platform, enabling users and AI applications to efficiently manage conversations and user information. With this toolkit, you can: - Retrieve detailed information about users, including their IDs, usernames, and emails. - List all users in your Slack team and get users in specific conversations. @@ -18854,7 +18854,7 @@ The Slack toolkit provides a comprehensive set of tools for interacting with the This toolkit streamlines communication and enhances collaboration within Slack. -## Available Tools [Permalink for this section](https://docs.arcade.dev/toolkits/social-communication/slack\#available-tools) +## Available Tools [Permalink for this section](https://docs.arcade.dev/mcp-servers/social-communication/slack\#available-tools) | Tool Name | Description | | --- | --- | @@ -18887,9 +18887,9 @@ This toolkit streamlines communication and enhances collaboration within Slack. 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](https://docs.arcade.dev/home/build-tools/create-a-toolkit). +own tools](https://docs.arcade.dev/home/build-tools/create-a-mcp-server). -## Slack.WhoAmI [Permalink for this section](https://docs.arcade.dev/toolkits/social-communication/slack\#slackwhoami) +## Slack.WhoAmI [Permalink for this section](https://docs.arcade.dev/mcp-servers/social-communication/slack\#slackwhoami) See Example > @@ -18899,7 +18899,7 @@ Get comprehensive user profile information. This tool takes no parameters. -## Slack.GetUsersInfo [Permalink for this section](https://docs.arcade.dev/toolkits/social-communication/slack\#slackgetusersinfo) +## Slack.GetUsersInfo [Permalink for this section](https://docs.arcade.dev/mcp-servers/social-communication/slack\#slackgetusersinfo) See Example > @@ -18911,7 +18911,7 @@ Get the information of one or more users in Slack by ID, username, and/or email. - **usernames** ( `array[string]`, optional) The usernames of the users to get. Prefer retrieving by user\_ids and/or emails, when available, since the performance is better. - **emails** ( `array[string]`, optional) The emails of the users to get -## Slack.ListUsers [Permalink for this section](https://docs.arcade.dev/toolkits/social-communication/slack\#slacklistusers) +## Slack.ListUsers [Permalink for this section](https://docs.arcade.dev/mcp-servers/social-communication/slack\#slacklistusers) See Example > @@ -18923,7 +18923,7 @@ List all users in the authenticated user’s Slack team. - **limit** ( `integer`, optional) The maximum number of users to return. Defaults to 200. Maximum is 500. - **next\_cursor** ( `string`, optional) The next cursor token to use for pagination. -## Slack.SendMessage [Permalink for this section](https://docs.arcade.dev/toolkits/social-communication/slack\#slacksendmessage) +## Slack.SendMessage [Permalink for this section](https://docs.arcade.dev/mcp-servers/social-communication/slack\#slacksendmessage) See Example > @@ -18949,7 +18949,7 @@ To improve performance, prefer providing a conversation\_id over a channel\_name - **emails** ( `array[string]`, optional) The emails of the people to message. - **usernames** ( `array[string]`, optional) The Slack usernames of the people to message. Prefer providing user\_ids and/or emails, when available, since the performance is better. -## Slack.GetUsersInConversation [Permalink for this section](https://docs.arcade.dev/toolkits/social-communication/slack\#slackgetusersinconversation) +## Slack.GetUsersInConversation [Permalink for this section](https://docs.arcade.dev/mcp-servers/social-communication/slack\#slackgetusersinconversation) See Example > @@ -18964,7 +18964,7 @@ Provide exactly one of conversation\_id or channel\_name. Prefer providing a con - **limit** ( `integer`, optional) The maximum number of users to return. Defaults to 200. Maximum is 500. - **next\_cursor** ( `string`, optional) The cursor to use for pagination. -## Slack.GetMessages [Permalink for this section](https://docs.arcade.dev/toolkits/social-communication/slack\#slackgetmessages) +## Slack.GetMessages [Permalink for this section](https://docs.arcade.dev/mcp-servers/social-communication/slack\#slackgetmessages) See Example > @@ -19009,7 +19009,7 @@ Do not provide both β€˜oldest\_datetime’ and β€˜oldest\_relative’ or both Leave all arguments with the default None to get messages without date/time filtering -## Slack.GetConversationMetadata [Permalink for this section](https://docs.arcade.dev/toolkits/social-communication/slack\#slackgetconversationmetadata) +## Slack.GetConversationMetadata [Permalink for this section](https://docs.arcade.dev/mcp-servers/social-communication/slack\#slackgetconversationmetadata) See Example > @@ -19031,7 +19031,7 @@ To improve performance, prefer providing a conversation\_id over a channel\_name - **emails** ( `array[string]`, optional) The emails of the users to get the conversation metadata. - **user\_ids** ( `array[string]`, optional) The IDs of the users to get the conversation metadata. -## Slack.ListConversations [Permalink for this section](https://docs.arcade.dev/toolkits/social-communication/slack\#slacklistconversations) +## Slack.ListConversations [Permalink for this section](https://docs.arcade.dev/mcp-servers/social-communication/slack\#slacklistconversations) See Example > @@ -19039,13 +19039,13 @@ List metadata for Slack conversations (channels, DMs, MPIMs) the user is a membe **Parameters** -- **conversation\_types** ( `Enum` [ConversationType](https://docs.arcade.dev/toolkits/social-communication/slack/reference#ConversationType), optional) Optionally filter by the type(s) of conversations. Defaults to None (all types). +- **conversation\_types** ( `Enum` [ConversationType](https://docs.arcade.dev/mcp-servers/social-communication/slack/reference#ConversationType), optional) Optionally filter by the type(s) of conversations. Defaults to None (all types). - **limit** ( `integer`, optional) The maximum number of conversations to list. Defaults to 200. Maximum is 500. - **next\_cursor** ( `string`, optional) The cursor to use for pagination. -## Slack.GetUserInfoById [Permalink for this section](https://docs.arcade.dev/toolkits/social-communication/slack\#slackgetuserinfobyid) +## Slack.GetUserInfoById [Permalink for this section](https://docs.arcade.dev/mcp-servers/social-communication/slack\#slackgetuserinfobyid) -This tool is marked for deprecation and will be removed in a future release. Please use [Slack.GetUsersInfo](https://docs.arcade.dev/toolkits/social-communication/slack#slackgetusersinfo) instead. +This tool is marked for deprecation and will be removed in a future release. Please use [Slack.GetUsersInfo](https://docs.arcade.dev/mcp-servers/social-communication/slack#slackgetusersinfo) instead. See Example > @@ -19055,9 +19055,9 @@ Get the information of a user in Slack. - **user\_id** ( `string`, required) The ID of the user to get -## Slack.SendDmToUser [Permalink for this section](https://docs.arcade.dev/toolkits/social-communication/slack\#slacksenddmtouser) +## Slack.SendDmToUser [Permalink for this section](https://docs.arcade.dev/mcp-servers/social-communication/slack\#slacksenddmtouser) -This tool is marked for deprecation and will be removed in a future release. Please use [Slack.SendMessage](https://docs.arcade.dev/toolkits/social-communication/slack#slacksendmessage) instead. +This tool is marked for deprecation and will be removed in a future release. Please use [Slack.SendMessage](https://docs.arcade.dev/mcp-servers/social-communication/slack#slacksendmessage) instead. See Example > @@ -19068,9 +19068,9 @@ Send a direct message to a user in Slack. - **user\_name** ( `string`, required) The Slack username of the person you want to message. Slack usernames are ALWAYS lowercase. - **message** ( `string`, required) The message you want to send -## Slack.SendMessageToChannel [Permalink for this section](https://docs.arcade.dev/toolkits/social-communication/slack\#slacksendmessagetochannel) +## Slack.SendMessageToChannel [Permalink for this section](https://docs.arcade.dev/mcp-servers/social-communication/slack\#slacksendmessagetochannel) -This tool is marked for deprecation and will be removed in a future release. Please use [Slack.SendMessage](https://docs.arcade.dev/toolkits/social-communication/slack#slacksendmessage) instead. +This tool is marked for deprecation and will be removed in a future release. Please use [Slack.SendMessage](https://docs.arcade.dev/mcp-servers/social-communication/slack#slacksendmessage) instead. See Example > @@ -19081,9 +19081,9 @@ Send a message to a channel in Slack. - **channel\_name** ( `string`, required) The Slack channel name where you want to send the message. - **message** ( `string`, required) The message you want to send -## Slack.GetMembersInConversationById [Permalink for this section](https://docs.arcade.dev/toolkits/social-communication/slack\#slackgetmembersinconversationbyid) +## Slack.GetMembersInConversationById [Permalink for this section](https://docs.arcade.dev/mcp-servers/social-communication/slack\#slackgetmembersinconversationbyid) -This tool is marked for deprecation and will be removed in a future release. Please use [Slack.GetUsersInConversation](https://docs.arcade.dev/toolkits/social-communication/slack#slackgetusersinconversation) instead. +This tool is marked for deprecation and will be removed in a future release. Please use [Slack.GetUsersInConversation](https://docs.arcade.dev/mcp-servers/social-communication/slack#slackgetusersinconversation) instead. See Example > @@ -19095,9 +19095,9 @@ Get the members of a conversation in Slack by the conversation’s ID. - **limit** ( `integer`, optional) The maximum number of members to return. - **next\_cursor** ( `string`, optional) The cursor to use for pagination. -## Slack.GetMembersInChannelByName [Permalink for this section](https://docs.arcade.dev/toolkits/social-communication/slack\#slackgetmembersinchannelbyname) +## Slack.GetMembersInChannelByName [Permalink for this section](https://docs.arcade.dev/mcp-servers/social-communication/slack\#slackgetmembersinchannelbyname) -This tool is marked for deprecation and will be removed in a future release. Please use [Slack.GetUsersInConversation](https://docs.arcade.dev/toolkits/social-communication/slack#slackgetusersinconversation) instead. +This tool is marked for deprecation and will be removed in a future release. Please use [Slack.GetUsersInConversation](https://docs.arcade.dev/mcp-servers/social-communication/slack#slackgetusersinconversation) instead. See Example > @@ -19109,9 +19109,9 @@ Get the members of a conversation in Slack by the conversation’s name. - **limit** ( `integer`, optional) The maximum number of members to return. - **next\_cursor** ( `string`, optional) The cursor to use for pagination. -## Slack.GetMessagesInChannelByName [Permalink for this section](https://docs.arcade.dev/toolkits/social-communication/slack\#slackgetmessagesinchannelbyname) +## Slack.GetMessagesInChannelByName [Permalink for this section](https://docs.arcade.dev/mcp-servers/social-communication/slack\#slackgetmessagesinchannelbyname) -This tool is marked for deprecation and will be removed in a future release. Please use [Slack.GetMessages](https://docs.arcade.dev/toolkits/social-communication/slack#slackgetmessages) instead. +This tool is marked for deprecation and will be removed in a future release. Please use [Slack.GetMessages](https://docs.arcade.dev/mcp-servers/social-communication/slack#slackgetmessages) instead. See Example > @@ -19127,9 +19127,9 @@ Get the messages in a channel by the channel’s name. - **limit** ( `integer`, optional) The maximum number of messages to return. - **next\_cursor** ( `string`, optional) The cursor to use for pagination. -## Slack.GetMessagesInConversationById [Permalink for this section](https://docs.arcade.dev/toolkits/social-communication/slack\#slackgetmessagesinconversationbyid) +## Slack.GetMessagesInConversationById [Permalink for this section](https://docs.arcade.dev/mcp-servers/social-communication/slack\#slackgetmessagesinconversationbyid) -This tool is marked for deprecation and will be removed in a future release. Please use [Slack.GetMessages](https://docs.arcade.dev/toolkits/social-communication/slack#slackgetmessages) instead. +This tool is marked for deprecation and will be removed in a future release. Please use [Slack.GetMessages](https://docs.arcade.dev/mcp-servers/social-communication/slack#slackgetmessages) instead. See Example > @@ -19145,9 +19145,9 @@ Get the messages in a conversation by the conversation’s ID. - **limit** ( `integer`, optional) The maximum number of messages to return. - **next\_cursor** ( `string`, optional) The cursor to use for pagination. -## Slack.GetMessagesInDirectMessageConversationByUsername [Permalink for this section](https://docs.arcade.dev/toolkits/social-communication/slack\#slackgetmessagesindirectmessageconversationbyusername) +## Slack.GetMessagesInDirectMessageConversationByUsername [Permalink for this section](https://docs.arcade.dev/mcp-servers/social-communication/slack\#slackgetmessagesindirectmessageconversationbyusername) -This tool is marked for deprecation and will be removed in a future release. Please use [Slack.GetMessages](https://docs.arcade.dev/toolkits/social-communication/slack#slackgetmessages) instead. +This tool is marked for deprecation and will be removed in a future release. Please use [Slack.GetMessages](https://docs.arcade.dev/mcp-servers/social-communication/slack#slackgetmessages) instead. See Example > @@ -19163,9 +19163,9 @@ Get the messages in a direct conversation by the user’s name. - **limit** ( `integer`, optional) The maximum number of messages to return. - **next\_cursor** ( `string`, optional) The cursor to use for pagination. -## Slack.GetMessagesInMultiPersonDmConversationByUsernames [Permalink for this section](https://docs.arcade.dev/toolkits/social-communication/slack\#slackgetmessagesinmultipersondmconversationbyusernames) +## Slack.GetMessagesInMultiPersonDmConversationByUsernames [Permalink for this section](https://docs.arcade.dev/mcp-servers/social-communication/slack\#slackgetmessagesinmultipersondmconversationbyusernames) -This tool is marked for deprecation and will be removed in a future release. Please use [Slack.GetMessages](https://docs.arcade.dev/toolkits/social-communication/slack#slackgetmessages) instead. +This tool is marked for deprecation and will be removed in a future release. Please use [Slack.GetMessages](https://docs.arcade.dev/mcp-servers/social-communication/slack#slackgetmessages) instead. See Example > @@ -19181,9 +19181,9 @@ Get the messages in a multi-person direct message conversation by the usernames. - **limit** ( `integer`, optional) The maximum number of messages to return. - **next\_cursor** ( `string`, optional) The cursor to use for pagination. -## Slack.ListConversationsMetadata [Permalink for this section](https://docs.arcade.dev/toolkits/social-communication/slack\#slacklistconversationsmetadata) +## Slack.ListConversationsMetadata [Permalink for this section](https://docs.arcade.dev/mcp-servers/social-communication/slack\#slacklistconversationsmetadata) -This tool is marked for deprecation and will be removed in a future release. Please use [Slack.ListConversations](https://docs.arcade.dev/toolkits/social-communication/slack#slacklistconversations) instead. +This tool is marked for deprecation and will be removed in a future release. Please use [Slack.ListConversations](https://docs.arcade.dev/mcp-servers/social-communication/slack#slacklistconversations) instead. See Example > @@ -19191,13 +19191,13 @@ List Slack conversations (channels, DMs, MPIMs) the user is a member of. **Parameters** -- **conversation\_types** ( `Enum` [ConversationType](https://docs.arcade.dev/toolkits/social-communication/slack/reference#ConversationType), optional) Optionally filter by the type(s) of conversations. Defaults to None (all types). +- **conversation\_types** ( `Enum` [ConversationType](https://docs.arcade.dev/mcp-servers/social-communication/slack/reference#ConversationType), optional) Optionally filter by the type(s) of conversations. Defaults to None (all types). - **limit** ( `integer`, optional) The maximum number of conversations to list. - **next\_cursor** ( `string`, optional) The cursor to use for pagination. -## Slack.ListPublicChannelsMetadata [Permalink for this section](https://docs.arcade.dev/toolkits/social-communication/slack\#slacklistpublicchannelsmetadata) +## Slack.ListPublicChannelsMetadata [Permalink for this section](https://docs.arcade.dev/mcp-servers/social-communication/slack\#slacklistpublicchannelsmetadata) -This tool is marked for deprecation and will be removed in a future release. Please use [Slack.ListConversations](https://docs.arcade.dev/toolkits/social-communication/slack#slacklistconversations) instead. +This tool is marked for deprecation and will be removed in a future release. Please use [Slack.ListConversations](https://docs.arcade.dev/mcp-servers/social-communication/slack#slacklistconversations) instead. See Example > @@ -19207,9 +19207,9 @@ List metadata for public channels in Slack that the user is a member of. - **limit** ( `integer`, optional) The maximum number of channels to list. -## Slack.ListPrivateChannelsMetadata [Permalink for this section](https://docs.arcade.dev/toolkits/social-communication/slack\#slacklistprivatechannelsmetadata) +## Slack.ListPrivateChannelsMetadata [Permalink for this section](https://docs.arcade.dev/mcp-servers/social-communication/slack\#slacklistprivatechannelsmetadata) -This tool is marked for deprecation and will be removed in a future release. Please use [Slack.ListConversations](https://docs.arcade.dev/toolkits/social-communication/slack#slacklistconversations) instead. +This tool is marked for deprecation and will be removed in a future release. Please use [Slack.ListConversations](https://docs.arcade.dev/mcp-servers/social-communication/slack#slacklistconversations) instead. See Example > @@ -19219,9 +19219,9 @@ List metadata for private channels in Slack that the user is a member of. - **limit** ( `integer`, optional) The maximum number of channels to list. -## Slack.ListGroupDirectMessageConversationsMetadata [Permalink for this section](https://docs.arcade.dev/toolkits/social-communication/slack\#slacklistgroupdirectmessageconversationsmetadata) +## Slack.ListGroupDirectMessageConversationsMetadata [Permalink for this section](https://docs.arcade.dev/mcp-servers/social-communication/slack\#slacklistgroupdirectmessageconversationsmetadata) -This tool is marked for deprecation and will be removed in a future release. Please use [Slack.ListConversations](https://docs.arcade.dev/toolkits/social-communication/slack#slacklistconversations) instead. +This tool is marked for deprecation and will be removed in a future release. Please use [Slack.ListConversations](https://docs.arcade.dev/mcp-servers/social-communication/slack#slacklistconversations) instead. See Example > @@ -19231,9 +19231,9 @@ List metadata for group direct message conversations that the user is a member o - **limit** ( `integer`, optional) The maximum number of conversations to list. -## Slack.ListDirectMessageConversationsMetadata [Permalink for this section](https://docs.arcade.dev/toolkits/social-communication/slack\#slacklistdirectmessageconversationsmetadata) +## Slack.ListDirectMessageConversationsMetadata [Permalink for this section](https://docs.arcade.dev/mcp-servers/social-communication/slack\#slacklistdirectmessageconversationsmetadata) -This tool is marked for deprecation and will be removed in a future release. Please use [Slack.ListConversations](https://docs.arcade.dev/toolkits/social-communication/slack#slacklistconversations) instead. +This tool is marked for deprecation and will be removed in a future release. Please use [Slack.ListConversations](https://docs.arcade.dev/mcp-servers/social-communication/slack#slacklistconversations) instead. See Example > @@ -19243,9 +19243,9 @@ List metadata for direct message conversations in Slack that the user is a membe - **limit** ( `integer`, optional) The maximum number of conversations to list. -## Slack.GetConversationMetadataById [Permalink for this section](https://docs.arcade.dev/toolkits/social-communication/slack\#slackgetconversationmetadatabyid) +## Slack.GetConversationMetadataById [Permalink for this section](https://docs.arcade.dev/mcp-servers/social-communication/slack\#slackgetconversationmetadatabyid) -This tool is marked for deprecation and will be removed in a future release. Please use [Slack.GetConversationMetadata](https://docs.arcade.dev/toolkits/social-communication/slack#slackgetconversationmetadata) instead. +This tool is marked for deprecation and will be removed in a future release. Please use [Slack.GetConversationMetadata](https://docs.arcade.dev/mcp-servers/social-communication/slack#slackgetconversationmetadata) instead. See Example > @@ -19255,9 +19255,9 @@ Get the metadata of a conversation in Slack searching by its ID. - **conversation\_id** ( `string`, required) The ID of the conversation to get metadata for -## Slack.GetChannelMetadataByName [Permalink for this section](https://docs.arcade.dev/toolkits/social-communication/slack\#slackgetchannelmetadatabyname) +## Slack.GetChannelMetadataByName [Permalink for this section](https://docs.arcade.dev/mcp-servers/social-communication/slack\#slackgetchannelmetadatabyname) -This tool is marked for deprecation and will be removed in a future release. Please use [Slack.GetConversationMetadata](https://docs.arcade.dev/toolkits/social-communication/slack#slackgetconversationmetadata) instead. +This tool is marked for deprecation and will be removed in a future release. Please use [Slack.GetConversationMetadata](https://docs.arcade.dev/mcp-servers/social-communication/slack#slackgetconversationmetadata) instead. See Example > @@ -19268,9 +19268,9 @@ Get the metadata of a channel in Slack searching by its name. - **channel\_name** ( `string`, required) The name of the channel to get metadata for - **next\_cursor** ( `string`, optional) The cursor to use for pagination, if continuing from a previous search. -## Slack.GetDirectMessageConversationMetadataByUsername [Permalink for this section](https://docs.arcade.dev/toolkits/social-communication/slack\#slackgetdirectmessageconversationmetadatabyusername) +## Slack.GetDirectMessageConversationMetadataByUsername [Permalink for this section](https://docs.arcade.dev/mcp-servers/social-communication/slack\#slackgetdirectmessageconversationmetadatabyusername) -This tool is marked for deprecation and will be removed in a future release. Please use [Slack.GetConversationMetadata](https://docs.arcade.dev/toolkits/social-communication/slack#slackgetconversationmetadata) instead. +This tool is marked for deprecation and will be removed in a future release. Please use [Slack.GetConversationMetadata](https://docs.arcade.dev/mcp-servers/social-communication/slack#slackgetconversationmetadata) instead. See Example > @@ -19281,9 +19281,9 @@ Get the metadata of a direct message conversation in Slack by the username. - **username** ( `string`, required) The username of the user/person to get messages with - **next\_cursor** ( `string`, optional) The cursor to use for pagination, if continuing from a previous search. -## Slack.GetMultiPersonDmConversationMetadataByUsernames [Permalink for this section](https://docs.arcade.dev/toolkits/social-communication/slack\#slackgetmultipersondmconversationmetadatabyusernames) +## Slack.GetMultiPersonDmConversationMetadataByUsernames [Permalink for this section](https://docs.arcade.dev/mcp-servers/social-communication/slack\#slackgetmultipersondmconversationmetadatabyusernames) -This tool is marked for deprecation and will be removed in a future release. Please use [Slack.GetConversationMetadata](https://docs.arcade.dev/toolkits/social-communication/slack#slackgetconversationmetadata) instead. +This tool is marked for deprecation and will be removed in a future release. Please use [Slack.GetConversationMetadata](https://docs.arcade.dev/mcp-servers/social-communication/slack#slackgetconversationmetadata) instead. See Example > @@ -19294,7 +19294,7 @@ Get the metadata of a multi-person direct message conversation in Slack by the u - **usernames** ( `array[string]`, required) The usernames of the users/people to get messages with - **next\_cursor** ( `string`, optional) The cursor to use for pagination, if continuing from a previous search. -## Auth [Permalink for this section](https://docs.arcade.dev/toolkits/social-communication/slack\#auth) +## Auth [Permalink for this section](https://docs.arcade.dev/mcp-servers/social-communication/slack\#auth) The Arcade Slack toolkit uses the [Slack auth provider](https://docs.arcade.dev/home/auth-providers/slack) to connect to users’ Slack accounts. Please refer to the [Slack auth provider](https://docs.arcade.dev/home/auth-providers/slack) documentation to learn how to configure auth. @@ -19312,7 +19312,7 @@ Arcade tools can be self-hosted on your own infrastructure. Learn more about sel pip install arcade_slack\\ ```](https://docs.arcade.dev/home/hosting-overview) -[LinkedIn](https://docs.arcade.dev/toolkits/social-communication/linkedin "LinkedIn") [Environment Variables](https://docs.arcade.dev/toolkits/social-communication/slack/environment_variables "Environment Variables") +[LinkedIn](https://docs.arcade.dev/mcp-servers/social-communication/linkedin "LinkedIn") [Environment Variables](https://docs.arcade.dev/mcp-servers/social-communication/slack/environment_variables "Environment Variables") Frame @@ -19336,12 +19336,12 @@ This will be shown if an incident or maintenance is posted on your status page. [![PyPI Version](https://img.shields.io/pypi/v/arcade_e2b)](https://pypi.org/project/arcade_e2b/)[![License](https://img.shields.io/badge/License-MIT-yellow.svg)](https://github.com/arcadeai/arcade-ai/blob/main/LICENSE)[![Python Versions](https://img.shields.io/pypi/pyversions/arcade_e2b)](https://pypi.org/project/arcade_e2b/)[![Wheel Status](https://img.shields.io/pypi/wheel/arcade_e2b)](https://pypi.org/project/arcade_e2b/)[![Downloads](https://img.shields.io/pypi/dm/arcade_e2b)](https://pypi.org/project/arcade_e2b/) -The Arcade E2B toolkit provides a pre-built set of tools for running code in a sandboxed environment. These tools make it easy to build agents and AI apps that can: +The Arcade E2B MCP Server provides a pre-built set of tools for running code in a sandboxed environment. These tools make it easy to build agents and AI apps that can: - Run code in a sandboxed environment - Create a static matplotlib chart -## Available Tools [Permalink for this section](https://docs.arcade.dev/toolkits/development/e2b\#available-tools) +## Available Tools [Permalink for this section](https://docs.arcade.dev/mcp-servers/development/e2b\#available-tools) These tools are currently available in the Arcade E2B toolkit. @@ -19352,9 +19352,9 @@ These tools are currently available in the Arcade E2B toolkit. 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](https://docs.arcade.dev/home/build-tools/create-a-toolkit). +own tools](https://docs.arcade.dev/home/build-tools/create-a-mcp-server). -## E2b.RunCode [Permalink for this section](https://docs.arcade.dev/toolkits/development/e2b\#e2bruncode) +## E2b.RunCode [Permalink for this section](https://docs.arcade.dev/mcp-servers/development/e2b\#e2bruncode) See Example > @@ -19372,7 +19372,7 @@ Run code in a sandbox and return the output. * * * -## E2b.CreateStaticMatplotlibChart [Permalink for this section](https://docs.arcade.dev/toolkits/development/e2b\#e2bcreatestaticmatplotlibchart) +## E2b.CreateStaticMatplotlibChart [Permalink for this section](https://docs.arcade.dev/mcp-servers/development/e2b\#e2bcreatestaticmatplotlibchart) See Example > @@ -19387,7 +19387,7 @@ Run the provided Python code to generate a static matplotlib chart. The resultin - **`code`** _(string, required)_ The Python code to run. -## Auth [Permalink for this section](https://docs.arcade.dev/toolkits/development/e2b\#auth) +## Auth [Permalink for this section](https://docs.arcade.dev/mcp-servers/development/e2b\#auth) The Arcade E2B toolkit uses [E2B](https://e2b.dev/) to run code in a sandboxed environment. @@ -19409,7 +19409,7 @@ Arcade tools can be self-hosted on your own infrastructure. Learn more about sel pip install arcade-e2b\\ ```](https://docs.arcade.dev/home/hosting-overview) -[Twitch](https://docs.arcade.dev/toolkits/entertainment/twitch "Twitch") [GitHub](https://docs.arcade.dev/toolkits/development/github/github "GitHub") +[Twitch](https://docs.arcade.dev/mcp-servers/entertainment/twitch "Twitch") [GitHub](https://docs.arcade.dev/mcp-servers/development/github/github "GitHub") Frame @@ -19421,7 +19421,7 @@ This will be shown if an incident or maintenance is posted on your status page. [View latest updates](https://status.arcade.dev/?utm_source=embed) ## Reddit Toolkit -[Integrations](https://docs.arcade.dev/toolkits "Integrations") [Social & Communication](https://docs.arcade.dev/toolkits/social-communication/discord "Social & Communication") Reddit +[Integrations](https://docs.arcade.dev/toolkits "Integrations") [Social & Communication](https://docs.arcade.dev/mcp-servers/social-communication/discord "Social & Communication") Reddit # Reddit @@ -19433,7 +19433,7 @@ This will be shown if an incident or maintenance is posted on your status page. [![PyPI Version](https://img.shields.io/pypi/v/arcade_reddit)](https://pypi.org/project/arcade_reddit/)[![License](https://img.shields.io/badge/License-MIT-yellow.svg)](https://github.com/arcadeai/arcade-ai/blob/main/LICENSE)[![Python Versions](https://img.shields.io/pypi/pyversions/arcade_reddit)](https://pypi.org/project/arcade_reddit/)[![Wheel Status](https://img.shields.io/pypi/wheel/arcade_reddit)](https://pypi.org/project/arcade_reddit/)[![Downloads](https://img.shields.io/pypi/dm/arcade_reddit)](https://pypi.org/project/arcade_reddit/) -The Arcade Reddit toolkit provides a pre-built set of tools for interacting with Reddit. These tools make it easy to build agents and AI apps that can: +The Arcade Reddit MCP Server provides a pre-built set of tools for interacting with Reddit. These tools make it easy to build agents and AI apps that can: - Submit text posts - Comment on posts @@ -19446,7 +19446,7 @@ The Arcade Reddit toolkit provides a pre-built set of tools for interacting with - Get the authenticated user’s username - Get posts by the authenticated user -## Available Tools [Permalink for this section](https://docs.arcade.dev/toolkits/social-communication/reddit\#available-tools) +## Available Tools [Permalink for this section](https://docs.arcade.dev/mcp-servers/social-communication/reddit\#available-tools) These tools are currently available in the Arcade Reddit toolkit. @@ -19466,10 +19466,10 @@ These tools are currently available in the Arcade Reddit toolkit. 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](https://docs.arcade.dev/home/build-tools/create-a-toolkit) with the [Reddit auth\\ +own tools](https://docs.arcade.dev/home/build-tools/create-a-mcp-server) with the [Reddit auth\\ provider](https://docs.arcade.dev/home/auth-providers/reddit#using-reddit-auth-in-custom-tools). -## Reddit.SubmitTextPost [Permalink for this section](https://docs.arcade.dev/toolkits/social-communication/reddit\#redditsubmittextpost) +## Reddit.SubmitTextPost [Permalink for this section](https://docs.arcade.dev/mcp-servers/social-communication/reddit\#redditsubmittextpost) See Example > @@ -19486,7 +19486,7 @@ Submit a text-based post to a subreddit * * * -## Reddit.CommentOnPost [Permalink for this section](https://docs.arcade.dev/toolkits/social-communication/reddit\#redditcommentonpost) +## Reddit.CommentOnPost [Permalink for this section](https://docs.arcade.dev/mcp-servers/social-communication/reddit\#redditcommentonpost) See Example > @@ -19499,7 +19499,7 @@ Comment on a Reddit post. * * * -## Reddit.ReplyToComment [Permalink for this section](https://docs.arcade.dev/toolkits/social-communication/reddit\#redditreplytocomment) +## Reddit.ReplyToComment [Permalink for this section](https://docs.arcade.dev/mcp-servers/social-communication/reddit\#redditreplytocomment) See Example > @@ -19512,7 +19512,7 @@ Reply to a Reddit comment * * * -## Reddit.GetPostsInSubreddit [Permalink for this section](https://docs.arcade.dev/toolkits/social-communication/reddit\#redditgetpostsinsubreddit) +## Reddit.GetPostsInSubreddit [Permalink for this section](https://docs.arcade.dev/mcp-servers/social-communication/reddit\#redditgetpostsinsubreddit) See Example > @@ -19523,14 +19523,14 @@ The time\_range is required if the listing type is β€˜top’ or β€˜controversial **Parameters** - **`subreddit`** _(string, required)_ The name of the subreddit to fetch posts from. -- **`listing`** _(enum ( [SubredditListingType](https://docs.arcade.dev/toolkits/social-communication/reddit#subredditlistingtype)), optional)_ The type of listing to fetch. For simple listings such as β€˜hot’, β€˜new’, or β€˜rising’, the time\_range parameter is ignored. For time-based listings such as β€˜top’ or β€˜controversial’, the β€˜time\_range’ parameter is required. Default is β€˜hot’. +- **`listing`** _(enum ( [SubredditListingType](https://docs.arcade.dev/mcp-servers/social-communication/reddit#subredditlistingtype)), optional)_ The type of listing to fetch. For simple listings such as β€˜hot’, β€˜new’, or β€˜rising’, the time\_range parameter is ignored. For time-based listings such as β€˜top’ or β€˜controversial’, the β€˜time\_range’ parameter is required. Default is β€˜hot’. - **`limit`** _(integer, optional)_ The maximum number of posts to fetch. Default is 10, max is 100. - **`cursor`** _(str, optional)_ The pagination token from a previous call. -- **`time_range`** _(enum ( [RedditTimeFilter](https://docs.arcade.dev/toolkits/social-communication/reddit#reddittimefilter)), optional)_ The time range for filtering posts. Must be provided if the listing type is β€˜top’ or β€˜controversial’. Otherwise, it is ignored. Defaults to β€˜today’. +- **`time_range`** _(enum ( [RedditTimeFilter](https://docs.arcade.dev/mcp-servers/social-communication/reddit#reddittimefilter)), optional)_ The time range for filtering posts. Must be provided if the listing type is β€˜top’ or β€˜controversial’. Otherwise, it is ignored. Defaults to β€˜today’. * * * -## Reddit.GetContentOfPost [Permalink for this section](https://docs.arcade.dev/toolkits/social-communication/reddit\#redditgetcontentofpost) +## Reddit.GetContentOfPost [Permalink for this section](https://docs.arcade.dev/mcp-servers/social-communication/reddit\#redditgetcontentofpost) See Example > @@ -19542,7 +19542,7 @@ Get the content (body) of a Reddit post by its identifier. * * * -## Reddit.GetContentOfMultiplePosts [Permalink for this section](https://docs.arcade.dev/toolkits/social-communication/reddit\#redditgetcontentofmultipleposts) +## Reddit.GetContentOfMultiplePosts [Permalink for this section](https://docs.arcade.dev/mcp-servers/social-communication/reddit\#redditgetcontentofmultipleposts) See Example > @@ -19554,7 +19554,7 @@ Get the content (body) of multiple Reddit posts by their identifiers in a single * * * -## Reddit.GetTopLevelCommentsOfPost [Permalink for this section](https://docs.arcade.dev/toolkits/social-communication/reddit\#redditgettoplevelcommentsofpost) +## Reddit.GetTopLevelCommentsOfPost [Permalink for this section](https://docs.arcade.dev/mcp-servers/social-communication/reddit\#redditgettoplevelcommentsofpost) See Example > @@ -19566,7 +19566,7 @@ Get the first page of top-level comments of a Reddit post. * * * -## Reddit.CheckSubredditAccess [Permalink for this section](https://docs.arcade.dev/toolkits/social-communication/reddit\#redditchecksubredditaccess) +## Reddit.CheckSubredditAccess [Permalink for this section](https://docs.arcade.dev/mcp-servers/social-communication/reddit\#redditchecksubredditaccess) See Example > @@ -19578,7 +19578,7 @@ Checks whether the specified subreddit exists and also if it is accessible to th * * * -## Reddit.GetSubredditRules [Permalink for this section](https://docs.arcade.dev/toolkits/social-communication/reddit\#redditgetsubredditrules) +## Reddit.GetSubredditRules [Permalink for this section](https://docs.arcade.dev/mcp-servers/social-communication/reddit\#redditgetsubredditrules) See Example > @@ -19590,7 +19590,7 @@ Gets the rules of the specified subreddit * * * -## Reddit.GetMyUsername [Permalink for this section](https://docs.arcade.dev/toolkits/social-communication/reddit\#redditgetmyusername) +## Reddit.GetMyUsername [Permalink for this section](https://docs.arcade.dev/mcp-servers/social-communication/reddit\#redditgetmyusername) See Example > @@ -19598,7 +19598,7 @@ Gets the username of the authenticated user. * * * -## Reddit.GetMyPosts [Permalink for this section](https://docs.arcade.dev/toolkits/social-communication/reddit\#redditgetmyposts) +## Reddit.GetMyPosts [Permalink for this section](https://docs.arcade.dev/mcp-servers/social-communication/reddit\#redditgetmyposts) See Example > @@ -19610,7 +19610,7 @@ Get posts that were created by the authenticated user sorted by newest first - **`include_body`** _(boolean, optional)_ Whether to include the body of the posts in the response. Default is `True`. - **`cursor`** _(str, optional)_ The pagination token from a previous call. -## Auth [Permalink for this section](https://docs.arcade.dev/toolkits/social-communication/reddit\#auth) +## Auth [Permalink for this section](https://docs.arcade.dev/mcp-servers/social-communication/reddit\#auth) The Arcade Reddit toolkit uses the [Reddit auth provider](https://docs.arcade.dev/home/auth-providers/reddit) to connect to users’ Reddit accounts. @@ -19618,9 +19618,9 @@ With the Arcade Cloud Platform, there’s nothing to configure. Your users will With a self-hosted installation of Arcade, you need to [configure the Reddit auth provider](https://docs.arcade.dev/home/auth-providers/reddit#configuring-reddit-auth) with your own Reddit app credentials. -## Reference [Permalink for this section](https://docs.arcade.dev/toolkits/social-communication/reddit\#reference) +## Reference [Permalink for this section](https://docs.arcade.dev/mcp-servers/social-communication/reddit\#reference) -### SubredditListingType [Permalink for this section](https://docs.arcade.dev/toolkits/social-communication/reddit\#subredditlistingtype) +### SubredditListingType [Permalink for this section](https://docs.arcade.dev/mcp-servers/social-communication/reddit\#subredditlistingtype) The type of listing to fetch. @@ -19630,7 +19630,7 @@ The type of listing to fetch. - **`TOP`** _(string: β€œtop”)_: The top posts in the subreddit (time-based). - **`CONTROVERSIAL`** _(string: β€œcontroversial”)_: The posts that are currently controversial in the subreddit (time-based). -### RedditTimeFilter [Permalink for this section](https://docs.arcade.dev/toolkits/social-communication/reddit\#reddittimefilter) +### RedditTimeFilter [Permalink for this section](https://docs.arcade.dev/mcp-servers/social-communication/reddit\#reddittimefilter) The time range for filtering posts. @@ -19655,7 +19655,7 @@ Arcade tools can be self-hosted on your own infrastructure. Learn more about sel pip install arcade_reddit\\ ```](https://docs.arcade.dev/home/hosting-overview) -[Reference](https://docs.arcade.dev/toolkits/social-communication/microsoft_teams/reference "Reference") [Slack API](https://docs.arcade.dev/toolkits/social-communication/slack_api "Slack API") +[Reference](https://docs.arcade.dev/mcp-servers/social-communication/microsoft_teams/reference "Reference") [Slack API](https://docs.arcade.dev/mcp-servers/social-communication/slack_api "Slack API") Frame @@ -19667,7 +19667,7 @@ This will be shown if an incident or maintenance is posted on your status page. [View latest updates](https://status.arcade.dev/?utm_source=embed) ## Outlook Mail Toolkit -[Integrations](https://docs.arcade.dev/toolkits "Integrations") [Productivity & Docs](https://docs.arcade.dev/toolkits/productivity/asana "Productivity & Docs") Outlook Mail +[Integrations](https://docs.arcade.dev/toolkits "Integrations") [Productivity & Docs](https://docs.arcade.dev/mcp-servers/productivity/asana "Productivity & Docs") Outlook Mail # Outlook Mail @@ -19679,13 +19679,13 @@ This will be shown if an incident or maintenance is posted on your status page. [![PyPI Version](https://img.shields.io/pypi/v/arcade_outlook_mail)](https://pypi.org/project/arcade_outlook_mail/)[![License](https://img.shields.io/badge/License-MIT-yellow.svg)](https://github.com/arcadeai/arcade-ai/blob/main/LICENSE)[![Python Versions](https://img.shields.io/pypi/pyversions/arcade_outlook_mail)](https://pypi.org/project/arcade_outlook_mail/)[![Wheel Status](https://img.shields.io/pypi/wheel/arcade_outlook_mail)](https://pypi.org/project/arcade_outlook_mail/)[![Downloads](https://img.shields.io/pypi/dm/arcade_outlook_mail)](https://pypi.org/project/arcade_outlook_mail/) -The Arcade Outlook Mail toolkit provides pre-built tools for working with emails using the Outlook API. Use these tools to: +The Arcade Outlook Mail MCP Server provides pre-built tools for working with emails using the Outlook API. Use these tools to: - Read emails - Write emails - Send emails -## Available Tools [Permalink for this section](https://docs.arcade.dev/toolkits/productivity/outlook_mail\#available-tools) +## Available Tools [Permalink for this section](https://docs.arcade.dev/mcp-servers/productivity/outlook_mail\#available-tools) These tools are currently available in the Arcade Outlook Mail toolkit. @@ -19704,10 +19704,10 @@ These tools are currently available in the Arcade Outlook Mail toolkit. 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](https://docs.arcade.dev/home/build-tools/create-a-toolkit) with the [Google auth\\ +own tools](https://docs.arcade.dev/home/build-tools/create-a-mcp-server) with the [Google auth\\ provider](https://docs.arcade.dev/home/auth-providers/google#using-google-auth-in-custom-tools). -## OutlookMail.WhoAmI [Permalink for this section](https://docs.arcade.dev/toolkits/productivity/outlook_mail\#outlookmailwhoami) +## OutlookMail.WhoAmI [Permalink for this section](https://docs.arcade.dev/mcp-servers/productivity/outlook_mail\#outlookmailwhoami) See Example > @@ -19719,7 +19719,7 @@ This tool does not take any parameters. * * * -## OutlookMail.CreateDraftEmail [Permalink for this section](https://docs.arcade.dev/toolkits/productivity/outlook_mail\#outlookmailcreatedraftemail) +## OutlookMail.CreateDraftEmail [Permalink for this section](https://docs.arcade.dev/mcp-servers/productivity/outlook_mail\#outlookmailcreatedraftemail) Compose a new draft email in Outlook. @@ -19735,7 +19735,7 @@ See Example > * * * -## OutlookMail.UpdateDraftEmail [Permalink for this section](https://docs.arcade.dev/toolkits/productivity/outlook_mail\#outlookmailupdatedraftemail) +## OutlookMail.UpdateDraftEmail [Permalink for this section](https://docs.arcade.dev/mcp-servers/productivity/outlook_mail\#outlookmailupdatedraftemail) Update an existing draft email in Outlook. @@ -19765,7 +19765,7 @@ See Example > * * * -## OutlookMail.SendDraftEmail [Permalink for this section](https://docs.arcade.dev/toolkits/productivity/outlook_mail\#outlookmailsenddraftemail) +## OutlookMail.SendDraftEmail [Permalink for this section](https://docs.arcade.dev/mcp-servers/productivity/outlook_mail\#outlookmailsenddraftemail) Send an existing draft email in Outlook @@ -19784,7 +19784,7 @@ See Example > * * * -## OutlookMail.CreateAndSendEmail [Permalink for this section](https://docs.arcade.dev/toolkits/productivity/outlook_mail\#outlookmailcreateandsendemail) +## OutlookMail.CreateAndSendEmail [Permalink for this section](https://docs.arcade.dev/mcp-servers/productivity/outlook_mail\#outlookmailcreateandsendemail) Create and immediately send a new email in Outlook to the specified recipients @@ -19800,7 +19800,7 @@ See Example > * * * -## OutlookMail.ReplyToEmail [Permalink for this section](https://docs.arcade.dev/toolkits/productivity/outlook_mail\#outlookmailreplytoemail) +## OutlookMail.ReplyToEmail [Permalink for this section](https://docs.arcade.dev/mcp-servers/productivity/outlook_mail\#outlookmailreplytoemail) Reply to an existing email in Outlook. @@ -19811,13 +19811,13 @@ Specify the reply\_type to determine the scope of the reply. - **`message_id`** (string, required): The ID of the email to reply to - **`body`** (string, required): The body of the reply to the email -- **`reply_type`** (enum ( [ReplyType](https://docs.arcade.dev/toolkits/productivity/outlook_mail#replytype)), required): Specify β€œreply” to reply only to the sender or β€œreply\_all” to reply to all recipients. +- **`reply_type`** (enum ( [ReplyType](https://docs.arcade.dev/mcp-servers/productivity/outlook_mail#replytype)), required): Specify β€œreply” to reply only to the sender or β€œreply\_all” to reply to all recipients. See Example > * * * -## OutlookMail.ListEmails [Permalink for this section](https://docs.arcade.dev/toolkits/productivity/outlook_mail\#outlookmaillistemails) +## OutlookMail.ListEmails [Permalink for this section](https://docs.arcade.dev/mcp-servers/productivity/outlook_mail\#outlookmaillistemails) List emails in the user’s mailbox across all folders. @@ -19833,7 +19833,7 @@ See Example > * * * -## OutlookMail.ListEmailsInFolder [Permalink for this section](https://docs.arcade.dev/toolkits/productivity/outlook_mail\#outlookmaillistemailsinfolder) +## OutlookMail.ListEmailsInFolder [Permalink for this section](https://docs.arcade.dev/mcp-servers/productivity/outlook_mail\#outlookmaillistemailsinfolder) List the user’s emails in the specified folder. @@ -19841,7 +19841,7 @@ Exactly one of `well_known_folder_name` or `folder_id` MUST be provided. **Parameters** -- **`well_known_folder_name`** (enum ( [WellKnownFolderNames](https://docs.arcade.dev/toolkits/productivity/outlook_mail#wellknownfoldernames)), optional): The name of the folder to list emails from. Defaults to None. +- **`well_known_folder_name`** (enum ( [WellKnownFolderNames](https://docs.arcade.dev/mcp-servers/productivity/outlook_mail#wellknownfoldernames)), optional): The name of the folder to list emails from. Defaults to None. - **`folder_id`** (str, optional): The ID of the folder to list emails from if the folder is not a well-known folder. Defaults to None. - **`limit`** (int, optional): The number of messages to return. Max is 100. Defaults to 5. - **`pagination_token`** (str, optional): The pagination token to continue a previous request @@ -19850,14 +19850,14 @@ See Example > * * * -## OutlookMail.ListEmailsByProperty [Permalink for this section](https://docs.arcade.dev/toolkits/productivity/outlook_mail\#outlookmaillistemailsbyproperty) +## OutlookMail.ListEmailsByProperty [Permalink for this section](https://docs.arcade.dev/mcp-servers/productivity/outlook_mail\#outlookmaillistemailsbyproperty) List emails in the user’s mailbox across all folders filtering by a property. **Parameters** -- **`property`** (enum ( [EmailFilterProperty](https://docs.arcade.dev/toolkits/productivity/outlook_mail#emailfilterproperty)), required): The property to filter the emails by. -- **`operator`** (enum ( [FilterOperator](https://docs.arcade.dev/toolkits/productivity/outlook_mail#filteroperator)), required): The operator to use for the filter +- **`property`** (enum ( [EmailFilterProperty](https://docs.arcade.dev/mcp-servers/productivity/outlook_mail#emailfilterproperty)), required): The property to filter the emails by. +- **`operator`** (enum ( [FilterOperator](https://docs.arcade.dev/mcp-servers/productivity/outlook_mail#filteroperator)), required): The operator to use for the filter - **`value`** (string, required): The value to filter the emails by. - **`limit`** (int, optional): The number of messages to return. Max is 100. Defaults to 5. - **`pagination_token`** (str, optional): The pagination token to continue a previous request @@ -19866,7 +19866,7 @@ See Example > * * * -## Auth [Permalink for this section](https://docs.arcade.dev/toolkits/productivity/outlook_mail\#auth) +## Auth [Permalink for this section](https://docs.arcade.dev/mcp-servers/productivity/outlook_mail\#auth) The Arcade Outlook Mail toolkit uses the [Microsoft auth provider](https://docs.arcade.dev/home/auth-providers/microsoft) to connect to users’ Microsoft accounts. @@ -19876,9 +19876,9 @@ With a self-hosted installation of Arcade, you need to [configure the Microsoft * * * -## Reference [Permalink for this section](https://docs.arcade.dev/toolkits/productivity/outlook_mail\#reference) +## Reference [Permalink for this section](https://docs.arcade.dev/mcp-servers/productivity/outlook_mail\#reference) -### WellKnownFolderNames [Permalink for this section](https://docs.arcade.dev/toolkits/productivity/outlook_mail\#wellknownfoldernames) +### WellKnownFolderNames [Permalink for this section](https://docs.arcade.dev/mcp-servers/productivity/outlook_mail\#wellknownfoldernames) Well-known folder names that are created for users by default. Instead of using the ID of these folders, you can use the well-known folder names. @@ -19891,14 +19891,14 @@ Instead of using the ID of these folders, you can use the well-known folder name - **`STARRED`** _(string: β€œstarred”)_ - **`TODO`** _(string: β€œtasks”)_ -### ReplyType [Permalink for this section](https://docs.arcade.dev/toolkits/productivity/outlook_mail\#replytype) +### ReplyType [Permalink for this section](https://docs.arcade.dev/mcp-servers/productivity/outlook_mail\#replytype) The type of reply to send to an email. - **`REPLY`** _(string: β€œreply”)_ - **`REPLY_ALL`** _(string: β€œreply\_all”)_ -### EmailFilterProperty [Permalink for this section](https://docs.arcade.dev/toolkits/productivity/outlook_mail\#emailfilterproperty) +### EmailFilterProperty [Permalink for this section](https://docs.arcade.dev/mcp-servers/productivity/outlook_mail\#emailfilterproperty) The property to filter the emails by. @@ -19907,7 +19907,7 @@ The property to filter the emails by. - **`RECEIVED_DATE_TIME`** _(string: β€œreceivedDateTime”)_ - **`SENDER`** _(string: β€œsender/emailAddress/address”)_ -### FilterOperator [Permalink for this section](https://docs.arcade.dev/toolkits/productivity/outlook_mail\#filteroperator) +### FilterOperator [Permalink for this section](https://docs.arcade.dev/mcp-servers/productivity/outlook_mail\#filteroperator) The operator to use for the filter. @@ -19935,7 +19935,7 @@ Arcade tools can be self-hosted on your own infrastructure. Learn more about sel pip install arcade_outlook_mail\\ ```](https://docs.arcade.dev/home/hosting-overview) -[Outlook Calendar](https://docs.arcade.dev/toolkits/productivity/outlook_calendar "Outlook Calendar") [Reference](https://docs.arcade.dev/toolkits/productivity/outlook_mail/reference "Reference") +[Outlook Calendar](https://docs.arcade.dev/mcp-servers/productivity/outlook_calendar "Outlook Calendar") [Reference](https://docs.arcade.dev/mcp-servers/productivity/outlook_mail/reference "Reference") Frame @@ -19947,18 +19947,18 @@ This will be shown if an incident or maintenance is posted on your status page. [View latest updates](https://status.arcade.dev/?utm_source=embed) ## Outlook Mail Reference -[Integrations](https://docs.arcade.dev/toolkits "Integrations") [Productivity & Docs](https://docs.arcade.dev/toolkits/productivity/asana "Productivity & Docs") [Outlook Mail](https://docs.arcade.dev/toolkits/productivity/outlook_mail "Outlook Mail") Reference +[Integrations](https://docs.arcade.dev/toolkits "Integrations") [Productivity & Docs](https://docs.arcade.dev/mcp-servers/productivity/asana "Productivity & Docs") [Outlook Mail](https://docs.arcade.dev/mcp-servers/productivity/outlook_mail "Outlook Mail") Reference # OutlookMail Reference Below is a reference of enumerations used by some tools in the OutlookMail toolkit: -## ReplyType [Permalink for this section](https://docs.arcade.dev/toolkits/productivity/outlook_mail/reference\#replytype) +## ReplyType [Permalink for this section](https://docs.arcade.dev/mcp-servers/productivity/outlook_mail/reference\#replytype) - **REPLY**: `reply` - **REPLY\_ALL**: `reply_all` -## WellKnownFolderNames [Permalink for this section](https://docs.arcade.dev/toolkits/productivity/outlook_mail/reference\#wellknownfoldernames) +## WellKnownFolderNames [Permalink for this section](https://docs.arcade.dev/mcp-servers/productivity/outlook_mail/reference\#wellknownfoldernames) - **DELETED\_ITEMS**: `deleteditems` - **DRAFTS**: `drafts` @@ -19968,14 +19968,14 @@ Below is a reference of enumerations used by some tools in the OutlookMail toolk - **STARRED**: `starred` - **TODO**: `tasks` -## EmailFilterProperty [Permalink for this section](https://docs.arcade.dev/toolkits/productivity/outlook_mail/reference\#emailfilterproperty) +## EmailFilterProperty [Permalink for this section](https://docs.arcade.dev/mcp-servers/productivity/outlook_mail/reference\#emailfilterproperty) - **SUBJECT**: `subject` - **CONVERSATION\_ID**: `conversationId` - **RECEIVED\_DATE\_TIME**: `receivedDateTime` - **SENDER**: `sender/emailAddress/address` -## FilterOperator [Permalink for this section](https://docs.arcade.dev/toolkits/productivity/outlook_mail/reference\#filteroperator) +## FilterOperator [Permalink for this section](https://docs.arcade.dev/mcp-servers/productivity/outlook_mail/reference\#filteroperator) - **EQUAL**: `eq` - **NOT\_EQUAL**: `ne` @@ -19987,7 +19987,7 @@ Below is a reference of enumerations used by some tools in the OutlookMail toolk - **ENDS\_WITH**: `endsWith` - **CONTAINS**: `contains` -[Outlook Mail](https://docs.arcade.dev/toolkits/productivity/outlook_mail "Outlook Mail") [Clickup](https://docs.arcade.dev/toolkits/productivity/clickup "Clickup") +[Outlook Mail](https://docs.arcade.dev/mcp-servers/productivity/outlook_mail "Outlook Mail") [Clickup](https://docs.arcade.dev/mcp-servers/productivity/clickup "Clickup") Frame @@ -20013,7 +20013,7 @@ Sitemap: https://docs.arcade.dev/sitemap.xml ``` ## Understanding ToolContext -[Home](https://docs.arcade.dev/home "Home") [Build tools](https://docs.arcade.dev/home/build-tools/create-a-toolkit "Build tools") Tool Context +[Home](https://docs.arcade.dev/home "Home") [Build tools](https://docs.arcade.dev/home/build-tools/create-a-mcp-server "Build tools") Tool Context # Understanding ToolContext @@ -20041,7 +20041,7 @@ You can then use the `ToolContext` object to make authenticated requests to exte Now that you understand the basics of `ToolContext`, you’re ready to apply this knowledge in creating your own authorized tools. To learn how to build a custom tool that requires user authorization, check out our guide on [adding user authorization to your tools](https://docs.arcade.dev/home/build-tools/create-a-tool-with-auth) or [adding secrets to your tools](https://docs.arcade.dev/home/build-tools/create-a-tool-with-secrets). -[Create a toolkit](https://docs.arcade.dev/home/build-tools/create-a-toolkit "Create a toolkit") [Create a tool with auth](https://docs.arcade.dev/home/build-tools/create-a-tool-with-auth "Create a tool with auth") +[Create a toolkit](https://docs.arcade.dev/home/build-tools/create-a-mcp-server "Create a toolkit") [Create a tool with auth](https://docs.arcade.dev/home/build-tools/create-a-tool-with-auth "Create a tool with auth") Frame @@ -20053,7 +20053,7 @@ This will be shown if an incident or maintenance is posted on your status page. [View latest updates](https://status.arcade.dev/?utm_source=embed) ## Linear Toolkit -[Integrations](https://docs.arcade.dev/toolkits "Integrations") [Productivity & Docs](https://docs.arcade.dev/toolkits/productivity/asana "Productivity & Docs") Linear +[Integrations](https://docs.arcade.dev/toolkits "Integrations") [Productivity & Docs](https://docs.arcade.dev/mcp-servers/productivity/asana "Productivity & Docs") Linear # Linear @@ -20072,7 +20072,7 @@ The Linear toolkit offers a streamlined set of tools for interacting with Linear This toolkit is ideal for users looking to read and analyze issue and team data within Linear without making any modifications. -## Available Tools [Permalink for this section](https://docs.arcade.dev/toolkits/productivity/linear\#available-tools) +## Available Tools [Permalink for this section](https://docs.arcade.dev/mcp-servers/productivity/linear\#available-tools) | Tool Name | Description | | --- | --- | @@ -20081,9 +20081,9 @@ This toolkit is ideal for users looking to read and analyze issue and team data 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](https://docs.arcade.dev/home/build-tools/create-a-toolkit). +own tools](https://docs.arcade.dev/home/build-tools/create-a-mcp-server). -## Linear.GetIssue [Permalink for this section](https://docs.arcade.dev/toolkits/productivity/linear\#lineargetissue) +## Linear.GetIssue [Permalink for this section](https://docs.arcade.dev/mcp-servers/productivity/linear\#lineargetissue) See Example > @@ -20097,7 +20097,7 @@ Get detailed information about a specific Linear issue - **include\_relations** ( `boolean`, optional) Whether to include issue relations (blocks, dependencies) in the response. Defaults to True. - **include\_children** ( `boolean`, optional) Whether to include sub-issues in the response. Defaults to True. -## Linear.GetTeams [Permalink for this section](https://docs.arcade.dev/toolkits/productivity/linear\#lineargetteams) +## Linear.GetTeams [Permalink for this section](https://docs.arcade.dev/mcp-servers/productivity/linear\#lineargetteams) See Example > @@ -20114,7 +20114,7 @@ Defaults to None (all time). - **limit** ( `integer`, optional) Maximum number of teams to return. Min 1, max 100. Defaults to 50. - **end\_cursor** ( `string`, optional) Cursor for pagination - get teams after this cursor. Use the β€˜end\_cursor’ from previous response. Defaults to None (start from beginning). -## Auth [Permalink for this section](https://docs.arcade.dev/toolkits/productivity/linear\#auth) +## Auth [Permalink for this section](https://docs.arcade.dev/mcp-servers/productivity/linear\#auth) The Arcade Linear toolkit uses the [Linear auth provider](https://docs.arcade.dev/home/auth-providers/linear) to connect to users’ Linear accounts. Please refer to the [Linear auth provider](https://docs.arcade.dev/home/auth-providers/linear) documentation to learn how to configure auth. @@ -20132,7 +20132,7 @@ Arcade tools can be self-hosted on your own infrastructure. Learn more about sel pip install arcade_linear\\ ```](https://docs.arcade.dev/home/hosting-overview) -[Reference](https://docs.arcade.dev/toolkits/productivity/jira/reference "Reference") [Notion](https://docs.arcade.dev/toolkits/productivity/notion "Notion") +[Reference](https://docs.arcade.dev/mcp-servers/productivity/jira/reference "Reference") [Notion](https://docs.arcade.dev/mcp-servers/productivity/notion "Notion") Frame @@ -20421,7 +20421,7 @@ This will be shown if an incident or maintenance is posted on your status page. [View latest updates](https://status.arcade.dev/?utm_source=embed) ## Google Drive Toolkit -[Integrations](https://docs.arcade.dev/toolkits "Integrations") [Productivity & Docs](https://docs.arcade.dev/toolkits/productivity/asana "Productivity & Docs") Google Drive +[Integrations](https://docs.arcade.dev/toolkits "Integrations") [Productivity & Docs](https://docs.arcade.dev/mcp-servers/productivity/asana "Productivity & Docs") Google Drive # GoogleDrive @@ -20433,13 +20433,13 @@ This will be shown if an incident or maintenance is posted on your status page. [![PyPI Version](https://img.shields.io/pypi/v/arcade_google_drive)](https://pypi.org/project/arcade_google_drive/)[![License](https://img.shields.io/badge/License-MIT-yellow.svg)](https://github.com/arcadeai/arcade-ai/blob/main/LICENSE)[![Python Versions](https://img.shields.io/pypi/pyversions/arcade_google_drive)](https://pypi.org/project/arcade_google_drive/)[![Wheel Status](https://img.shields.io/pypi/wheel/arcade_google_drive)](https://pypi.org/project/arcade_google_drive/)[![Downloads](https://img.shields.io/pypi/dm/arcade_google_drive)](https://pypi.org/project/arcade_google_drive/) -The GoogleDrive toolkit provides a set of tools for interacting with Google Drive, enabling users to efficiently manage and access their files. With this toolkit, users can: +The GoogleDrive MCP Server provides a set of tools for interacting with Google Drive, enabling users to efficiently manage and access their files. With this toolkit, users can: - Retrieve the file and folder structure of their Google Drive. - Generate a Google File Picker URL for user-driven file selection and authorization, allowing secure access to files. - Search for specific files within Google Drive. -## Available Tools [Permalink for this section](https://docs.arcade.dev/toolkits/productivity/google_drive\#available-tools) +## Available Tools [Permalink for this section](https://docs.arcade.dev/mcp-servers/productivity/google_drive\#available-tools) | Tool Name | Description | | --- | --- | @@ -20450,9 +20450,9 @@ The GoogleDrive toolkit provides a set of tools for interacting with Google Driv 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](https://docs.arcade.dev/home/build-tools/create-a-toolkit). +own tools](https://docs.arcade.dev/home/build-tools/create-a-mcp-server). -## GoogleDrive.WhoAmI [Permalink for this section](https://docs.arcade.dev/toolkits/productivity/google_drive\#googledrivewhoami) +## GoogleDrive.WhoAmI [Permalink for this section](https://docs.arcade.dev/mcp-servers/productivity/google_drive\#googledrivewhoami) See Example > @@ -20464,7 +20464,7 @@ This tool does not take any parameters. * * * -## GoogleDrive.GetFileTreeStructure [Permalink for this section](https://docs.arcade.dev/toolkits/productivity/google_drive\#googledrivegetfiletreestructure) +## GoogleDrive.GetFileTreeStructure [Permalink for this section](https://docs.arcade.dev/mcp-servers/productivity/google_drive\#googledrivegetfiletreestructure) See Example > @@ -20475,10 +20475,10 @@ Get the file/folder tree structure of the user’s Google Drive. - **include\_shared\_drives** ( `boolean`, optional) Whether to include shared drives in the file tree structure. Defaults to False. - **restrict\_to\_shared\_drive\_id** ( `string`, optional) If provided, only include files from this shared drive in the file tree structure. Defaults to None, which will include files and folders from all drives. - **include\_organization\_domain\_documents** ( `boolean`, optional) Whether to include documents from the organization’s domain. This is applicable to admin users who have permissions to view organization-wide documents in a Google Workspace account. Defaults to False. -- **order\_by** ( `Enum` [OrderBy](https://docs.arcade.dev/toolkits/productivity/google_drive/reference#OrderBy), optional) Sort order. Defaults to listing the most recently modified documents first +- **order\_by** ( `Enum` [OrderBy](https://docs.arcade.dev/mcp-servers/productivity/google_drive/reference#OrderBy), optional) Sort order. Defaults to listing the most recently modified documents first - **limit** ( `integer`, optional) The number of files and folders to list. Defaults to None, which will list all files and folders. -## GoogleDrive.GenerateGoogleFilePickerUrl [Permalink for this section](https://docs.arcade.dev/toolkits/productivity/google_drive\#googledrivegenerategooglefilepickerurl) +## GoogleDrive.GenerateGoogleFilePickerUrl [Permalink for this section](https://docs.arcade.dev/mcp-servers/productivity/google_drive\#googledrivegenerategooglefilepickerurl) See Example > @@ -20488,7 +20488,7 @@ Generate a Google File Picker URL for user-driven file selection and authorizati This tool does not take any parameters. -## GoogleDrive.SearchFiles [Permalink for this section](https://docs.arcade.dev/toolkits/productivity/google_drive\#googledrivesearchfiles) +## GoogleDrive.SearchFiles [Permalink for this section](https://docs.arcade.dev/mcp-servers/productivity/google_drive\#googledrivesearchfiles) See Example > @@ -20500,11 +20500,11 @@ Search for files in Google Drive - **include\_shared\_drives** ( `boolean`, optional) Whether to include shared drives in the search. Defaults to False. - **restrict\_to\_shared\_drive\_id** ( `string`, optional) If provided, only search files from this shared drive. Defaults to None, which will search files from all drives. - **include\_organization\_domain\_documents** ( `boolean`, optional) Whether to include documents from the organization’s domain. This is applicable to admin users who have permissions to view organization-wide documents in a Google Workspace account. Defaults to False. -- **order\_by** ( `Enum` [OrderBy](https://docs.arcade.dev/toolkits/productivity/google_drive/reference#OrderBy), optional) Sort order for search results. Defaults to listing the most recently modified documents first +- **order\_by** ( `Enum` [OrderBy](https://docs.arcade.dev/mcp-servers/productivity/google_drive/reference#OrderBy), optional) Sort order for search results. Defaults to listing the most recently modified documents first - **limit** ( `integer`, optional) The maximum number of search results to return. Defaults to 50. -- **file\_types** ( `Enum` [GoogleDriveFileType](https://docs.arcade.dev/toolkits/productivity/google_drive/reference#GoogleDriveFileType), optional) Filter by specific file types. Defaults to None, which includes all file types. +- **file\_types** ( `Enum` [GoogleDriveFileType](https://docs.arcade.dev/mcp-servers/productivity/google_drive/reference#GoogleDriveFileType), optional) Filter by specific file types. Defaults to None, which includes all file types. -## Auth [Permalink for this section](https://docs.arcade.dev/toolkits/productivity/google_drive\#auth) +## Auth [Permalink for this section](https://docs.arcade.dev/mcp-servers/productivity/google_drive\#auth) The Arcade GoogleDrive toolkit uses the [Google auth provider](https://docs.arcade.dev/home/auth-providers/google) to connect to users’ GoogleDrive accounts. Please refer to the [Google auth provider](https://docs.arcade.dev/home/auth-providers/google) documentation to learn how to configure auth. @@ -20522,7 +20522,7 @@ Arcade tools can be self-hosted on your own infrastructure. Learn more about sel pip install arcade_google_drive\\ ```](https://docs.arcade.dev/home/hosting-overview) -[Reference](https://docs.arcade.dev/toolkits/productivity/google_docs/reference "Reference") [Reference](https://docs.arcade.dev/toolkits/productivity/google_drive/reference "Reference") +[Reference](https://docs.arcade.dev/mcp-servers/productivity/google_docs/reference "Reference") [Reference](https://docs.arcade.dev/mcp-servers/productivity/google_drive/reference "Reference") Frame @@ -20534,11 +20534,11 @@ This will be shown if an incident or maintenance is posted on your status page. [View latest updates](https://status.arcade.dev/?utm_source=embed) ## Jira Environment Variables -[Integrations](https://docs.arcade.dev/toolkits "Integrations") [Productivity & Docs](https://docs.arcade.dev/toolkits/productivity/asana "Productivity & Docs") [Jira](https://docs.arcade.dev/toolkits/productivity/jira "Jira") Environment Variables +[Integrations](https://docs.arcade.dev/toolkits "Integrations") [Productivity & Docs](https://docs.arcade.dev/mcp-servers/productivity/asana "Productivity & Docs") [Jira](https://docs.arcade.dev/mcp-servers/productivity/jira "Jira") Environment Variables # Jira Environment Variables -### `JIRA_MAX_CONCURRENT_REQUESTS` [Permalink for this section](https://docs.arcade.dev/toolkits/productivity/jira/environment_variables\#jira_max_concurrent_requests) +### `JIRA_MAX_CONCURRENT_REQUESTS` [Permalink for this section](https://docs.arcade.dev/mcp-servers/productivity/jira/environment_variables\#jira_max_concurrent_requests) Arcade uses asynchronous calls to request Jira API endpoints. In some tools, multiple concurrent HTTP requests may be made to speed up execution. This environment variable controls the maximum number of concurrent requests to Jira API in any tool execution. @@ -20546,7 +20546,7 @@ The value must be a numeric string with an integer greater than or equal to 1. **Default:** `3` -### `JIRA_API_REQUEST_TIMEOUT` [Permalink for this section](https://docs.arcade.dev/toolkits/productivity/jira/environment_variables\#jira_api_request_timeout) +### `JIRA_API_REQUEST_TIMEOUT` [Permalink for this section](https://docs.arcade.dev/mcp-servers/productivity/jira/environment_variables\#jira_api_request_timeout) Controls the maximum number of seconds to wait for a response from the Jira API. This is also applied, in some cases, as a global max timeout for multiple requests that are made in a single tool execution. For instance, when a tool needs to paginate results from a given endpoint, this timeout may apply to the entire pagination process in total, not only to the individual requests. @@ -20554,7 +20554,7 @@ The value must be a numeric string with an integer greater than or equal to 1. **Default:** `30` -### `JIRA_CACHE_MAX_ITEMS` [Permalink for this section](https://docs.arcade.dev/toolkits/productivity/jira/environment_variables\#jira_cache_max_items) +### `JIRA_CACHE_MAX_ITEMS` [Permalink for this section](https://docs.arcade.dev/mcp-servers/productivity/jira/environment_variables\#jira_cache_max_items) The caching strategy does not involve caching Jira API responses that go into tool output, but only internal values. @@ -20564,7 +20564,7 @@ The value must be a numeric string with an integer greater than or equal to 1. **Default:** `5000` -[Jira](https://docs.arcade.dev/toolkits/productivity/jira "Jira") [Reference](https://docs.arcade.dev/toolkits/productivity/jira/reference "Reference") +[Jira](https://docs.arcade.dev/mcp-servers/productivity/jira "Jira") [Reference](https://docs.arcade.dev/mcp-servers/productivity/jira/reference "Reference") Frame @@ -20612,11 +20612,11 @@ This will be shown if an incident or maintenance is posted on your status page. [View latest updates](https://status.arcade.dev/?utm_source=embed) ## GitHub Toolkit Reference -[Integrations](https://docs.arcade.dev/toolkits "Integrations") [Developer Tools](https://docs.arcade.dev/toolkits/development/e2b "Developer Tools") [GitHub](https://docs.arcade.dev/toolkits/development/github/github "GitHub") Reference +[Integrations](https://docs.arcade.dev/toolkits "Integrations") [Developer Tools](https://docs.arcade.dev/mcp-servers/development/e2b "Developer Tools") [GitHub](https://docs.arcade.dev/mcp-servers/development/github/github "GitHub") Reference # Reference for GitHub Toolkit -## PRSortProperty [Permalink for this section](https://docs.arcade.dev/toolkits/development/github/reference\#prsortproperty) +## PRSortProperty [Permalink for this section](https://docs.arcade.dev/mcp-servers/development/github/reference\#prsortproperty) Specifies the property to sort pull requests by. @@ -20625,7 +20625,7 @@ Specifies the property to sort pull requests by. - **`POPULARITY`**: Sort by popularity. - **`LONG_RUNNING`**: Sort by how long the pull request has been open. -## PRState [Permalink for this section](https://docs.arcade.dev/toolkits/development/github/reference\#prstate) +## PRState [Permalink for this section](https://docs.arcade.dev/mcp-servers/development/github/reference\#prstate) Specifies the state of pull requests to return. @@ -20633,28 +20633,28 @@ Specifies the state of pull requests to return. - **`CLOSED`**: Closed pull requests. - **`ALL`**: All pull requests. -## ReviewCommentSortProperty [Permalink for this section](https://docs.arcade.dev/toolkits/development/github/reference\#reviewcommentsortproperty) +## ReviewCommentSortProperty [Permalink for this section](https://docs.arcade.dev/mcp-servers/development/github/reference\#reviewcommentsortproperty) Specifies the property to sort review comments by. - **`CREATED`**: Sort by creation date. - **`UPDATED`**: Sort by last update date. -## ReviewCommentSubjectType [Permalink for this section](https://docs.arcade.dev/toolkits/development/github/reference\#reviewcommentsubjecttype) +## ReviewCommentSubjectType [Permalink for this section](https://docs.arcade.dev/mcp-servers/development/github/reference\#reviewcommentsubjecttype) Specifies the type of subject for review comments. - **`FILE`**: Comments on the entire file. - **`LINE`**: Comments on a specific line. -## DiffSide [Permalink for this section](https://docs.arcade.dev/toolkits/development/github/reference\#diffside) +## DiffSide [Permalink for this section](https://docs.arcade.dev/mcp-servers/development/github/reference\#diffside) Specifies the side of the diff that the pull request’s changes appear on. - **`LEFT`**: For deletions that appear in red. - **`RIGHT`**: For additions that appear in green or unchanged lines that appear in white and are shown for context. -## RepoType [Permalink for this section](https://docs.arcade.dev/toolkits/development/github/reference\#repotype) +## RepoType [Permalink for this section](https://docs.arcade.dev/mcp-servers/development/github/reference\#repotype) Specifies the type of repositories to return. @@ -20665,7 +20665,7 @@ Specifies the type of repositories to return. - **`SOURCES`**: Source repositories only (not forks). - **`MEMBER`**: Repositories to which the user has explicit permission. -## RepoSortProperty [Permalink for this section](https://docs.arcade.dev/toolkits/development/github/reference\#reposortproperty) +## RepoSortProperty [Permalink for this section](https://docs.arcade.dev/mcp-servers/development/github/reference\#reposortproperty) Specifies the property to sort repositories by. @@ -20674,7 +20674,7 @@ Specifies the property to sort repositories by. - **`PUSHED`**: Sort by last push date. - **`FULL_NAME`**: Sort by full name. -## RepoTimePeriod [Permalink for this section](https://docs.arcade.dev/toolkits/development/github/reference\#repotimeperiod) +## RepoTimePeriod [Permalink for this section](https://docs.arcade.dev/mcp-servers/development/github/reference\#repotimeperiod) Specifies the time period to filter by when listing repository activities. @@ -20684,7 +20684,7 @@ Specifies the time period to filter by when listing repository activities. - **`QUARTER`**: Activities from the last quarter. - **`YEAR`**: Activities from the last year. -## ActivityType [Permalink for this section](https://docs.arcade.dev/toolkits/development/github/reference\#activitytype) +## ActivityType [Permalink for this section](https://docs.arcade.dev/mcp-servers/development/github/reference\#activitytype) Specifies the activity type to filter by when listing repository activities. @@ -20695,14 +20695,14 @@ Specifies the activity type to filter by when listing repository activities. - **`PR_MERGE`**: Pull request merge events. - **`MERGE_QUEUE_MERGE`**: Merge queue merge events. -## SortDirection [Permalink for this section](https://docs.arcade.dev/toolkits/development/github/reference\#sortdirection) +## SortDirection [Permalink for this section](https://docs.arcade.dev/mcp-servers/development/github/reference\#sortdirection) Specifies the direction to sort results. - **`ASC`**: Sort in ascending order. - **`DESC`**: Sort in descending order. -[GitHub](https://docs.arcade.dev/toolkits/development/github/github "GitHub") [Firecrawl](https://docs.arcade.dev/toolkits/development/firecrawl/firecrawl "Firecrawl") +[GitHub](https://docs.arcade.dev/mcp-servers/development/github/github "GitHub") [Firecrawl](https://docs.arcade.dev/mcp-servers/development/firecrawl/firecrawl "Firecrawl") Frame @@ -20743,7 +20743,7 @@ Now, the `arcade-ai` package serves as Arcade.dev’s CLI, allowing you to creat - To get [the evaluation framework](https://docs.arcade.dev/home/build-tools/evaluation-framework), install via: `pip install 'arcade-ai[evals]'` - To get everything including the TDK and Serve, install via: `pip install 'arcade-ai[all]'` - **arcade-tdk**: - - If you’re [writing your own](https://docs.arcade.dev/home/build-tools/create-a-toolkit) Arcade tools/toolkits. + - If you’re [writing your own](https://docs.arcade.dev/home/build-tools/create-a-mcp-server) Arcade tools/toolkits. - Install via: `pip install arcade-tdk` - **arcade-serve**: - If you’re [writing your own](https://docs.arcade.dev/home/serve-tools/modal-worker) custom worker. @@ -20777,7 +20777,7 @@ This will be shown if an incident or maintenance is posted on your status page. # Salesforce Auth Provider -At this time, Arcade does not offer a default Salesforce Auth Provider and cannot support Salesforce auth in the Arcade Cloud Platform. To use Salesforce auth, the [Salesforce toolkit](https://docs.arcade.dev/toolkits/sales/salesforce), or to develop your [custom Salesforce tools](https://docs.arcade.dev/home/build-tools/create-a-toolkit), you must [self-host the Arcade Engine](https://docs.arcade.dev/home/local-deployment/install/local) and create a custom Auth Provider with your own Salesforce OAuth 2.0 credentials as described below. +At this time, Arcade does not offer a default Salesforce Auth Provider and cannot support Salesforce auth in the Arcade Cloud Platform. To use Salesforce auth, the [Salesforce toolkit](https://docs.arcade.dev/mcp-servers/sales/salesforce), or to develop your [custom Salesforce tools](https://docs.arcade.dev/home/build-tools/create-a-mcp-server), you must [self-host the Arcade Engine](https://docs.arcade.dev/home/local-deployment/install/local) and create a custom Auth Provider with your own Salesforce OAuth 2.0 credentials as described below. The Salesforce auth provider enables tools and agents to call Salesforce APIs on behalf of a user. Behind the scenes, the Arcade Engine and the Salesforce auth provider seamlessly manage Salesforce OAuth 2.0 authorization for your users. @@ -20787,7 +20787,7 @@ This page describes how to use and configure Salesforce auth with Arcade. This auth provider is used by: -- The [Arcade Salesforce toolkit](https://docs.arcade.dev/toolkits/sales/salesforce), which provides pre-built tools for interacting with Salesforce services +- The [Arcade Salesforce toolkit](https://docs.arcade.dev/mcp-servers/sales/salesforce), which provides pre-built tools for interacting with Salesforce services - Your [app code](https://docs.arcade.dev/home/auth-providers/salesforce#calling-salesforce-apis-directly) that needs to call Salesforce APIs - Or, your [custom tools](https://docs.arcade.dev/home/auth-providers/salesforce#create-your-own-salesforce-tools) that need to call Salesforce APIs @@ -20844,11 +20844,11 @@ export SALESFORCE_ORG_SUBDOMAIN={your-salesforce-subdomain} The Salesforce API requires the App developer to create [OAuth custom scopes](https://help.salesforce.com/s/articleView?id=xcloud.remoteaccess_oauth_customscopes.htm&type=5) defining granular permissions for their application users to authorize. -The custom scopes required by the [Arcade Salesforce toolkit](https://docs.arcade.dev/toolkits/sales/salesforce) are listed below, along with their descriptions: +The custom scopes required by the [Arcade Salesforce toolkit](https://docs.arcade.dev/mcp-servers/sales/salesforce) are listed below, along with their descriptions: -The custom scopes listed below are only required if you are using the [Arcade Salesforce toolkit](https://docs.arcade.dev/toolkits/sales/salesforce). +The custom scopes listed below are only required if you are using the [Arcade Salesforce toolkit](https://docs.arcade.dev/mcp-servers/sales/salesforce). -If you’re creating your own [custom Salesforce tools](https://docs.arcade.dev/home/build-tools/create-a-toolkit) or using Arcade to authorize users and call Salesforce APIs directly, you are free to define custom scope(s) that fit best your application use cases. Observe that you must have at least one custom scope assigned to your Salesforce app in order to use the Salesforce API. +If you’re creating your own [custom Salesforce tools](https://docs.arcade.dev/home/build-tools/create-a-mcp-server) or using Arcade to authorize users and call Salesforce APIs directly, you are free to define custom scope(s) that fit best your application use cases. Observe that you must have at least one custom scope assigned to your Salesforce app in order to use the Salesforce API. - `read_account`: Read access to account data. - `read_contact`: Read access to contact data. @@ -20884,7 +20884,7 @@ By default, the Arcade Dashboard will be available at [http://localhost:9099/das #### Enter the provider details [Permalink for this section](https://docs.arcade.dev/home/auth-providers/salesforce\#enter-the-provider-details) -- Enter `salesforce` as the **ID** for your provider (the ID must be `salesforce` in order to use the [Arcade Salesforce toolkit](https://docs.arcade.dev/toolkits/sales/salesforce)). +- Enter `salesforce` as the **ID** for your provider (the ID must be `salesforce` in order to use the [Arcade Salesforce toolkit](https://docs.arcade.dev/mcp-servers/sales/salesforce)). - Optionally enter a **Description**. - Enter your **Client ID** and **Client Secret** from your Salesforce app. - Note the **Redirect URL** generated by Arcade. This must be set as your Salesforce app’s callback URL. @@ -20927,9 +20927,9 @@ Click the **Create** button and the provider will be ready to be used in the Arc ## Using the Arcade Salesforce Toolkit [Permalink for this section](https://docs.arcade.dev/home/auth-providers/salesforce\#using-the-arcade-salesforce-toolkit) -The [Arcade Salesforce toolkit](https://docs.arcade.dev/toolkits/sales/salesforce) provides tools to interact with various Salesforce objects, such as accounts, contacts, leads, opportunities, notes, tasks, email messages, call logs, etc. +The [Arcade Salesforce toolkit](https://docs.arcade.dev/mcp-servers/sales/salesforce) provides tools to interact with various Salesforce objects, such as accounts, contacts, leads, opportunities, notes, tasks, email messages, call logs, etc. -Refer to the [toolkit documentation and examples](https://docs.arcade.dev/toolkits/sales/salesforce) to learn how to use the toolkit to build agents and AI apps that interact with Salesforce services. +Refer to the [toolkit documentation and examples](https://docs.arcade.dev/mcp-servers/sales/salesforce) to learn how to use the toolkit to build agents and AI apps that interact with Salesforce services. Check our introductory documentation to understand what are tools and how [tool calling works](https://docs.arcade.dev/home/use-tools/tools-overview). @@ -21038,9 +21038,9 @@ Click to view the full example ## Create your own Salesforce Tools [Permalink for this section](https://docs.arcade.dev/home/auth-providers/salesforce\#create-your-own-salesforce-tools) -If the pre-built tools in the [Arcade Salesforce toolkit](https://docs.arcade.dev/toolkits/sales/salesforce) don’t meet your needs, you can create your own [custom tools](https://docs.arcade.dev/home/build-tools/create-a-toolkit) that interact with the Salesforce APIs. +If the pre-built tools in the [Arcade Salesforce toolkit](https://docs.arcade.dev/mcp-servers/sales/salesforce) don’t meet your needs, you can create your own [custom tools](https://docs.arcade.dev/home/build-tools/create-a-mcp-server) that interact with the Salesforce APIs. -The code implemented in the Arcade Salesforce tools is the best guide for you to understand how to implement your own. Check the [Contact](https://github.com/ArcadeAI/arcade-ai/blob/main/toolkits/salesforce/arcade_salesforce/tools/crm/contact.py) and [Account](https://github.com/ArcadeAI/arcade-ai/blob/main/toolkits/salesforce/arcade_salesforce/tools/crm/account.py) tools in our public Github repository. +The code implemented in the Arcade Salesforce tools is the best guide for you to understand how to implement your own. Check the [Contact](https://github.com/ArcadeAI/arcade-ai/blob/main/mcp-servers/salesforce/arcade_salesforce/tools/crm/contact.py) and [Account](https://github.com/ArcadeAI/arcade-ai/blob/main/mcp-servers/salesforce/arcade_salesforce/tools/crm/account.py) tools in our public Github repository. [Reddit](https://docs.arcade.dev/home/auth-providers/reddit "Reddit") [Slack](https://docs.arcade.dev/home/auth-providers/slack "Slack") @@ -21394,7 +21394,7 @@ python3 example.py ## Next Steps [Permalink for this section](https://docs.arcade.dev/home/quickstart\#next-steps) -In this simple example, we call the tool methods directly. In your real applications and agents, you’ll likely be letting the LLM decide which tools to call - lean more about using Arcade with Frameworks in the [Frameworks](https://docs.arcade.dev/home/langchain/use-arcade-tools) section, or [how to build your own tools](https://docs.arcade.dev/home/build-tools/create-a-toolkit). +In this simple example, we call the tool methods directly. In your real applications and agents, you’ll likely be letting the LLM decide which tools to call - lean more about using Arcade with Frameworks in the [Frameworks](https://docs.arcade.dev/home/langchain/use-arcade-tools) section, or [how to build your own tools](https://docs.arcade.dev/home/build-tools/create-a-mcp-server). [Contact us](https://docs.arcade.dev/home/contact-us "[object Object]") [Get an API key](https://docs.arcade.dev/home/api-keys "Get an API key") @@ -21408,7 +21408,7 @@ This will be shown if an incident or maintenance is posted on your status page. [View latest updates](https://status.arcade.dev/?utm_source=embed) ## User Authorization Guide -[Home](https://docs.arcade.dev/home "Home") [Build tools](https://docs.arcade.dev/home/build-tools/create-a-toolkit "Build tools") Create a tool with auth +[Home](https://docs.arcade.dev/home "Home") [Build tools](https://docs.arcade.dev/home/build-tools/create-a-mcp-server "Build tools") Create a tool with auth # Adding user authorization to your tools @@ -21607,14 +21607,14 @@ Watch on β€’ -## Prerequisites [Permalink for this section](https://docs.arcade.dev/home/build-tools/create-a-toolkit\#prerequisites) +## Prerequisites [Permalink for this section](https://docs.arcade.dev/home/build-tools/create-a-mcp-server\#prerequisites) Before starting, make sure you have: - An [Arcade account](https://api.arcade.dev/signup) - For this guide, we’ll use [uv](https://docs.astral.sh/uv/getting-started/installation/) as our package manager. -## Generate a toolkit template [Permalink for this section](https://docs.arcade.dev/home/build-tools/create-a-toolkit\#generate-a-toolkit-template) +## Generate a toolkit template [Permalink for this section](https://docs.arcade.dev/home/build-tools/create-a-mcp-server\#generate-a-toolkit-template) Run the following command to start creating your toolkit: @@ -21653,7 +21653,7 @@ Navigate to your toolkit directory: cd arithmetic ``` -## Set up the development environment [Permalink for this section](https://docs.arcade.dev/home/build-tools/create-a-toolkit\#set-up-the-development-environment) +## Set up the development environment [Permalink for this section](https://docs.arcade.dev/home/build-tools/create-a-mcp-server\#set-up-the-development-environment) An active virtual environment for your shell(s) is required to run the local development commands. @@ -21692,7 +21692,7 @@ or uv run ``` -## Define your tools [Permalink for this section](https://docs.arcade.dev/home/build-tools/create-a-toolkit\#define-your-tools) +## Define your tools [Permalink for this section](https://docs.arcade.dev/home/build-tools/create-a-mcp-server\#define-your-tools) Create a Python file for your tools in the `arcade_arithmetic/tools` directory. @@ -21764,7 +21764,7 @@ from arcade_arithmetic.tools import add, multiply, subtract __all__ = ["add", "multiply", "subtract"] ``` -## Test your toolkit [Permalink for this section](https://docs.arcade.dev/home/build-tools/create-a-toolkit\#test-your-toolkit) +## Test your toolkit [Permalink for this section](https://docs.arcade.dev/home/build-tools/create-a-mcp-server\#test-your-toolkit) Write tests for your tools in the `tests` directory: @@ -21809,7 +21809,7 @@ Generate a coverage report (optional): make coverage ``` -## Verify local installation [Permalink for this section](https://docs.arcade.dev/home/build-tools/create-a-toolkit\#verify-local-installation) +## Verify local installation [Permalink for this section](https://docs.arcade.dev/home/build-tools/create-a-mcp-server\#verify-local-installation) Your toolkit should already be installed locally from the `make install` command. Verify it’s properly registered: @@ -21819,7 +21819,7 @@ arcade show --local You should see your toolkit listed in the output. -## Test your tools locally [Permalink for this section](https://docs.arcade.dev/home/build-tools/create-a-toolkit\#test-your-tools-locally) +## Test your tools locally [Permalink for this section](https://docs.arcade.dev/home/build-tools/create-a-mcp-server\#test-your-tools-locally) Serve your toolkit locally with the Arcade CLI: @@ -21835,7 +21835,7 @@ arcade serve --reload Visit [http://localhost:8002/worker/health](http://localhost:8002/worker/health) to see that your worker is running. -## Connect your toolkit to the Arcade Engine [Permalink for this section](https://docs.arcade.dev/home/build-tools/create-a-toolkit\#connect-your-toolkit-to-the-arcade-engine) +## Connect your toolkit to the Arcade Engine [Permalink for this section](https://docs.arcade.dev/home/build-tools/create-a-mcp-server\#connect-your-toolkit-to-the-arcade-engine) In another terminal, use a service like [ngrok](https://ngrok.com/docs/), [tailscale](https://tailscale.com/kb/1223/funnel), or [cloudflare](https://developers.cloudflare.com/cloudflare-one/connections/connect-networks/do-more-with-tunnels/local-management/create-local-tunnel/) to give your local worker a public URL. @@ -21859,7 +21859,7 @@ Then in your Arcade dashboard: Now, in the [Playground](https://api.arcade.dev/dashboard/playground), you can see your tools in action. -## Deploy your toolkit to the Arcade Engine [Permalink for this section](https://docs.arcade.dev/home/build-tools/create-a-toolkit\#deploy-your-toolkit-to-the-arcade-engine) +## Deploy your toolkit to the Arcade Engine [Permalink for this section](https://docs.arcade.dev/home/build-tools/create-a-mcp-server\#deploy-your-toolkit-to-the-arcade-engine) Alternatively, you can deploy your toolkit to Arcade’s cloud instead of tunneling to it locally. @@ -21894,7 +21894,7 @@ Verify the deployment: arcade worker list ``` -## Package and publish to PyPI [Permalink for this section](https://docs.arcade.dev/home/build-tools/create-a-toolkit\#package-and-publish-to-pypi) +## Package and publish to PyPI [Permalink for this section](https://docs.arcade.dev/home/build-tools/create-a-mcp-server\#package-and-publish-to-pypi) Clean any previous build artifacts: @@ -21922,7 +21922,7 @@ Publish to PyPI: uv publish --token YOUR_PYPI_TOKEN_HERE ``` -## Using your published toolkit [Permalink for this section](https://docs.arcade.dev/home/build-tools/create-a-toolkit\#using-your-published-toolkit) +## Using your published toolkit [Permalink for this section](https://docs.arcade.dev/home/build-tools/create-a-mcp-server\#using-your-published-toolkit) Now that your toolkit is published, you can use it in any Arcade application: @@ -21944,7 +21944,7 @@ response = client.tools.execute( print(response.output.value) ``` -## Ongoing toolkit maintenance [Permalink for this section](https://docs.arcade.dev/home/build-tools/create-a-toolkit\#ongoing-toolkit-maintenance) +## Ongoing toolkit maintenance [Permalink for this section](https://docs.arcade.dev/home/build-tools/create-a-mcp-server\#ongoing-toolkit-maintenance) As you continue to develop your toolkit, use these Makefile commands to maintain it: @@ -21955,7 +21955,7 @@ As you continue to develop your toolkit, use these Makefile commands to maintain - `make build` \- Build new distribution packages - `make clean-build` \- Clean up build artifacts when needed -## Next steps [Permalink for this section](https://docs.arcade.dev/home/build-tools/create-a-toolkit\#next-steps) +## Next steps [Permalink for this section](https://docs.arcade.dev/home/build-tools/create-a-mcp-server\#next-steps) - **Add more tools**: Expand your toolkit with more complex operations - **Add authentication**: [Learn how to create tools with authentication](https://docs.arcade.dev/home/build-tools/create-a-tool-with-auth) @@ -22130,7 +22130,7 @@ print(response.json()) ## Using LinkedIn auth in custom tools [Permalink for this section](https://docs.arcade.dev/home/auth-providers/linkedin\#using-linkedin-auth-in-custom-tools) -You can author your own [custom tools](https://docs.arcade.dev/home/build-tools/create-a-toolkit) that interact with LinkedIn APIs. +You can author your own [custom tools](https://docs.arcade.dev/home/build-tools/create-a-mcp-server) that interact with LinkedIn APIs. Use the `LinkedIn()` auth class to specify that a tool requires authorization with LinkedIn. The `context.authorization.token` field will be automatically populated with the user’s LinkedIn token: @@ -22310,7 +22310,7 @@ token = auth_response.context.token ## Using ClickUp auth in custom tools [Permalink for this section](https://docs.arcade.dev/home/auth-providers/clickup\#using-clickup-auth-in-custom-tools) -You can author your own [custom tools](https://docs.arcade.dev/home/build-tools/create-a-toolkit) that interact with the ClickUp API. +You can author your own [custom tools](https://docs.arcade.dev/home/build-tools/create-a-mcp-server) that interact with the ClickUp API. Use the `ClickUp()` auth class to specify that a tool requires authorization with ClickUp. The `context.authorization.token` field will be automatically populated with the user’s ClickUp token: @@ -22375,7 +22375,7 @@ This will be shown if an incident or maintenance is posted on your status page. The Hubspot toolkit offers pre-built tools for interacting with HubSpot CRM. Use these tools to automate CRM updates, log interactions, link records, and query HubSpot data for workflows and agents. -## Available Tools [Permalink for this section](https://docs.arcade.dev/toolkits/sales/hubspot\#available-tools) +## Available Tools [Permalink for this section](https://docs.arcade.dev/mcp-servers/sales/hubspot\#available-tools) | Tool Name | Description | | --- | --- | @@ -22414,9 +22414,9 @@ Use these tools to automate CRM updates, log interactions, link records, and que 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](https://docs.arcade.dev/home/build-tools/create-a-toolkit). +own tools](https://docs.arcade.dev/home/build-tools/create-a-mcp-server). -## Hubspot.GetAllUsers [Permalink for this section](https://docs.arcade.dev/toolkits/sales/hubspot\#hubspotgetallusers) +## Hubspot.GetAllUsers [Permalink for this section](https://docs.arcade.dev/mcp-servers/sales/hubspot\#hubspotgetallusers) See Example > @@ -22426,7 +22426,7 @@ Get all users/owners in the HubSpot portal. This tool does not take any parameters. -## Hubspot.GetUserById [Permalink for this section](https://docs.arcade.dev/toolkits/sales/hubspot\#hubspotgetuserbyid) +## Hubspot.GetUserById [Permalink for this section](https://docs.arcade.dev/mcp-servers/sales/hubspot\#hubspotgetuserbyid) See Example > @@ -22436,7 +22436,7 @@ Get detailed information about a specific user/owner by their ID. - **owner\_id** ( `integer`, required) The HubSpot owner/user ID to retrieve -## Hubspot.WhoAmI [Permalink for this section](https://docs.arcade.dev/toolkits/sales/hubspot\#hubspotwhoami) +## Hubspot.WhoAmI [Permalink for this section](https://docs.arcade.dev/mcp-servers/sales/hubspot\#hubspotwhoami) See Example > @@ -22446,7 +22446,7 @@ Get current user information from HubSpot. This tool does not take any parameters. -## Hubspot.ToolkitEnviromentGuidance [Permalink for this section](https://docs.arcade.dev/toolkits/sales/hubspot\#hubspottoolkitenviromentguidance) +## Hubspot.ToolkitEnviromentGuidance [Permalink for this section](https://docs.arcade.dev/mcp-servers/sales/hubspot\#hubspottoolkitenviromentguidance) See Example > @@ -22456,7 +22456,7 @@ Get guidance and considerations for using the HubSpot toolkit effectively. This tool does not take any parameters. -## Hubspot.CreateNoteActivity [Permalink for this section](https://docs.arcade.dev/toolkits/sales/hubspot\#hubspotcreatenoteactivity) +## Hubspot.CreateNoteActivity [Permalink for this section](https://docs.arcade.dev/mcp-servers/sales/hubspot\#hubspotcreatenoteactivity) See Example > @@ -22470,7 +22470,7 @@ Create a note engagement activity with required owner and associations. - **associate\_to\_company\_id** ( `integer`, optional) Company ID to associate this note with. - **associate\_to\_deal\_id** ( `integer`, optional) Deal ID to associate this note with. -## Hubspot.CreateCallActivity [Permalink for this section](https://docs.arcade.dev/toolkits/sales/hubspot\#hubspotcreatecallactivity) +## Hubspot.CreateCallActivity [Permalink for this section](https://docs.arcade.dev/mcp-servers/sales/hubspot\#hubspotcreatecallactivity) See Example > @@ -22480,7 +22480,7 @@ Create a call engagement activity with required owner and associations. - **title** ( `string`, required) Short title for the call. - **when\_occurred** ( `string`, required) When the call occurred (ISO date format: YYYY-MM-DDTHH:MM:SS). -- **direction** ( `Enum` [HubspotCallDirection](https://docs.arcade.dev/toolkits/sales/hubspot/reference#HubspotCallDirection), optional) Call direction (INBOUND or OUTBOUND). +- **direction** ( `Enum` [HubspotCallDirection](https://docs.arcade.dev/mcp-servers/sales/hubspot/reference#HubspotCallDirection), optional) Call direction (INBOUND or OUTBOUND). - **summary** ( `string`, optional) Short summary/notes of the call. - **duration** ( `integer`, optional) Call duration in seconds. - **to\_number** ( `string`, optional) Phone number called to. @@ -22489,7 +22489,7 @@ Create a call engagement activity with required owner and associations. - **associate\_to\_company\_id** ( `integer`, optional) Company ID to associate this call with. - **associate\_to\_deal\_id** ( `integer`, optional) Deal ID to associate this call with. -## Hubspot.CreateEmailActivity [Permalink for this section](https://docs.arcade.dev/toolkits/sales/hubspot\#hubspotcreateemailactivity) +## Hubspot.CreateEmailActivity [Permalink for this section](https://docs.arcade.dev/mcp-servers/sales/hubspot\#hubspotcreateemailactivity) See Example > @@ -22509,13 +22509,13 @@ Create a logged email engagement activity with essential fields including email - **to\_last\_name** ( `string`, optional) Primary recipient last name. - **cc\_emails** ( `array[string]`, optional) CC recipient email addresses. - **bcc\_emails** ( `array[string]`, optional) BCC recipient email addresses. -- **direction** ( `Enum` [HubspotEmailDirection](https://docs.arcade.dev/toolkits/sales/hubspot/reference#HubspotEmailDirection), optional) Direction the email was sent (EMAIL, INCOMING\_EMAIL, FORWARDED\_EMAIL). -- **status** ( `Enum` [HubspotEmailStatus](https://docs.arcade.dev/toolkits/sales/hubspot/reference#HubspotEmailStatus), optional) Email status indicating the state of the email. +- **direction** ( `Enum` [HubspotEmailDirection](https://docs.arcade.dev/mcp-servers/sales/hubspot/reference#HubspotEmailDirection), optional) Direction the email was sent (EMAIL, INCOMING\_EMAIL, FORWARDED\_EMAIL). +- **status** ( `Enum` [HubspotEmailStatus](https://docs.arcade.dev/mcp-servers/sales/hubspot/reference#HubspotEmailStatus), optional) Email status indicating the state of the email. - **associate\_to\_contact\_id** ( `integer`, optional) Contact ID to associate this email with. - **associate\_to\_company\_id** ( `integer`, optional) Company ID to associate this email with. - **associate\_to\_deal\_id** ( `integer`, optional) Deal ID to associate this email with. -## Hubspot.CreateMeetingActivity [Permalink for this section](https://docs.arcade.dev/toolkits/sales/hubspot\#hubspotcreatemeetingactivity) +## Hubspot.CreateMeetingActivity [Permalink for this section](https://docs.arcade.dev/mcp-servers/sales/hubspot\#hubspotcreatemeetingactivity) See Example > @@ -22528,12 +22528,12 @@ Create a meeting with essential fields including separate date and time. - **start\_time** ( `string`, required) Start time (HH:MM or HH:MM:SS format). - **duration** ( `string`, optional) Meeting duration in HH:MM format (e.g., 1:30 for 1 hour 30 minutes). - **location** ( `string`, optional) Meeting location. -- **outcome** ( `Enum` [HubspotMeetingOutcome](https://docs.arcade.dev/toolkits/sales/hubspot/reference#HubspotMeetingOutcome), optional) Meeting outcome. +- **outcome** ( `Enum` [HubspotMeetingOutcome](https://docs.arcade.dev/mcp-servers/sales/hubspot/reference#HubspotMeetingOutcome), optional) Meeting outcome. - **associate\_to\_contact\_id** ( `integer`, optional) Contact ID to associate this meeting with. - **associate\_to\_company\_id** ( `integer`, optional) Company ID to associate this meeting with. - **associate\_to\_deal\_id** ( `integer`, optional) Deal ID to associate this meeting with. -## Hubspot.CreateCommunicationActivity [Permalink for this section](https://docs.arcade.dev/toolkits/sales/hubspot\#hubspotcreatecommunicationactivity) +## Hubspot.CreateCommunicationActivity [Permalink for this section](https://docs.arcade.dev/mcp-servers/sales/hubspot\#hubspotcreatecommunicationactivity) See Example > @@ -22541,14 +22541,14 @@ Create a communication activity for logging communications that are not done via **Parameters** -- **channel** ( `Enum` [HubspotCommunicationChannel](https://docs.arcade.dev/toolkits/sales/hubspot/reference#HubspotCommunicationChannel), required) Communication channel type. +- **channel** ( `Enum` [HubspotCommunicationChannel](https://docs.arcade.dev/mcp-servers/sales/hubspot/reference#HubspotCommunicationChannel), required) Communication channel type. - **when\_occurred** ( `string`, required) When the communication occurred (ISO date format: YYYY-MM-DDTHH:MM:SS). - **body\_text** ( `string`, optional) Full message content. - **associate\_to\_contact\_id** ( `integer`, optional) Contact ID to associate this communication with. - **associate\_to\_company\_id** ( `integer`, optional) Company ID to associate this communication with. - **associate\_to\_deal\_id** ( `integer`, optional) Deal ID to associate this communication with. -## Hubspot.AssociateActivityToDeal [Permalink for this section](https://docs.arcade.dev/toolkits/sales/hubspot\#hubspotassociateactivitytodeal) +## Hubspot.AssociateActivityToDeal [Permalink for this section](https://docs.arcade.dev/mcp-servers/sales/hubspot\#hubspotassociateactivitytodeal) See Example > @@ -22556,11 +22556,11 @@ Associate a single activity object to a deal using HubSpot standard association **Parameters** -- **activity\_type** ( `Enum` [HubspotActivityType](https://docs.arcade.dev/toolkits/sales/hubspot/reference#HubspotActivityType), required) Engagement activity type. +- **activity\_type** ( `Enum` [HubspotActivityType](https://docs.arcade.dev/mcp-servers/sales/hubspot/reference#HubspotActivityType), required) Engagement activity type. - **activity\_id** ( `integer`, required) The activity object ID - **deal\_id** ( `integer`, required) The deal ID to associate to -## Hubspot.GetContactDataByKeywords [Permalink for this section](https://docs.arcade.dev/toolkits/sales/hubspot\#hubspotgetcontactdatabykeywords) +## Hubspot.GetContactDataByKeywords [Permalink for this section](https://docs.arcade.dev/mcp-servers/sales/hubspot\#hubspotgetcontactdatabykeywords) See Example > @@ -22572,7 +22572,7 @@ Retrieve contact data with associated companies, deals, calls, emails, - **limit** ( `integer`, optional) The maximum number of contacts to return. Defaults to 10. Max is 100. - **next\_page\_token** ( `string`, optional) The token to get the next page of results. Defaults to None (returns first page of results) -## Hubspot.CreateContact [Permalink for this section](https://docs.arcade.dev/toolkits/sales/hubspot\#hubspotcreatecontact) +## Hubspot.CreateContact [Permalink for this section](https://docs.arcade.dev/mcp-servers/sales/hubspot\#hubspotcreatecontact) See Example > @@ -22588,7 +22588,7 @@ Create a contact associated with a company. - **mobile\_phone** ( `string`, optional) The mobile phone number of the contact. - **job\_title** ( `string`, optional) The job title of the contact. -## Hubspot.ListContacts [Permalink for this section](https://docs.arcade.dev/toolkits/sales/hubspot\#hubspotlistcontacts) +## Hubspot.ListContacts [Permalink for this section](https://docs.arcade.dev/mcp-servers/sales/hubspot\#hubspotlistcontacts) See Example > @@ -22599,10 +22599,10 @@ List contacts with optional filtering by company ID or deal ID, with pagination - **limit** ( `integer`, optional) The maximum number of contacts to return. Defaults to 10. Max is 50. - **company\_id** ( `integer`, optional) Filter contacts by company ID. Defaults to None (no filtering). - **deal\_id** ( `integer`, optional) Filter contacts by deal ID. Defaults to None (no filtering). -- **sort\_order** ( `Enum` [HubspotSortOrder](https://docs.arcade.dev/toolkits/sales/hubspot/reference#HubspotSortOrder), optional) Sort order for results. Defaults to LATEST\_MODIFIED. +- **sort\_order** ( `Enum` [HubspotSortOrder](https://docs.arcade.dev/mcp-servers/sales/hubspot/reference#HubspotSortOrder), optional) Sort order for results. Defaults to LATEST\_MODIFIED. - **next\_page\_token** ( `string`, optional) The token to get the next page of results. Defaults to None (returns first page of results) -## Hubspot.GetDealDataByKeywords [Permalink for this section](https://docs.arcade.dev/toolkits/sales/hubspot\#hubspotgetdealdatabykeywords) +## Hubspot.GetDealDataByKeywords [Permalink for this section](https://docs.arcade.dev/mcp-servers/sales/hubspot\#hubspotgetdealdatabykeywords) See Example > @@ -22614,7 +22614,7 @@ Retrieve deal data with associated contacts, companies, calls, emails, - **limit** ( `integer`, optional) The maximum number of deals to return. Defaults to 10. Max is 10. - **next\_page\_token** ( `string`, optional) The token to get the next page of results. Defaults to None (returns first page of results) -## Hubspot.CreateDeal [Permalink for this section](https://docs.arcade.dev/toolkits/sales/hubspot\#hubspotcreatedeal) +## Hubspot.CreateDeal [Permalink for this section](https://docs.arcade.dev/mcp-servers/sales/hubspot\#hubspotcreatedeal) See Example > @@ -22625,14 +22625,14 @@ Create a new deal in HubSpot. - **deal\_name** ( `string`, required) The deal name (required) - **deal\_amount** ( `number`, optional) The deal amount/value - **deal\_stage** ( `string`, optional) The deal stage -- **deal\_type** ( `Enum` [HubspotDealType](https://docs.arcade.dev/toolkits/sales/hubspot/reference#HubspotDealType), optional) The deal type. +- **deal\_type** ( `Enum` [HubspotDealType](https://docs.arcade.dev/mcp-servers/sales/hubspot/reference#HubspotDealType), optional) The deal type. - **expected\_close\_date** ( `string`, optional) Expected close date in YYYY-MM-DD format - **pipeline\_id** ( `string`, optional) Pipeline id. Use β€˜default’ for default pipeline or pass a pipeline id (integer) - **deal\_owner** ( `string`, optional) The deal owner user ID -- **priority\_level** ( `Enum` [HubspotDealPriority](https://docs.arcade.dev/toolkits/sales/hubspot/reference#HubspotDealPriority), optional) Priority level. +- **priority\_level** ( `Enum` [HubspotDealPriority](https://docs.arcade.dev/mcp-servers/sales/hubspot/reference#HubspotDealPriority), optional) Priority level. - **deal\_description** ( `string`, optional) The deal description -## Hubspot.UpdateDealCloseDate [Permalink for this section](https://docs.arcade.dev/toolkits/sales/hubspot\#hubspotupdatedealclosedate) +## Hubspot.UpdateDealCloseDate [Permalink for this section](https://docs.arcade.dev/mcp-servers/sales/hubspot\#hubspotupdatedealclosedate) See Example > @@ -22643,7 +22643,7 @@ Update the expected close date of an existing deal in HubSpot. - **deal\_id** ( `integer`, required) The ID of the deal to update - **expected\_close\_date** ( `string`, required) New expected close date in YYYY-MM-DD format -## Hubspot.UpdateDealStage [Permalink for this section](https://docs.arcade.dev/toolkits/sales/hubspot\#hubspotupdatedealstage) +## Hubspot.UpdateDealStage [Permalink for this section](https://docs.arcade.dev/mcp-servers/sales/hubspot\#hubspotupdatedealstage) See Example > @@ -22656,7 +22656,7 @@ Updates a deal’s stage, validating against the current pipeline if provided - **current\_pipeline\_id** ( `string`, optional) Current pipeline id for this deal, if already known (skips fetching the deal) - **allow\_pipeline\_change** ( `boolean`, optional) If true, allows changing the deal’s pipeline when the stage belongs to another pipeline -## Hubspot.GetDealById [Permalink for this section](https://docs.arcade.dev/toolkits/sales/hubspot\#hubspotgetdealbyid) +## Hubspot.GetDealById [Permalink for this section](https://docs.arcade.dev/mcp-servers/sales/hubspot\#hubspotgetdealbyid) See Example > @@ -22666,7 +22666,7 @@ Retrieve a specific deal by its ID from HubSpot. - **deal\_id** ( `integer`, required) The ID of the deal to retrieve -## Hubspot.AssociateContactToDeal [Permalink for this section](https://docs.arcade.dev/toolkits/sales/hubspot\#hubspotassociatecontacttodeal) +## Hubspot.AssociateContactToDeal [Permalink for this section](https://docs.arcade.dev/mcp-servers/sales/hubspot\#hubspotassociatecontacttodeal) See Example > @@ -22677,7 +22677,7 @@ Associate a contact with an existing deal in HubSpot. - **deal\_id** ( `integer`, required) The ID of the deal to associate the contact with - **contact\_id** ( `integer`, required) The ID of the contact to associate with the deal -## Hubspot.ListDeals [Permalink for this section](https://docs.arcade.dev/toolkits/sales/hubspot\#hubspotlistdeals) +## Hubspot.ListDeals [Permalink for this section](https://docs.arcade.dev/mcp-servers/sales/hubspot\#hubspotlistdeals) See Example > @@ -22688,10 +22688,10 @@ List deals with optional filtering by contact ID or company ID, with pagination - **limit** ( `integer`, optional) The maximum number of deals to return. Defaults to 10. Max is 50. - **contact\_id** ( `integer`, optional) Filter deals by contact ID. Defaults to None (no filtering). - **company\_id** ( `integer`, optional) Filter deals by company ID. Defaults to None (no filtering). -- **sort\_order** ( `Enum` [HubspotSortOrder](https://docs.arcade.dev/toolkits/sales/hubspot/reference#HubspotSortOrder), optional) Sort order for results. Defaults to LATEST\_MODIFIED. +- **sort\_order** ( `Enum` [HubspotSortOrder](https://docs.arcade.dev/mcp-servers/sales/hubspot/reference#HubspotSortOrder), optional) Sort order for results. Defaults to LATEST\_MODIFIED. - **next\_page\_token** ( `string`, optional) The token to get the next page of results. Defaults to None (returns first page of results) -## Hubspot.GetNoteDataByKeywords [Permalink for this section](https://docs.arcade.dev/toolkits/sales/hubspot\#hubspotgetnotedatabykeywords) +## Hubspot.GetNoteDataByKeywords [Permalink for this section](https://docs.arcade.dev/mcp-servers/sales/hubspot\#hubspotgetnotedatabykeywords) See Example > @@ -22704,7 +22704,7 @@ Search for note activities by search terms in NOTE object properties. - **truncate\_big\_strings** ( `boolean`, optional) Whether to truncate string properties longer than 100 characters. Defaults to False. - **next\_page\_token** ( `string`, optional) The token to get the next page of results. Defaults to None (returns first page of results) -## Hubspot.GetCallDataByKeywords [Permalink for this section](https://docs.arcade.dev/toolkits/sales/hubspot\#hubspotgetcalldatabykeywords) +## Hubspot.GetCallDataByKeywords [Permalink for this section](https://docs.arcade.dev/mcp-servers/sales/hubspot\#hubspotgetcalldatabykeywords) See Example > @@ -22717,7 +22717,7 @@ Search for call activities by search terms in CALL object properties. - **truncate\_big\_strings** ( `boolean`, optional) Whether to truncate string properties longer than 100 characters. Defaults to False. - **next\_page\_token** ( `string`, optional) The token to get the next page of results. Defaults to None (returns first page of results) -## Hubspot.GetEmailDataByKeywords [Permalink for this section](https://docs.arcade.dev/toolkits/sales/hubspot\#hubspotgetemaildatabykeywords) +## Hubspot.GetEmailDataByKeywords [Permalink for this section](https://docs.arcade.dev/mcp-servers/sales/hubspot\#hubspotgetemaildatabykeywords) See Example > @@ -22730,7 +22730,7 @@ Search for email activities by search terms in EMAIL object properties. - **truncate\_big\_strings** ( `boolean`, optional) Whether to truncate string properties longer than 100 characters. Defaults to False. - **next\_page\_token** ( `string`, optional) The token to get the next page of results. Defaults to None (returns first page of results) -## Hubspot.GetMeetingDataByKeywords [Permalink for this section](https://docs.arcade.dev/toolkits/sales/hubspot\#hubspotgetmeetingdatabykeywords) +## Hubspot.GetMeetingDataByKeywords [Permalink for this section](https://docs.arcade.dev/mcp-servers/sales/hubspot\#hubspotgetmeetingdatabykeywords) See Example > @@ -22743,7 +22743,7 @@ Search for meeting activities by search terms in MEETING object properties. - **truncate\_big\_strings** ( `boolean`, optional) Whether to truncate string properties longer than 100 characters. Defaults to False. - **next\_page\_token** ( `string`, optional) The token to get the next page of results. Defaults to None (returns first page of results) -## Hubspot.GetTaskDataByKeywords [Permalink for this section](https://docs.arcade.dev/toolkits/sales/hubspot\#hubspotgettaskdatabykeywords) +## Hubspot.GetTaskDataByKeywords [Permalink for this section](https://docs.arcade.dev/mcp-servers/sales/hubspot\#hubspotgettaskdatabykeywords) See Example > @@ -22756,7 +22756,7 @@ Search for task activities by search terms in TASK object properties. - **truncate\_big\_strings** ( `boolean`, optional) Whether to truncate string properties longer than 100 characters. Defaults to False. - **next\_page\_token** ( `string`, optional) The token to get the next page of results. Defaults to None (returns first page of results) -## Hubspot.GetCommunicationDataByKeywords [Permalink for this section](https://docs.arcade.dev/toolkits/sales/hubspot\#hubspotgetcommunicationdatabykeywords) +## Hubspot.GetCommunicationDataByKeywords [Permalink for this section](https://docs.arcade.dev/mcp-servers/sales/hubspot\#hubspotgetcommunicationdatabykeywords) See Example > @@ -22769,7 +22769,7 @@ Search for communication activities by search terms in COMMUNICATION object prop - **truncate\_big\_strings** ( `boolean`, optional) Whether to truncate string properties longer than 100 characters. Defaults to False. - **next\_page\_token** ( `string`, optional) The token to get the next page of results. Defaults to None (returns first page of results) -## Hubspot.GetCompanyDataByKeywords [Permalink for this section](https://docs.arcade.dev/toolkits/sales/hubspot\#hubspotgetcompanydatabykeywords) +## Hubspot.GetCompanyDataByKeywords [Permalink for this section](https://docs.arcade.dev/mcp-servers/sales/hubspot\#hubspotgetcompanydatabykeywords) See Example > @@ -22781,7 +22781,7 @@ Retrieve company data with associated contacts, deals, calls, emails, - **limit** ( `integer`, optional) The maximum number of companies to return. Defaults to 10. Max is 10. - **next\_page\_token** ( `string`, optional) The token to get the next page of results. Defaults to None (returns first page of results) -## Hubspot.CreateCompany [Permalink for this section](https://docs.arcade.dev/toolkits/sales/hubspot\#hubspotcreatecompany) +## Hubspot.CreateCompany [Permalink for this section](https://docs.arcade.dev/mcp-servers/sales/hubspot\#hubspotcreatecompany) See Example > @@ -22798,7 +22798,7 @@ Create a new company in HubSpot. - **phone\_number** ( `string`, optional) The company main phone number - **website\_url** ( `string`, optional) The company website URL -## Hubspot.ListCompanies [Permalink for this section](https://docs.arcade.dev/toolkits/sales/hubspot\#hubspotlistcompanies) +## Hubspot.ListCompanies [Permalink for this section](https://docs.arcade.dev/mcp-servers/sales/hubspot\#hubspotlistcompanies) See Example > @@ -22807,10 +22807,10 @@ List companies with pagination support. **Parameters** - **limit** ( `integer`, optional) The maximum number of companies to return. Defaults to 10. Max is 50. -- **sort\_order** ( `Enum` [HubspotSortOrder](https://docs.arcade.dev/toolkits/sales/hubspot/reference#HubspotSortOrder), optional) Sort order for results. Defaults to LATEST\_MODIFIED. +- **sort\_order** ( `Enum` [HubspotSortOrder](https://docs.arcade.dev/mcp-servers/sales/hubspot/reference#HubspotSortOrder), optional) Sort order for results. Defaults to LATEST\_MODIFIED. - **next\_page\_token** ( `string`, optional) The token to get the next page of results. Defaults to None (returns first page of results) -## Hubspot.GetAvailableIndustryTypes [Permalink for this section](https://docs.arcade.dev/toolkits/sales/hubspot\#hubspotgetavailableindustrytypes) +## Hubspot.GetAvailableIndustryTypes [Permalink for this section](https://docs.arcade.dev/mcp-servers/sales/hubspot\#hubspotgetavailableindustrytypes) See Example > @@ -22820,7 +22820,7 @@ Get all available industry types for HubSpot companies. This tool does not take any parameters. -## Hubspot.GetDealPipelines [Permalink for this section](https://docs.arcade.dev/toolkits/sales/hubspot\#hubspotgetdealpipelines) +## Hubspot.GetDealPipelines [Permalink for this section](https://docs.arcade.dev/mcp-servers/sales/hubspot\#hubspotgetdealpipelines) See Example > @@ -22830,7 +22830,7 @@ List HubSpot deal pipelines with their stages, optionally filtered by a search s - **search** ( `string`, optional) Optional case-insensitive search string to filter pipelines by id or label -## Hubspot.GetDealPipelineStages [Permalink for this section](https://docs.arcade.dev/toolkits/sales/hubspot\#hubspotgetdealpipelinestages) +## Hubspot.GetDealPipelineStages [Permalink for this section](https://docs.arcade.dev/mcp-servers/sales/hubspot\#hubspotgetdealpipelinestages) See Example > @@ -22840,7 +22840,7 @@ List stages for a specific HubSpot deal pipeline. - **pipeline\_id** ( `string`, required) The pipeline id (e.g., β€˜default’ or a pipeline GUID) -## Auth [Permalink for this section](https://docs.arcade.dev/toolkits/sales/hubspot\#auth) +## Auth [Permalink for this section](https://docs.arcade.dev/mcp-servers/sales/hubspot\#auth) The Arcade Cloud Platform offers a default [Hubspot auth provider](https://docs.arcade.dev/home/auth-providers/hubspot). If you use it, there’s nothing to configure. Your users will see `Arcade` as the name of the application requesting permission. @@ -22858,7 +22858,7 @@ Arcade tools can be self-hosted on your own infrastructure. Learn more about sel pip install arcade_hubspot\\ ```](https://docs.arcade.dev/home/hosting-overview) -[Youtube](https://docs.arcade.dev/toolkits/search/youtube "Youtube") [Reference](https://docs.arcade.dev/toolkits/sales/hubspot/reference "Reference") +[Youtube](https://docs.arcade.dev/mcp-servers/search/youtube "Youtube") [Reference](https://docs.arcade.dev/mcp-servers/sales/hubspot/reference "Reference") Frame @@ -22870,7 +22870,7 @@ This will be shown if an incident or maintenance is posted on your status page. [View latest updates](https://status.arcade.dev/?utm_source=embed) ## Salesforce CRM Toolkit -[Integrations](https://docs.arcade.dev/toolkits "Integrations") [Sales](https://docs.arcade.dev/toolkits/sales/hubspot "Sales") Salesforce +[Integrations](https://docs.arcade.dev/toolkits "Integrations") [Sales](https://docs.arcade.dev/mcp-servers/sales/hubspot "Sales") Salesforce # Salesforce CRM @@ -22886,24 +22886,24 @@ Salesforce OAuth 2.0 credentials as documented in [Salesforce Auth Provider](htt [![PyPI Version](https://img.shields.io/pypi/v/arcade_salesforce)](https://pypi.org/project/arcade_salesforce/)[![License](https://img.shields.io/badge/License-MIT-yellow.svg)](https://github.com/arcadeai/arcade-ai/blob/main/LICENSE)[![Python Versions](https://img.shields.io/pypi/pyversions/arcade_salesforce)](https://pypi.org/project/arcade_salesforce/)[![Wheel Status](https://img.shields.io/pypi/wheel/arcade_salesforce)](https://pypi.org/project/arcade_salesforce/)[![Downloads](https://img.shields.io/pypi/dm/arcade_salesforce)](https://pypi.org/project/arcade_salesforce/) -The Arcade Salesforce CRM toolkit provides a pre-built set of tools for interacting with Accounts, Leads, Contacts, etc in the Salesforce CRM. These tools make it easy to build agents and AI apps that can: +The Arcade Salesforce CRM MCP Server provides a pre-built set of tools for interacting with Accounts, Leads, Contacts, etc in the Salesforce CRM. These tools make it easy to build agents and AI apps that can: - Search for Accounts and Contacts by keywords or retrieve them by ID - Read information about Accounts, such as company metadata, opportunities, deals, etc. - Read information about Contacts, such as name, email addresses, phone numbers, email messages, call logs, notes, meetings, tasks, etc. - Create contacts -## Install and Run the Arcade Engine [Permalink for this section](https://docs.arcade.dev/toolkits/sales/salesforce\#install-and-run-the-arcade-engine) +## Install and Run the Arcade Engine [Permalink for this section](https://docs.arcade.dev/mcp-servers/sales/salesforce\#install-and-run-the-arcade-engine) At this time, you need to [self-host](https://docs.arcade.dev/home/auth-providers/salesforce) the Arcade Engine to use the Salesforce toolkit. Follow the step-by-step instructions in the [Salesforce Auth Provider](https://docs.arcade.dev/home/auth-providers/salesforce) page. -## Install [Permalink for this section](https://docs.arcade.dev/toolkits/sales/salesforce\#install) +## Install [Permalink for this section](https://docs.arcade.dev/mcp-servers/sales/salesforce\#install) ```nextra-code pip install arcade_salesforce ``` -## Available Tools [Permalink for this section](https://docs.arcade.dev/toolkits/sales/salesforce\#available-tools) +## Available Tools [Permalink for this section](https://docs.arcade.dev/mcp-servers/sales/salesforce\#available-tools) | Tool Name | Description | | --- | --- | @@ -22913,11 +22913,11 @@ pip install arcade_salesforce 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](https://docs.arcade.dev/home/build-tools/create-a-toolkit). +own tools](https://docs.arcade.dev/home/build-tools/create-a-mcp-server). In order to use the Salesforce toolkit, you must [self-host the Arcade Engine](https://docs.arcade.dev/home/local-deployment/install/local) and [configure the Salesforce auth provider](https://docs.arcade.dev/home/auth-providers/salesforce). The Arcade Engine is available at `http://localhost:9099` by default. In the code examples below, if necessary, adjust the `base_url` (in Python) or `baseURL` (in JavaScript) parameter in the `Arcade` client constructor to match your environment. -## Salesforce.GetAccountDataByKeywords [Permalink for this section](https://docs.arcade.dev/toolkits/sales/salesforce\#salesforcegetaccountdatabykeywords) +## Salesforce.GetAccountDataByKeywords [Permalink for this section](https://docs.arcade.dev/mcp-servers/sales/salesforce\#salesforcegetaccountdatabykeywords) See Example > @@ -22929,7 +22929,7 @@ Searches for accounts in Salesforce and returns them with related info: contacts - **limit** _(int, optional, Defaults to `10`)_ The maximum number of accounts to return. Defaults to 10. Maximum allowed is 10. - **page** _(string, optional)_ The page number to return. Defaults to 1 (first page of results).” -## Salesforce.GetAccountDataByID [Permalink for this section](https://docs.arcade.dev/toolkits/sales/salesforce\#salesforcegetaccountdatabyid) +## Salesforce.GetAccountDataByID [Permalink for this section](https://docs.arcade.dev/mcp-servers/sales/salesforce\#salesforcegetaccountdatabyid) See Example > @@ -22939,7 +22939,7 @@ Gets the account with related info: contacts, leads, notes, calls, opportunities - **account\_id** _(string, required)_ The ID of the account to get data for. -## Salesforce.CreateContact [Permalink for this section](https://docs.arcade.dev/toolkits/sales/salesforce\#salesforcecreatecontact) +## Salesforce.CreateContact [Permalink for this section](https://docs.arcade.dev/mcp-servers/sales/salesforce\#salesforcecreatecontact) See Example > @@ -22957,13 +22957,13 @@ Creates a contact in Salesforce associated with an account. - **department** _(string, optional)_ The department of the contact. E.g. β€˜Marketing’, β€˜Sales’, β€˜IT’, etc.”. - **description** _(string, optional)_ A description of the contact. -## Self-hosting the Arcade Engine with Salesforce Auth [Permalink for this section](https://docs.arcade.dev/toolkits/sales/salesforce\#self-hosting-the-arcade-engine-with-salesforce-auth) +## Self-hosting the Arcade Engine with Salesforce Auth [Permalink for this section](https://docs.arcade.dev/mcp-servers/sales/salesforce\#self-hosting-the-arcade-engine-with-salesforce-auth) At this time, Arcade Cloud does not support Salesforce auth. In order to use the Salesforce toolkit (or develop custom tools for Salesforce), you have to [self-host the Arcade Engine](https://docs.arcade.dev/home/local-deployment/install/local) and [configure the Salesforce auth provider](https://docs.arcade.dev/home/auth-providers/salesforce) in your engine configuration. -[Reference](https://docs.arcade.dev/toolkits/sales/hubspot/reference "Reference") [Postgres](https://docs.arcade.dev/toolkits/databases/postgres "Postgres") +[Reference](https://docs.arcade.dev/mcp-servers/sales/hubspot/reference "Reference") [Postgres](https://docs.arcade.dev/mcp-servers/databases/postgres "Postgres") Frame @@ -23064,7 +23064,7 @@ This will be shown if an incident or maintenance is posted on your status page. [View latest updates](https://status.arcade.dev/?utm_source=embed) ## Google Shopping Search -[Integrations](https://docs.arcade.dev/toolkits "Integrations") [Search Tools](https://docs.arcade.dev/toolkits/search/google_finance "Search Tools") Google Shopping +[Integrations](https://docs.arcade.dev/toolkits "Integrations") [Search Tools](https://docs.arcade.dev/mcp-servers/search/google_finance "Search Tools") Google Shopping # Google Shopping Search @@ -23076,11 +23076,11 @@ This will be shown if an incident or maintenance is posted on your status page. [![PyPI Version](https://img.shields.io/pypi/v/arcade_google-shopping)](https://pypi.org/project/arcade_google-shopping/)[![License](https://img.shields.io/badge/License-MIT-yellow.svg)](https://github.com/arcadeai/arcade-ai/blob/main/LICENSE)[![Python Versions](https://img.shields.io/pypi/pyversions/arcade_google-shopping)](https://pypi.org/project/arcade_google-shopping/)[![Wheel Status](https://img.shields.io/pypi/wheel/arcade_google-shopping)](https://pypi.org/project/arcade_google-shopping/)[![Downloads](https://img.shields.io/pypi/dm/arcade_google-shopping)](https://pypi.org/project/arcade_google-shopping/) -The Arcade Google Shopping Search toolkit provides a pre-built set of tools for interacting with Google Shopping. These tools make it easy to build agents and AI apps that can: +The Arcade Google Shopping Search MCP Server provides a pre-built set of tools for interacting with Google Shopping. These tools make it easy to build agents and AI apps that can: - Search for products on Google Shopping; -## Available Tools [Permalink for this section](https://docs.arcade.dev/toolkits/search/google_shopping\#available-tools) +## Available Tools [Permalink for this section](https://docs.arcade.dev/mcp-servers/search/google_shopping\#available-tools) | Tool Name | Description | | --- | --- | @@ -23088,9 +23088,9 @@ The Arcade Google Shopping Search toolkit provides a pre-built set of tools for 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](https://docs.arcade.dev/home/build-tools/create-a-toolkit). +own tools](https://docs.arcade.dev/home/build-tools/create-a-mcp-server). -## GoogleShopping.SearchProducts [Permalink for this section](https://docs.arcade.dev/toolkits/search/google_shopping\#googleshoppingsearchproducts) +## GoogleShopping.SearchProducts [Permalink for this section](https://docs.arcade.dev/mcp-servers/search/google_shopping\#googleshoppingsearchproducts) See Example > @@ -23099,10 +23099,10 @@ Search for products on Google Shopping. **Parameters** - **keywords** _(string, required)_ Keywords to search for. E.g. β€˜apple iphone’ or β€˜samsung galaxy’ -- **`country_code`** _(string, optional, Defaults to β€˜us’ United States)_ 2-character country code to use in the Google Shopping search. A list of supported country codes can be found [here](https://docs.arcade.dev/toolkits/search/google_shopping#countrycodes). -- **`language_code`** _(string, optional, Defaults to β€˜en’ English)_ 2-character language code to use in the Google Shopping search. A list of supported language codes can be found [here](https://docs.arcade.dev/toolkits/search/google_shopping#languagecodes). +- **`country_code`** _(string, optional, Defaults to β€˜us’ United States)_ 2-character country code to use in the Google Shopping search. A list of supported country codes can be found [here](https://docs.arcade.dev/mcp-servers/search/google_shopping#countrycodes). +- **`language_code`** _(string, optional, Defaults to β€˜en’ English)_ 2-character language code to use in the Google Shopping search. A list of supported language codes can be found [here](https://docs.arcade.dev/mcp-servers/search/google_shopping#languagecodes). -## Auth [Permalink for this section](https://docs.arcade.dev/toolkits/search/google_shopping\#auth) +## Auth [Permalink for this section](https://docs.arcade.dev/mcp-servers/search/google_shopping\#auth) The Arcade Google Shopping Search toolkit uses the [SerpAPI](https://serpapi.com/) to get product information from Google Shopping. @@ -23111,7 +23111,7 @@ The Arcade Google Shopping Search toolkit uses the [SerpAPI](https://serpapi.com Setting the `SERP_API_KEY` secret is only required if you are [self-hosting](https://docs.arcade.dev/home/local-deployment/install/overview) Arcade. If you’re using Arcade Cloud, the secret is already set for you. To manage your secrets, go to the [Secrets page](https://api.arcade.dev/dashboard/auth/secrets) in the Arcade Dashboard. -## Default parameter values [Permalink for this section](https://docs.arcade.dev/toolkits/search/google_shopping\#default-parameter-values) +## Default parameter values [Permalink for this section](https://docs.arcade.dev/mcp-servers/search/google_shopping\#default-parameter-values) Language and Country are configurable through environment variables. When set, they will be used as default for YouTube tools. @@ -23124,7 +23124,7 @@ The language code is a 2-character code that determines the language in which th - `ARCADE_GOOGLE_LANGUAGE`: a default value for all Google Search tools. If not set, defaults to β€˜en’ (English). - `ARCADE_GOOGLE_SHOPPING_LANGUAGE`: a default value for the Google Shopping Search tools. If not set, defaults to `ARCADE_GOOGLE_LANGUAGE`. -A list of supported language codes can be found [here](https://docs.arcade.dev/toolkits/search/google_shopping#languagecodes). +A list of supported language codes can be found [here](https://docs.arcade.dev/mcp-servers/search/google_shopping#languagecodes). **Country** @@ -23133,13 +23133,13 @@ The country code is a 2-character code that determines the country in which the - `ARCADE_GOOGLE_COUNTRY`: a default value for all Google Search tools. If not set, defaults to `None`. - `ARCADE_GOOGLE_SHOPPING_COUNTRY`: a default value for the Google Shopping Search tools. If not set, defaults to `ARCADE_GOOGLE_COUNTRY`. If `ARCADE_GOOGLE_COUNTRY` is not set, the default country for Google Shopping tools will be `us` (United States). -A list of supported country codes can be found [here](https://docs.arcade.dev/toolkits/search/google_shopping#countrycodes). +A list of supported country codes can be found [here](https://docs.arcade.dev/mcp-servers/search/google_shopping#countrycodes). * * * -## Reference [Permalink for this section](https://docs.arcade.dev/toolkits/search/google_shopping\#reference) +## Reference [Permalink for this section](https://docs.arcade.dev/mcp-servers/search/google_shopping\#reference) -## LanguageCodes [Permalink for this section](https://docs.arcade.dev/toolkits/search/google_shopping\#languagecodes) +## LanguageCodes [Permalink for this section](https://docs.arcade.dev/mcp-servers/search/google_shopping\#languagecodes) - **`ar`**: Arabic - **`bn`**: Bengali @@ -23173,7 +23173,7 @@ A list of supported country codes can be found [here](https://docs.arcade.dev/to - **`zh-cn`**: Chinese (Simplified) - **`zh-tw`**: Chinese (Traditional) -## CountryCodes [Permalink for this section](https://docs.arcade.dev/toolkits/search/google_shopping\#countrycodes) +## CountryCodes [Permalink for this section](https://docs.arcade.dev/mcp-servers/search/google_shopping\#countrycodes) - **`af`**: Afghanistan - **`al`**: Albania @@ -23434,7 +23434,7 @@ Arcade tools can be self-hosted on your own infrastructure. Learn more about sel pip install arcade_google_shopping\\ ```](https://docs.arcade.dev/home/hosting-overview) -[Google Search](https://docs.arcade.dev/toolkits/search/google_search "Google Search") [Walmart](https://docs.arcade.dev/toolkits/search/walmart "Walmart") +[Google Search](https://docs.arcade.dev/mcp-servers/search/google_search "Google Search") [Walmart](https://docs.arcade.dev/mcp-servers/search/walmart "Walmart") Frame @@ -23446,19 +23446,19 @@ This will be shown if an incident or maintenance is posted on your status page. [View latest updates](https://status.arcade.dev/?utm_source=embed) ## Arcade Twilio Toolkit -[Integrations](https://docs.arcade.dev/toolkits "Integrations") [Social & Communication](https://docs.arcade.dev/toolkits/social-communication/discord "Social & Communication") TwilioReadme +[Integrations](https://docs.arcade.dev/toolkits "Integrations") [Social & Communication](https://docs.arcade.dev/mcp-servers/social-communication/discord "Social & Communication") TwilioReadme # Arcade Twilio A handy toolkit for easily sending SMS and WhatsApp messages with Twilio. -## Features [Permalink for this section](https://docs.arcade.dev/toolkits/social-communication/twilio/readme\#features) +## Features [Permalink for this section](https://docs.arcade.dev/mcp-servers/social-communication/twilio/readme\#features) - Send SMS messages via Twilio - Send WhatsApp messages via Twilio - Built for Arcade integration -## Prerequisites [Permalink for this section](https://docs.arcade.dev/toolkits/social-communication/twilio/readme\#prerequisites) +## Prerequisites [Permalink for this section](https://docs.arcade.dev/mcp-servers/social-communication/twilio/readme\#prerequisites) A Twilio account with: @@ -23470,7 +23470,7 @@ A Twilio account with: To set up your Twilio account and acquire the required credentials, please refer to the Twilio documentation: [Create an API Key](https://www.twilio.com/docs/iam/api-keys#create-an-api-key). This guide will walk you through the process of creating an account and generating the necessary API keys. -## Configuration [Permalink for this section](https://docs.arcade.dev/toolkits/social-communication/twilio/readme\#configuration) +## Configuration [Permalink for this section](https://docs.arcade.dev/mcp-servers/social-communication/twilio/readme\#configuration) By default, the configuration is loaded from an `engine.env` file in your project root, but you can specify a different file if needed. Ensure the file contains the following variables: @@ -23482,7 +23482,7 @@ TWILIO_PHONE_NUMBER=your_twilio_phone_number MY_PHONE_NUMBER=your_personal_phone_number ``` -## Usage Examples [Permalink for this section](https://docs.arcade.dev/toolkits/social-communication/twilio/readme\#usage-examples) +## Usage Examples [Permalink for this section](https://docs.arcade.dev/mcp-servers/social-communication/twilio/readme\#usage-examples) Explore the versatility of this toolkit with the following example prompts: @@ -23511,7 +23511,7 @@ _Prompt:_ β€œSend an SMS to +19999999999 with today’s weather forecast for New _Prompt:_ β€œSend a WhatsApp message to +19999999999 saying β€˜Happy Birthday! Hope you have a fantastic day!’” -[Reference](https://docs.arcade.dev/toolkits/social-communication/slack/reference "Reference") [Reference](https://docs.arcade.dev/toolkits/social-communication/twilio/reference "Reference") +[Reference](https://docs.arcade.dev/mcp-servers/social-communication/slack/reference "Reference") [Reference](https://docs.arcade.dev/mcp-servers/social-communication/twilio/reference "Reference") Frame @@ -23523,7 +23523,7 @@ This will be shown if an incident or maintenance is posted on your status page. [View latest updates](https://status.arcade.dev/?utm_source=embed) ## Google Maps Toolkit -[Integrations](https://docs.arcade.dev/toolkits "Integrations") [Search Tools](https://docs.arcade.dev/toolkits/search/google_finance "Search Tools") Google Maps +[Integrations](https://docs.arcade.dev/toolkits "Integrations") [Search Tools](https://docs.arcade.dev/mcp-servers/search/google_finance "Search Tools") Google Maps # Google Maps @@ -23535,11 +23535,11 @@ This will be shown if an incident or maintenance is posted on your status page. [![PyPI Version](https://img.shields.io/pypi/v/arcade_google-maps)](https://pypi.org/project/arcade_google-maps/)[![License](https://img.shields.io/badge/License-MIT-yellow.svg)](https://github.com/arcadeai/arcade-ai/blob/main/LICENSE)[![Python Versions](https://img.shields.io/pypi/pyversions/arcade_google-maps)](https://pypi.org/project/arcade_google-maps/)[![Wheel Status](https://img.shields.io/pypi/wheel/arcade_google-maps)](https://pypi.org/project/arcade_google-maps/)[![Downloads](https://img.shields.io/pypi/dm/arcade_google-maps)](https://pypi.org/project/arcade_google-maps/) -The Arcade Google Maps toolkit provides a pre-built set of tools for interacting with Google Maps. These tools make it easy to build agents and AI apps that can: +The Arcade Google Maps MCP Server provides a pre-built set of tools for interacting with Google Maps. These tools make it easy to build agents and AI apps that can: - Get directions to a location using an address or latitude/longitude. -## Available Tools [Permalink for this section](https://docs.arcade.dev/toolkits/search/google_maps\#available-tools) +## Available Tools [Permalink for this section](https://docs.arcade.dev/mcp-servers/search/google_maps\#available-tools) | Tool Name | Description | | --- | --- | @@ -23548,9 +23548,9 @@ The Arcade Google Maps toolkit provides a pre-built set of tools for interacting 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](https://docs.arcade.dev/home/build-tools/create-a-toolkit). +own tools](https://docs.arcade.dev/home/build-tools/create-a-mcp-server). -## GoogleMaps.GetDirectionsBetweenAddresses [Permalink for this section](https://docs.arcade.dev/toolkits/search/google_maps\#googlemapsgetdirectionsbetweenaddresses) +## GoogleMaps.GetDirectionsBetweenAddresses [Permalink for this section](https://docs.arcade.dev/mcp-servers/search/google_maps\#googlemapsgetdirectionsbetweenaddresses) See Example > @@ -23560,12 +23560,12 @@ Get directions between two addresses. - **`origin_address`** _(string, required)_ The origin address. Example: β€˜123 Main St, New York, NY 10001’. - **`destination_address`** _(string, required)_ The destination address. Example: β€˜456 Main St, New York, NY 10001’. -- **`language`** _(string, optional, Defaults to β€˜en’ English)_ 2-character language code to use in the Google Maps search. A list of supported language codes can be found [here](https://docs.arcade.dev/toolkits/search/google_maps#languagecodes). -- **`country`** _(string, optional, Defaults to `None`)_ 2-character country code to use in the Google Maps search. A list of supported country codes can be found [here](https://docs.arcade.dev/toolkits/search/google_maps#countrycodes). -- **`distance_unit`** _(enum ( [GoogleMapsDistanceUnit](https://docs.arcade.dev/toolkits/search/google_maps#googlemapsdistanceunit)), optional, Defaults to `GoogleMapsDistanceUnit.KM`)_ Distance unit to use in the Google Maps search. -- **`travel_mode`** _(enum ( [GoogleMapsTravelMode](https://docs.arcade.dev/toolkits/search/google_maps#googlemapstravelmode)), optional, Defaults to `GoogleMapsTravelMode.BEST`)_ Travel mode to use in the Google Maps search. +- **`language`** _(string, optional, Defaults to β€˜en’ English)_ 2-character language code to use in the Google Maps search. A list of supported language codes can be found [here](https://docs.arcade.dev/mcp-servers/search/google_maps#languagecodes). +- **`country`** _(string, optional, Defaults to `None`)_ 2-character country code to use in the Google Maps search. A list of supported country codes can be found [here](https://docs.arcade.dev/mcp-servers/search/google_maps#countrycodes). +- **`distance_unit`** _(enum ( [GoogleMapsDistanceUnit](https://docs.arcade.dev/mcp-servers/search/google_maps#googlemapsdistanceunit)), optional, Defaults to `GoogleMapsDistanceUnit.KM`)_ Distance unit to use in the Google Maps search. +- **`travel_mode`** _(enum ( [GoogleMapsTravelMode](https://docs.arcade.dev/mcp-servers/search/google_maps#googlemapstravelmode)), optional, Defaults to `GoogleMapsTravelMode.BEST`)_ Travel mode to use in the Google Maps search. -## GoogleMaps.GetDirectionsBetweenCoordinates [Permalink for this section](https://docs.arcade.dev/toolkits/search/google_maps\#googlemapsgetdirectionsbetweencoordinates) +## GoogleMaps.GetDirectionsBetweenCoordinates [Permalink for this section](https://docs.arcade.dev/mcp-servers/search/google_maps\#googlemapsgetdirectionsbetweencoordinates) See Example > @@ -23577,12 +23577,12 @@ Get directions between two latitude/longitude coordinates. - **`origin_longitude`** _(float, required)_ The origin longitude. - **`destination_latitude`** _(float, required)_ The destination latitude. - **`destination_longitude`** _(float, required)_ The destination longitude. -- **`language`** _(string, optional, Defaults to β€˜en’ English)_ 2-character language code to use in the Google Maps search. A list of supported language codes can be found [here](https://docs.arcade.dev/toolkits/search/google_maps#languagecodes). -- **`country`** _(string, optional, Defaults to `None`)_ 2-character country code to use in the Google Maps search. A list of supported country codes can be found [here](https://docs.arcade.dev/toolkits/search/google_maps#countrycodes). -- **`distance_unit`** _(enum ( [GoogleMapsDistanceUnit](https://docs.arcade.dev/toolkits/search/google_maps#googlemapsdistanceunit)), optional, Defaults to `GoogleMapsDistanceUnit.KM`)_ Distance unit to use in the Google Maps search. -- **`travel_mode`** _(enum ( [GoogleMapsTravelMode](https://docs.arcade.dev/toolkits/search/google_maps#googlemapstravelmode)), optional, Defaults to `GoogleMapsTravelMode.BEST`)_ Travel mode to use in the Google Maps search. +- **`language`** _(string, optional, Defaults to β€˜en’ English)_ 2-character language code to use in the Google Maps search. A list of supported language codes can be found [here](https://docs.arcade.dev/mcp-servers/search/google_maps#languagecodes). +- **`country`** _(string, optional, Defaults to `None`)_ 2-character country code to use in the Google Maps search. A list of supported country codes can be found [here](https://docs.arcade.dev/mcp-servers/search/google_maps#countrycodes). +- **`distance_unit`** _(enum ( [GoogleMapsDistanceUnit](https://docs.arcade.dev/mcp-servers/search/google_maps#googlemapsdistanceunit)), optional, Defaults to `GoogleMapsDistanceUnit.KM`)_ Distance unit to use in the Google Maps search. +- **`travel_mode`** _(enum ( [GoogleMapsTravelMode](https://docs.arcade.dev/mcp-servers/search/google_maps#googlemapstravelmode)), optional, Defaults to `GoogleMapsTravelMode.BEST`)_ Travel mode to use in the Google Maps search. -## Auth [Permalink for this section](https://docs.arcade.dev/toolkits/search/google_maps\#auth) +## Auth [Permalink for this section](https://docs.arcade.dev/mcp-servers/search/google_maps\#auth) The Arcade Google Maps toolkit uses the [SerpAPI](https://serpapi.com/) to get directions. @@ -23591,7 +23591,7 @@ The Arcade Google Maps toolkit uses the [SerpAPI](https://serpapi.com/) to get d Setting the `SERP_API_KEY` secret is only required if you are [self-hosting](https://docs.arcade.dev/home/local-deployment/install/overview) Arcade. If you’re using Arcade Cloud, the secret is already set for you. To manage your secrets, go to the [Secrets page](https://api.arcade.dev/dashboard/auth/secrets) in the Arcade Dashboard. -## Default parameters [Permalink for this section](https://docs.arcade.dev/toolkits/search/google_maps\#default-parameters) +## Default parameters [Permalink for this section](https://docs.arcade.dev/mcp-servers/search/google_maps\#default-parameters) Language, Country, Distance Unit, and Travel Mode are configurable through environment variables. When set, they will be used as default for Google Maps tools. @@ -23604,7 +23604,7 @@ The language code is a 2-character code that determines the language in which th - `ARCADE_GOOGLE_LANGUAGE`: a default value for all Google tools. If not set, defaults to β€˜en’ (English). - `ARCADE_GOOGLE_MAPS_LANGUAGE`: a default value for the Google Maps tools. If not set, defaults to `ARCADE_GOOGLE_LANGUAGE`. -A list of supported language codes can be found [here](https://docs.arcade.dev/toolkits/search/google_maps#languagecodes). +A list of supported language codes can be found [here](https://docs.arcade.dev/mcp-servers/search/google_maps#languagecodes). **Country** @@ -23612,7 +23612,7 @@ The country code is a 2-character code that determines the country in which the - `ARCADE_GOOGLE_MAPS_COUNTRY`: a default value for the Google Maps tools. If not set, defaults to `None`. -A list of supported country codes can be found [here](https://docs.arcade.dev/toolkits/search/google_maps#countrycodes). +A list of supported country codes can be found [here](https://docs.arcade.dev/mcp-servers/search/google_maps#countrycodes). **Distance Unit** @@ -23620,7 +23620,7 @@ The distance unit is a string that determines the unit of distance to use in the - `ARCADE_GOOGLE_MAPS_DISTANCE_UNIT`: a default value for the Google Maps tools. If not set, defaults to `GoogleMapsDistanceUnit.KM`. -A list of supported distance units can be found [here](https://docs.arcade.dev/toolkits/search/google_maps#googlemapsdistanceunit). +A list of supported distance units can be found [here](https://docs.arcade.dev/mcp-servers/search/google_maps#googlemapsdistanceunit). **Travel Mode** @@ -23628,7 +23628,7 @@ The travel mode is a string that determines the mode of travel to use in the Goo - `ARCADE_GOOGLE_MAPS_TRAVEL_MODE`: a default value for the Google Maps tools. If not set, defaults to `GoogleMapsTravelMode.BEST`. -A list of supported travel modes can be found [here](https://docs.arcade.dev/toolkits/search/google_maps#googlemapstravelmode). +A list of supported travel modes can be found [here](https://docs.arcade.dev/mcp-servers/search/google_maps#googlemapstravelmode). - **Secret:** - `SERP_API_KEY`: Your SerpAPI API key. @@ -23637,16 +23637,16 @@ Setting the `SERP_API_KEY` secret is only required if you are [self-hosting](htt * * * -## Reference [Permalink for this section](https://docs.arcade.dev/toolkits/search/google_maps\#reference) +## Reference [Permalink for this section](https://docs.arcade.dev/mcp-servers/search/google_maps\#reference) -### GoogleMapsDistanceUnit [Permalink for this section](https://docs.arcade.dev/toolkits/search/google_maps\#googlemapsdistanceunit) +### GoogleMapsDistanceUnit [Permalink for this section](https://docs.arcade.dev/mcp-servers/search/google_maps\#googlemapsdistanceunit) Distance unit to use in the Google Maps search. - **`KM`**: Kilometers. - **`MI`**: Miles. -### GoogleMapsTravelMode [Permalink for this section](https://docs.arcade.dev/toolkits/search/google_maps\#googlemapstravelmode) +### GoogleMapsTravelMode [Permalink for this section](https://docs.arcade.dev/mcp-servers/search/google_maps\#googlemapstravelmode) Travel mode to use in the Google Maps search. @@ -23658,7 +23658,7 @@ Travel mode to use in the Google Maps search. - **`BICYCLE`**: Bicycling mode. - **`FLIGHT`**: Flight mode. -### LanguageCodes [Permalink for this section](https://docs.arcade.dev/toolkits/search/google_maps\#languagecodes) +### LanguageCodes [Permalink for this section](https://docs.arcade.dev/mcp-servers/search/google_maps\#languagecodes) - **`ar`**: Arabic - **`bn`**: Bengali @@ -23692,7 +23692,7 @@ Travel mode to use in the Google Maps search. - **`zh-cn`**: Chinese (Simplified) - **`zh-tw`**: Chinese (Traditional) -### CountryCodes [Permalink for this section](https://docs.arcade.dev/toolkits/search/google_maps\#countrycodes) +### CountryCodes [Permalink for this section](https://docs.arcade.dev/mcp-servers/search/google_maps\#countrycodes) - **`af`**: Afghanistan - **`al`**: Albania @@ -23953,7 +23953,7 @@ Arcade tools can be self-hosted on your own infrastructure. Learn more about sel pip install arcade_google_maps\\ ```](https://docs.arcade.dev/home/hosting-overview) -[Google Jobs](https://docs.arcade.dev/toolkits/search/google_jobs "Google Jobs") [Google News](https://docs.arcade.dev/toolkits/search/google_news "Google News") +[Google Jobs](https://docs.arcade.dev/mcp-servers/search/google_jobs "Google Jobs") [Google News](https://docs.arcade.dev/mcp-servers/search/google_news "Google News") Frame @@ -23972,7 +23972,7 @@ This will be shown if an incident or maintenance is posted on your status page. The Slack auth provider enables tools and agents to call [Slack APIs](https://api.slack.com/docs) on behalf of a user. Behind the scenes, the Arcade Engine and the Slack auth provider seamlessly manage Slack OAuth 2.0 authorization for your users. Want to quickly get started with Slack in your agent or AI app? The pre-built -[Arcade Slack toolkit](https://docs.arcade.dev/toolkits/social-communication/slack) is what you want! +[Arcade Slack toolkit](https://docs.arcade.dev/mcp-servers/social-communication/slack) is what you want! ### What’s documented here [Permalink for this section](https://docs.arcade.dev/home/auth-providers/slack\#whats-documented-here) @@ -23980,7 +23980,7 @@ This page describes how to use and configure Slack auth with Arcade. This auth provider is used by: -- The [Arcade Slack toolkit](https://docs.arcade.dev/toolkits/social-communication/slack), which provides pre-built tools for interacting with Slack +- The [Arcade Slack toolkit](https://docs.arcade.dev/mcp-servers/social-communication/slack), which provides pre-built tools for interacting with Slack - Your [app code](https://docs.arcade.dev/home/auth-providers/slack#using-slack-auth-in-app-code) that needs to call the Slack API - Or, your [custom tools](https://docs.arcade.dev/home/auth-providers/slack#using-slack-auth-in-custom-tools) that need to call the Slack API @@ -23998,10 +23998,10 @@ Before showing how to configure your Slack app credentials, let’s go through t In May 29, 2025, [Slack announced](https://api.slack.com/changelog/2025-05-terms-rate-limit-update-and-faq) changes to their API rate-limits and terms of service for apps that are not approved for the Slack Marketplace. -The `conversations.history` and `conversations.replies` endpoints are now limited to 1 request/minute and up to 15 objects returned per request. This affects various tools in the [Arcade Slack toolkit](https://docs.arcade.dev/toolkits/social-communication/slack). Additionally, the [API Terms of Service](https://slack.com/terms-of-service/api) now requires [Slack Marketplace](https://api.slack.com/slack-marketplace/using) approval for commercial distribution. +The `conversations.history` and `conversations.replies` endpoints are now limited to 1 request/minute and up to 15 objects returned per request. This affects various tools in the [Arcade Slack toolkit](https://docs.arcade.dev/mcp-servers/social-communication/slack). Additionally, the [API Terms of Service](https://slack.com/terms-of-service/api) now requires [Slack Marketplace](https://api.slack.com/slack-marketplace/using) approval for commercial distribution. - Follow Slack’s guide to [registering a Slack app](https://api.slack.com/quickstart) -- If you plan to use the [Arcade Slack toolkit](https://docs.arcade.dev/toolkits/social-communication/slack), select the scopes below (include additional scopes for your application’s authorization needs or custom tools, in any): +- If you plan to use the [Arcade Slack toolkit](https://docs.arcade.dev/mcp-servers/social-communication/slack), select the scopes below (include additional scopes for your application’s authorization needs or custom tools, in any): - `channels:history` - `channels:read` - `chat:write` @@ -24098,9 +24098,9 @@ token = auth_response.context.token ## Using Slack auth in custom tools [Permalink for this section](https://docs.arcade.dev/home/auth-providers/slack\#using-slack-auth-in-custom-tools) -You can use the pre-built [Arcade Slack toolkit](https://docs.arcade.dev/toolkits/social-communication/slack) to quickly build agents and AI apps that interact with Slack. +You can use the pre-built [Arcade Slack toolkit](https://docs.arcade.dev/mcp-servers/social-communication/slack) to quickly build agents and AI apps that interact with Slack. -If the pre-built tools in the Slack toolkit don’t meet your needs, you can author your own [custom tools](https://docs.arcade.dev/home/build-tools/create-a-toolkit) that interact with the Slack API. +If the pre-built tools in the Slack toolkit don’t meet your needs, you can author your own [custom tools](https://docs.arcade.dev/home/build-tools/create-a-mcp-server) that interact with the Slack API. Use the `Slack()` auth class to specify that a tool requires authorization with Slack. The `context.authorization.token` field will be automatically populated with the user’s Slack token: @@ -24302,11 +24302,11 @@ This will be shown if an incident or maintenance is posted on your status page. [View latest updates](https://status.arcade.dev/?utm_source=embed) ## Firecrawl Toolkit Reference -[Integrations](https://docs.arcade.dev/toolkits "Integrations") [Developer Tools](https://docs.arcade.dev/toolkits/development/e2b "Developer Tools") [Firecrawl](https://docs.arcade.dev/toolkits/development/firecrawl/firecrawl "Firecrawl") Reference +[Integrations](https://docs.arcade.dev/toolkits "Integrations") [Developer Tools](https://docs.arcade.dev/mcp-servers/development/e2b "Developer Tools") [Firecrawl](https://docs.arcade.dev/mcp-servers/development/firecrawl/firecrawl "Firecrawl") Reference # Reference for Firecrawl Toolkit -## Formats [Permalink for this section](https://docs.arcade.dev/toolkits/development/firecrawl/reference\#formats) +## Formats [Permalink for this section](https://docs.arcade.dev/mcp-servers/development/firecrawl/reference\#formats) The format of the scraped web page. @@ -24317,7 +24317,7 @@ The format of the scraped web page. - **`SCREENSHOT`**: Takes a screenshot of the scraped web page. - **`SCREENSHOT_AT_FULL_PAGE`**: Takes a full-page screenshot of the scraped web page. -[Firecrawl](https://docs.arcade.dev/toolkits/development/firecrawl/firecrawl "Firecrawl") [Stripe](https://docs.arcade.dev/toolkits/payments/stripe "Stripe") +[Firecrawl](https://docs.arcade.dev/mcp-servers/development/firecrawl/firecrawl "Firecrawl") [Stripe](https://docs.arcade.dev/mcp-servers/payments/stripe "Stripe") Frame @@ -24373,10 +24373,10 @@ Below is the list of scopes required by the Arcade Microsoft Toolkits: | Toolkit | Required Permissions | | --- | --- | -| [Outlook Calendar](https://docs.arcade.dev/toolkits/productivity/outlook_calendar) | `Calendars.ReadBasic`
`Calendars.ReadWrite`
`MailboxSettings.Read` | -| [Outlook Mail](https://docs.arcade.dev/toolkits/productivity/outlook_mail) | `Mail.Read`
`Mail.ReadWrite`
`Mail.Send` | -| [Teams](https://docs.arcade.dev/toolkits/social-communication/microsoft_teams) | `Channel.ReadBasic.All`
`ChannelMessage.Read.All`
`ChannelMessage.Send`
`Chat.Create`
`Chat.Read`
`ChatMessage.Read`
`ChatMessage.Send`
`People.Read`
`Team.ReadBasic.All`
`TeamMember.Read.All`
`User.Read` | -| [SharePoint](https://docs.arcade.dev/toolkits/productivity/sharepoint) | `Sites.Read.All` | +| [Outlook Calendar](https://docs.arcade.dev/mcp-servers/productivity/outlook_calendar) | `Calendars.ReadBasic`
`Calendars.ReadWrite`
`MailboxSettings.Read` | +| [Outlook Mail](https://docs.arcade.dev/mcp-servers/productivity/outlook_mail) | `Mail.Read`
`Mail.ReadWrite`
`Mail.Send` | +| [Teams](https://docs.arcade.dev/mcp-servers/social-communication/microsoft_teams) | `Channel.ReadBasic.All`
`ChannelMessage.Read.All`
`ChannelMessage.Send`
`Chat.Create`
`Chat.Read`
`ChatMessage.Read`
`ChatMessage.Send`
`People.Read`
`Team.ReadBasic.All`
`TeamMember.Read.All`
`User.Read` | +| [SharePoint](https://docs.arcade.dev/mcp-servers/productivity/sharepoint) | `Sites.Read.All` | ## Configuring your own Microsoft Auth Provider in Arcade [Permalink for this section](https://docs.arcade.dev/home/auth-providers/microsoft\#configuring-your-own-microsoft-auth-provider-in-arcade) @@ -24450,7 +24450,7 @@ token = auth_response.context.token ## Using Microsoft auth in custom tools [Permalink for this section](https://docs.arcade.dev/home/auth-providers/microsoft\#using-microsoft-auth-in-custom-tools) -You can author your own [custom tools](https://docs.arcade.dev/home/build-tools/create-a-toolkit) that interact with Microsoft Graph APIs. +You can author your own [custom tools](https://docs.arcade.dev/home/build-tools/create-a-mcp-server) that interact with Microsoft Graph APIs. Use the `Microsoft()` auth class to specify that a tool requires authorization with Microsoft. The `context.authorization.token` field will be automatically populated with the user’s Microsoft token: @@ -24731,16 +24731,16 @@ The Arcade Google Finance toolkit lets you fetch real-time and historical stock - Stock summary data. - Historical stock data. -## Available Tools [Permalink for this section](https://docs.arcade.dev/toolkits/search/google_finance\#available-tools) +## Available Tools [Permalink for this section](https://docs.arcade.dev/mcp-servers/search/google_finance\#available-tools) | Tool Name | Description | | --- | --- | | GoogleFinance.GetStockSummary | Retrieve current price and recent price movement of a stock. | | GoogleFinance.GetStockHistoricalData | Fetch historical stock price and volume data for a specified time window. | -If you need an action that’s not listed here, please [contact us](mailto:contact@arcade.dev) to request a new tool, or [create your own tools](https://docs.arcade.dev/home/build-tools/create-a-toolkit). +If you need an action that’s not listed here, please [contact us](mailto:contact@arcade.dev) to request a new tool, or [create your own tools](https://docs.arcade.dev/home/build-tools/create-a-mcp-server). -## GoogleFinance.GetStockSummary [Permalink for this section](https://docs.arcade.dev/toolkits/search/google_finance\#googlefinancegetstocksummary) +## GoogleFinance.GetStockSummary [Permalink for this section](https://docs.arcade.dev/mcp-servers/search/google_finance\#googlefinancegetstocksummary) Retrieve summary information for a given stock using the Google Finance API via SerpAPI. This tool returns the current price and price change from the most recent trading day. @@ -24751,7 +24751,7 @@ Retrieve summary information for a given stock using the Google Finance API via See Example > -## GoogleFinance.GetStockHistoricalData [Permalink for this section](https://docs.arcade.dev/toolkits/search/google_finance\#googlefinancegetstockhistoricaldata) +## GoogleFinance.GetStockHistoricalData [Permalink for this section](https://docs.arcade.dev/mcp-servers/search/google_finance\#googlefinancegetstockhistoricaldata) Fetch historical data for a given stock over a defined time window. This tool returns the stock’s price and volume data along with key events when available. @@ -24759,11 +24759,11 @@ Fetch historical data for a given stock over a defined time window. This tool re - **`ticker_symbol`** _(string, required)_: The stock ticker, e.g., β€˜GOOG’. - **`exchange_identifier`** _(string, required)_: The market identifier, e.g., β€˜NASDAQ’ or β€˜NYSE’. -- **`window`** _(enum ( [GoogleFinanceWindow](https://docs.arcade.dev/toolkits/search/google_finance#googlefinancewindow)), optional, defaults to ONE\_MONTH)_: Time window for the graph data. +- **`window`** _(enum ( [GoogleFinanceWindow](https://docs.arcade.dev/mcp-servers/search/google_finance#googlefinancewindow)), optional, defaults to ONE\_MONTH)_: Time window for the graph data. See Example > -## Auth [Permalink for this section](https://docs.arcade.dev/toolkits/search/google_finance\#auth) +## Auth [Permalink for this section](https://docs.arcade.dev/mcp-servers/search/google_finance\#auth) The Arcade Google Finance toolkit uses the [SerpAPI](https://serpapi.com/) to get stock data from Google Finance. @@ -24774,9 +24774,9 @@ Setting the `SERP_API_KEY` secret is only required if you are [self-hosting](htt * * * -## Reference [Permalink for this section](https://docs.arcade.dev/toolkits/search/google_finance\#reference) +## Reference [Permalink for this section](https://docs.arcade.dev/mcp-servers/search/google_finance\#reference) -## GoogleFinanceWindow [Permalink for this section](https://docs.arcade.dev/toolkits/search/google_finance\#googlefinancewindow) +## GoogleFinanceWindow [Permalink for this section](https://docs.arcade.dev/mcp-servers/search/google_finance\#googlefinancewindow) Defines the time window for fetching stock data from Google Finance. @@ -24803,7 +24803,7 @@ Arcade tools can be self-hosted on your own infrastructure. Learn more about sel pip install arcade_google_finance\\ ```](https://docs.arcade.dev/home/hosting-overview) -[Stripe](https://docs.arcade.dev/toolkits/payments/stripe "Stripe") [Google Flights](https://docs.arcade.dev/toolkits/search/google_flights "Google Flights") +[Stripe](https://docs.arcade.dev/mcp-servers/payments/stripe "Stripe") [Google Flights](https://docs.arcade.dev/mcp-servers/search/google_flights "Google Flights") Frame @@ -25006,7 +25006,7 @@ This will be shown if an incident or maintenance is posted on your status page. [View latest updates](https://status.arcade.dev/?utm_source=embed) ## Google Sheets Toolkit -[Integrations](https://docs.arcade.dev/toolkits "Integrations") [Productivity & Docs](https://docs.arcade.dev/toolkits/productivity/asana "Productivity & Docs") Google Sheets +[Integrations](https://docs.arcade.dev/toolkits "Integrations") [Productivity & Docs](https://docs.arcade.dev/mcp-servers/productivity/asana "Productivity & Docs") Google Sheets # GoogleSheets @@ -25018,7 +25018,7 @@ This will be shown if an incident or maintenance is posted on your status page. [![PyPI Version](https://img.shields.io/pypi/v/arcade_google_sheets)](https://pypi.org/project/arcade_google_sheets/)[![License](https://img.shields.io/badge/License-MIT-yellow.svg)](https://github.com/arcadeai/arcade-ai/blob/main/LICENSE)[![Python Versions](https://img.shields.io/pypi/pyversions/arcade_google_sheets)](https://pypi.org/project/arcade_google_sheets/)[![Wheel Status](https://img.shields.io/pypi/wheel/arcade_google_sheets)](https://pypi.org/project/arcade_google_sheets/)[![Downloads](https://img.shields.io/pypi/dm/arcade_google_sheets)](https://pypi.org/project/arcade_google_sheets/) -The Arcade GoogleSheets toolkit provides a pre-built set of tools for working with Google Sheets. These tools make it easy to build agents and AI apps that can: +The Arcade GoogleSheets MCP Server provides a pre-built set of tools for working with Google Sheets. These tools make it easy to build agents and AI apps that can: - Create new spreadsheets and seed initial data. - Search Google Drive for spreadsheets and retrieve metadata (titles, IDs, URLs; excludes trash). @@ -25027,7 +25027,7 @@ The Arcade GoogleSheets toolkit provides a pre-built set of tools for working wi - Add notes to cells. - Get detailed spreadsheet and sheet metadata (names, IDs, positions, row/column counts; metadata only). -## Available Tools [Permalink for this section](https://docs.arcade.dev/toolkits/productivity/google_sheets\#available-tools) +## Available Tools [Permalink for this section](https://docs.arcade.dev/mcp-servers/productivity/google_sheets\#available-tools) | Tool Name | Description | | --- | --- | @@ -25043,9 +25043,9 @@ The Arcade GoogleSheets toolkit provides a pre-built set of tools for working wi 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](https://docs.arcade.dev/home/build-tools/create-a-toolkit). +own tools](https://docs.arcade.dev/home/build-tools/create-a-mcp-server). -## GoogleSheets.CreateSpreadsheet [Permalink for this section](https://docs.arcade.dev/toolkits/productivity/google_sheets\#googlesheetscreatespreadsheet) +## GoogleSheets.CreateSpreadsheet [Permalink for this section](https://docs.arcade.dev/mcp-servers/productivity/google_sheets\#googlesheetscreatespreadsheet) See Example > @@ -25056,7 +25056,7 @@ Create a new spreadsheet with the provided title and data in its first sheet - **title** ( `string`, optional) The title of the new spreadsheet - **data** ( `string`, optional) The data to write to the spreadsheet. A JSON string (property names enclosed in double quotes) representing a dictionary that maps row numbers to dictionaries that map column letters to cell values. For example, data\[23\]\[β€˜C’\] would be the value of the cell in row 23, column C. Type hint: dict\[int, dict\[str, Union\[int, float, str, bool\]\]\] -## GoogleSheets.WriteToCell [Permalink for this section](https://docs.arcade.dev/toolkits/productivity/google_sheets\#googlesheetswritetocell) +## GoogleSheets.WriteToCell [Permalink for this section](https://docs.arcade.dev/mcp-servers/productivity/google_sheets\#googlesheetswritetocell) See Example > @@ -25070,7 +25070,7 @@ Write a value to a single cell in a spreadsheet. - **value** ( `string`, required) The value to write to the cell - **sheet\_name** ( `string`, optional) The name of the sheet to write to. Defaults to β€˜Sheet1’ -## GoogleSheets.UpdateCells [Permalink for this section](https://docs.arcade.dev/toolkits/productivity/google_sheets\#googlesheetsupdatecells) +## GoogleSheets.UpdateCells [Permalink for this section](https://docs.arcade.dev/mcp-servers/productivity/google_sheets\#googlesheetsupdatecells) See Example > @@ -25083,7 +25083,7 @@ Write values to a Google Sheet using a flexible data format. - **sheet\_position** ( `integer`, optional) The position/tab of the sheet in the spreadsheet to write to. A value of 1 represents the first (leftmost/Sheet1) sheet. Defaults to 1. - **sheet\_id\_or\_name** ( `string`, optional) The id or name of the sheet to write to. If provided, takes precedence over sheet\_position. -## GoogleSheets.AddNoteToCell [Permalink for this section](https://docs.arcade.dev/toolkits/productivity/google_sheets\#googlesheetsaddnotetocell) +## GoogleSheets.AddNoteToCell [Permalink for this section](https://docs.arcade.dev/mcp-servers/productivity/google_sheets\#googlesheetsaddnotetocell) See Example > @@ -25098,7 +25098,7 @@ Add a note to a specific cell in a spreadsheet. A note is a small - **sheet\_position** ( `integer`, optional) The position/tab of the sheet in the spreadsheet to write to. A value of 1 represents the first (leftmost/Sheet1) sheet. Defaults to 1. - **sheet\_id\_or\_name** ( `string`, optional) The id or name of the sheet to write to. If provided, takes precedence over sheet\_position. -## GoogleSheets.SearchSpreadsheets [Permalink for this section](https://docs.arcade.dev/toolkits/productivity/google_sheets\#googlesheetssearchspreadsheets) +## GoogleSheets.SearchSpreadsheets [Permalink for this section](https://docs.arcade.dev/mcp-servers/productivity/google_sheets\#googlesheetssearchspreadsheets) See Example > @@ -25111,11 +25111,11 @@ Searches for spreadsheets in the user’s Google Drive based on the titles and c - **search\_only\_in\_shared\_drive\_id** ( `string`, optional) The ID of the shared drive to restrict the search to. If provided, the search will only return spreadsheets from this drive. Defaults to None, which searches across all drives. - **include\_shared\_drives** ( `boolean`, optional) Whether to include spreadsheets from shared drives. Defaults to False (searches only in the user’s β€˜My Drive’). - **include\_organization\_domain\_spreadsheets** ( `boolean`, optional) Whether to include spreadsheets from the organization’s domain. This is applicable to admin users who have permissions to view organization-wide spreadsheets in a Google Workspace account. Defaults to False. -- **order\_by** ( `Enum` [OrderBy](https://docs.arcade.dev/toolkits/productivity/google_sheets/reference#orderby), optional) Sort order. Defaults to listing the most recently modified spreadsheets first +- **order\_by** ( `Enum` [OrderBy](https://docs.arcade.dev/mcp-servers/productivity/google_sheets/reference#orderby), optional) Sort order. Defaults to listing the most recently modified spreadsheets first - **limit** ( `integer`, optional) The maximum number of spreadsheets to list. Defaults to 10. Max is 50 - **pagination\_token** ( `string`, optional) The pagination token to continue a previous request -## GoogleSheets.WhoAmI [Permalink for this section](https://docs.arcade.dev/toolkits/productivity/google_sheets\#googlesheetswhoami) +## GoogleSheets.WhoAmI [Permalink for this section](https://docs.arcade.dev/mcp-servers/productivity/google_sheets\#googlesheetswhoami) See Example > @@ -25125,7 +25125,7 @@ Get comprehensive user profile and Google Sheets environment information. This tool does not take any parameters. -## GoogleSheets.GenerateGoogleFilePickerUrl [Permalink for this section](https://docs.arcade.dev/toolkits/productivity/google_sheets\#googlesheetsgenerategooglefilepickerurl) +## GoogleSheets.GenerateGoogleFilePickerUrl [Permalink for this section](https://docs.arcade.dev/mcp-servers/productivity/google_sheets\#googlesheetsgenerategooglefilepickerurl) See Example > @@ -25135,7 +25135,7 @@ Generate a Google File Picker URL for user-driven file selection and authorizati This tool does not take any parameters. -## GoogleSheets.GetSpreadsheet [Permalink for this section](https://docs.arcade.dev/toolkits/productivity/google_sheets\#googlesheetsgetspreadsheet) +## GoogleSheets.GetSpreadsheet [Permalink for this section](https://docs.arcade.dev/mcp-servers/productivity/google_sheets\#googlesheetsgetspreadsheet) See Example > @@ -25151,7 +25151,7 @@ Gets the specified range of cells from a single sheet in the spreadsheet. - **max\_rows** ( `integer`, optional) Maximum number of rows to fetch for each sheet in the spreadsheet. Must be between 1 and 1000. Defaults to 1000. - **max\_cols** ( `integer`, optional) Maximum number of columns to fetch for each sheet in the spreadsheet. Must be between 1 and 100. Defaults to 100. -## GoogleSheets.GetSpreadsheetMetadata [Permalink for this section](https://docs.arcade.dev/toolkits/productivity/google_sheets\#googlesheetsgetspreadsheetmetadata) +## GoogleSheets.GetSpreadsheetMetadata [Permalink for this section](https://docs.arcade.dev/mcp-servers/productivity/google_sheets\#googlesheetsgetspreadsheetmetadata) See Example > @@ -25161,7 +25161,7 @@ Gets the metadata for a spreadsheet including the metadata for the sheets in the - **spreadsheet\_id** ( `string`, required) The id of the spreadsheet to get metadata for -## Auth [Permalink for this section](https://docs.arcade.dev/toolkits/productivity/google_sheets\#auth) +## Auth [Permalink for this section](https://docs.arcade.dev/mcp-servers/productivity/google_sheets\#auth) The Arcade GoogleSheets toolkit uses the [Google auth provider](https://docs.arcade.dev/home/auth-providers/google) to connect to users’ GoogleSheets accounts. Please refer to the [Google auth provider](https://docs.arcade.dev/home/auth-providers/google) documentation to learn how to configure auth. @@ -25179,7 +25179,7 @@ Arcade tools can be self-hosted on your own infrastructure. Learn more about sel pip install arcade_google_sheets\\ ```](https://docs.arcade.dev/home/hosting-overview) -[Google Slides](https://docs.arcade.dev/toolkits/productivity/google_slides "Google Slides") [Reference](https://docs.arcade.dev/toolkits/productivity/google_sheets/reference "Reference") +[Google Slides](https://docs.arcade.dev/mcp-servers/productivity/google_slides "Google Slides") [Reference](https://docs.arcade.dev/mcp-servers/productivity/google_sheets/reference "Reference") Frame @@ -25234,7 +25234,7 @@ Even the most powerful LLMs usually perform poorly when they need to reason such Arcade’s Optimized toolkits are designed to match the typical data models expected in AI-powered chat interfaces and are subject to evaluation suites to ensure LLMs can safely use them. -Following the example above, our Slack toolkit offers the [`Slack.SendMessage`](https://docs.arcade.dev/toolkits/social-communication/slack#slacksendmessage) tool, which accepts a `username` as argument, matching exactly both the action and argument value expected to be present in the LLM context window. +Following the example above, our Slack toolkit offers the [`Slack.SendMessage`](https://docs.arcade.dev/mcp-servers/social-communication/slack#slacksendmessage) tool, which accepts a `username` as argument, matching exactly both the action and argument value expected to be present in the LLM context window. When a user says β€œSend a DM to John asking about a project update”, the LLM can directly call the `Slack.SendMessage` tool with the `username` argument, and the tool will take care of the rest. @@ -25264,7 +25264,7 @@ This will be shown if an incident or maintenance is posted on your status page. [View latest updates](https://status.arcade.dev/?utm_source=embed) ## Slack API Toolkit -[Integrations](https://docs.arcade.dev/toolkits "Integrations") [Social & Communication](https://docs.arcade.dev/toolkits/social-communication/discord "Social & Communication") Slack API +[Integrations](https://docs.arcade.dev/toolkits "Integrations") [Social & Communication](https://docs.arcade.dev/mcp-servers/social-communication/discord "Social & Communication") Slack API # SlackApi @@ -25297,7 +25297,7 @@ The SlackApi toolkit offers a comprehensive set of tools for administering Slack This toolkit is designed for admins and apps requiring broad Slack API access (admin, invites, calls, chat, files, usergroups, reactions, users scopes). -## Available Tools [Permalink for this section](https://docs.arcade.dev/toolkits/social-communication/slack_api\#available-tools) +## Available Tools [Permalink for this section](https://docs.arcade.dev/mcp-servers/social-communication/slack_api\#available-tools) | Tool Name | Description | | --- | --- | @@ -25377,9 +25377,9 @@ This toolkit is designed for admins and apps requiring broad Slack API access (a 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](https://docs.arcade.dev/home/build-tools/create-a-toolkit). +own tools](https://docs.arcade.dev/home/build-tools/create-a-mcp-server). -## SlackApi.AddSlackEmojiAlias [Permalink for this section](https://docs.arcade.dev/toolkits/social-communication/slack_api\#slackapiaddslackemojialias) +## SlackApi.AddSlackEmojiAlias [Permalink for this section](https://docs.arcade.dev/mcp-servers/social-communication/slack_api\#slackapiaddslackemojialias) See Example > @@ -25390,7 +25390,7 @@ Add an emoji alias in a Slack Enterprise organization. - **emoji\_alias\_name** ( `string`, required) The new alias for the specified emoji. Whitespace or colons will be automatically trimmed. - **target\_emoji\_name** ( `string`, required) The name of the existing emoji to which the new alias is being added. Remove any surrounding whitespace or colons. -## SlackApi.ListSlackEnterpriseEmojis [Permalink for this section](https://docs.arcade.dev/toolkits/social-communication/slack_api\#slackapilistslackenterpriseemojis) +## SlackApi.ListSlackEnterpriseEmojis [Permalink for this section](https://docs.arcade.dev/mcp-servers/social-communication/slack_api\#slackapilistslackenterpriseemojis) See Example > @@ -25401,7 +25401,7 @@ Retrieve emojis for a Slack Enterprise organization. - **pagination\_cursor** ( `string`, optional) Cursor for fetching the next page of emojis. Use β€˜next\_cursor’ from the previous response. - **max\_items\_to\_return** ( `integer`, optional) The maximum number of emojis to return, between 1 and 1000 inclusive. (default: β€˜100’) -## SlackApi.RenameSlackEmoji [Permalink for this section](https://docs.arcade.dev/toolkits/social-communication/slack_api\#slackapirenameslackemoji) +## SlackApi.RenameSlackEmoji [Permalink for this section](https://docs.arcade.dev/mcp-servers/social-communication/slack_api\#slackapirenameslackemoji) See Example > @@ -25412,7 +25412,7 @@ Rename an emoji in a Slack Enterprise organization. - **current\_emoji\_name** ( `string`, required) The current name of the emoji to be renamed. Colons (:myemoji:) around the value are optional. - **new\_emoji\_name** ( `string`, required) The new name to assign to the emoji in the Slack Enterprise organization. -## SlackApi.ListApprovedWorkspaceInviteRequests [Permalink for this section](https://docs.arcade.dev/toolkits/social-communication/slack_api\#slackapilistapprovedworkspaceinviterequests) +## SlackApi.ListApprovedWorkspaceInviteRequests [Permalink for this section](https://docs.arcade.dev/mcp-servers/social-communication/slack_api\#slackapilistapprovedworkspaceinviterequests) See Example > @@ -25424,7 +25424,7 @@ Retrieve all approved workspace invite requests from Slack. - **pagination\_cursor** ( `string`, optional) Value of the `next_cursor` from the previous API response for paginating results. - **result\_limit** ( `integer`, optional) Specify the number of results to return, between 1 and 1000 inclusive. (default: β€˜100’) -## SlackApi.ListDeniedSlackInviteRequests [Permalink for this section](https://docs.arcade.dev/toolkits/social-communication/slack_api\#slackapilistdeniedslackinviterequests) +## SlackApi.ListDeniedSlackInviteRequests [Permalink for this section](https://docs.arcade.dev/mcp-servers/social-communication/slack_api\#slackapilistdeniedslackinviterequests) See Example > @@ -25436,7 +25436,7 @@ Retrieve denied Slack workspace invite requests. - **pagination\_cursor** ( `string`, optional) The cursor value from the previous API response to fetch the next set of results. Use this for pagination. - **result\_limit** ( `integer`, optional) Specify the number of denied invite request results to return, between 1 and 1000 inclusive. (default: β€˜100’) -## SlackApi.ListPendingWorkspaceInvites [Permalink for this section](https://docs.arcade.dev/toolkits/social-communication/slack_api\#slackapilistpendingworkspaceinvites) +## SlackApi.ListPendingWorkspaceInvites [Permalink for this section](https://docs.arcade.dev/mcp-servers/social-communication/slack_api\#slackapilistpendingworkspaceinvites) See Example > @@ -25448,7 +25448,7 @@ Retrieve all pending workspace invite requests from Slack. - **pagination\_cursor** ( `string`, optional) The cursor value for fetching the next set of invite requests. Use the `next_cursor` from the previous response if available. - **result\_limit** ( `integer`, optional) The number of invite requests to return per call, must be between 1 and 1000. (default: β€˜100’) -## SlackApi.ListTeamsInEnterprise [Permalink for this section](https://docs.arcade.dev/toolkits/social-communication/slack_api\#slackapilistteamsinenterprise) +## SlackApi.ListTeamsInEnterprise [Permalink for this section](https://docs.arcade.dev/mcp-servers/social-communication/slack_api\#slackapilistteamsinenterprise) See Example > @@ -25459,7 +25459,7 @@ Retrieve all teams in an Enterprise organization on Slack. - **maximum\_items\_to\_return** ( `integer`, optional) Specify the maximum number of teams to retrieve. Must be a positive integer, up to 1000. (default: β€˜100’) - **pagination\_cursor** ( `string`, optional) Use this to retrieve the next page of results by setting it to the `next_cursor` from the previous response. -## SlackApi.ListSlackWorkspaceOwners [Permalink for this section](https://docs.arcade.dev/toolkits/social-communication/slack_api\#slackapilistslackworkspaceowners) +## SlackApi.ListSlackWorkspaceOwners [Permalink for this section](https://docs.arcade.dev/mcp-servers/social-communication/slack_api\#slackapilistslackworkspaceowners) See Example > @@ -25471,7 +25471,7 @@ Retrieve all owners in a Slack workspace. - **maximum\_items\_to\_return** ( `integer`, optional) Specifies the maximum number of owners to return, ranging from 1 to 1000. (default: β€˜100’) - **pagination\_cursor** ( `string`, optional) The cursor from the previous response used to fetch the next page of owners. Leave empty for the first page. -## SlackApi.FetchWorkspaceSettingsInfo [Permalink for this section](https://docs.arcade.dev/toolkits/social-communication/slack_api\#slackapifetchworkspacesettingsinfo) +## SlackApi.FetchWorkspaceSettingsInfo [Permalink for this section](https://docs.arcade.dev/mcp-servers/social-communication/slack_api\#slackapifetchworkspacesettingsinfo) See Example > @@ -25481,7 +25481,7 @@ Retrieve settings information for a Slack workspace. - **slack\_team\_id** ( `string`, required) The unique identifier of the Slack workspace (team) for which to fetch the settings information. -## SlackApi.SetWorkspaceDescription [Permalink for this section](https://docs.arcade.dev/toolkits/social-communication/slack_api\#slackapisetworkspacedescription) +## SlackApi.SetWorkspaceDescription [Permalink for this section](https://docs.arcade.dev/mcp-servers/social-communication/slack_api\#slackapisetworkspacedescription) See Example > @@ -25492,7 +25492,7 @@ Update the description of a Slack workspace. - **workspace\_id** ( `string`, required) The unique identifier for the Slack workspace where the description will be updated. - **workspace\_description** ( `string`, required) The new description to set for the Slack workspace. Provide a clear and concise text. -## SlackApi.SetSlackWorkspaceName [Permalink for this section](https://docs.arcade.dev/toolkits/social-communication/slack_api\#slackapisetslackworkspacename) +## SlackApi.SetSlackWorkspaceName [Permalink for this section](https://docs.arcade.dev/mcp-servers/social-communication/slack_api\#slackapisetslackworkspacename) See Example > @@ -25503,7 +25503,7 @@ Update the name of a Slack workspace. - **workspace\_id** ( `string`, required) Unique identifier for the Slack workspace whose name you want to update. - **new\_workspace\_name** ( `string`, required) The desired new name for the Slack workspace. This replaces the existing name. -## SlackApi.ListChannelsForUsergroup [Permalink for this section](https://docs.arcade.dev/toolkits/social-communication/slack_api\#slackapilistchannelsforusergroup) +## SlackApi.ListChannelsForUsergroup [Permalink for this section](https://docs.arcade.dev/mcp-servers/social-communication/slack_api\#slackapilistchannelsforusergroup) See Example > @@ -25515,7 +25515,7 @@ Retrieve channels linked to an org-level user group in Slack. - **workspace\_id** ( `string`, optional) The unique identifier for the Slack workspace. - **include\_member\_count\_in\_channels** ( `boolean`, optional) Set to true to include the count of members for each channel, otherwise set to false. -## SlackApi.ListWorkspaceUsers [Permalink for this section](https://docs.arcade.dev/toolkits/social-communication/slack_api\#slackapilistworkspaceusers) +## SlackApi.ListWorkspaceUsers [Permalink for this section](https://docs.arcade.dev/mcp-servers/social-communication/slack_api\#slackapilistworkspaceusers) See Example > @@ -25530,7 +25530,7 @@ Retrieve a list of users from a Slack workspace. - **include\_deactivated\_user\_workspaces** ( `boolean`, optional) Include workspaces for users even if they are deactivated. Only applies with org token and no team\_id. Default is false. - **return\_only\_guest\_users** ( `boolean`, optional) If true, returns only guests and their expiration dates that belong to the specified team\_id. -## SlackApi.CheckApiCallingCode [Permalink for this section](https://docs.arcade.dev/toolkits/social-communication/slack_api\#slackapicheckapicallingcode) +## SlackApi.CheckApiCallingCode [Permalink for this section](https://docs.arcade.dev/mcp-servers/social-communication/slack_api\#slackapicheckapicallingcode) See Example > @@ -25540,7 +25540,7 @@ Verify the correctness of API calling code for Slack. - **simulate\_error\_response** ( `string`, optional) Specify an error code to simulate an error response for testing API calls. Useful for testing error handling. -## SlackApi.RevokeSlackToken [Permalink for this section](https://docs.arcade.dev/toolkits/social-communication/slack_api\#slackapirevokeslacktoken) +## SlackApi.RevokeSlackToken [Permalink for this section](https://docs.arcade.dev/mcp-servers/social-communication/slack_api\#slackapirevokeslacktoken) See Example > @@ -25550,7 +25550,7 @@ Revoke a Slack authentication token. - **trigger\_testing\_mode** ( `boolean`, optional) Set to true to trigger testing mode where the token will not be revoked. Useful for testing. -## SlackApi.EditSlackBookmark [Permalink for this section](https://docs.arcade.dev/toolkits/social-communication/slack_api\#slackapieditslackbookmark) +## SlackApi.EditSlackBookmark [Permalink for this section](https://docs.arcade.dev/mcp-servers/social-communication/slack_api\#slackapieditslackbookmark) See Example > @@ -25564,7 +25564,7 @@ Edit an existing bookmark in a Slack channel. - **bookmark\_link** ( `string`, optional) URL of the bookmark to be edited. Ensure it is a valid format starting with http or https. - **emoji\_tag** ( `string`, optional) The emoji tag to apply to the bookmark link. It should be a valid emoji code (e.g., :smile:). -## SlackApi.RemoveSlackBookmark [Permalink for this section](https://docs.arcade.dev/toolkits/social-communication/slack_api\#slackapiremoveslackbookmark) +## SlackApi.RemoveSlackBookmark [Permalink for this section](https://docs.arcade.dev/mcp-servers/social-communication/slack_api\#slackapiremoveslackbookmark) See Example > @@ -25576,7 +25576,7 @@ Remove a bookmark from a Slack channel. - **bookmark\_id\_to\_remove** ( `string`, required) The ID of the bookmark to be removed from a Slack channel. Ensure it is specified correctly to delete the correct bookmark. - **quip\_section\_id** ( `string`, optional) The ID of the Quip section to unbookmark. This is required to specify which section’s bookmark should be removed. -## SlackApi.GetSlackBotInfo [Permalink for this section](https://docs.arcade.dev/toolkits/social-communication/slack_api\#slackapigetslackbotinfo) +## SlackApi.GetSlackBotInfo [Permalink for this section](https://docs.arcade.dev/mcp-servers/social-communication/slack_api\#slackapigetslackbotinfo) See Example > @@ -25587,7 +25587,7 @@ Retrieve details about a Slack bot user. - **target\_bot\_id** ( `string`, optional) The unique bot ID for which information is requested. This ID is specific to each workspace the bot is in. - **team\_id\_for\_org\_token\_use** ( `string`, optional) Encoded team or enterprise ID where the bot exists. Required if using an organization token. Ignored if using a workspace-level token. -## SlackApi.RegisterSlackCall [Permalink for this section](https://docs.arcade.dev/toolkits/social-communication/slack_api\#slackapiregisterslackcall) +## SlackApi.RegisterSlackCall [Permalink for this section](https://docs.arcade.dev/mcp-servers/social-communication/slack_api\#slackapiregisterslackcall) See Example > @@ -25604,7 +25604,7 @@ Registers a new call on Slack. - **call\_creator\_user\_id** ( `string`, optional) The valid Slack user ID of the creator of this call. Optional if using a user token, which defaults to the authed user. - **participants\_info** ( `array[string]`, optional) A list of participants to register for the call, including β€˜slack\_id’, β€˜external\_id’, β€˜display\_name’, and β€˜avatar\_url’ for each user. -## SlackApi.GetCallInformation [Permalink for this section](https://docs.arcade.dev/toolkits/social-communication/slack_api\#slackapigetcallinformation) +## SlackApi.GetCallInformation [Permalink for this section](https://docs.arcade.dev/mcp-servers/social-communication/slack_api\#slackapigetcallinformation) See Example > @@ -25614,7 +25614,7 @@ Retrieve detailed information about a specific call in Slack. - **call\_id** ( `string`, required) The unique identifier of the call as returned by the `calls.add` method. This ID is necessary to retrieve detailed call information. -## SlackApi.AddCallParticipants [Permalink for this section](https://docs.arcade.dev/toolkits/social-communication/slack_api\#slackapiaddcallparticipants) +## SlackApi.AddCallParticipants [Permalink for this section](https://docs.arcade.dev/mcp-servers/social-communication/slack_api\#slackapiaddcallparticipants) See Example > @@ -25625,7 +25625,7 @@ Add new participants to a Slack call. - **call\_id** ( `string`, required) The unique identifier for the call, as returned by the `calls.add` method. This ID specifies which call the participants will be added to. - **participant\_users** ( `array[string]`, required) List of users to add, specified by `slack_id` or `external_id`. Include optional `display_name` and `avatar_url` for each user. -## SlackApi.RemoveCallParticipants [Permalink for this section](https://docs.arcade.dev/toolkits/social-communication/slack_api\#slackapiremovecallparticipants) +## SlackApi.RemoveCallParticipants [Permalink for this section](https://docs.arcade.dev/mcp-servers/social-communication/slack_api\#slackapiremovecallparticipants) See Example > @@ -25636,7 +25636,7 @@ Remove participants from a Slack call. - **call\_id** ( `string`, required) The unique identifier for the call from which participants are to be removed. This `id` is obtained from the `calls.add` method. - **users\_to\_remove** ( `array[string]`, required) A list of user IDs to remove as participants from the call. Refer to Slack’s documentation for specifying user IDs. -## SlackApi.DeleteScheduledSlackMessage [Permalink for this section](https://docs.arcade.dev/toolkits/social-communication/slack_api\#slackapideletescheduledslackmessage) +## SlackApi.DeleteScheduledSlackMessage [Permalink for this section](https://docs.arcade.dev/mcp-servers/social-communication/slack_api\#slackapideletescheduledslackmessage) See Example > @@ -25648,7 +25648,7 @@ Delete a pending scheduled message from Slack queue. - **scheduled\_message\_id** ( `string`, required) The ID of the scheduled message to be deleted. This ID is obtained from the `chat.scheduleMessage` response. - **delete\_as\_authenticated\_user** ( `boolean`, optional) Set to true to delete the message as the authenticated user with `chat:write:user` scope. Bot users are considered authenticated users. If false, the message will be deleted with `chat:write:bot` scope. -## SlackApi.GetSlackMessagePermalink [Permalink for this section](https://docs.arcade.dev/toolkits/social-communication/slack_api\#slackapigetslackmessagepermalink) +## SlackApi.GetSlackMessagePermalink [Permalink for this section](https://docs.arcade.dev/mcp-servers/social-communication/slack_api\#slackapigetslackmessagepermalink) See Example > @@ -25659,7 +25659,7 @@ Retrieve a permalink URL for a specific Slack message. - **channel\_id** ( `string`, required) The unique identifier of the Slack conversation or channel containing the message. - **message\_timestamp** ( `string`, required) The unique timestamp of the message to retrieve the permalink for. It identifies the message within the Slack channel. -## SlackApi.SendEphemeralMessageSlack [Permalink for this section](https://docs.arcade.dev/toolkits/social-communication/slack_api\#slackapisendephemeralmessageslack) +## SlackApi.SendEphemeralMessageSlack [Permalink for this section](https://docs.arcade.dev/mcp-servers/social-communication/slack_api\#slackapisendephemeralmessageslack) See Example > @@ -25680,7 +25680,7 @@ Send an ephemeral message to a user in a Slack channel. - **bot\_username** ( `string`, optional) The username for the bot sending the ephemeral message. This sets the display name in the Slack message. - **link\_names\_auto\_link** ( `boolean`, optional) Set to true to automatically find and link channel names and usernames. -## SlackApi.SendSlackMessage [Permalink for this section](https://docs.arcade.dev/toolkits/social-communication/slack_api\#slackapisendslackmessage) +## SlackApi.SendSlackMessage [Permalink for this section](https://docs.arcade.dev/mcp-servers/social-communication/slack_api\#slackapisendslackmessage) See Example > @@ -25706,7 +25706,7 @@ Sends a message to a Slack channel. - **enable\_unfurling\_text\_content** ( `boolean`, optional) Set to true to enable unfurling of primarily text-based content in Slack messages. - **disable\_media\_unfurling** ( `boolean`, optional) Set to false to enable media unfurling and true to disable it. (default: β€˜false’) -## SlackApi.ListScheduledMessages [Permalink for this section](https://docs.arcade.dev/toolkits/social-communication/slack_api\#slackapilistscheduledmessages) +## SlackApi.ListScheduledMessages [Permalink for this section](https://docs.arcade.dev/mcp-servers/social-communication/slack_api\#slackapilistscheduledmessages) See Example > @@ -25721,7 +25721,7 @@ Retrieve scheduled messages from Slack. - **oldest\_timestamp** ( `string`, optional) A Unix timestamp representing the start of the time range for scheduled messages. It must be less than the `latest_timestamp` if both are specified. - **team\_id** ( `string`, optional) Encoded team ID to specify which team’s channels to list. Required if using an org-level token; ignore for workspace-level tokens. -## SlackApi.ScheduleSlackMessage [Permalink for this section](https://docs.arcade.dev/toolkits/social-communication/slack_api\#slackapischeduleslackmessage) +## SlackApi.ScheduleSlackMessage [Permalink for this section](https://docs.arcade.dev/mcp-servers/social-communication/slack_api\#slackapischeduleslackmessage) See Example > @@ -25743,7 +25743,7 @@ Schedule a message to be sent later in Slack. - **enable\_link\_unfurling** ( `boolean`, optional) Pass true to enable unfurling of primarily text-based content. - **disable\_unfurling\_of\_media\_content** ( `boolean`, optional) Set to true to disable unfurling of media content. Defaults to false. -## SlackApi.CustomUnfurlSlackUrls [Permalink for this section](https://docs.arcade.dev/toolkits/social-communication/slack_api\#slackapicustomunfurlslackurls) +## SlackApi.CustomUnfurlSlackUrls [Permalink for this section](https://docs.arcade.dev/mcp-servers/social-communication/slack_api\#slackapicustomunfurlslackurls) See Example > @@ -25761,7 +25761,7 @@ Provide custom unfurl behavior for user-posted URLs on Slack. - **link\_source** ( `string`, optional) Specify the source of the link to unfurl as either β€˜composer’ for links inside the message composer or β€˜conversations\_history’ for links posted to a conversation. Must be used with β€˜unfurl\_id’, or alternatively with β€˜channel’ and β€˜ts’. - **require\_user\_authentication** ( `boolean`, optional) Set to true if the user must install your Slack app to trigger unfurls for this domain. -## SlackApi.AcceptSlackInvite [Permalink for this section](https://docs.arcade.dev/toolkits/social-communication/slack_api\#slackapiacceptslackinvite) +## SlackApi.AcceptSlackInvite [Permalink for this section](https://docs.arcade.dev/mcp-servers/social-communication/slack_api\#slackapiacceptslackinvite) See Example > @@ -25776,7 +25776,7 @@ Accept invitations to a Slack Connect channel. - **is\_channel\_private** ( `boolean`, optional) True to make the channel private; false to make it public. - **use\_free\_trial** ( `boolean`, optional) Set to β€˜True’ to use your workspace’s free trial to start using Slack Connect. -## SlackApi.ApproveSlackChannelInvitation [Permalink for this section](https://docs.arcade.dev/toolkits/social-communication/slack_api\#slackapiapproveslackchannelinvitation) +## SlackApi.ApproveSlackChannelInvitation [Permalink for this section](https://docs.arcade.dev/mcp-servers/social-communication/slack_api\#slackapiapproveslackchannelinvitation) See Example > @@ -25787,7 +25787,7 @@ Approve an invitation to a Slack Connect channel. - **shared\_channel\_invite\_id** ( `string`, required) The ID of the shared channel invitation you want to approve. It is required to specifically identify which invitation is being approved for the Slack Connect channel. - **other\_party\_team\_id** ( `string`, optional) The team or enterprise ID of the other party involved in the Slack Connect invitation you are approving. -## SlackApi.CreateSlackConversation [Permalink for this section](https://docs.arcade.dev/toolkits/social-communication/slack_api\#slackapicreateslackconversation) +## SlackApi.CreateSlackConversation [Permalink for this section](https://docs.arcade.dev/mcp-servers/social-communication/slack_api\#slackapicreateslackconversation) See Example > @@ -25799,7 +25799,7 @@ Create a new public or private Slack conversation. - **encoded\_team\_id** ( `string`, optional) The encoded team ID where the channel will be created. Required when using an organization-level token. Ignored if using a workspace-level token. - **create\_private\_channel** ( `boolean`, optional) Set to true to create a private channel instead of a public one. -## SlackApi.GetConversationInfo [Permalink for this section](https://docs.arcade.dev/toolkits/social-communication/slack_api\#slackapigetconversationinfo) +## SlackApi.GetConversationInfo [Permalink for this section](https://docs.arcade.dev/mcp-servers/social-communication/slack_api\#slackapigetconversationinfo) See Example > @@ -25811,7 +25811,7 @@ Fetches information about a Slack conversation. - **include\_locale** ( `boolean`, optional) Set to `true` to receive the locale for this conversation. Defaults to `false`. - **include\_member\_count** ( `boolean`, optional) Set to true to include the member count for the specified conversation. Defaults to false. -## SlackApi.InviteUserToSlackChannel [Permalink for this section](https://docs.arcade.dev/toolkits/social-communication/slack_api\#slackapiinviteusertoslackchannel) +## SlackApi.InviteUserToSlackChannel [Permalink for this section](https://docs.arcade.dev/mcp-servers/social-communication/slack_api\#slackapiinviteusertoslackchannel) See Example > @@ -25823,7 +25823,7 @@ Invite users to a Slack channel. - **user\_ids\_list** ( `string`, required) A list of up to 100 user IDs to invite, separated by commas. - **continue\_with\_valid\_users** ( `boolean`, optional) Set to true to invite valid users while ignoring invalid IDs when multiple user IDs are provided. Default is false. -## SlackApi.JoinSlackConversation [Permalink for this section](https://docs.arcade.dev/toolkits/social-communication/slack_api\#slackapijoinslackconversation) +## SlackApi.JoinSlackConversation [Permalink for this section](https://docs.arcade.dev/mcp-servers/social-communication/slack_api\#slackapijoinslackconversation) See Example > @@ -25833,7 +25833,7 @@ Join an existing conversation in Slack. - **conversation\_id** ( `string`, required) The ID of the conversation or channel you want to join in Slack. -## SlackApi.ListSlackChannels [Permalink for this section](https://docs.arcade.dev/toolkits/social-communication/slack_api\#slackapilistslackchannels) +## SlackApi.ListSlackChannels [Permalink for this section](https://docs.arcade.dev/mcp-servers/social-communication/slack_api\#slackapilistslackchannels) See Example > @@ -25847,7 +25847,7 @@ Retrieve a list of all channels in a Slack team. - **channel\_types** ( `string`, optional) Comma-separated list of channel types to include, e.g., β€˜public\_channel’, β€˜private\_channel’, β€˜mpim’, β€˜im’. (default: β€˜public\_channel’) - **exclude\_archived\_channels** ( `boolean`, optional) Set to true to exclude archived channels from the list of Slack channels. Default is false. -## SlackApi.ListSharedChannelInvites [Permalink for this section](https://docs.arcade.dev/toolkits/social-communication/slack_api\#slackapilistsharedchannelinvites) +## SlackApi.ListSharedChannelInvites [Permalink for this section](https://docs.arcade.dev/mcp-servers/social-communication/slack_api\#slackapilistsharedchannelinvites) See Example > @@ -25859,7 +25859,7 @@ Retrieve unapproved shared channel invites from Slack. - **maximum\_invites\_to\_return** ( `integer`, optional) Specify the maximum number of unapproved shared channel invites to retrieve. (default: β€˜100’) - **pagination\_cursor** ( `string`, optional) The cursor for paginating through results, obtained from a previous call’s next\_cursor. -## SlackApi.SetSlackChannelReadCursor [Permalink for this section](https://docs.arcade.dev/toolkits/social-communication/slack_api\#slackapisetslackchannelreadcursor) +## SlackApi.SetSlackChannelReadCursor [Permalink for this section](https://docs.arcade.dev/mcp-servers/social-communication/slack_api\#slackapisetslackchannelreadcursor) See Example > @@ -25870,7 +25870,7 @@ Update the read cursor in a Slack channel. - **channel\_id** ( `string`, required) The ID of the Slack channel or conversation where you want to set the read cursor. This should be a valid Slack channel ID. - **timestamp\_of\_message\_to\_mark\_as\_read** ( `string`, required) The unique identifier (timestamp) of the message you want to mark as most recently seen in the conversation. -## SlackApi.GetSlackConversationMembers [Permalink for this section](https://docs.arcade.dev/toolkits/social-communication/slack_api\#slackapigetslackconversationmembers) +## SlackApi.GetSlackConversationMembers [Permalink for this section](https://docs.arcade.dev/mcp-servers/social-communication/slack_api\#slackapigetslackconversationmembers) See Example > @@ -25882,7 +25882,7 @@ Retrieve members from a specified Slack conversation. - **pagination\_cursor** ( `string`, optional) Cursor for pagination, set to the `next_cursor` value from a previous response to continue retrieving members from a conversation. - **max\_items\_to\_return** ( `integer`, optional) The maximum number of conversation members to return. Recommended to specify a value under 1000, with no more than 200 results at a time for optimal pagination. (default: β€˜100’) -## SlackApi.OpenOrResumeSlackConversation [Permalink for this section](https://docs.arcade.dev/toolkits/social-communication/slack_api\#slackapiopenorresumeslackconversation) +## SlackApi.OpenOrResumeSlackConversation [Permalink for this section](https://docs.arcade.dev/mcp-servers/social-communication/slack_api\#slackapiopenorresumeslackconversation) See Example > @@ -25895,7 +25895,7 @@ Open or resume a direct or multi-person message in Slack. - **return\_full\_im\_channel\_definition** ( `boolean`, optional) Set to true to receive the entire IM channel definition; false returns only the conversation ID. - **prevent\_creation** ( `boolean`, optional) If true, does not create a new conversation and instead checks for an existing DM or MPDM. -## SlackApi.GetSlackThreadMessages [Permalink for this section](https://docs.arcade.dev/toolkits/social-communication/slack_api\#slackapigetslackthreadmessages) +## SlackApi.GetSlackThreadMessages [Permalink for this section](https://docs.arcade.dev/mcp-servers/social-communication/slack_api\#slackapigetslackthreadmessages) See Example > @@ -25912,7 +25912,7 @@ Retrieve messages from a Slack conversation thread. - **include\_all\_message\_metadata** ( `boolean`, optional) Set to true to return all metadata associated with this message. - **include\_boundary\_timestamps** ( `boolean`, optional) Include messages with β€˜oldest’ or β€˜latest’ timestamps. Ignored unless either timestamp is specified. -## SlackApi.DenySharedInviteRequest [Permalink for this section](https://docs.arcade.dev/toolkits/social-communication/slack_api\#slackapidenysharedinviterequest) +## SlackApi.DenySharedInviteRequest [Permalink for this section](https://docs.arcade.dev/mcp-servers/social-communication/slack_api\#slackapidenysharedinviterequest) See Example > @@ -25923,7 +25923,7 @@ Denies an external user invitation to a Slack channel. - **shared\_channel\_invite\_id** ( `string`, required) The ID for the shared channel invite request that you intend to deny. This is required for specifying which invite to decline. - **deny\_invite\_message** ( `string`, optional) An optional message explaining why the invitation was denied. This message will be sent to the requester. -## SlackApi.ListCustomEmojiForTeam [Permalink for this section](https://docs.arcade.dev/toolkits/social-communication/slack_api\#slackapilistcustomemojiforteam) +## SlackApi.ListCustomEmojiForTeam [Permalink for this section](https://docs.arcade.dev/mcp-servers/social-communication/slack_api\#slackapilistcustomemojiforteam) See Example > @@ -25933,7 +25933,7 @@ Retrieve a list of custom emojis for a specific team. - **include\_emoji\_categories** ( `boolean`, optional) Set to true to include categories for Unicode emojis in the response. -## SlackApi.GetExternalFileUploadUrl [Permalink for this section](https://docs.arcade.dev/toolkits/social-communication/slack_api\#slackapigetexternalfileuploadurl) +## SlackApi.GetExternalFileUploadUrl [Permalink for this section](https://docs.arcade.dev/mcp-servers/social-communication/slack_api\#slackapigetexternalfileuploadurl) See Example > @@ -25946,7 +25946,7 @@ Retrieve a URL to upload an external file to Slack. - **snippet\_syntax\_type** ( `string`, optional) Specify the syntax highlighting type for the snippet being uploaded, such as β€˜javascript’, β€˜python’, etc. - **alt\_text\_description** ( `string`, optional) A description of the image for screen-readers, limited to 1000 characters. -## SlackApi.GetRemoteFileInfoSlack [Permalink for this section](https://docs.arcade.dev/toolkits/social-communication/slack_api\#slackapigetremotefileinfoslack) +## SlackApi.GetRemoteFileInfoSlack [Permalink for this section](https://docs.arcade.dev/mcp-servers/social-communication/slack_api\#slackapigetremotefileinfoslack) See Example > @@ -25957,7 +25957,7 @@ Retrieve details about a remote file from Slack. - **file\_external\_identifier** ( `string`, optional) The GUID defined by the creator for the remote file to retrieve its information. - **file\_id** ( `string`, optional) The unique identifier of the file to retrieve information about. Use this to specify the file in Slack. -## SlackApi.GetSlackRemoteFilesInfo [Permalink for this section](https://docs.arcade.dev/toolkits/social-communication/slack_api\#slackapigetslackremotefilesinfo) +## SlackApi.GetSlackRemoteFilesInfo [Permalink for this section](https://docs.arcade.dev/mcp-servers/social-communication/slack_api\#slackapigetslackremotefilesinfo) See Example > @@ -25971,7 +25971,7 @@ Retrieve information about remote files added to Slack. - **filter\_files\_from\_timestamp** ( `string`, optional) Filter files created after this inclusive timestamp. Use a Unix timestamp format. (default: β€˜0’) - **timestamp\_filter\_end** ( `string`, optional) Filter files created before this timestamp (inclusive) in Unix epoch time format. (default: β€˜now’) -## SlackApi.ShareRemoteFileInChannel [Permalink for this section](https://docs.arcade.dev/toolkits/social-communication/slack_api\#slackapishareremotefileinchannel) +## SlackApi.ShareRemoteFileInChannel [Permalink for this section](https://docs.arcade.dev/mcp-servers/social-communication/slack_api\#slackapishareremotefileinchannel) See Example > @@ -25983,7 +25983,7 @@ Share a remote file into a Slack channel. - **file\_external\_identifier** ( `string`, optional) The globally unique identifier (GUID) for the file set by the app when registering with Slack. Required if β€˜file’ is not provided. - **file\_id** ( `string`, optional) The ID of a file registered with Slack to be shared. Required if `external_id` is not provided. -## SlackApi.EnableSlackFileSharing [Permalink for this section](https://docs.arcade.dev/toolkits/social-communication/slack_api\#slackapienableslackfilesharing) +## SlackApi.EnableSlackFileSharing [Permalink for this section](https://docs.arcade.dev/mcp-servers/social-communication/slack_api\#slackapienableslackfilesharing) See Example > @@ -25993,7 +25993,7 @@ Enable a Slack file for public sharing. - **file\_id\_to\_share** ( `string`, required) The ID of the file on Slack that you want to enable for public sharing. -## SlackApi.PinItemToSlackChannel [Permalink for this section](https://docs.arcade.dev/toolkits/social-communication/slack_api\#slackapipinitemtoslackchannel) +## SlackApi.PinItemToSlackChannel [Permalink for this section](https://docs.arcade.dev/mcp-servers/social-communication/slack_api\#slackapipinitemtoslackchannel) See Example > @@ -26004,7 +26004,7 @@ Pin an item to a Slack channel. - **channel\_id** ( `string`, required) The ID of the Slack channel where the message will be pinned. A `timestamp` must also be provided. - **message\_timestamp** ( `string`, optional) The timestamp ( `ts`) of the message to pin in the Slack channel. Ensure the channel is also specified. -## SlackApi.ListPinnedItems [Permalink for this section](https://docs.arcade.dev/toolkits/social-communication/slack_api\#slackapilistpinneditems) +## SlackApi.ListPinnedItems [Permalink for this section](https://docs.arcade.dev/mcp-servers/social-communication/slack_api\#slackapilistpinneditems) See Example > @@ -26014,7 +26014,7 @@ Retrieve items pinned to a Slack channel. - **channel\_id** ( `string`, required) The ID of the Slack channel to retrieve pinned items from. This is required to specify which channel’s pinned items will be listed. -## SlackApi.AddSlackReaction [Permalink for this section](https://docs.arcade.dev/toolkits/social-communication/slack_api\#slackapiaddslackreaction) +## SlackApi.AddSlackReaction [Permalink for this section](https://docs.arcade.dev/mcp-servers/social-communication/slack_api\#slackapiaddslackreaction) See Example > @@ -26026,7 +26026,7 @@ Add a reaction to a Slack item. - **reaction\_emoji\_name** ( `string`, required) The name of the emoji to be used as a reaction. Include skin tone modifiers if applicable (e.g., β€˜thumbsup::skin-tone-2’). - **message\_timestamp** ( `string`, required) The timestamp of the message to which the reaction will be added. Ensure the format matches the Slack API requirements. -## SlackApi.RemoveReactionFromItem [Permalink for this section](https://docs.arcade.dev/toolkits/social-communication/slack_api\#slackapiremovereactionfromitem) +## SlackApi.RemoveReactionFromItem [Permalink for this section](https://docs.arcade.dev/mcp-servers/social-communication/slack_api\#slackapiremovereactionfromitem) See Example > @@ -26040,7 +26040,7 @@ Remove a reaction from a Slack item. - **message\_channel\_id** ( `string`, optional) Channel ID where the message to remove the reaction from was posted. Required if removing a reaction from a message. Use in combination with β€˜message\_timestamp’. - **message\_timestamp** ( `string`, optional) The exact timestamp of the message from which to remove the reaction. Specify when targeting a message. -## SlackApi.SearchFilesInSlack [Permalink for this section](https://docs.arcade.dev/toolkits/social-communication/slack_api\#slackapisearchfilesinslack) +## SlackApi.SearchFilesInSlack [Permalink for this section](https://docs.arcade.dev/mcp-servers/social-communication/slack_api\#slackapisearchfilesinslack) See Example > @@ -26056,7 +26056,7 @@ Search for files in Slack using a query. - **encoded\_team\_id** ( `string`, optional) Encoded team ID to specify the search domain when using an org-level token. Ignored with a workspace-level token. - **enable\_query\_highlight** ( `boolean`, optional) Set to true to enable highlight markers for matching query terms in the search results. -## SlackApi.SearchSlackMessages [Permalink for this section](https://docs.arcade.dev/toolkits/social-communication/slack_api\#slackapisearchslackmessages) +## SlackApi.SearchSlackMessages [Permalink for this section](https://docs.arcade.dev/mcp-servers/social-communication/slack_api\#slackapisearchslackmessages) See Example > @@ -26073,7 +26073,7 @@ Search Slack messages based on a query. - **team\_id** ( `string`, optional) The encoded team ID to search within. Required only if an organization-level token is used. Ignored for workspace-level tokens. - **enable\_query\_highlighting** ( `boolean`, optional) Set to true to enable query highlight markers, marking matching terms in the results. -## SlackApi.GetTeamBillableUsersInfo [Permalink for this section](https://docs.arcade.dev/toolkits/social-communication/slack_api\#slackapigetteambillableusersinfo) +## SlackApi.GetTeamBillableUsersInfo [Permalink for this section](https://docs.arcade.dev/mcp-servers/social-communication/slack_api\#slackapigetteambillableusersinfo) See Example > @@ -26086,7 +26086,7 @@ Retrieves billable users info for the current Slack team. - **specific\_user\_id** ( `string`, optional) The ID of a specific user to retrieve billable information for. Leave empty to retrieve info for all users. - **encoded\_team\_id** ( `string`, optional) Encoded team ID for retrieving billable info, required if using an org token. Ignored with workspace-level tokens. -## SlackApi.GetCurrentSlackTeamInfo [Permalink for this section](https://docs.arcade.dev/toolkits/social-communication/slack_api\#slackapigetcurrentslackteaminfo) +## SlackApi.GetCurrentSlackTeamInfo [Permalink for this section](https://docs.arcade.dev/mcp-servers/social-communication/slack_api\#slackapigetcurrentslackteaminfo) See Example > @@ -26097,7 +26097,7 @@ Retrieve information about the current Slack team. - **query\_by\_domain** ( `string`, optional) Comma-separated domains to query instead of a team, used when the team is not specified. This only works for domains in the same enterprise as the querying team token. - **specific\_team\_id** ( `string`, optional) The ID of the Slack team to retrieve information about. If omitted, information about the current team will be returned. -## SlackApi.GetIntegrationLogs [Permalink for this section](https://docs.arcade.dev/toolkits/social-communication/slack_api\#slackapigetintegrationlogs) +## SlackApi.GetIntegrationLogs [Permalink for this section](https://docs.arcade.dev/mcp-servers/social-communication/slack_api\#slackapigetintegrationlogs) See Example > @@ -26113,7 +26113,7 @@ Retrieve integration logs for the current Slack team. - **encoded\_team\_id** ( `string`, optional) The encoded team ID to get logs from, required if using an org-level token. Ignored if using a workspace-level token. - **filter\_by\_user** ( `string`, optional) Filter logs generated by a specific user’s actions. Defaults to all logs if not specified. -## SlackApi.GetSlackTeamPreferences [Permalink for this section](https://docs.arcade.dev/toolkits/social-communication/slack_api\#slackapigetslackteampreferences) +## SlackApi.GetSlackTeamPreferences [Permalink for this section](https://docs.arcade.dev/mcp-servers/social-communication/slack_api\#slackapigetslackteampreferences) See Example > @@ -26123,7 +26123,7 @@ Retrieve a list of a workspace’s team preferences. This tool does not take any parameters. -## SlackApi.GetTeamProfile [Permalink for this section](https://docs.arcade.dev/toolkits/social-communication/slack_api\#slackapigetteamprofile) +## SlackApi.GetTeamProfile [Permalink for this section](https://docs.arcade.dev/mcp-servers/social-communication/slack_api\#slackapigetteamprofile) See Example > @@ -26133,7 +26133,7 @@ Retrieve a team’s profile information from Slack. - **visibility\_filter** ( `string`, optional) Filter the profile fields based on visibility. Options: β€˜all’, β€˜visible’, β€˜hidden’. Default is β€˜all’. -## SlackApi.CreateSlackUserGroup [Permalink for this section](https://docs.arcade.dev/toolkits/social-communication/slack_api\#slackapicreateslackusergroup) +## SlackApi.CreateSlackUserGroup [Permalink for this section](https://docs.arcade.dev/mcp-servers/social-communication/slack_api\#slackapicreateslackusergroup) See Example > @@ -26150,7 +26150,7 @@ Creates a new user group in Slack. - **include\_user\_count** ( `boolean`, optional) Set to true to include the number of users in each User Group. - **enable\_display\_as\_sidebar\_section** ( `boolean`, optional) Set to true to display the user group as a sidebar section for all group members if the group has one or more default channels. -## SlackApi.DisableUserGroup [Permalink for this section](https://docs.arcade.dev/toolkits/social-communication/slack_api\#slackapidisableusergroup) +## SlackApi.DisableUserGroup [Permalink for this section](https://docs.arcade.dev/mcp-servers/social-communication/slack_api\#slackapidisableusergroup) See Example > @@ -26162,7 +26162,7 @@ Disable an existing Slack User Group. - **team\_id** ( `string`, optional) Encoded target team ID where the user group exists. Required only if using an org-level token; ignored for workspace-level tokens. - **include\_user\_count** ( `boolean`, optional) Include the number of users in the User Group. Set to true to include the count. -## SlackApi.EnableSlackUserGroup [Permalink for this section](https://docs.arcade.dev/toolkits/social-communication/slack_api\#slackapienableslackusergroup) +## SlackApi.EnableSlackUserGroup [Permalink for this section](https://docs.arcade.dev/mcp-servers/social-communication/slack_api\#slackapienableslackusergroup) See Example > @@ -26174,7 +26174,7 @@ Enable a user group in Slack. - **team\_id** ( `string`, optional) Provide the encoded team ID where the user group is located. Only required if using an org-level token. Ignored with workspace-level tokens. - **include\_user\_count** ( `boolean`, optional) Set to true to include the number of users in the User Group. -## SlackApi.ListSlackUserGroups [Permalink for this section](https://docs.arcade.dev/toolkits/social-communication/slack_api\#slackapilistslackusergroups) +## SlackApi.ListSlackUserGroups [Permalink for this section](https://docs.arcade.dev/mcp-servers/social-communication/slack_api\#slackapilistslackusergroups) See Example > @@ -26187,7 +26187,7 @@ Retrieve all user groups for a Slack team. - **include\_disabled\_groups** ( `boolean`, optional) Set to true to include disabled user groups in the results. - **include\_users\_in\_group** ( `boolean`, optional) Include the list of users for each User Group in the response. -## SlackApi.UpdateSlackUserGroup [Permalink for this section](https://docs.arcade.dev/toolkits/social-communication/slack_api\#slackapiupdateslackusergroup) +## SlackApi.UpdateSlackUserGroup [Permalink for this section](https://docs.arcade.dev/mcp-servers/social-communication/slack_api\#slackapiupdateslackusergroup) See Example > @@ -26205,7 +26205,7 @@ Update an existing User Group in Slack. - **include\_user\_count** ( `boolean`, optional) Set to true to include the number of users in the User Group. - **enable\_sidebar\_section** ( `boolean`, optional) Set to true to configure the user group to appear as a sidebar section for all group members. Only relevant if the group has 1 or more default channels. -## SlackApi.UpdateSlackUsergroupUsers [Permalink for this section](https://docs.arcade.dev/toolkits/social-communication/slack_api\#slackapiupdateslackusergroupusers) +## SlackApi.UpdateSlackUsergroupUsers [Permalink for this section](https://docs.arcade.dev/mcp-servers/social-communication/slack_api\#slackapiupdateslackusergroupusers) See Example > @@ -26220,7 +26220,7 @@ Update the list of users in a Slack user group. - **include\_user\_count** ( `boolean`, optional) Set to true to include the number of users in the user group in the response. - **is\_shared\_section** ( `boolean`, optional) Indicates if the API call involves a shared section. Set to true if it does, otherwise false. -## SlackApi.ListAccessibleSlackConversations [Permalink for this section](https://docs.arcade.dev/toolkits/social-communication/slack_api\#slackapilistaccessibleslackconversations) +## SlackApi.ListAccessibleSlackConversations [Permalink for this section](https://docs.arcade.dev/mcp-servers/social-communication/slack_api\#slackapilistaccessibleslackconversations) See Example > @@ -26235,7 +26235,7 @@ Retrieve a list of conversations the user can access on Slack. - **specific\_user\_id** ( `string`, optional) Filter conversations by a specific user ID’s membership. Only includes conversations shared with the calling user. - **exclude\_archived\_channels** ( `boolean`, optional) Set to true to exclude archived channels from the retrieved list of Slack conversations. (default: false) -## SlackApi.CheckSlackDiscoverability [Permalink for this section](https://docs.arcade.dev/toolkits/social-communication/slack_api\#slackapicheckslackdiscoverability) +## SlackApi.CheckSlackDiscoverability [Permalink for this section](https://docs.arcade.dev/mcp-servers/social-communication/slack_api\#slackapicheckslackdiscoverability) See Example > @@ -26245,7 +26245,7 @@ Check if an email is discoverable on Slack. - **email\_to\_check** ( `string`, required) The email address to verify if it is associated with a discoverable Slack user. -## SlackApi.GetSlackUserPresence [Permalink for this section](https://docs.arcade.dev/toolkits/social-communication/slack_api\#slackapigetslackuserpresence) +## SlackApi.GetSlackUserPresence [Permalink for this section](https://docs.arcade.dev/mcp-servers/social-communication/slack_api\#slackapigetslackuserpresence) See Example > @@ -26255,7 +26255,7 @@ Retrieve user presence information from Slack. - **target\_user\_id** ( `string`, optional) The Slack user ID for which you want to retrieve presence information. (default: β€˜authed user’) -## SlackApi.GetUserIdentity [Permalink for this section](https://docs.arcade.dev/toolkits/social-communication/slack_api\#slackapigetuseridentity) +## SlackApi.GetUserIdentity [Permalink for this section](https://docs.arcade.dev/mcp-servers/social-communication/slack_api\#slackapigetuseridentity) See Example > @@ -26265,7 +26265,7 @@ Retrieve a user’s identity information from Slack. This tool does not take any parameters. -## SlackApi.ListSlackTeamUsers [Permalink for this section](https://docs.arcade.dev/toolkits/social-communication/slack_api\#slackapilistslackteamusers) +## SlackApi.ListSlackTeamUsers [Permalink for this section](https://docs.arcade.dev/mcp-servers/social-communication/slack_api\#slackapilistslackteamusers) See Example > @@ -26278,7 +26278,7 @@ Fetches a list of all users in a Slack team. - **slack\_team\_id** ( `string`, optional) The encoded team ID to list users from, necessary if an organization-level token is used. Ignored if a workspace-level token is provided. - **include\_user\_locale** ( `boolean`, optional) Set to true to receive locale information for each user. Default is false. -## SlackApi.FindSlackUserByEmail [Permalink for this section](https://docs.arcade.dev/toolkits/social-communication/slack_api\#slackapifindslackuserbyemail) +## SlackApi.FindSlackUserByEmail [Permalink for this section](https://docs.arcade.dev/mcp-servers/social-communication/slack_api\#slackapifindslackuserbyemail) See Example > @@ -26288,7 +26288,7 @@ Find a Slack user using their email address. - **user\_email\_address** ( `string`, required) The email address of the user in the Slack workspace to search for. -## SlackApi.GetSlackUserProfile [Permalink for this section](https://docs.arcade.dev/toolkits/social-communication/slack_api\#slackapigetslackuserprofile) +## SlackApi.GetSlackUserProfile [Permalink for this section](https://docs.arcade.dev/mcp-servers/social-communication/slack_api\#slackapigetslackuserprofile) See Example > @@ -26299,7 +26299,7 @@ Retrieve Slack user profile information and custom status. - **target\_user\_id** ( `string`, optional) The unique identifier of the Slack user whose profile information is to be retrieved. - **include\_labels** ( `boolean`, optional) Include labels for each ID in custom profile fields. This option can heavily rate-limit requests and is not recommended. Default is false. -## SlackApi.SetSlackProfilePhoto [Permalink for this section](https://docs.arcade.dev/toolkits/social-communication/slack_api\#slackapisetslackprofilephoto) +## SlackApi.SetSlackProfilePhoto [Permalink for this section](https://docs.arcade.dev/mcp-servers/social-communication/slack_api\#slackapisetslackprofilephoto) See Example > @@ -26326,7 +26326,7 @@ Arcade tools can be self-hosted on your own infrastructure. Learn more about sel pip install arcade_slack_api\\ ```](https://docs.arcade.dev/home/hosting-overview) -[Reddit](https://docs.arcade.dev/toolkits/social-communication/reddit "Reddit") [Reference](https://docs.arcade.dev/toolkits/social-communication/teams/reference "Reference") +[Reddit](https://docs.arcade.dev/mcp-servers/social-communication/reddit "Reddit") [Reference](https://docs.arcade.dev/mcp-servers/social-communication/teams/reference "Reference") Frame diff --git a/public/llms.txt b/public/llms.txt index f503ac4ef..7f9ba6725 100644 --- a/public/llms.txt +++ b/public/llms.txt @@ -1,89 +1,89 @@ # https://docs.arcade.dev llms.txt - [AI Agent Deployment](https://docs.arcade.dev/home): Learn to deploy AI agents securely with Arcade's tools. -- [Spotify Toolkit Overview](https://docs.arcade.dev/toolkits/entertainment/spotify): Interact with Spotify tracks using Arcade's toolkit features. +- [Spotify Toolkit Overview](https://docs.arcade.dev/mcp-servers/entertainment/spotify): Interact with Spotify tracks using Arcade's toolkit features. - [Arcade.dev Changelog](https://docs.arcade.dev/home/changelog): Latest updates and features for Arcade.dev toolkits and APIs. -- [Google Search Toolkit](https://docs.arcade.dev/toolkits/search/google_search): Enable agents to perform Google searches using SerpAPI. +- [Google Search Toolkit](https://docs.arcade.dev/mcp-servers/search/google_search): Enable agents to perform Google searches using SerpAPI. - [MCP Overview](https://docs.arcade.dev/home/mcp-overview): Explore Arcade.dev's Model Context Protocol for AI development. -- [Twitch Auth Configuration](https://docs.arcade.dev/toolkits/entertainment/twitch): Guide to configuring Twitch authentication for Arcade tools. -- [Google Hotels Toolkit](https://docs.arcade.dev/toolkits/search/google_hotels): Search for hotels globally with Arcade's Google Hotels toolkit. +- [Twitch Auth Configuration](https://docs.arcade.dev/mcp-servers/entertainment/twitch): Guide to configuring Twitch authentication for Arcade tools. +- [Google Hotels Toolkit](https://docs.arcade.dev/mcp-servers/search/google_hotels): Search for hotels globally with Arcade's Google Hotels toolkit. - [GitHub Auth Provider](https://docs.arcade.dev/home/auth-providers/github): Learn to configure GitHub auth for Arcade applications. -- [Google Docs Reference](https://docs.arcade.dev/toolkits/productivity/google_docs/reference): Reference for Google Docs toolkit enumerations and formats. -- [Gmail Toolkit Reference](https://docs.arcade.dev/toolkits/productivity/gmail/reference): Reference for Gmail toolkit enumerations and date ranges. +- [Google Docs Reference](https://docs.arcade.dev/mcp-servers/productivity/google_docs/reference): Reference for Google Docs toolkit enumerations and formats. +- [Gmail Toolkit Reference](https://docs.arcade.dev/mcp-servers/productivity/gmail/reference): Reference for Gmail toolkit enumerations and date ranges. - [Zendesk Auth Provider](https://docs.arcade.dev/home/auth-providers/zendesk): Guide to configuring Zendesk authentication with Arcade platform. -- [LinkedIn Toolkit](https://docs.arcade.dev/toolkits/social-communication/linkedin): Toolkit for integrating LinkedIn with agents and AI apps. +- [LinkedIn Toolkit](https://docs.arcade.dev/mcp-servers/social-communication/linkedin): Toolkit for integrating LinkedIn with agents and AI apps. - [Arcade Local Installation](https://docs.arcade.dev/home/local-deployment/install/local): Guide to install Arcade locally for development purposes. - [Arcade Deploy Guide](https://docs.arcade.dev/home/serve-tools/arcade-deploy): Guide to deploying workers using Arcade Deploy tools. -- [Firecrawl Toolkit](https://docs.arcade.dev/toolkits/development/firecrawl/firecrawl): Scrape, crawl, and map websites with Firecrawl toolkit. -- [Twilio Toolkit](https://docs.arcade.dev/toolkits/social-communication/twilio/reference): Twilio toolkit for sending SMS and WhatsApp messages. -- [Microsoft Teams Reference](https://docs.arcade.dev/toolkits/social-communication/microsoft_teams/reference): Reference for Microsoft Teams toolkit enumerations and types. -- [Stripe Payment Toolkit](https://docs.arcade.dev/toolkits/payments/stripe): Interact with Stripe API for payments and invoicing. -- [Notion Toolkit](https://docs.arcade.dev/toolkits/productivity/notion): Toolkit for integrating and managing Notion pages easily. +- [Firecrawl Toolkit](https://docs.arcade.dev/mcp-servers/development/firecrawl/firecrawl): Scrape, crawl, and map websites with Firecrawl toolkit. +- [Twilio Toolkit](https://docs.arcade.dev/mcp-servers/social-communication/twilio/reference): Twilio toolkit for sending SMS and WhatsApp messages. +- [Microsoft Teams Reference](https://docs.arcade.dev/mcp-servers/social-communication/microsoft_teams/reference): Reference for Microsoft Teams toolkit enumerations and types. +- [Stripe Payment Toolkit](https://docs.arcade.dev/mcp-servers/payments/stripe): Interact with Stripe API for payments and invoicing. +- [Notion Toolkit](https://docs.arcade.dev/mcp-servers/productivity/notion): Toolkit for integrating and managing Notion pages easily. - [X Auth Provider Guide](https://docs.arcade.dev/home/auth-providers/x): Learn to configure and use the X auth provider. -- [Imgflip Meme Toolkit](https://docs.arcade.dev/toolkits/entertainment/imgflip): Create and search memes easily with Imgflip toolkit. +- [Imgflip Meme Toolkit](https://docs.arcade.dev/mcp-servers/entertainment/imgflip): Create and search memes easily with Imgflip toolkit. - [User Auth Management](https://docs.arcade.dev/home/mastra/user-auth-interrupts): Manage user authentication flows with dynamic tool loading. - [Arcade Toolkits Overview](https://docs.arcade.dev/toolkits): Explore various toolkits for productivity, development, and more. - [Agent Authorization Simplified](https://docs.arcade.dev/home/auth/how-arcade-helps): Arcade simplifies agent authorization for secure AI actions. -- [Dropbox Toolkit Integration](https://docs.arcade.dev/toolkits/productivity/dropbox/dropbox): Integrate Dropbox for file management and agent interaction. +- [Dropbox Toolkit Integration](https://docs.arcade.dev/mcp-servers/productivity/dropbox/dropbox): Integrate Dropbox for file management and agent interaction. - [Linear Auth Provider](https://docs.arcade.dev/home/auth-providers/linear): Guide to configuring Linear auth provider for Arcade apps. - [Arcade Toolkit Installation](https://docs.arcade.dev/home/local-deployment/install/toolkits): Guide to install and run toolkits locally for Arcade. - [Arcade FAQ](https://docs.arcade.dev/home/faq): Find answers to common questions about Arcade tools and usage. - [Arcade Google ADK Integration](https://docs.arcade.dev/home/google-adk/overview): Integrate Arcade with Google ADK for enhanced AI tools. - [Create Evaluation Suite](https://docs.arcade.dev/home/evaluate-tools/create-an-evaluation-suite): Learn to create and run evaluation suites for tools. -- [ClickUp Toolkit](https://docs.arcade.dev/toolkits/productivity/clickup): Integrate ClickUp for task management and collaboration tools. -- [GitHub Toolkit Integration](https://docs.arcade.dev/toolkits/development/github/github): Integrate GitHub with agents for repository management and automation. +- [ClickUp Toolkit](https://docs.arcade.dev/mcp-servers/productivity/clickup): Integrate ClickUp for task management and collaboration tools. +- [GitHub Toolkit Integration](https://docs.arcade.dev/mcp-servers/development/github/github): Integrate GitHub with agents for repository management and automation. - [Spotify Auth Provider](https://docs.arcade.dev/home/auth-providers/spotify): Guide to configuring Spotify Auth Provider in Arcade. -- [Google Flights Toolkit](https://docs.arcade.dev/toolkits/search/google_flights): Search for flights easily with Arcade's Google Flights toolkit. +- [Google Flights Toolkit](https://docs.arcade.dev/mcp-servers/search/google_flights): Search for flights easily with Arcade's Google Flights toolkit. - [Deploy Arcade Worker](https://docs.arcade.dev/home/serve-tools/modal-worker): Guide to deploy a custom Arcade Worker using Modal. - [Create Tool with Secrets](https://docs.arcade.dev/home/build-tools/create-a-tool-with-secrets): Learn to use secrets in custom Arcade tools effectively. - [Atlassian Auth Provider](https://docs.arcade.dev/home/auth-providers/atlassian): Guide to configuring Atlassian auth provider for Arcade. - [Arcade Engine Configuration](https://docs.arcade.dev/home/local-deployment/configure/engine): Guide to configure Arcade Engine with YAML settings. - [Hubspot Auth Provider](https://docs.arcade.dev/home/auth-providers/hubspot): Integrate Hubspot APIs using Arcade's auth provider seamlessly. - [Zoom Auth Provider](https://docs.arcade.dev/home/auth-providers/zoom): Guide to configuring Zoom auth provider for Arcade apps. -- [Microsoft Teams Toolkit](https://docs.arcade.dev/toolkits/social-communication/microsoft_teams): Toolkit for managing Microsoft Teams interactions and communications. -- [Close.io Productivity Tools](https://docs.arcade.dev/toolkits/productivity/closeio): Explore Close.io for productivity and integration tools. +- [Microsoft Teams Toolkit](https://docs.arcade.dev/mcp-servers/social-communication/microsoft_teams): Toolkit for managing Microsoft Teams interactions and communications. +- [Close.io Productivity Tools](https://docs.arcade.dev/mcp-servers/productivity/closeio): Explore Close.io for productivity and integration tools. - [Arcade AI Tools Guide](https://docs.arcade.dev/llms.txt): Comprehensive guide for deploying and managing AI tools securely. - [Arcade Tools Overview](https://docs.arcade.dev/sitemap-0.xml): Comprehensive guide to Arcade tools and integrations. - [OAuth 2.0 Setup](https://docs.arcade.dev/home/auth-providers/oauth2): Configure OAuth 2.0 for Arcade tools and apps easily. -- [Slack Environment Variables](https://docs.arcade.dev/toolkits/social-communication/slack/environment_variables): Manage Slack API requests with environment variable settings. +- [Slack Environment Variables](https://docs.arcade.dev/mcp-servers/social-communication/slack/environment_variables): Manage Slack API requests with environment variable settings. - [Connect Claude Desktop](https://docs.arcade.dev/home/mcp-desktop-clients/claude-desktop-client): Guide to connect Claude Desktop with Arcade server setup. -- [Google Sheets Reference](https://docs.arcade.dev/toolkits/productivity/google_sheets/reference): Reference for Google Sheets toolkit enumerations and usage. -- [Outlook Calendar Toolkit](https://docs.arcade.dev/toolkits/productivity/outlook_calendar): Create and manage events using Outlook Calendar integration. -- [Slack Toolkit Reference](https://docs.arcade.dev/toolkits/social-communication/slack/reference): Reference for Slack toolkit enumerations and environment variables. +- [Google Sheets Reference](https://docs.arcade.dev/mcp-servers/productivity/google_sheets/reference): Reference for Google Sheets toolkit enumerations and usage. +- [Outlook Calendar Toolkit](https://docs.arcade.dev/mcp-servers/productivity/outlook_calendar): Create and manage events using Outlook Calendar integration. +- [Slack Toolkit Reference](https://docs.arcade.dev/mcp-servers/social-communication/slack/reference): Reference for Slack toolkit enumerations and environment variables. - [Tool Authorization Status](https://docs.arcade.dev/home/auth/tool-auth-status): Check tool authorization status and requirements for users. - [Arcade Docker Installation](https://docs.arcade.dev/home/local-deployment/install/docker): Guide to install and run Arcade Engine using Docker. -- [Walmart Product Search](https://docs.arcade.dev/toolkits/search/walmart): Search for Walmart products and get product details easily. -- [Zendesk Toolkit Reference](https://docs.arcade.dev/toolkits/customer-support/zendesk/reference): Reference for Zendesk toolkit enumerations and statuses. +- [Walmart Product Search](https://docs.arcade.dev/mcp-servers/search/walmart): Search for Walmart products and get product details easily. +- [Zendesk Toolkit Reference](https://docs.arcade.dev/mcp-servers/customer-support/zendesk/reference): Reference for Zendesk toolkit enumerations and statuses. - [Get Tool Definitions](https://docs.arcade.dev/home/use-tools/get-tool-definitions): Learn how to get tool definitions formatted for various models. -- [Google Calendar Toolkit](https://docs.arcade.dev/toolkits/productivity/google_calendar): Integrate Google Calendar for event management and scheduling. +- [Google Calendar Toolkit](https://docs.arcade.dev/mcp-servers/productivity/google_calendar): Integrate Google Calendar for event management and scheduling. - [Evaluate Tool Effectiveness](https://docs.arcade.dev/home/evaluate-tools/why-evaluate-tools): Evaluate language models' tool-calling capabilities effectively and reliably. -- [Clickup Toolkit Reference](https://docs.arcade.dev/toolkits/productivity/clickup/reference): Comprehensive reference for Clickup toolkit enumerations and values. +- [Clickup Toolkit Reference](https://docs.arcade.dev/mcp-servers/productivity/clickup/reference): Comprehensive reference for Clickup toolkit enumerations and values. - [Hybrid Worker Setup](https://docs.arcade.dev/home/hybrid-deployment/hybrid-worker): Learn to set up and manage hybrid workers effectively. - [User Authorization Guide](https://docs.arcade.dev/home/oai-agents/user-auth-interrupts): Learn to manage user authorization in OpenAI Agents applications. - [Using Arcade Tools](https://docs.arcade.dev/home/crewai/use-arcade-tools): Integrate Arcade tools into your CrewAI application effectively. -- [Hubspot Toolkit Reference](https://docs.arcade.dev/toolkits/sales/hubspot/reference): Reference for Hubspot toolkit enumerations and statuses. -- [Arcade Obsidian Toolkit](https://docs.arcade.dev/toolkits/productivity/obsidian): Community-driven toolkit for enhancing productivity in Obsidian. +- [Hubspot Toolkit Reference](https://docs.arcade.dev/mcp-servers/sales/hubspot/reference): Reference for Hubspot toolkit enumerations and statuses. +- [Arcade Obsidian Toolkit](https://docs.arcade.dev/mcp-servers/productivity/obsidian): Community-driven toolkit for enhancing productivity in Obsidian. - [Retryable Tool Error](https://docs.arcade.dev/home/build-tools/retry-tools-with-improved-prompt): Learn to use RetryableToolError for improved tool calls. - [Auth Providers Overview](https://docs.arcade.dev/home/auth-providers): Explore various auth providers for seamless data access. -- [Teams Toolkit Reference](https://docs.arcade.dev/toolkits/social-communication/teams/reference): Reference for Teams toolkit enumerations and match types. +- [Teams Toolkit Reference](https://docs.arcade.dev/mcp-servers/social-communication/teams/reference): Reference for Teams toolkit enumerations and match types. - [Arcade Engine Configuration](https://docs.arcade.dev/home/local-deployment/configure/overview): Overview of Arcade Engine configuration files and settings. -- [Arcade Gmail Toolkit](https://docs.arcade.dev/toolkits/productivity/gmail): Manage emails effortlessly with the Arcade Gmail toolkit. +- [Arcade Gmail Toolkit](https://docs.arcade.dev/mcp-servers/productivity/gmail): Manage emails effortlessly with the Arcade Gmail toolkit. - [Tool Error Handling Guide](https://docs.arcade.dev/home/build-tools/handle-tool-errors): Comprehensive guide on handling tool errors in Arcade TDK. - [Tool Calling Overview](https://docs.arcade.dev/home/use-tools/tools-overview): Explore tool calling for enhanced AI interactions and applications. -- [Google Slides Toolkit](https://docs.arcade.dev/toolkits/productivity/google_slides): Interact with Google Slides to create, comment, and manage presentations. -- [Zoom Toolkit Integration](https://docs.arcade.dev/toolkits/social-communication/zoom): Integrate Zoom for meeting management and invitations. +- [Google Slides Toolkit](https://docs.arcade.dev/mcp-servers/productivity/google_slides): Interact with Google Slides to create, comment, and manage presentations. +- [Zoom Toolkit Integration](https://docs.arcade.dev/mcp-servers/social-communication/zoom): Integrate Zoom for meeting management and invitations. - [Arcade Deploy Configuration](https://docs.arcade.dev/home/local-deployment/configure/arcade-deploy): Guide to configure and deploy workers using Arcade CLI. -- [Discord Auth Configuration](https://docs.arcade.dev/toolkits/social-communication/discord): Guide to configuring Discord auth with Arcade tools. +- [Discord Auth Configuration](https://docs.arcade.dev/mcp-servers/social-communication/discord): Guide to configuring Discord auth with Arcade tools. - [Arcade Hosting Overview](https://docs.arcade.dev/home/hosting-overview): Explore hosting options for Arcade, including cloud and local. -- [Asana Toolkit Reference](https://docs.arcade.dev/toolkits/productivity/asana/reference): Comprehensive Asana reference for task management and organization. +- [Asana Toolkit Reference](https://docs.arcade.dev/mcp-servers/productivity/asana/reference): Comprehensive Asana reference for task management and organization. - [Arcade Tools with Vercel AI](https://docs.arcade.dev/home/vercelai/use-arcade-tools): Learn to integrate Arcade tools with Vercel AI SDK. -- [PostgreSQL Toolkit](https://docs.arcade.dev/toolkits/databases/postgres): Interact with PostgreSQL databases using read-only tools. -- [Google Docs Toolkit](https://docs.arcade.dev/toolkits/productivity/google_docs): Toolkit for interacting with Google Docs documents easily. -- [Google Calendar Reference](https://docs.arcade.dev/toolkits/productivity/google_calendar/reference): Reference for Google Calendar toolkit enumerations and options. -- [Google Contacts Toolkit](https://docs.arcade.dev/toolkits/productivity/google_contacts): Easily manage Google Contacts with powerful integration tools. +- [PostgreSQL Toolkit](https://docs.arcade.dev/mcp-servers/databases/postgres): Interact with PostgreSQL databases using read-only tools. +- [Google Docs Toolkit](https://docs.arcade.dev/mcp-servers/productivity/google_docs): Toolkit for interacting with Google Docs documents easily. +- [Google Calendar Reference](https://docs.arcade.dev/mcp-servers/productivity/google_calendar/reference): Reference for Google Calendar toolkit enumerations and options. +- [Google Contacts Toolkit](https://docs.arcade.dev/mcp-servers/productivity/google_contacts): Easily manage Google Contacts with powerful integration tools. - [Arcade Glossary](https://docs.arcade.dev/home/glossary): Comprehensive glossary of terms related to Arcade platform. - [Google Auth Provider](https://docs.arcade.dev/home/auth-providers/google): Integrate Google OAuth for seamless API access in apps. -- [Google Jobs Toolkit](https://docs.arcade.dev/toolkits/search/google_jobs): Search for job openings using Google Jobs toolkit. +- [Google Jobs Toolkit](https://docs.arcade.dev/mcp-servers/search/google_jobs): Search for job openings using Google Jobs toolkit. - [Twitch Auth Provider](https://docs.arcade.dev/home/auth-providers/twitch): Guide to configuring Twitch Auth Provider for Arcade. - [Contact Arcade Support](https://docs.arcade.dev/home/contact-us): Get support and resources for Arcade services and community. - [Notion Auth Provider](https://docs.arcade.dev/home/auth-providers/notion): Configure Notion auth provider for seamless API integration. @@ -92,72 +92,72 @@ - [Arcade CLI Tool](https://docs.arcade.dev/home/arcade-cli): Command-line tool for managing Arcade deployments and toolkits. - [Asana Auth Provider](https://docs.arcade.dev/home/auth-providers/asana): Integrate Asana APIs using Arcade's auth provider seamlessly. - [Authorized Tool Calling](https://docs.arcade.dev/home/auth/auth-tool-calling): Learn to authorize tools for AI agents securely. -- [Jira Toolkit Reference](https://docs.arcade.dev/toolkits/productivity/jira/reference): Reference for Jira toolkit enumerations and filtering options. -- [Confluence Toolkit](https://docs.arcade.dev/toolkits/productivity/confluence): Toolkit for integrating and managing Confluence content easily. +- [Jira Toolkit Reference](https://docs.arcade.dev/mcp-servers/productivity/jira/reference): Reference for Jira toolkit enumerations and filtering options. +- [Confluence Toolkit](https://docs.arcade.dev/mcp-servers/productivity/confluence): Toolkit for integrating and managing Confluence content easily. - [Arcade Tools Integration](https://docs.arcade.dev/home/google-adk/use-arcade-tools): Integrate Arcade tools into Google ADK applications effectively. -- [Arcade Zoom Integration](https://docs.arcade.dev/toolkits/social-communication/zoom/install): Integrate Arcade with Zoom for efficient meeting management. +- [Arcade Zoom Integration](https://docs.arcade.dev/mcp-servers/social-communication/zoom/install): Integrate Arcade with Zoom for efficient meeting management. - [Arcade Installation Overview](https://docs.arcade.dev/home/local-deployment/install/overview): Explore various installation options for Arcade locally and in Docker. -- [Arcade Slack Integration](https://docs.arcade.dev/toolkits/social-communication/slack/install): Integrate Arcade with Slack for enhanced team communication. +- [Arcade Slack Integration](https://docs.arcade.dev/mcp-servers/social-communication/slack/install): Integrate Arcade with Slack for enhanced team communication. - [Authorize LangChain Tools](https://docs.arcade.dev/home/langchain/auth-langchain-tools): Guide to authorize LangChain tools using Arcade API. -- [MongoDB Toolkit Overview](https://docs.arcade.dev/toolkits/databases/mongodb): Explore MongoDB databases with read-only access tools. -- [Arcade Toolkit Template](https://docs.arcade.dev/toolkits/community-toolkit-template): Community-driven toolkit for Arcade development and contributions. +- [MongoDB Toolkit Overview](https://docs.arcade.dev/mcp-servers/databases/mongodb): Explore MongoDB databases with read-only access tools. +- [Arcade Toolkit Template](https://docs.arcade.dev/mcp-servers/community-toolkit-template): Community-driven toolkit for Arcade development and contributions. - [Dropbox Auth Provider](https://docs.arcade.dev/home/auth-providers/dropbox): Guide to configuring Dropbox authentication for Arcade applications. -- [Google Drive Reference](https://docs.arcade.dev/toolkits/productivity/google_drive/reference): Reference for Google Drive toolkit enumerations and file types. -- [Asana Toolkit Integration](https://docs.arcade.dev/toolkits/productivity/asana): Integrate Asana for task and project management easily. -- [YouTube Video Search](https://docs.arcade.dev/toolkits/search/youtube): Search for YouTube videos and get video details easily. -- [Clickhouse Database Toolkit](https://docs.arcade.dev/toolkits/databases/clickhouse): Toolkit for read-only interaction with Clickhouse databases. +- [Google Drive Reference](https://docs.arcade.dev/mcp-servers/productivity/google_drive/reference): Reference for Google Drive toolkit enumerations and file types. +- [Asana Toolkit Integration](https://docs.arcade.dev/mcp-servers/productivity/asana): Integrate Asana for task and project management easily. +- [YouTube Video Search](https://docs.arcade.dev/mcp-servers/search/youtube): Search for YouTube videos and get video details easily. +- [Clickhouse Database Toolkit](https://docs.arcade.dev/mcp-servers/databases/clickhouse): Toolkit for read-only interaction with Clickhouse databases. - [Arcade Documentation Sitemap](https://docs.arcade.dev/sitemap.xml): Comprehensive sitemap for Arcade documentation and resources. -- [X Toolkit for Agents](https://docs.arcade.dev/toolkits/social-communication/x): Toolkit for agents to interact with X (formerly Twitter). +- [X Toolkit for Agents](https://docs.arcade.dev/mcp-servers/social-communication/x): Toolkit for agents to interact with X (formerly Twitter). - [AI Agent Deployment](https://docs.arcade.dev/home): Learn to deploy AI agents securely with Arcade's tools. -- [Google News Toolkit](https://docs.arcade.dev/toolkits/search/google_news): Search for news stories using Google News toolkit. +- [Google News Toolkit](https://docs.arcade.dev/mcp-servers/search/google_news): Search for news stories using Google News toolkit. - [Using Arcade Tools](https://docs.arcade.dev/home/mastra/use-arcade-tools): Integrate and use Arcade tools within Mastra agents effectively. - [Reddit Auth Provider](https://docs.arcade.dev/home/auth-providers/reddit): Guide to configuring Reddit auth provider for Arcade. -- [Contribute a Toolkit](https://docs.arcade.dev/toolkits/contribute-a-toolkit): Learn how to contribute your toolkit to Arcade documentation. -- [Zendesk Customer Support](https://docs.arcade.dev/toolkits/customer-support/zendesk): Toolkit for managing customer support tickets in Zendesk. +- [Contribute a Toolkit](https://docs.arcade.dev/mcp-servers/contribute-a-toolkit): Learn how to contribute your toolkit to Arcade documentation. +- [Zendesk Customer Support](https://docs.arcade.dev/mcp-servers/customer-support/zendesk): Toolkit for managing customer support tickets in Zendesk. - [Direct API Call Guide](https://docs.arcade.dev/home/auth/call-third-party-apis-directly): Learn to authorize and call third-party APIs directly. - [Custom Auth Flow](https://docs.arcade.dev/home/crewai/custom-auth-flow): Guide to create a custom authentication flow for CrewAI tools. -- [SharePoint Toolkit](https://docs.arcade.dev/toolkits/productivity/sharepoint): Toolkit for efficient SharePoint site interactions and management. +- [SharePoint Toolkit](https://docs.arcade.dev/mcp-servers/productivity/sharepoint): Toolkit for efficient SharePoint site interactions and management. - [Arcade in VS Code](https://docs.arcade.dev/home/mcp-desktop-clients/vscode-client): Connect Visual Studio Code to Arcade's MCP server easily. - [Arcade Tools Integration](https://docs.arcade.dev/home/langchain/use-arcade-tools): Integrate Arcade tools into LangGraph applications effectively. - [Mastra Overview](https://docs.arcade.dev/home/mastra/overview): Integrate Arcade tools with Mastra for enhanced AI applications. -- [Dropbox Item Categories](https://docs.arcade.dev/toolkits/productivity/dropbox/reference): Comprehensive reference for Dropbox item categories and integrations. +- [Dropbox Item Categories](https://docs.arcade.dev/mcp-servers/productivity/dropbox/reference): Comprehensive reference for Dropbox item categories and integrations. - [OpenAI Agents Overview](https://docs.arcade.dev/home/oai-agents/overview): Integrate OpenAI Agents with powerful tools like Gmail and GitHub. -- [Jira Toolkit](https://docs.arcade.dev/toolkits/productivity/jira): Comprehensive toolkit for managing Jira issues and projects. -- [Slack Integration Toolkit](https://docs.arcade.dev/toolkits/social-communication/slack): Comprehensive toolkit for Slack integration and communication management. -- [E2B Toolkit Overview](https://docs.arcade.dev/toolkits/development/e2b): Run code securely in a sandboxed environment with E2B toolkit. -- [Reddit Toolkit](https://docs.arcade.dev/toolkits/social-communication/reddit): Toolkit for agents to interact with Reddit easily. -- [Outlook Mail Toolkit](https://docs.arcade.dev/toolkits/productivity/outlook_mail): Read, write, and send emails using Outlook API tools. -- [Outlook Mail Reference](https://docs.arcade.dev/toolkits/productivity/outlook_mail/reference): Reference for Outlook Mail toolkit enumerations and filters. +- [Jira Toolkit](https://docs.arcade.dev/mcp-servers/productivity/jira): Comprehensive toolkit for managing Jira issues and projects. +- [Slack Integration Toolkit](https://docs.arcade.dev/mcp-servers/social-communication/slack): Comprehensive toolkit for Slack integration and communication management. +- [E2B Toolkit Overview](https://docs.arcade.dev/mcp-servers/development/e2b): Run code securely in a sandboxed environment with E2B toolkit. +- [Reddit Toolkit](https://docs.arcade.dev/mcp-servers/social-communication/reddit): Toolkit for agents to interact with Reddit easily. +- [Outlook Mail Toolkit](https://docs.arcade.dev/mcp-servers/productivity/outlook_mail): Read, write, and send emails using Outlook API tools. +- [Outlook Mail Reference](https://docs.arcade.dev/mcp-servers/productivity/outlook_mail/reference): Reference for Outlook Mail toolkit enumerations and filters. - [Arcade Robots.txt](https://docs.arcade.dev/robots.txt): Robots.txt file for Arcade documentation site. - [Understanding ToolContext](https://docs.arcade.dev/home/build-tools/tool-context): Learn about ToolContext for managing user authorization effectively. -- [Linear Toolkit](https://docs.arcade.dev/toolkits/productivity/linear): Streamlined toolkit for interacting with Linear's issue tracking. +- [Linear Toolkit](https://docs.arcade.dev/mcp-servers/productivity/linear): Streamlined toolkit for interacting with Linear's issue tracking. - [Arcade Configuration Templates](https://docs.arcade.dev/home/local-deployment/configure/templates): Configuration templates for local deployment of Arcade applications. -- [Google Drive Toolkit](https://docs.arcade.dev/toolkits/productivity/google_drive): Toolkit for managing and accessing Google Drive files efficiently. -- [Jira Environment Variables](https://docs.arcade.dev/toolkits/productivity/jira/environment_variables): Manage Jira API settings with environment variables for performance. +- [Google Drive Toolkit](https://docs.arcade.dev/mcp-servers/productivity/google_drive): Toolkit for managing and accessing Google Drive files efficiently. +- [Jira Environment Variables](https://docs.arcade.dev/mcp-servers/productivity/jira/environment_variables): Manage Jira API settings with environment variables for performance. - [Arcade Clients Overview](https://docs.arcade.dev/home/arcade-clients): Explore Arcade clients for Python, JavaScript, and Go. -- [GitHub Toolkit Reference](https://docs.arcade.dev/toolkits/development/github/reference): Comprehensive reference for GitHub Toolkit features and options. +- [GitHub Toolkit Reference](https://docs.arcade.dev/mcp-servers/development/github/reference): Comprehensive reference for GitHub Toolkit features and options. - [Arcade V2 Migration](https://docs.arcade.dev/home/migrate-to-v2): Guide for migrating projects to Arcade CLI version 2.0.0 - [Salesforce Auth Provider](https://docs.arcade.dev/home/auth-providers/salesforce): Guide to configuring Salesforce auth with Arcade Engine. - [Run Evaluations](https://docs.arcade.dev/home/evaluate-tools/run-evaluations): Run evaluations of language models using Arcade CLI efficiently. - [Arcade Quickstart Guide](https://docs.arcade.dev/home/quickstart): Quickstart guide to build AI agents with Arcade tools. - [User Authorization Guide](https://docs.arcade.dev/home/build-tools/create-a-tool-with-auth): Learn to add user authorization to custom tools using Arcade. -- [Create Arcade Toolkit](https://docs.arcade.dev/home/build-tools/create-a-toolkit): Guide to create and publish a custom Arcade toolkit. +- [Create Arcade Toolkit](https://docs.arcade.dev/home/build-tools/create-a-mcp-server): Guide to create and publish a custom Arcade toolkit. - [LinkedIn Auth Provider](https://docs.arcade.dev/home/auth-providers/linkedin): Integrate LinkedIn API with Arcade for user authentication. - [ClickUp Auth Provider](https://docs.arcade.dev/home/auth-providers/clickup): Configure ClickUp auth for seamless API integration with Arcade. -- [HubSpot Sales Toolkit](https://docs.arcade.dev/toolkits/sales/hubspot): Integrate HubSpot CRM tools for sales automation and management. -- [Salesforce CRM Toolkit](https://docs.arcade.dev/toolkits/sales/salesforce): Integrate Salesforce CRM with custom auth for agents. +- [HubSpot Sales Toolkit](https://docs.arcade.dev/mcp-servers/sales/hubspot): Integrate HubSpot CRM tools for sales automation and management. +- [Salesforce CRM Toolkit](https://docs.arcade.dev/mcp-servers/sales/salesforce): Integrate Salesforce CRM with custom auth for agents. - [Custom Docker Worker Guide](https://docs.arcade.dev/home/serve-tools/docker-worker): Guide to build custom Docker worker images using Arcade. -- [Google Shopping Search](https://docs.arcade.dev/toolkits/search/google_shopping): Search for products using Google Shopping toolkit easily. -- [Arcade Twilio Toolkit](https://docs.arcade.dev/toolkits/social-communication/twilio/readme): Toolkit for sending SMS and WhatsApp messages via Twilio. -- [Google Maps Toolkit](https://docs.arcade.dev/toolkits/search/google_maps): Easily get directions using Google Maps toolkit features. +- [Google Shopping Search](https://docs.arcade.dev/mcp-servers/search/google_shopping): Search for products using Google Shopping toolkit easily. +- [Arcade Twilio Toolkit](https://docs.arcade.dev/mcp-servers/social-communication/twilio/readme): Toolkit for sending SMS and WhatsApp messages via Twilio. +- [Google Maps Toolkit](https://docs.arcade.dev/mcp-servers/search/google_maps): Easily get directions using Google Maps toolkit features. - [Slack Auth Provider](https://docs.arcade.dev/home/auth-providers/slack): Integrate Slack authentication for apps using Arcade tools. - [Secure Auth in Production](https://docs.arcade.dev/home/auth/secure-auth-production): Secure user verification for production auth flows with Arcade. -- [Firecrawl Toolkit Reference](https://docs.arcade.dev/toolkits/development/firecrawl/reference): Explore Firecrawl Toolkit formats for web scraping options. +- [Firecrawl Toolkit Reference](https://docs.arcade.dev/mcp-servers/development/firecrawl/reference): Explore Firecrawl Toolkit formats for web scraping options. - [Microsoft Auth Provider](https://docs.arcade.dev/home/auth-providers/microsoft): Guide to configuring Microsoft Auth Provider for Arcade. - [Arcade Registry Overview](https://docs.arcade.dev/home/registry-early-access): Arcade Registry for sharing and discovering LLM tools. - [Using Arcade Tools](https://docs.arcade.dev/home/oai-agents/use-arcade-tools): Integrate Arcade tools into OpenAI Agents applications effectively. -- [Google Finance Toolkit](https://docs.arcade.dev/toolkits/search/google_finance): Retrieve real-time and historical stock data easily. +- [Google Finance Toolkit](https://docs.arcade.dev/mcp-servers/search/google_finance): Retrieve real-time and historical stock data easily. - [User Authorization Workflows](https://docs.arcade.dev/home/langchain/user-auth-interrupts): Create workflows requiring user authorization for Arcade tools. -- [Google Sheets Toolkit](https://docs.arcade.dev/toolkits/productivity/google_sheets): Toolkit for integrating Google Sheets with AI applications. +- [Google Sheets Toolkit](https://docs.arcade.dev/mcp-servers/productivity/google_sheets): Toolkit for integrating Google Sheets with AI applications. - [Types of Tools](https://docs.arcade.dev/home/use-tools/types-of-tools): Explore Arcade's tools: Starter and Optimized for AI use. -- [Slack API Toolkit](https://docs.arcade.dev/toolkits/social-communication/slack_api): Comprehensive toolkit for managing Slack workspace interactions. +- [Slack API Toolkit](https://docs.arcade.dev/mcp-servers/social-communication/slack_api): Comprehensive toolkit for managing Slack workspace interactions. diff --git a/scripts/i18n-sync.ts b/scripts/i18n-sync.ts deleted file mode 100644 index 02d173b68..000000000 --- a/scripts/i18n-sync.ts +++ /dev/null @@ -1,596 +0,0 @@ -#!/usr/bin/env -S pnpm dlx tsx -import crypto from "node:crypto"; -import fs from "node:fs/promises"; -import path from "node:path"; -import { fileURLToPath } from "node:url"; -import OpenAi from "openai"; -import pc from "picocolors"; - -// Types -type Locale = "es" | "pt-BR"; - -type PerFileEntry = { - rel: string; - src: string; - hash: string; - srcPath: string; - tgtPath: string; - isMeta: boolean; - targetExists: boolean; - cachedHash?: string; -}; - -type CacheShape = Record>; - -type SelectOptions = { - forceAll: boolean; - forceFile: string | null; -}; - -// Top-level regex per performance rule -const META_EXPORT_REGEX = /export\s+default\s+\{([\s\S]*?)\}\s*;?/; -const NEWLINE_REGEX = /\r?\n/; -const CODE_FENCE_REGEX = /^```/; - -const moduleFilename = fileURLToPath(import.meta.url); -const moduleDirname = path.dirname(moduleFilename); - -const projectRoot = path.resolve(moduleDirname, ".."); -const appDir = path.join(projectRoot, "app"); - -const sourceLocale = "en" as const; -const targetLocales: Locale[] = ["es", "pt-BR"]; -const trackedExtensions = new Set([".mdx"]); -const trackedMetaFile = "_meta.ts"; - -const cacheDir = path.join(projectRoot, ".i18n-cache"); -const cacheFile = path.join(cacheDir, "hashes.json"); - -// CLI options -const argv = process.argv.slice(2); -const forceAll = argv.includes("--force"); -const fileFlagIndex = argv.indexOf("--file"); -const forceFile = - fileFlagIndex !== -1 && argv[fileFlagIndex + 1] - ? argv[fileFlagIndex + 1] - : null; - -function logInfo(message: string): void { - process.stdout.write(`${message}\n`); -} - -// Use per-locale buffered logging instead of direct stderr to keep order - -// Visual elements -const ICONS = { - start: "πŸš€", - locale: "🌍", - file: "πŸ“„", - success: "βœ…", - error: "❌", - skip: "⏭️", - summary: "πŸ“Š", - finish: "πŸŽ‰", -} as const; - -// Visual constants -const PROGRESS_BAR_WIDTH = 20; -const HEADER_WIDTH = 40; -const FOOTER_WIDTH = 50; -const ERROR_MESSAGE_MAX_LENGTH = 80; -const PERCENTAGE_BASE = 100; - -function makeProgressBar( - done: number, - total: number, - width = PROGRESS_BAR_WIDTH -): string { - if (total === 0) { - return `${pc.dim("[")}${pc.dim(".".repeat(width))}${pc.dim("]")} ${pc.yellow("0/0")}`; - } - - const percentage = Math.round((done / total) * PERCENTAGE_BASE); - const completed = Math.round((done / total) * width); - const clamped = Math.max(0, Math.min(width, completed)); - - const progressChar = "β–ˆ"; - const emptyChar = "β–‘"; - - const filled = pc.bgGreen(pc.white(progressChar.repeat(clamped))); - const empty = pc.dim(emptyChar.repeat(width - clamped)); - - return `${pc.dim("[")}${filled}${empty}${pc.dim("]")} ${pc.bold(pc.cyan(`${percentage}%`))} ${pc.dim("(")}${pc.yellow(String(done))}${pc.dim("/")}${pc.yellow(String(total))}${pc.dim(")")}`; -} - -function formatHeader(text: string): string { - const padding = "═".repeat(Math.max(0, HEADER_WIDTH - text.length)); - return pc.bold(pc.cyan(`╭─ ${text} ${padding}`)); -} - -function formatSubHeader( - icon: string, - label: string, - value: string | number -): string { - return `${pc.dim("β”‚")} ${icon} ${pc.dim(label)} ${pc.bold(pc.white(String(value)))}`; -} - -function formatSuccess(icon: string, message: string): string { - return `${pc.dim("β”‚")} ${icon} ${pc.green(message)}`; -} - -function formatFooter(): string { - return pc.dim(`β•°${"─".repeat(FOOTER_WIDTH)}`); -} - -/** - * Load or initialize the translation cache mapping { locale: { filepath: hash } } - */ -async function loadCache(): Promise { - try { - const raw = await fs.readFile(cacheFile, "utf8"); - return JSON.parse(raw) as CacheShape; - } catch { - return {} as CacheShape; - } -} - -async function saveCache(cache: CacheShape): Promise { - await fs.mkdir(cacheDir, { recursive: true }); - await fs.writeFile(cacheFile, JSON.stringify(cache, null, 2)); -} - -function sha256(content: string): string { - return crypto.createHash("sha256").update(content).digest("hex"); -} - -function readText(filePath: string): Promise { - return fs.readFile(filePath, "utf8"); -} - -async function writeText(filePath: string, content: string): Promise { - await fs.mkdir(path.dirname(filePath), { recursive: true }); - await fs.writeFile(filePath, content); -} - -async function exists(filePath: string): Promise { - try { - await fs.access(filePath); - return true; - } catch { - return false; - } -} - -function isTrackedMdx(file: string): boolean { - return trackedExtensions.has(path.extname(file)); -} - -function toLocalePath(locale: string, relFromApp: string): string { - return path.join(appDir, locale, relFromApp); -} - -function normalizeWhitespace(str: string): string { - // Keep formatting stable for hashing while not altering meaningful content - return str.replace(/[\r\t ]+$/gm, ""); -} - -function getLanguageName(locale: string): string { - if (locale === "pt-BR") { - return "Brazilian Portuguese"; - } - if (locale === "es") { - return "Spanish"; - } - return locale; -} - -function buildSystemPrompt(locale: string): string { - const languageName = getLanguageName(locale); - return `You are a professional technical translator. -Translate the following Nextra MDX file from English to ${languageName}. - -Context about the product (Arcade): -- This documentation belongs to Arcade, a platform that helps AI agents securely take real-world actions with user-specific permissions, pre-built integrations (e.g., Gmail, Slack, GitHub), and an engine/runtime for tools and MCP servers. -- Reference: https://docs.arcade.dev/home - -CRITICAL CONTEXT AWARENESS: -- You are translating documentation FOR users who speak ${languageName} -- When the source mentions "English version" or "English documentation", translate it as "${languageName} version" or "${languageName} documentation" -- When content refers to "this version", understand it means the ${languageName} version from the reader's perspective -- Adapt language-specific references contextually (e.g., "English version" β†’ "${languageName} version") - -Hard constraints (follow exactly): -- Do NOT add, remove, or reorder any characters or lines, except replacing human-readable text with its translation. -- Preserve imports/exports, MDX/JSX tags and components, props/attributes, frontmatter, heading markers (#), list markers (-, 1.), punctuation, ALL whitespace (including leading/trailing spaces), blank lines, and indentation exactly. -- Translate ONLY visible prose: headings text, paragraph text, list item text, and inner text nodes inside JSX elements. -- Do NOT translate: code blocks/fences, inline code (\`like this\`), URLs, identifiers, tag/prop names, attribute values unless they are visible UI text, or anything in backticks. -- Do NOT add Markdown code fences (e.g., \`\`\`mdx) anywhere. -- Do NOT paraphrase; produce faithful, concise translations. -- Keep brand and product names in English unless a widely accepted localized form exists. -- If something is ambiguous, leave it unchanged. - -Return ONLY the full translated document content with the exact original structure.`; -} - -function buildUserPrompt(params: { - content: string; - filePath: string; - locale: string; -}): string { - const { content, filePath, locale } = params; - return `Context: ${filePath}\nTarget locale: ${locale}\n\nTranslate the prose only. Keep MDX/JSX and code blocks intact.\nReturn ONLY the translated file content, no extra text.\n\nCONTENT START\n${content}\nCONTENT END`; -} - -function buildMetaSystemPrompt(locale: string): string { - const languageName = getLanguageName(locale); - return `You localize TypeScript object literals. Translate ONLY the string literal values from English to ${languageName}. - -Context about the product (Arcade): -- This metadata belongs to Arcade documentation. Arcade enables AI agents to take real-world actions through user-specific permissions, pre-built integrations, and an engine/runtime for agentic tools and MCP servers. -- Keep brand/product names like Arcade, Arcade Engine, Control Plane in English unless a widely accepted localized form exists. -- Reference: https://docs.arcade.dev/home - -Hard constraints: -- Preserve all keys and their order; do NOT add or remove keys. -- Preserve quotes style, commas (including trailing commas), spacing, and formatting. -- Do NOT include code fences, backticks, comments, or an export statement. -- Do NOT modify URLs, identifiers, or non-string values. - -Return ONLY the object body lines between { and }, not including the braces.`; -} - -function extractMetaObject(content: string): string | null { - // naive: export default { ... } ; - const match = content.match(META_EXPORT_REGEX); - if (!match) { - return null; - } - return match[1] ?? null; -} - -function reconstructMeta(contentBody: string): string { - return `export default {\n${contentBody}\n};\n`; -} - -function sanitizeMetaBody(raw: string): string { - // Remove markdown code fences - const withoutFences = raw - .split(NEWLINE_REGEX) - .filter((line) => !CODE_FENCE_REGEX.test(line.trim())) - .join("\n") - .trim(); - - // If it contains an export default block, extract again - const exportMatch = withoutFences.match(META_EXPORT_REGEX); - if (exportMatch?.[1]) { - return exportMatch[1].trim(); - } - - // If it is a full object literal, strip the outer braces - const startsWithBrace = withoutFences.startsWith("{"); - const endsWithBrace = withoutFences.endsWith("}"); - if (startsWithBrace && endsWithBrace) { - const inner = withoutFences.slice(1, -1).trim(); - return inner; - } - - return withoutFences; -} - -function sanitizeMdxWrappingFences(raw: string): string { - const lines = raw.split(NEWLINE_REGEX); - let start = 0; - let end = lines.length - 1; - - while (start <= end && lines[start].trim() === "") { - start += 1; - } - while (end >= start && lines[end].trim() === "") { - end -= 1; - } - - if (start > end) { - return raw; - } - - const first = lines[start].trim(); - const last = lines[end].trim(); - - if (CODE_FENCE_REGEX.test(first) && CODE_FENCE_REGEX.test(last)) { - const kept = [ - ...lines.slice(0, start), - ...lines.slice(start + 1, end), - ...lines.slice(end + 1), - ]; - return kept.join("\n"); - } - - return raw; -} - -// Intentionally avoid padding alignment to prevent indentation issues in meta files - -// biome-ignore lint/style/useNamingConvention: This is ok for OpenAI -async function translateWithOpenAI(params: { - content: string; - locale: string; - filePath: string; - isMeta: boolean; -}): Promise { - const { content, locale, filePath, isMeta } = params; - const apiKey = process.env.OPENAI_API_KEY; - if (!apiKey) { - throw new Error("OPENAI_API_KEY is not set"); - } - const client = new OpenAi({ apiKey }); - - const system = isMeta - ? buildMetaSystemPrompt(locale) - : buildSystemPrompt(locale); - const user = isMeta - ? `Translate the values only and return the object body.\n\n${content}` - : buildUserPrompt({ content, filePath, locale }); - - // gpt-4o-mini provides strong quality/cost; configurable via env - const model = process.env.OPENAI_MODEL || "gpt-4o-mini"; - - const response = await client.chat.completions.create({ - model, - temperature: 0.2, - messages: [ - { role: "system", content: system }, - { role: "user", content: user }, - ], - }); - - const text = response.choices?.[0]?.message?.content ?? ""; - if (!text) { - throw new Error("Empty translation response"); - } - return text.trim(); -} - -function collectSourceFiles(): Promise { - const sourceRoot = path.join(appDir, sourceLocale); - - async function walk(currentDir: string, baseRel: string): Promise { - const entries = await fs.readdir(currentDir, { withFileTypes: true }); - const collected: string[] = []; - - const tasks = entries.map(async (entry) => { - const abs = path.join(currentDir, entry.name); - const rel = baseRel ? path.join(baseRel, entry.name) : entry.name; - - if (entry.isDirectory()) { - const nested = await walk(abs, rel); - if (nested.length > 0) { - collected.push(...nested); - } - return; - } - - if ( - entry.isFile() && - (isTrackedMdx(entry.name) || entry.name === trackedMetaFile) - ) { - collected.push(rel); - } - }); - - await Promise.all(tasks); - return collected; - } - - return walk(sourceRoot, ""); -} - -function selectFilesToProcess( - perFile: PerFileEntry[], - options: SelectOptions -): PerFileEntry[] { - const isForceAll = options.forceAll === true; - const forcedRel = - typeof options.forceFile === "string" ? options.forceFile : null; - if (isForceAll) { - return forcedRel ? perFile.filter((f) => f.rel === forcedRel) : perFile; - } - if (forcedRel) { - return perFile.filter((f) => f.rel === forcedRel); - } - return perFile.filter((f) => !f.targetExists); -} - -async function sync(): Promise { - const cache = await loadCache(); - const sourceFiles = await collectSourceFiles(); - - if (forceFile && !sourceFiles.includes(forceFile)) { - throw new Error(`--file not found under app/${sourceLocale}: ${forceFile}`); - } - - logInfo(""); - logInfo(formatHeader(`${ICONS.start} Translation Starting`)); - if (forceAll) { - logInfo(formatSubHeader("⚑", "Mode:", "Force all files")); - } - if (forceFile) { - logInfo(formatSubHeader("🎯", "Target:", forceFile)); - } - logInfo(formatSubHeader("πŸ—‚οΈ", "Source files found:", sourceFiles.length)); - logInfo(""); - - // Buffer logs per-locale to avoid interleaving while keeping parallel processing - const localeLogs: Record = {}; - - const getLocaleLogger = (locale: string) => { - if (!localeLogs[locale]) { - localeLogs[locale] = []; - } - return (message: string) => { - localeLogs[locale].push(message); - }; - }; - - await Promise.all( - // biome-ignore lint: This function orchestrates the main translation flow - targetLocales.map(async (locale) => { - const localeCache = cache[locale] || {}; - const log = getLocaleLogger(locale); - - const perFile: PerFileEntry[] = await Promise.all( - sourceFiles.map(async (fileName) => { - const rel = fileName; - const srcPath = toLocalePath(sourceLocale, rel); - const tgtPath = toLocalePath(locale, rel); - const isMeta = fileName === trackedMetaFile; - - const [src, targetExists] = await Promise.all([ - readText(srcPath), - exists(tgtPath), - ]); - - const hash = sha256(normalizeWhitespace(src)); - const cachedHash = localeCache[rel]; - - return { - rel, - src, - hash, - srcPath, - tgtPath, - isMeta, - targetExists, - cachedHash, - } as PerFileEntry; - }) - ); - - const toProcess = selectFilesToProcess(perFile, { forceAll, forceFile }); - const skippedCount = perFile.length - toProcess.length; - log(""); - log(formatHeader(`${ICONS.locale} ${locale.toUpperCase()}`)); - log(formatSubHeader("πŸ”", "Files scanned:", perFile.length)); - log(formatSubHeader("βš™οΈ", "Files to process:", toProcess.length)); - if (skippedCount > 0) { - log(formatSubHeader(ICONS.skip, "Already exist:", skippedCount)); - } - if (toProcess.length === 0) { - log(`${pc.dim("β”‚")}`); - log(formatSuccess("✨", "No files to process - all up to date!")); - log(formatFooter()); - cache[locale] = localeCache; - return; - } - - log(`${pc.dim("β”‚")}`); - log(`${pc.dim("β”‚")} ${makeProgressBar(0, toProcess.length)}`); - - let completed = 0; - const results = await Promise.allSettled( - toProcess.map(async (item) => { - const translated = await translateWithOpenAI({ - content: item.isMeta - ? (extractMetaObject(item.src) ?? item.src) - : item.src, - locale, - filePath: item.srcPath, - isMeta: item.isMeta, - }); - - const output = item.isMeta - ? reconstructMeta(sanitizeMetaBody(translated)) - : sanitizeMdxWrappingFences(translated); - await writeText(item.tgtPath, output); - completed += 1; - - // Update progress bar in place and show completed file - log(`${pc.dim("β”‚")} ${makeProgressBar(completed, toProcess.length)}`); - log(formatSuccess(ICONS.success, `Translated ${pc.bold(item.rel)}`)); - return { rel: item.rel, hash: item.hash }; - }) - ); - - let okCount = 0; - let failCount = 0; - for (const res of results) { - if (res.status === "fulfilled") { - const { rel, hash } = res.value; - localeCache[rel] = hash; - okCount += 1; - } else { - const reason = - res.reason instanceof Error - ? res.reason.stack || res.reason.message - : String(res.reason); - const truncatedReason = - reason.length > ERROR_MESSAGE_MAX_LENGTH - ? `${reason.slice(0, ERROR_MESSAGE_MAX_LENGTH)}...` - : reason; - log(`${pc.dim("β”‚")}`); - log( - `${pc.dim("β”‚")} ${ICONS.error} ${pc.red("Translation failed:")} ${pc.dim(truncatedReason)}` - ); - failCount += 1; - } - } - - // Only show summary if there's something to summarize - if (okCount > 0 || failCount > 0) { - log(`${pc.dim("β”‚")}`); - log(`${pc.dim("β”‚")} ${ICONS.summary} ${pc.bold("Summary:")}`); - - if (okCount > 0) { - log( - formatSubHeader( - ICONS.success, - "Successful:", - pc.green(String(okCount)) - ) - ); - } - - if (failCount > 0) { - log( - formatSubHeader(ICONS.error, "Failed:", pc.red(String(failCount))) - ); - } - } - - log(formatFooter()); - cache[locale] = localeCache; - }) - ); - - await saveCache(cache); - // Flush buffered logs in deterministic order - for (const locale of targetLocales) { - const lines = localeLogs[locale] || []; - for (const line of lines) { - process.stdout.write(`${line}\n`); - } - } - logInfo(""); - logInfo(formatHeader(`${ICONS.finish} Translation Complete`)); - const totalProcessed = targetLocales.reduce((sum, locale) => { - const logs = localeLogs[locale] || []; - return sum + logs.filter((line) => line.includes(ICONS.success)).length; - }, 0); - logInfo(formatSubHeader("🎯", "Files processed:", totalProcessed)); - logInfo(formatSubHeader("🌍", "Languages:", targetLocales.join(", "))); - logInfo(formatFooter()); - logInfo(""); -} - -sync() - .then(() => { - // Completion handled in sync() function - }) - .catch((err) => { - const msg = err instanceof Error ? err.stack || err.message : String(err); - logInfo(""); - logInfo(`${ICONS.error} ${pc.red(pc.bold("Translation Failed"))}`); - logInfo(pc.red(msg)); - logInfo(""); - process.exitCode = 1; - }); diff --git a/scripts/i18n-sync/index.ts b/scripts/i18n-sync/index.ts new file mode 100644 index 000000000..5647819ed --- /dev/null +++ b/scripts/i18n-sync/index.ts @@ -0,0 +1,178 @@ +#!/usr/bin/env -S pnpm dlx tsx + +import { Command } from "commander"; +import { + cleanupDeleted, + collectSourceFiles, + createOpenAi, + translateLocale, +} from "./translate.js"; +import type { Cache } from "./types.js"; +import { + DEFAULT_OPENAI_MODEL, + loadCache, + plural, + shouldTranslateFile, + TARGET_LOCALES, +} from "./utils.js"; + +function displayTranslationSummary( + locales: string[], + files: string[], + cache: Cache, + options: { + force: boolean; + only: string | null; + dryRun?: boolean; + concurrency: number; + } +) { + // Calculate files to process per locale + const stats = locales.map((locale) => { + const localeCache = cache.data[locale] ?? {}; + const toTranslate = files.filter((rel) => + shouldTranslateFile(rel, localeCache, options) + ).length; + const skipped = options.only ? 0 : files.length - toTranslate; + const batches = Math.ceil(toTranslate / options.concurrency); + return { locale, toTranslate, skipped, batches }; + }); + + const totalToTranslate = stats.reduce((sum, s) => sum + s.toTranslate, 0); + + // Only show summary if there's work to do + if (totalToTranslate === 0) { + console.log("\n✨ All translations are up to date!\n"); + return; + } + + // Generic info first + const model = process.env.OPENAI_MODEL || DEFAULT_OPENAI_MODEL; + + console.log("\nπŸ“– Translation started"); + console.log(` πŸ“ ${files.length} source file${plural(files.length)}`); + console.log(` 🌍 ${locales.join(", ")}`); + console.log(` πŸ€– ${model}`); + console.log( + ` ⚑ Concurrency: ${options.concurrency} file${plural(options.concurrency)} in parallel` + ); + + const modes = [ + options.force && "πŸ”„ force", + options.dryRun && "πŸ§ͺ dry-run", + ].filter(Boolean); + if (modes.length > 0) { + console.log(` ${modes.join(" ")}`); + } + + console.log(""); + for (const stat of stats.filter((s) => s.toTranslate > 0)) { + if (options.only) { + console.log(` πŸ“„ ${stat.locale}: ${options.only}`); + } else { + console.log( + ` β–Έ ${stat.locale}: ${stat.toTranslate} to translate β€’ ${stat.skipped} cached β€’ ${stat.batches} batch${plural(stat.batches)}` + ); + } + } + + console.log(""); +} + +// biome-ignore lint/complexity/noExcessiveCognitiveComplexity: CLI entry point handles multiple options +async function main(argv: string[]) { + const program = new Command(); + program + .name("i18n-sync") + .description("Translate Arcade docs using OpenAI") + .option("--locale ", "translate only this locale") + .option("--file ", "translate only this file (relative to app/en)") + .option("--force", "translate even if cached") + .option("--dry-run", "do not write files or cache") + .option("--cleanup", "remove translations whose sources were deleted") + .option( + "--concurrency ", + "number of files to translate in parallel (default: 3)", + "3" + ) + .parse(argv); + + const opts = program.opts(); + const envKey = process.env.OPENAI_API_KEY; + const envModel = process.env.OPENAI_MODEL; + const openai = opts.cleanup ? null : createOpenAi(envKey, envModel); + const cache = await loadCache(); + + if (opts.cleanup) { + const locales = opts.locale ? [opts.locale] : TARGET_LOCALES; + console.log("\n🧹 Cleanup mode"); + console.log(` 🌍 ${locales.join(", ")}`); + const deleted = await cleanupDeleted(cache, locales); + console.log( + deleted > 0 + ? ` βœ… Removed ${deleted} file${plural(deleted)}\n` + : " ✨ Nothing to clean\n" + ); + return; + } + + const locales = opts.locale ? [opts.locale] : TARGET_LOCALES; + const files = await collectSourceFiles(); + + if (!openai) { + throw new Error("OpenAI client is required for translation"); + } + + const defaultConcurrency = 3; + const translationOpts = { + force: Boolean(opts.force), + only: opts.file ?? null, + dryRun: Boolean(opts.dryRun), + concurrency: opts.concurrency + ? Number.parseInt(opts.concurrency, 10) + : defaultConcurrency, + }; + + // Display summary and check if there's work to do + const hasWork = locales.some((locale) => { + const localeCache = cache.data[locale] ?? {}; + return files.some((rel) => + shouldTranslateFile(rel, localeCache, translationOpts) + ); + }); + displayTranslationSummary(locales, files, cache, translationOpts); + + if (!hasWork) { + return; + } + + let totalOk = 0; + let totalFailed = 0; + + for (const locale of locales) { + const result = await translateLocale(openai, locale, cache, { + files, + ...translationOpts, + }); + + totalOk += result.ok; + totalFailed += result.failed; + if (result.ok > 0 || result.failed > 0) { + const status = + result.failed > 0 + ? `${result.ok} βœ… ${result.failed} ❌` + : `${result.ok} βœ…`; + console.log(` ${locale}: ${status}`); + } + } + + console.log(""); + console.log( + totalFailed === 0 + ? `βœ… Success! Translated ${totalOk} file${plural(totalOk)}` + : `⚠️ Completed with errors\n Succeeded: ${totalOk}\n Failed: ${totalFailed}` + ); + console.log(""); +} + +main(process.argv); diff --git a/scripts/i18n-sync/prompts.ts b/scripts/i18n-sync/prompts.ts new file mode 100644 index 000000000..759332f95 --- /dev/null +++ b/scripts/i18n-sync/prompts.ts @@ -0,0 +1,144 @@ +import type { FileType } from "./types.js"; + +const ARCADE_CONTEXT = `Context about the product (Arcade): +- This documentation belongs to Arcade, a platform that helps AI agents securely take real-world actions with user-specific permissions, pre-built integrations (e.g., Gmail, Slack, GitHub), and an engine/runtime for tools and MCP servers. +- Reference: https://docs.arcade.dev/en/home`; + +const LOCALE_LANGUAGE_NAMES: Record = { + en: "English", + es: "Spanish", + "pt-BR": "Brazilian Portuguese", +}; + +function getLanguageName(locale: string): string { + return LOCALE_LANGUAGE_NAMES[locale] ?? locale; +} + +function buildStyleGuidelines(languageName: string): string { + return `Style (CRITICAL - Read carefully): +- Write NATURAL ${languageName} as developers actually speak - NOT word-by-word literal translations +- Restructure sentences to sound natural in ${languageName}, don't keep English sentence structure +- Use SHORT, direct terms (e.g., "Herramientas" NOT "Kits de herramientas") +- Keep technical terms in English: API, CLI, SDK, Framework, Plugin, OAuth, endpoint, webhook +- BAD: "DetrΓ‘s de escena, gestiona sin problemas" (too literal, sounds unnatural) +- GOOD: "Gestiona automΓ‘ticamente" or "El sistema maneja" (natural, concise) +- Think: "How would a native ${languageName} developer write this?" NOT "What's each word's translation?"`; +} + +function buildCommonPromptContext(locale: string) { + const languageName = getLanguageName(locale); + return { + languageName, + arcadeContext: ARCADE_CONTEXT, + styleGuidelines: buildStyleGuidelines(languageName), + }; +} + +function buildMdxSystemPrompt(locale: string): string { + const { languageName, arcadeContext, styleGuidelines } = + buildCommonPromptContext(locale); + return `Translate this Nextra MDX file from English to ${languageName}. + +${arcadeContext} + +!!!CRITICAL - ABSOLUTELY NO ADDITIONS!!! +- DO NOT wrap in code fences (\`\`\`mdx, \`\`\`, etc.) +- DO NOT add ANY markdown formatting around the content +- DO NOT add language tags, backticks, or any wrapper +- The first character of your response MUST be the first character of the MDX file +- The last character of your response MUST be the last character of the MDX file + +Preserve exactly: +- MDX/JSX structure, imports/exports, props, frontmatter, whitespace, indentation +- Existing code blocks/fences, inline code (\`...\`), URLs, identifiers +- Dashboard UI names ("Create API Key", "API Keys page", "Dashboard") + +Translate ONLY: Visible text (headings, paragraphs, list items, JSX text) + +${styleGuidelines} + +Return ONLY the raw MDX file content, character-for-character with translated text.`; +} + +function buildMetaSystemPrompt(locale: string): string { + const { languageName, arcadeContext, styleGuidelines } = + buildCommonPromptContext(locale); + return `Localize TypeScript/JavaScript meta file. Translate ONLY string values to ${languageName}. + +${arcadeContext} + +!!!CRITICAL - ABSOLUTELY NO ADDITIONS!!! +- DO NOT wrap in code fences (\`\`\`typescript, \`\`\`ts, \`\`\`, etc.) +- DO NOT add ANY formatting or wrapper text +- The first line MUST start with "import" (or whatever the file starts with) +- DO NOT add language tags or any extra characters + +Preserve exactly: +- ALL imports, exports, type annotations, code structure +- Object keys (property names), variable/function names, URLs, hrefs +- Formatting: quotes, commas, spacing, indentation + +Translate ONLY: String literal values (text in quotes) for titles/labels + +Examples: +- "Toolkits" β†’ "Herramientas" NOT "Kits de herramientas" +- "Getting Started" β†’ "Primeros pasos" NOT "Obteniendo comenzado" + +${styleGuidelines} + +Return raw TypeScript code ONLY - start with imports, end with export.`; +} + +function buildTsxSystemPrompt(locale: string): string { + const { languageName, arcadeContext, styleGuidelines } = + buildCommonPromptContext(locale); + return `Translate React/TypeScript UI strings from English to ${languageName}. + +${arcadeContext} + +!!!CRITICAL - ABSOLUTELY NO ADDITIONS!!! +- DO NOT wrap in code fences (\`\`\`tsx, \`\`\`typescript, \`\`\`, etc.) +- DO NOT add ANY wrapper or formatting +- First line MUST start with the actual file content (usually "import") +- DO NOT add language tags or extra characters + +Translate ONLY: User-visible string literals (in quotes) for UI text, labels, titles + +Do NOT translate: +- Variable/function names, imports, URLs, className, alt attributes +- Dashboard UI elements ("Create API Key", "API Keys page", "Dashboard") + +${styleGuidelines} + +Examples: +- "Toolkits" β†’ "Herramientas" or keep "Toolkits" +- "Contact us" β†’ "ContΓ‘ctanos" (Spanish) / "Contate-nos" (Portuguese) + +Return raw TypeScript/TSX code ONLY - NO wrappers.`; +} + +function buildLayoutSystemPrompt(locale: string): string { + const { arcadeContext } = buildCommonPromptContext(locale); + const localeCode = locale === "pt-BR" ? "pt-BR" : "es"; + return `Translate Next.js layout for ${localeCode} locale. + +${arcadeContext} + +!!!CRITICAL - ABSOLUTELY NO ADDITIONS!!! +- DO NOT wrap in code fences (\`\`\`tsx, \`\`\`, etc.) +- DO NOT add ANY formatting or wrapper +- First character MUST be the start of the actual file +- Return ONLY raw TypeScript code + +Change ONLY: lang attribute from "en" to "${localeCode}" +Preserve: ALL other code exactly as-is + +Return raw TSX file content - NO wrappers.`; +} + +export const FILE_TYPE_PROMPTS: Record string> = { + mdx: buildMdxSystemPrompt, + meta: buildMetaSystemPrompt, + tsx: buildTsxSystemPrompt, + layout: buildLayoutSystemPrompt, +}; diff --git a/scripts/i18n-sync/translate.ts b/scripts/i18n-sync/translate.ts new file mode 100644 index 000000000..7800ea9e0 --- /dev/null +++ b/scripts/i18n-sync/translate.ts @@ -0,0 +1,264 @@ +import fs from "node:fs/promises"; +import path from "node:path"; +import { setTimeout as sleep } from "node:timers/promises"; +import OpenAi from "openai"; +import ora from "ora"; +import { FILE_TYPE_PROMPTS } from "./prompts.js"; +import type { + Cache, + FileType, + OpenAiClient, + TranslateParams, +} from "./types.js"; +import { + DEFAULT_OPENAI_MODEL, + fileExists, + hashContent, + isTrackedFile, + localePath, + MAX_CLEANUP_FILES_TO_SHOW, + prettyPath, + readText, + SOURCE_LOCALE, + SPINNER_RESUME_DELAY_MS, + saveCache, + TARGET_LOCALES, + TRANSLATION_TEMPERATURE, + trackedMetaFiles, + writeText, +} from "./utils.js"; + +// OpenAI utilities +export function createOpenAi(apiKey?: string, model?: string): OpenAiClient { + if (!apiKey) { + throw new Error("OPENAI_API_KEY is required"); + } + const client = new OpenAi({ apiKey }); + const modelToUse = model ?? DEFAULT_OPENAI_MODEL; + return { client, model: modelToUse }; +} + +export async function translate({ + openai, + locale, + type, + input, +}: TranslateParams): Promise { + const systemPrompt = FILE_TYPE_PROMPTS[type](locale); + const response = await openai.client.chat.completions.create({ + model: openai.model, + temperature: TRANSLATION_TEMPERATURE, + messages: [ + { role: "system", content: systemPrompt }, + { role: "user", content: input }, + ], + }); + const output = response.choices?.[0]?.message?.content?.trim(); + if (!output) { + throw new Error("Empty translation response"); + } + return output; +} + +// File helpers +export function detectType(file: string): FileType { + if (trackedMetaFiles.has(path.basename(file))) { + return "meta"; + } + if (file === "layout.tsx") { + return "layout"; + } + const ext = path.extname(file); + return ext === ".mdx" ? "mdx" : "tsx"; +} + +export async function collectSourceFiles(): Promise { + const root = localePath(SOURCE_LOCALE, ""); + async function walk(dir: string, base = ""): Promise { + const entries = await fs.readdir(dir, { withFileTypes: true }); + const files: string[] = []; + for (const entry of entries) { + const rel = base ? path.join(base, entry.name) : entry.name; + const abs = path.join(dir, entry.name); + if (entry.isDirectory()) { + files.push(...(await walk(abs, rel))); + } else if (isTrackedFile(entry.name)) { + files.push(rel); + } + } + return files; + } + return await walk(root); +} + +export async function buildEntries( + locale: string, + cache: Cache, + files: string[] +) { + const localeCache = cache.data[locale] ?? {}; + return await Promise.all( + files.map(async (rel) => { + const srcPath = localePath(SOURCE_LOCALE, rel); + const tgtPath = localePath(locale, rel); + const content = await readText(srcPath); + const hash = hashContent(content); + return { + rel, + srcPath, + tgtPath, + content, + type: detectType(rel), + hash, + cachedHash: localeCache[rel], + }; + }) + ); +} + +// Main translation +export async function translateLocale( + openai: OpenAiClient, + locale: string, + cache: Cache, + options: { + files: string[]; + force: boolean; + only: string | null; + dryRun?: boolean; + concurrency?: number; + } +) { + const { files, force, only, dryRun, concurrency = 1 } = options; + const entries = (await buildEntries(locale, cache, files)).filter((entry) => + only ? entry.rel === only : force || entry.hash !== entry.cachedHash + ); + + if (entries.length === 0) { + return { ok: 0, failed: 0 }; + } + + const totalBatches = Math.ceil(entries.length / concurrency); + const spinner = ora({ + text: `(${locale}) preparing translations...`, + spinner: "dots", + }).start(); + let ok = 0; + let failed = 0; + + // Process in batches for concurrency + for (let i = 0; i < entries.length; i += concurrency) { + const batch = entries.slice(i, i + concurrency); + const batchNum = Math.floor(i / concurrency) + 1; + + spinner.text = `(${locale}) batch ${batchNum}/${totalBatches} | ${batch.length} in progress | ${ok + failed}/${entries.length} done`; + + const results = await Promise.allSettled( + batch.map(async (entry) => { + try { + const translated = await translate({ + openai, + locale, + type: entry.type, + input: entry.content, + }); + if (!dryRun) { + await writeText(entry.tgtPath, translated); + cache.data[locale] = cache.data[locale] || {}; + cache.data[locale][entry.rel] = entry.hash; + } + ok++; + spinner.text = `(${locale}) batch ${batchNum}/${totalBatches} | ${batch.length - (ok + failed - i)} in progress | ${ok + failed}/${entries.length} done`; + return { entry, success: true }; + } catch (error) { + failed++; + spinner.text = `(${locale}) batch ${batchNum}/${totalBatches} | ${batch.length - (ok + failed - i)} in progress | ${ok + failed}/${entries.length} done`; + return { entry, success: false, error }; + } + }) + ); + + // Handle any failures + for (const result of results) { + if (result.status === "fulfilled" && !result.value.success) { + spinner.warn( + `${prettyPath(result.value.entry.rel)}: ${String(result.value.error)}` + ); + await sleep(SPINNER_RESUME_DELAY_MS); + spinner.start(); + spinner.text = `(${locale}) batch ${batchNum}/${totalBatches} | 0 in progress | ${ok + failed}/${entries.length} done`; + } else if (result.status === "rejected") { + spinner.warn(`Unexpected error: ${String(result.reason)}`); + await sleep(SPINNER_RESUME_DELAY_MS); + spinner.start(); + spinner.text = `(${locale}) batch ${batchNum}/${totalBatches} | 0 in progress | ${ok + failed}/${entries.length} done`; + } + } + + if (!dryRun && ok > 0) { + await saveCache(cache); + } + } + + spinner.succeed(`(${locale}) ${ok} success, ${failed} failed`); + return { ok, failed }; +} + +export async function cleanupDeleted( + cache: Cache, + locales = TARGET_LOCALES +): Promise { + const sourceSet = new Set(await collectSourceFiles()); + let totalDeleted = 0; + const deletedFiles: string[] = []; + + // biome-ignore lint/complexity/noExcessiveCognitiveComplexity: Directory traversal inherently complex + async function scanDir(dir: string, locale: string, base = "") { + if (!(await fileExists(dir))) { + return; + } + try { + const entries = await fs.readdir(dir, { withFileTypes: true }); + for (const entry of entries) { + const rel = base ? path.join(base, entry.name) : entry.name; + const abs = path.join(dir, entry.name); + if (entry.isDirectory()) { + await scanDir(abs, locale, rel); + } else if (isTrackedFile(entry.name) && !sourceSet.has(rel)) { + try { + await fs.unlink(abs); + deletedFiles.push(`${locale}/${rel}`); + totalDeleted++; + } catch { + // Ignore deletion errors + } + } + } + } catch { + // Ignore directory read errors + } + } + + for (const locale of locales) { + await scanDir(localePath(locale, ""), locale); + const localeCache = cache.data[locale] || {}; + for (const file of Object.keys(localeCache)) { + if (!sourceSet.has(file)) { + delete localeCache[file]; + } + } + cache.data[locale] = localeCache; + } + + if ( + deletedFiles.length > 0 && + deletedFiles.length <= MAX_CLEANUP_FILES_TO_SHOW + ) { + for (const file of deletedFiles) { + console.log(` - ${file}`); + } + } + + await saveCache(cache); + return totalDeleted; +} diff --git a/scripts/i18n-sync/types.ts b/scripts/i18n-sync/types.ts new file mode 100644 index 000000000..ab89e080f --- /dev/null +++ b/scripts/i18n-sync/types.ts @@ -0,0 +1,32 @@ +export type FileType = "mdx" | "meta" | "tsx" | "layout"; + +export type CacheMetadata = { + version: string; + created: string; + updated: string; +}; + +export type CacheEntries = Record; + +export type Cache = { + _metadata: CacheMetadata; + data: Record; +}; + +export type OpenAiClient = { + client: import("openai").default; + model: string; +}; + +export type TranslateParams = { + openai: OpenAiClient; + locale: string; + type: FileType; + input: string; +}; + +export type TranslationOptions = { + force: boolean; + only: string | null; + dryRun?: boolean; +}; diff --git a/scripts/i18n-sync/utils.ts b/scripts/i18n-sync/utils.ts new file mode 100644 index 000000000..99c043a63 --- /dev/null +++ b/scripts/i18n-sync/utils.ts @@ -0,0 +1,116 @@ +import crypto from "node:crypto"; +import fs from "node:fs/promises"; +import path from "node:path"; +import { fileURLToPath } from "node:url"; +import type { Cache, CacheEntries, TranslationOptions } from "./types.js"; + +// Constants +export const APP_DIR = path.resolve( + path.dirname(fileURLToPath(import.meta.url)), + "../../app" +); +export const CACHE_DIR = path.join(APP_DIR, "../.i18n-cache"); +export const CACHE_FILE = path.join(CACHE_DIR, "hashes.json"); +export const CACHE_VERSION = "1.0.0"; +export const SOURCE_LOCALE = "en"; +export const TARGET_LOCALES = ["es", "pt-BR"]; + +export const trackedExtensions = new Set([ + ".mdx", + ".ts", + ".js", + ".tsx", + ".jsx", +]); +export const trackedMetaFiles = new Set(["_meta.ts", "_meta.tsx", "_meta.js"]); + +export const DEFAULT_OPENAI_MODEL = "gpt-4o-mini"; +export const TRANSLATION_TEMPERATURE = 0.2; +export const SPINNER_RESUME_DELAY_MS = 100; +export const MAX_CLEANUP_FILES_TO_SHOW = 5; +export const MAX_PRETTY_PATH_LENGTH = 80; +export const PRETTY_PATH_SUFFIX_LENGTH = 77; + +// File utilities +export function readText(file: string) { + return fs.readFile(file, "utf8"); +} + +export async function writeText(file: string, content: string) { + await fs.mkdir(path.dirname(file), { recursive: true }); + await fs.writeFile(file, content); +} + +export async function fileExists(file: string) { + try { + await fs.access(file); + return true; + } catch { + return false; + } +} + +export function hashContent(str: string) { + return crypto.createHash("sha256").update(str).digest("hex"); +} + +export function localePath(locale: string, rel: string) { + return path.join(APP_DIR, locale, rel); +} + +export function prettyPath(rel: string) { + if (rel.length <= MAX_PRETTY_PATH_LENGTH) { + return rel; + } + return `...${rel.slice(-PRETTY_PATH_SUFFIX_LENGTH)}`; +} + +export function plural(count: number, suffix = "s") { + return count !== 1 ? suffix : ""; +} + +// Cache utilities +export async function loadCache(): Promise { + try { + const raw = await readText(CACHE_FILE); + const cache = JSON.parse(raw); + if (cache._metadata?.version === CACHE_VERSION) { + return cache as Cache; + } + } catch (_error) { + // Cache file is missing or invalid; fall back to a fresh cache. + } + return { + _metadata: { + version: CACHE_VERSION, + created: new Date().toISOString(), + updated: new Date().toISOString(), + }, + data: {}, + }; +} + +export async function saveCache(cache: Cache) { + cache._metadata.updated = new Date().toISOString(); + await fs.mkdir(CACHE_DIR, { recursive: true }); + await writeText(CACHE_FILE, JSON.stringify(cache, null, 2)); +} + +// File filtering +export function isTrackedFile(filename: string) { + return ( + trackedExtensions.has(path.extname(filename)) || + trackedMetaFiles.has(filename) + ); +} + +export function shouldTranslateFile( + rel: string, + localeCache: CacheEntries, + options: TranslationOptions +): boolean { + if (options.only) { + return rel === options.only; + } + return options.force || !localeCache[rel]; +} From a92674e1d0ee7206d2d7c825e87ab61c19fadacb Mon Sep 17 00:00:00 2001 From: Renato Byrro Date: Wed, 1 Oct 2025 21:59:15 -0300 Subject: [PATCH 3/3] move from toolkits to mcp-servers dir: --- app/en/{toolkits => mcp-servers}/productivity/box-api/page.mdx | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename app/en/{toolkits => mcp-servers}/productivity/box-api/page.mdx (100%) diff --git a/app/en/toolkits/productivity/box-api/page.mdx b/app/en/mcp-servers/productivity/box-api/page.mdx similarity index 100% rename from app/en/toolkits/productivity/box-api/page.mdx rename to app/en/mcp-servers/productivity/box-api/page.mdx