0nmcp 2.1.0 → 2.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/catalog.js CHANGED
@@ -761,6 +761,762 @@ export const SERVICE_CATALOG = {
761
761
  }),
762
762
  },
763
763
 
764
+ // ── QuickBooks ──────────────────────────────────────────────
765
+ quickbooks: {
766
+ name: "QuickBooks",
767
+ type: "accounting",
768
+ description: "Accounting — invoices, customers, payments, bills, estimates, items, reports",
769
+ baseUrl: "https://quickbooks.api.intuit.com/v3",
770
+ authType: "oauth",
771
+ credentialKeys: ["access_token", "realmId"],
772
+ capabilities: [
773
+ { name: "manage_invoices", actions: ["create", "list", "get", "send"], description: "Create and send invoices" },
774
+ { name: "manage_customers", actions: ["create", "list", "get", "update"], description: "Manage customers" },
775
+ { name: "manage_payments", actions: ["create", "list"], description: "Record and list payments" },
776
+ { name: "manage_accounts", actions: ["list", "get"], description: "Chart of accounts management" },
777
+ { name: "manage_bills", actions: ["create", "list"], description: "Create and track bills" },
778
+ { name: "manage_estimates", actions: ["create", "list", "send"], description: "Create and send estimates" },
779
+ { name: "manage_items", actions: ["create", "list", "get", "update"], description: "Manage products and services" },
780
+ { name: "manage_reports", actions: ["get"], description: "Generate financial reports" },
781
+ ],
782
+ endpoints: {
783
+ create_invoice: { method: "POST", path: "/company/{realmId}/invoice", body: { Line: [], CustomerRef: {} } },
784
+ list_invoices: { method: "GET", path: "/company/{realmId}/query", query: ["query"] },
785
+ get_invoice: { method: "GET", path: "/company/{realmId}/invoice/{invoiceId}" },
786
+ send_invoice: { method: "POST", path: "/company/{realmId}/invoice/{invoiceId}/send", query: ["sendTo"] },
787
+ create_customer: { method: "POST", path: "/company/{realmId}/customer", body: { DisplayName: "", PrimaryEmailAddr: {} } },
788
+ list_customers: { method: "GET", path: "/company/{realmId}/query", query: ["query"] },
789
+ get_customer: { method: "GET", path: "/company/{realmId}/customer/{customerId}" },
790
+ update_customer: { method: "POST", path: "/company/{realmId}/customer", body: { Id: "", SyncToken: "" } },
791
+ create_payment: { method: "POST", path: "/company/{realmId}/payment", body: { TotalAmt: 0, CustomerRef: {} } },
792
+ list_payments: { method: "GET", path: "/company/{realmId}/query", query: ["query"] },
793
+ list_accounts: { method: "GET", path: "/company/{realmId}/query", query: ["query"] },
794
+ get_account: { method: "GET", path: "/company/{realmId}/account/{accountId}" },
795
+ create_bill: { method: "POST", path: "/company/{realmId}/bill", body: { VendorRef: {}, Line: [] } },
796
+ list_bills: { method: "GET", path: "/company/{realmId}/query", query: ["query"] },
797
+ create_estimate: { method: "POST", path: "/company/{realmId}/estimate", body: { Line: [], CustomerRef: {} } },
798
+ send_estimate: { method: "POST", path: "/company/{realmId}/estimate/{estimateId}/send", query: ["sendTo"] },
799
+ create_item: { method: "POST", path: "/company/{realmId}/item", body: { Name: "", Type: "Service" } },
800
+ list_items: { method: "GET", path: "/company/{realmId}/query", query: ["query"] },
801
+ get_item: { method: "GET", path: "/company/{realmId}/item/{itemId}" },
802
+ profit_loss_report: { method: "GET", path: "/company/{realmId}/reports/ProfitAndLoss", query: ["start_date", "end_date"] },
803
+ balance_sheet: { method: "GET", path: "/company/{realmId}/reports/BalanceSheet", query: ["start_date", "end_date"] },
804
+ },
805
+ authHeader: (creds) => ({
806
+ "Authorization": `Bearer ${creds.access_token}`,
807
+ "Accept": "application/json",
808
+ "Content-Type": "application/json",
809
+ }),
810
+ },
811
+
812
+ // ── Asana ───────────────────────────────────────────────────
813
+ asana: {
814
+ name: "Asana",
815
+ type: "project",
816
+ description: "Project management — tasks, projects, sections, workspaces, tags, teams",
817
+ baseUrl: "https://app.asana.com/api/1.0",
818
+ authType: "token",
819
+ credentialKeys: ["token"],
820
+ capabilities: [
821
+ { name: "manage_tasks", actions: ["create", "list", "get", "update", "delete"], description: "Full task lifecycle management" },
822
+ { name: "manage_projects", actions: ["create", "list", "get"], description: "Create and manage projects" },
823
+ { name: "manage_sections", actions: ["create", "list"], description: "Organize projects with sections" },
824
+ { name: "manage_workspaces", actions: ["list"], description: "List available workspaces" },
825
+ { name: "manage_tags", actions: ["create", "list"], description: "Create and manage tags" },
826
+ { name: "manage_teams", actions: ["list"], description: "List organization teams" },
827
+ ],
828
+ endpoints: {
829
+ create_task: { method: "POST", path: "/tasks", body: { data: { name: "", workspace: "", projects: [] } } },
830
+ list_tasks: { method: "GET", path: "/tasks", query: ["project", "assignee", "workspace", "completed_since"] },
831
+ get_task: { method: "GET", path: "/tasks/{taskGid}" },
832
+ update_task: { method: "PUT", path: "/tasks/{taskGid}", body: { data: {} } },
833
+ delete_task: { method: "DELETE", path: "/tasks/{taskGid}" },
834
+ create_project: { method: "POST", path: "/projects", body: { data: { name: "", workspace: "" } } },
835
+ list_projects: { method: "GET", path: "/projects", query: ["workspace", "team"] },
836
+ get_project: { method: "GET", path: "/projects/{projectGid}" },
837
+ create_section: { method: "POST", path: "/projects/{projectGid}/sections", body: { data: { name: "" } } },
838
+ list_sections: { method: "GET", path: "/projects/{projectGid}/sections" },
839
+ list_workspaces: { method: "GET", path: "/workspaces" },
840
+ create_tag: { method: "POST", path: "/tags", body: { data: { name: "", workspace: "" } } },
841
+ list_tags: { method: "GET", path: "/tags", query: ["workspace"] },
842
+ list_teams: { method: "GET", path: "/organizations/{organizationGid}/teams" },
843
+ add_task_to_project: { method: "POST", path: "/tasks/{taskGid}/addProject", body: { data: { project: "" } } },
844
+ search_tasks: { method: "GET", path: "/workspaces/{workspaceGid}/tasks/search", query: ["text", "completed"] },
845
+ },
846
+ authHeader: (creds) => ({
847
+ "Authorization": `Bearer ${creds.token}`,
848
+ "Content-Type": "application/json",
849
+ }),
850
+ },
851
+
852
+ // ── Intercom ────────────────────────────────────────────────
853
+ intercom: {
854
+ name: "Intercom",
855
+ type: "support",
856
+ description: "Customer messaging — contacts, conversations, companies, tags, articles",
857
+ baseUrl: "https://api.intercom.io",
858
+ authType: "access_token",
859
+ credentialKeys: ["accessToken"],
860
+ capabilities: [
861
+ { name: "manage_contacts", actions: ["create", "list", "search", "update"], description: "Manage contacts and leads" },
862
+ { name: "manage_conversations", actions: ["create", "list", "reply", "close"], description: "Handle customer conversations" },
863
+ { name: "manage_companies", actions: ["create", "list"], description: "Manage companies" },
864
+ { name: "manage_tags", actions: ["create", "list"], description: "Create and assign tags" },
865
+ { name: "manage_articles", actions: ["create", "list"], description: "Manage help center articles" },
866
+ ],
867
+ endpoints: {
868
+ create_contact: { method: "POST", path: "/contacts", body: { role: "user", email: "" } },
869
+ list_contacts: { method: "GET", path: "/contacts" },
870
+ search_contacts: { method: "POST", path: "/contacts/search", body: { query: {} } },
871
+ update_contact: { method: "PUT", path: "/contacts/{contactId}", body: {} },
872
+ create_conversation: { method: "POST", path: "/conversations", body: { from: {}, body: "" } },
873
+ list_conversations: { method: "GET", path: "/conversations" },
874
+ reply_to_conversation:{ method: "POST", path: "/conversations/{conversationId}/reply", body: { message_type: "comment", type: "admin", body: "" } },
875
+ close_conversation: { method: "POST", path: "/conversations/{conversationId}/parts", body: { message_type: "close", type: "admin" } },
876
+ create_company: { method: "POST", path: "/companies", body: { name: "", company_id: "" } },
877
+ list_companies: { method: "GET", path: "/companies" },
878
+ create_tag: { method: "POST", path: "/tags", body: { name: "" } },
879
+ tag_contact: { method: "POST", path: "/contacts/{contactId}/tags", body: { id: "" } },
880
+ list_tags: { method: "GET", path: "/tags" },
881
+ create_article: { method: "POST", path: "/articles", body: { title: "", body: "", author_id: "" } },
882
+ list_articles: { method: "GET", path: "/articles" },
883
+ },
884
+ authHeader: (creds) => ({
885
+ "Authorization": `Bearer ${creds.accessToken}`,
886
+ "Accept": "application/json",
887
+ "Content-Type": "application/json",
888
+ "Intercom-Version": "2.10",
889
+ }),
890
+ },
891
+
892
+ // ── Dropbox ─────────────────────────────────────────────────
893
+ dropbox: {
894
+ name: "Dropbox",
895
+ type: "storage",
896
+ description: "Cloud storage — files, folders, sharing, search",
897
+ baseUrl: "https://api.dropboxapi.com/2",
898
+ authType: "oauth",
899
+ credentialKeys: ["access_token"],
900
+ capabilities: [
901
+ { name: "manage_files", actions: ["upload", "download", "list", "move", "delete", "search"], description: "Upload, download, and manage files" },
902
+ { name: "manage_folders", actions: ["create", "list"], description: "Create and list folders" },
903
+ { name: "manage_sharing", actions: ["create_link", "list_shared"], description: "Share files and folders" },
904
+ ],
905
+ endpoints: {
906
+ list_folder: { method: "POST", path: "/files/list_folder", body: { path: "", recursive: false, limit: 100 } },
907
+ list_folder_continue: { method: "POST", path: "/files/list_folder/continue", body: { cursor: "" } },
908
+ get_metadata: { method: "POST", path: "/files/get_metadata", body: { path: "" } },
909
+ create_folder: { method: "POST", path: "/files/create_folder_v2", body: { path: "", autorename: false } },
910
+ delete: { method: "POST", path: "/files/delete_v2", body: { path: "" } },
911
+ move: { method: "POST", path: "/files/move_v2", body: { from_path: "", to_path: "" } },
912
+ copy: { method: "POST", path: "/files/copy_v2", body: { from_path: "", to_path: "" } },
913
+ search: { method: "POST", path: "/files/search_v2", body: { query: "", options: { max_results: 100 } } },
914
+ create_shared_link: { method: "POST", path: "/sharing/create_shared_link_with_settings", body: { path: "" } },
915
+ list_shared_links: { method: "POST", path: "/sharing/list_shared_links", body: { path: "" } },
916
+ },
917
+ authHeader: (creds) => ({
918
+ "Authorization": `Bearer ${creds.access_token}`,
919
+ "Content-Type": "application/json",
920
+ }),
921
+ },
922
+
923
+ // ── WhatsApp Business ───────────────────────────────────────
924
+ whatsapp: {
925
+ name: "WhatsApp Business",
926
+ type: "communication",
927
+ description: "Business messaging — send texts, templates, media via WhatsApp Business API",
928
+ baseUrl: "https://graph.facebook.com/v19.0",
929
+ authType: "access_token",
930
+ credentialKeys: ["accessToken", "phoneNumberId"],
931
+ capabilities: [
932
+ { name: "send_message", actions: ["send_text", "send_template", "send_media"], description: "Send messages via WhatsApp" },
933
+ { name: "manage_templates", actions: ["list", "get"], description: "Manage message templates" },
934
+ { name: "manage_media", actions: ["upload", "get"], description: "Upload and retrieve media" },
935
+ ],
936
+ endpoints: {
937
+ send_text_message: { method: "POST", path: "/{phoneNumberId}/messages", body: { messaging_product: "whatsapp", to: "", type: "text", text: { body: "" } } },
938
+ send_template_message: { method: "POST", path: "/{phoneNumberId}/messages", body: { messaging_product: "whatsapp", to: "", type: "template", template: { name: "", language: { code: "en" } } } },
939
+ send_media_message: { method: "POST", path: "/{phoneNumberId}/messages", body: { messaging_product: "whatsapp", to: "", type: "image", image: { link: "" } } },
940
+ list_templates: { method: "GET", path: "/{businessId}/message_templates" },
941
+ upload_media: { method: "POST", path: "/{phoneNumberId}/media", contentType: "multipart/form-data" },
942
+ get_media_url: { method: "GET", path: "/{mediaId}" },
943
+ },
944
+ authHeader: (creds) => ({
945
+ "Authorization": `Bearer ${creds.accessToken}`,
946
+ "Content-Type": "application/json",
947
+ }),
948
+ },
949
+
950
+ // ── Instagram ───────────────────────────────────────────────
951
+ instagram: {
952
+ name: "Instagram",
953
+ type: "social",
954
+ description: "Social media — posts, comments, insights, stories via Instagram Graph API",
955
+ baseUrl: "https://graph.facebook.com/v19.0",
956
+ authType: "access_token",
957
+ credentialKeys: ["accessToken", "igUserId"],
958
+ capabilities: [
959
+ { name: "manage_media", actions: ["create", "list", "get"], description: "Create and manage media posts" },
960
+ { name: "manage_comments", actions: ["list", "reply", "delete"], description: "Moderate comments" },
961
+ { name: "manage_insights", actions: ["get"], description: "View account and media insights" },
962
+ { name: "manage_stories", actions: ["list"], description: "List active stories" },
963
+ ],
964
+ endpoints: {
965
+ list_media: { method: "GET", path: "/{igUserId}/media", query: ["fields", "limit"] },
966
+ get_media: { method: "GET", path: "/{mediaId}", query: ["fields"] },
967
+ create_media_container: { method: "POST", path: "/{igUserId}/media", body: { image_url: "", caption: "" } },
968
+ publish_media: { method: "POST", path: "/{igUserId}/media_publish", body: { creation_id: "" } },
969
+ list_comments: { method: "GET", path: "/{mediaId}/comments", query: ["fields"] },
970
+ reply_to_comment: { method: "POST", path: "/{commentId}/replies", body: { message: "" } },
971
+ delete_comment: { method: "DELETE", path: "/{commentId}" },
972
+ get_insights: { method: "GET", path: "/{igUserId}/insights", query: ["metric", "period"] },
973
+ list_stories: { method: "GET", path: "/{igUserId}/stories", query: ["fields"] },
974
+ get_profile: { method: "GET", path: "/{igUserId}", query: ["fields"] },
975
+ },
976
+ authHeader: (creds) => ({
977
+ "Authorization": `Bearer ${creds.accessToken}`,
978
+ "Content-Type": "application/json",
979
+ }),
980
+ },
981
+
982
+ // ── X (Twitter) ─────────────────────────────────────────────
983
+ twitter: {
984
+ name: "X (Twitter)",
985
+ type: "social",
986
+ description: "Social platform — tweets, users, followers, lists, direct messages",
987
+ baseUrl: "https://api.x.com/2",
988
+ authType: "oauth",
989
+ credentialKeys: ["bearerToken"],
990
+ capabilities: [
991
+ { name: "manage_tweets", actions: ["create", "list", "delete", "search"], description: "Post and manage tweets" },
992
+ { name: "manage_users", actions: ["get", "list_followers", "list_following"], description: "View user profiles and connections" },
993
+ { name: "manage_lists", actions: ["create", "list"], description: "Create and manage lists" },
994
+ { name: "manage_dm", actions: ["send"], description: "Send direct messages" },
995
+ ],
996
+ endpoints: {
997
+ create_tweet: { method: "POST", path: "/tweets", body: { text: "" } },
998
+ delete_tweet: { method: "DELETE", path: "/tweets/{tweetId}" },
999
+ get_tweet: { method: "GET", path: "/tweets/{tweetId}", query: ["tweet.fields", "expansions"] },
1000
+ search_tweets: { method: "GET", path: "/tweets/search/recent", query: ["query", "max_results", "tweet.fields"] },
1001
+ get_user: { method: "GET", path: "/users/{userId}", query: ["user.fields"] },
1002
+ get_user_by_username: { method: "GET", path: "/users/by/username/{username}", query: ["user.fields"] },
1003
+ get_user_tweets: { method: "GET", path: "/users/{userId}/tweets", query: ["max_results", "tweet.fields"] },
1004
+ get_followers: { method: "GET", path: "/users/{userId}/followers", query: ["max_results", "user.fields"] },
1005
+ get_following: { method: "GET", path: "/users/{userId}/following", query: ["max_results", "user.fields"] },
1006
+ create_list: { method: "POST", path: "/lists", body: { name: "", description: "" } },
1007
+ get_lists: { method: "GET", path: "/users/{userId}/owned_lists" },
1008
+ send_dm: { method: "POST", path: "/dm_conversations/with/{participantId}/messages", body: { text: "" } },
1009
+ like_tweet: { method: "POST", path: "/users/{userId}/likes", body: { tweet_id: "" } },
1010
+ unlike_tweet: { method: "DELETE", path: "/users/{userId}/likes/{tweetId}" },
1011
+ retweet: { method: "POST", path: "/users/{userId}/retweets", body: { tweet_id: "" } },
1012
+ unretweet: { method: "DELETE", path: "/users/{userId}/retweets/{tweetId}" },
1013
+ },
1014
+ authHeader: (creds) => ({
1015
+ "Authorization": `Bearer ${creds.bearerToken}`,
1016
+ "Content-Type": "application/json",
1017
+ }),
1018
+ },
1019
+
1020
+ // ── TikTok Business ─────────────────────────────────────────
1021
+ tiktok: {
1022
+ name: "TikTok Business",
1023
+ type: "social",
1024
+ description: "Social video — videos, ads, campaigns, reports via TikTok Business API",
1025
+ baseUrl: "https://business-api.tiktok.com/open_api/v1.3",
1026
+ authType: "access_token",
1027
+ credentialKeys: ["accessToken", "advertiserId"],
1028
+ capabilities: [
1029
+ { name: "manage_videos", actions: ["list", "get"], description: "View video content" },
1030
+ { name: "manage_ads", actions: ["create", "list", "get", "update"], description: "Manage ad creatives" },
1031
+ { name: "manage_campaigns", actions: ["create", "list", "get", "update"], description: "Manage ad campaigns" },
1032
+ { name: "manage_reports", actions: ["get"], description: "Pull performance reports" },
1033
+ ],
1034
+ endpoints: {
1035
+ list_videos: { method: "GET", path: "/video/list/", query: ["advertiser_id"] },
1036
+ get_video_info: { method: "GET", path: "/video/info/", query: ["advertiser_id", "video_ids"] },
1037
+ create_campaign: { method: "POST", path: "/campaign/create/", body: { advertiser_id: "", campaign_name: "", objective_type: "", budget_mode: "" } },
1038
+ list_campaigns: { method: "GET", path: "/campaign/get/", query: ["advertiser_id", "page", "page_size"] },
1039
+ get_campaign: { method: "GET", path: "/campaign/get/", query: ["advertiser_id", "campaign_ids"] },
1040
+ update_campaign: { method: "POST", path: "/campaign/update/", body: { advertiser_id: "", campaign_id: "" } },
1041
+ create_ad_group: { method: "POST", path: "/adgroup/create/", body: { advertiser_id: "", campaign_id: "", adgroup_name: "" } },
1042
+ list_ad_groups: { method: "GET", path: "/adgroup/get/", query: ["advertiser_id", "page", "page_size"] },
1043
+ create_ad: { method: "POST", path: "/ad/create/", body: { advertiser_id: "", adgroup_id: "", creatives: [] } },
1044
+ list_ads: { method: "GET", path: "/ad/get/", query: ["advertiser_id", "page", "page_size"] },
1045
+ get_report: { method: "POST", path: "/report/integrated/get/", body: { advertiser_id: "", report_type: "", dimensions: [], metrics: [] } },
1046
+ },
1047
+ authHeader: (creds) => ({
1048
+ "Access-Token": creds.accessToken,
1049
+ "Content-Type": "application/json",
1050
+ }),
1051
+ },
1052
+
1053
+ // ── Google Ads ──────────────────────────────────────────────
1054
+ google_ads: {
1055
+ name: "Google Ads",
1056
+ type: "advertising",
1057
+ description: "Search and display advertising — campaigns, ad groups, ads, keywords, reports",
1058
+ baseUrl: "https://googleads.googleapis.com/v16",
1059
+ authType: "oauth",
1060
+ credentialKeys: ["access_token", "developerToken", "customerId"],
1061
+ capabilities: [
1062
+ { name: "manage_campaigns", actions: ["create", "list", "get", "update"], description: "Manage ad campaigns" },
1063
+ { name: "manage_ad_groups", actions: ["create", "list"], description: "Manage ad groups" },
1064
+ { name: "manage_ads", actions: ["create", "list"], description: "Manage ad creatives" },
1065
+ { name: "manage_keywords", actions: ["create", "list"], description: "Manage keywords and targeting" },
1066
+ { name: "get_reports", actions: ["get"], description: "Pull campaign performance reports" },
1067
+ ],
1068
+ endpoints: {
1069
+ search: { method: "POST", path: "/customers/{customerId}/googleAds:searchStream", body: { query: "" } },
1070
+ mutate_campaigns: { method: "POST", path: "/customers/{customerId}/campaigns:mutate", body: { operations: [] } },
1071
+ list_campaigns: { method: "POST", path: "/customers/{customerId}/googleAds:search", body: { query: "SELECT campaign.id, campaign.name, campaign.status FROM campaign" } },
1072
+ create_campaign: { method: "POST", path: "/customers/{customerId}/campaigns:mutate", body: { operations: [{ create: {} }] } },
1073
+ list_ad_groups: { method: "POST", path: "/customers/{customerId}/googleAds:search", body: { query: "SELECT ad_group.id, ad_group.name FROM ad_group" } },
1074
+ create_ad_group: { method: "POST", path: "/customers/{customerId}/adGroups:mutate", body: { operations: [{ create: {} }] } },
1075
+ list_ads: { method: "POST", path: "/customers/{customerId}/googleAds:search", body: { query: "SELECT ad_group_ad.ad.id, ad_group_ad.ad.name FROM ad_group_ad" } },
1076
+ create_ad: { method: "POST", path: "/customers/{customerId}/adGroupAds:mutate", body: { operations: [{ create: {} }] } },
1077
+ get_report: { method: "POST", path: "/customers/{customerId}/googleAds:searchStream", body: { query: "" } },
1078
+ },
1079
+ authHeader: (creds) => ({
1080
+ "Authorization": `Bearer ${creds.access_token}`,
1081
+ "developer-token": creds.developerToken,
1082
+ "Content-Type": "application/json",
1083
+ }),
1084
+ },
1085
+
1086
+ // ── Facebook Ads ────────────────────────────────────────────
1087
+ facebook_ads: {
1088
+ name: "Facebook Ads",
1089
+ type: "advertising",
1090
+ description: "Social advertising — campaigns, ad sets, ads, insights, audiences",
1091
+ baseUrl: "https://graph.facebook.com/v19.0",
1092
+ authType: "access_token",
1093
+ credentialKeys: ["accessToken", "adAccountId"],
1094
+ capabilities: [
1095
+ { name: "manage_campaigns", actions: ["create", "list", "get", "update"], description: "Manage ad campaigns" },
1096
+ { name: "manage_adsets", actions: ["create", "list", "get", "update"], description: "Manage ad sets and targeting" },
1097
+ { name: "manage_ads", actions: ["create", "list", "get"], description: "Manage ad creatives" },
1098
+ { name: "manage_insights", actions: ["get"], description: "View performance insights" },
1099
+ { name: "manage_audiences", actions: ["create", "list"], description: "Create and manage custom audiences" },
1100
+ ],
1101
+ endpoints: {
1102
+ create_campaign: { method: "POST", path: "/act_{adAccountId}/campaigns", body: { name: "", objective: "", status: "PAUSED", special_ad_categories: [] } },
1103
+ list_campaigns: { method: "GET", path: "/act_{adAccountId}/campaigns", query: ["fields", "limit"] },
1104
+ get_campaign: { method: "GET", path: "/{campaignId}", query: ["fields"] },
1105
+ update_campaign: { method: "POST", path: "/{campaignId}", body: {} },
1106
+ create_adset: { method: "POST", path: "/act_{adAccountId}/adsets", body: { name: "", campaign_id: "", daily_budget: 0, targeting: {}, status: "PAUSED" } },
1107
+ list_adsets: { method: "GET", path: "/act_{adAccountId}/adsets", query: ["fields", "limit"] },
1108
+ create_ad: { method: "POST", path: "/act_{adAccountId}/ads", body: { name: "", adset_id: "", creative: {}, status: "PAUSED" } },
1109
+ list_ads: { method: "GET", path: "/act_{adAccountId}/ads", query: ["fields", "limit"] },
1110
+ get_insights: { method: "GET", path: "/act_{adAccountId}/insights", query: ["fields", "date_preset", "level", "time_range"] },
1111
+ create_audience: { method: "POST", path: "/act_{adAccountId}/customaudiences", body: { name: "", subtype: "CUSTOM", description: "" } },
1112
+ list_audiences: { method: "GET", path: "/act_{adAccountId}/customaudiences", query: ["fields", "limit"] },
1113
+ },
1114
+ authHeader: (creds) => ({
1115
+ "Authorization": `Bearer ${creds.accessToken}`,
1116
+ "Content-Type": "application/json",
1117
+ }),
1118
+ },
1119
+
1120
+ // ── Plaid ───────────────────────────────────────────────────
1121
+ plaid: {
1122
+ name: "Plaid",
1123
+ type: "finance",
1124
+ description: "Financial data — bank accounts, transactions, identity, auth via Plaid API",
1125
+ baseUrl: "https://production.plaid.com",
1126
+ authType: "api_key",
1127
+ credentialKeys: ["clientId", "secret"],
1128
+ capabilities: [
1129
+ { name: "manage_links", actions: ["create", "exchange"], description: "Create link tokens and exchange public tokens" },
1130
+ { name: "manage_accounts", actions: ["list", "get_balance"], description: "List accounts and get balances" },
1131
+ { name: "manage_transactions", actions: ["list", "sync"], description: "List and sync transactions" },
1132
+ { name: "manage_identity", actions: ["get"], description: "Retrieve identity information" },
1133
+ { name: "manage_auth", actions: ["get"], description: "Get account and routing numbers" },
1134
+ ],
1135
+ endpoints: {
1136
+ create_link_token: { method: "POST", path: "/link/token/create", body: { client_id: "", secret: "", user: { client_user_id: "" }, client_name: "", products: [], country_codes: ["US"], language: "en" } },
1137
+ exchange_public_token:{ method: "POST", path: "/item/public_token/exchange", body: { client_id: "", secret: "", public_token: "" } },
1138
+ get_accounts: { method: "POST", path: "/accounts/get", body: { client_id: "", secret: "", access_token: "" } },
1139
+ get_balance: { method: "POST", path: "/accounts/balance/get", body: { client_id: "", secret: "", access_token: "" } },
1140
+ get_transactions: { method: "POST", path: "/transactions/get", body: { client_id: "", secret: "", access_token: "", start_date: "", end_date: "" } },
1141
+ sync_transactions: { method: "POST", path: "/transactions/sync", body: { client_id: "", secret: "", access_token: "" } },
1142
+ get_identity: { method: "POST", path: "/identity/get", body: { client_id: "", secret: "", access_token: "" } },
1143
+ get_auth: { method: "POST", path: "/auth/get", body: { client_id: "", secret: "", access_token: "" } },
1144
+ get_institutions: { method: "POST", path: "/institutions/get", body: { client_id: "", secret: "", count: 10, offset: 0, country_codes: ["US"] } },
1145
+ },
1146
+ authHeader: (creds) => ({
1147
+ "Content-Type": "application/json",
1148
+ }),
1149
+ },
1150
+
1151
+ // ── Square ──────────────────────────────────────────────────
1152
+ square: {
1153
+ name: "Square",
1154
+ type: "payments",
1155
+ description: "Payments and commerce — payments, customers, orders, catalog, inventory",
1156
+ baseUrl: "https://connect.squareup.com/v2",
1157
+ authType: "access_token",
1158
+ credentialKeys: ["accessToken"],
1159
+ capabilities: [
1160
+ { name: "manage_payments", actions: ["create", "list", "get", "refund"], description: "Process and manage payments" },
1161
+ { name: "manage_customers", actions: ["create", "list", "get", "update", "delete"], description: "Manage customer directory" },
1162
+ { name: "manage_orders", actions: ["create", "list", "get"], description: "Create and manage orders" },
1163
+ { name: "manage_catalog", actions: ["create", "list", "search"], description: "Manage product catalog" },
1164
+ { name: "manage_inventory", actions: ["get", "adjust"], description: "Track and adjust inventory" },
1165
+ ],
1166
+ endpoints: {
1167
+ create_payment: { method: "POST", path: "/payments", body: { source_id: "", idempotency_key: "", amount_money: { amount: 0, currency: "USD" } } },
1168
+ list_payments: { method: "GET", path: "/payments", query: ["begin_time", "end_time", "sort_order", "cursor", "limit"] },
1169
+ get_payment: { method: "GET", path: "/payments/{paymentId}" },
1170
+ create_refund: { method: "POST", path: "/refunds", body: { idempotency_key: "", payment_id: "", amount_money: {} } },
1171
+ create_customer: { method: "POST", path: "/customers", body: { given_name: "", family_name: "", email_address: "" } },
1172
+ list_customers: { method: "GET", path: "/customers", query: ["cursor", "limit", "sort_field", "sort_order"] },
1173
+ get_customer: { method: "GET", path: "/customers/{customerId}" },
1174
+ update_customer: { method: "PUT", path: "/customers/{customerId}", body: {} },
1175
+ delete_customer: { method: "DELETE", path: "/customers/{customerId}" },
1176
+ create_order: { method: "POST", path: "/orders", body: { order: { location_id: "", line_items: [] }, idempotency_key: "" } },
1177
+ list_orders: { method: "POST", path: "/orders/search", body: { location_ids: [], query: {} } },
1178
+ get_order: { method: "GET", path: "/orders/{orderId}" },
1179
+ create_catalog_object:{ method: "POST", path: "/catalog/object", body: { idempotency_key: "", object: {} } },
1180
+ list_catalog: { method: "GET", path: "/catalog/list", query: ["types", "cursor"] },
1181
+ search_catalog: { method: "POST", path: "/catalog/search", body: { object_types: [], query: {} } },
1182
+ get_inventory: { method: "POST", path: "/inventory/counts/batch-retrieve", body: { catalog_object_ids: [] } },
1183
+ adjust_inventory: { method: "POST", path: "/inventory/changes/batch-create", body: { idempotency_key: "", changes: [] } },
1184
+ },
1185
+ authHeader: (creds) => ({
1186
+ "Authorization": `Bearer ${creds.accessToken}`,
1187
+ "Content-Type": "application/json",
1188
+ "Square-Version": "2024-01-18",
1189
+ }),
1190
+ },
1191
+
1192
+ // ── TikTok Ads ──────────────────────────────────────────────
1193
+ tiktok_ads: {
1194
+ name: "TikTok Ads",
1195
+ type: "advertising",
1196
+ description: "TikTok advertising — campaigns, ad groups, ads, reports, audiences",
1197
+ baseUrl: "https://business-api.tiktok.com/open_api/v1.3",
1198
+ authType: "access_token",
1199
+ credentialKeys: ["accessToken", "advertiserId"],
1200
+ capabilities: [
1201
+ { name: "manage_campaigns", actions: ["create", "list", "get", "update"], description: "Manage ad campaigns" },
1202
+ { name: "manage_ad_groups", actions: ["create", "list", "update"], description: "Manage ad groups and targeting" },
1203
+ { name: "manage_ads", actions: ["create", "list", "update"], description: "Manage ad creatives" },
1204
+ { name: "manage_reports", actions: ["get"], description: "Pull performance reports" },
1205
+ { name: "manage_audiences", actions: ["create", "list"], description: "Create and manage custom audiences" },
1206
+ ],
1207
+ endpoints: {
1208
+ create_campaign: { method: "POST", path: "/campaign/create/", body: { advertiser_id: "", campaign_name: "", objective_type: "", budget_mode: "" } },
1209
+ list_campaigns: { method: "GET", path: "/campaign/get/", query: ["advertiser_id", "page", "page_size"] },
1210
+ update_campaign_status: { method: "POST", path: "/campaign/update/status/", body: { advertiser_id: "", campaign_ids: [], opt_status: "" } },
1211
+ create_adgroup: { method: "POST", path: "/adgroup/create/", body: { advertiser_id: "", campaign_id: "", adgroup_name: "", placement_type: "" } },
1212
+ list_adgroups: { method: "GET", path: "/adgroup/get/", query: ["advertiser_id", "page", "page_size"] },
1213
+ update_adgroup: { method: "POST", path: "/adgroup/update/", body: { advertiser_id: "", adgroup_id: "" } },
1214
+ create_ad: { method: "POST", path: "/ad/create/", body: { advertiser_id: "", adgroup_id: "", creatives: [] } },
1215
+ list_ads: { method: "GET", path: "/ad/get/", query: ["advertiser_id", "page", "page_size"] },
1216
+ update_ad: { method: "POST", path: "/ad/update/", body: { advertiser_id: "", ad_ids: [] } },
1217
+ get_report: { method: "POST", path: "/report/integrated/get/", body: { advertiser_id: "", report_type: "", dimensions: [], metrics: [], data_level: "" } },
1218
+ create_audience: { method: "POST", path: "/dmp/custom_audience/create/", body: { advertiser_id: "", custom_audience_name: "" } },
1219
+ list_audiences: { method: "GET", path: "/dmp/custom_audience/list/", query: ["advertiser_id", "page", "page_size"] },
1220
+ },
1221
+ authHeader: (creds) => ({
1222
+ "Access-Token": creds.accessToken,
1223
+ "Content-Type": "application/json",
1224
+ }),
1225
+ },
1226
+
1227
+ // ── X Ads ───────────────────────────────────────────────────
1228
+ x_ads: {
1229
+ name: "X Ads",
1230
+ type: "advertising",
1231
+ description: "X (Twitter) advertising — campaigns, line items, promoted tweets, reports, audiences",
1232
+ baseUrl: "https://ads-api.x.com/12",
1233
+ authType: "oauth",
1234
+ credentialKeys: ["access_token", "accountId"],
1235
+ capabilities: [
1236
+ { name: "manage_campaigns", actions: ["create", "list", "get", "update"], description: "Manage ad campaigns" },
1237
+ { name: "manage_line_items", actions: ["create", "list", "get"], description: "Manage line items and targeting" },
1238
+ { name: "manage_promoted_tweets", actions: ["create", "list"], description: "Manage promoted tweets" },
1239
+ { name: "manage_reports", actions: ["get"], description: "Pull campaign analytics" },
1240
+ { name: "manage_audiences", actions: ["create", "list"], description: "Manage tailored audiences" },
1241
+ ],
1242
+ endpoints: {
1243
+ list_campaigns: { method: "GET", path: "/accounts/{accountId}/campaigns", query: ["count", "cursor", "sort_by"] },
1244
+ create_campaign: { method: "POST", path: "/accounts/{accountId}/campaigns", body: { name: "", funding_instrument_id: "", daily_budget_amount_local_micro: 0, status: "PAUSED" } },
1245
+ get_campaign: { method: "GET", path: "/accounts/{accountId}/campaigns/{campaignId}" },
1246
+ update_campaign: { method: "PUT", path: "/accounts/{accountId}/campaigns/{campaignId}", body: {} },
1247
+ list_line_items: { method: "GET", path: "/accounts/{accountId}/line_items", query: ["campaign_ids", "count", "cursor"] },
1248
+ create_line_item: { method: "POST", path: "/accounts/{accountId}/line_items", body: { campaign_id: "", objective: "", placements: [], bid_amount_local_micro: 0 } },
1249
+ list_promoted_tweets: { method: "GET", path: "/accounts/{accountId}/promoted_tweets", query: ["line_item_ids", "count"] },
1250
+ create_promoted_tweet: { method: "POST", path: "/accounts/{accountId}/promoted_tweets", body: { line_item_id: "", tweet_ids: [] } },
1251
+ get_stats: { method: "GET", path: "/stats/accounts/{accountId}", query: ["entity", "entity_ids", "start_time", "end_time", "granularity", "metric_groups"] },
1252
+ create_audience: { method: "POST", path: "/accounts/{accountId}/tailored_audiences", body: { name: "", list_type: "" } },
1253
+ list_audiences: { method: "GET", path: "/accounts/{accountId}/tailored_audiences", query: ["count", "cursor"] },
1254
+ },
1255
+ authHeader: (creds) => ({
1256
+ "Authorization": `Bearer ${creds.access_token}`,
1257
+ "Content-Type": "application/json",
1258
+ }),
1259
+ },
1260
+
1261
+ // ── LinkedIn Ads ────────────────────────────────────────────
1262
+ linkedin_ads: {
1263
+ name: "LinkedIn Ads",
1264
+ type: "advertising",
1265
+ description: "Professional advertising — campaigns, campaign groups, creatives, reports, audiences",
1266
+ baseUrl: "https://api.linkedin.com/rest",
1267
+ authType: "oauth",
1268
+ credentialKeys: ["access_token", "adAccountId"],
1269
+ capabilities: [
1270
+ { name: "manage_campaigns", actions: ["create", "list", "get", "update"], description: "Manage ad campaigns" },
1271
+ { name: "manage_campaign_groups", actions: ["create", "list"], description: "Manage campaign groups" },
1272
+ { name: "manage_creatives", actions: ["create", "list"], description: "Manage ad creatives" },
1273
+ { name: "manage_reports", actions: ["get"], description: "Pull campaign analytics" },
1274
+ { name: "manage_audiences", actions: ["create", "list"], description: "Manage matched audiences" },
1275
+ ],
1276
+ endpoints: {
1277
+ list_campaigns: { method: "GET", path: "/adCampaigns", query: ["q", "search", "count", "start"] },
1278
+ create_campaign: { method: "POST", path: "/adCampaigns", body: { account: "", name: "", type: "SPONSORED_UPDATES", status: "PAUSED" } },
1279
+ get_campaign: { method: "GET", path: "/adCampaigns/{campaignId}" },
1280
+ update_campaign: { method: "POST", path: "/adCampaigns/{campaignId}", body: {} },
1281
+ list_campaign_groups: { method: "GET", path: "/adCampaignGroups", query: ["q", "search", "count"] },
1282
+ create_campaign_group: { method: "POST", path: "/adCampaignGroups", body: { account: "", name: "", status: "ACTIVE" } },
1283
+ list_creatives: { method: "GET", path: "/adCreatives", query: ["q", "search", "campaigns", "count"] },
1284
+ create_creative: { method: "POST", path: "/adCreatives", body: { campaign: "", reference: "" } },
1285
+ get_analytics: { method: "GET", path: "/adAnalytics", query: ["q", "dateRange", "campaigns", "pivot", "timeGranularity", "fields"] },
1286
+ create_audience: { method: "POST", path: "/dmpSegments", body: { name: "", account: "", type: "" } },
1287
+ list_audiences: { method: "GET", path: "/dmpSegments", query: ["q", "account", "count"] },
1288
+ },
1289
+ authHeader: (creds) => ({
1290
+ "Authorization": `Bearer ${creds.access_token}`,
1291
+ "Content-Type": "application/json",
1292
+ "LinkedIn-Version": "202402",
1293
+ "X-Restli-Protocol-Version": "2.0.0",
1294
+ }),
1295
+ },
1296
+
1297
+ // ── Instagram Ads ───────────────────────────────────────────
1298
+ instagram_ads: {
1299
+ name: "Instagram Ads",
1300
+ type: "advertising",
1301
+ description: "Instagram advertising — campaigns, ad sets, ads, insights via Facebook Marketing API",
1302
+ baseUrl: "https://graph.facebook.com/v19.0",
1303
+ authType: "access_token",
1304
+ credentialKeys: ["accessToken", "adAccountId"],
1305
+ capabilities: [
1306
+ { name: "manage_campaigns", actions: ["create", "list"], description: "Manage Instagram ad campaigns" },
1307
+ { name: "manage_adsets", actions: ["create", "list"], description: "Manage ad sets with Instagram placement" },
1308
+ { name: "manage_ads", actions: ["create", "list"], description: "Manage Instagram ad creatives" },
1309
+ { name: "manage_insights", actions: ["get"], description: "View Instagram ad performance" },
1310
+ ],
1311
+ endpoints: {
1312
+ create_campaign: { method: "POST", path: "/act_{adAccountId}/campaigns", body: { name: "", objective: "", status: "PAUSED", special_ad_categories: [] } },
1313
+ list_campaigns: { method: "GET", path: "/act_{adAccountId}/campaigns", query: ["fields", "limit", "effective_status"] },
1314
+ create_adset: { method: "POST", path: "/act_{adAccountId}/adsets", body: { name: "", campaign_id: "", daily_budget: 0, targeting: { publisher_platforms: ["instagram"] }, status: "PAUSED" } },
1315
+ list_adsets: { method: "GET", path: "/act_{adAccountId}/adsets", query: ["fields", "limit"] },
1316
+ create_ad: { method: "POST", path: "/act_{adAccountId}/ads", body: { name: "", adset_id: "", creative: {}, status: "PAUSED" } },
1317
+ list_ads: { method: "GET", path: "/act_{adAccountId}/ads", query: ["fields", "limit"] },
1318
+ get_insights: { method: "GET", path: "/act_{adAccountId}/insights", query: ["fields", "date_preset", "level", "filtering"] },
1319
+ get_ad_previews: { method: "GET", path: "/{adId}/previews", query: ["ad_format"] },
1320
+ },
1321
+ authHeader: (creds) => ({
1322
+ "Authorization": `Bearer ${creds.accessToken}`,
1323
+ "Content-Type": "application/json",
1324
+ }),
1325
+ },
1326
+
1327
+ // ── Smartlead ───────────────────────────────────────────────
1328
+ smartlead: {
1329
+ name: "Smartlead",
1330
+ type: "marketing",
1331
+ description: "Cold email outreach — campaigns, leads, sequences, email accounts",
1332
+ baseUrl: "https://server.smartlead.ai/api/v1",
1333
+ authType: "api_key",
1334
+ credentialKeys: ["apiKey"],
1335
+ capabilities: [
1336
+ { name: "manage_campaigns", actions: ["create", "list", "get", "update"], description: "Manage outreach campaigns" },
1337
+ { name: "manage_leads", actions: ["add", "list", "get"], description: "Add and manage leads" },
1338
+ { name: "manage_sequences", actions: ["create", "list"], description: "Create email sequences" },
1339
+ { name: "manage_email_accounts", actions: ["list", "add"], description: "Manage sending email accounts" },
1340
+ ],
1341
+ endpoints: {
1342
+ create_campaign: { method: "POST", path: "/campaigns/create", query: ["api_key"], body: { name: "" } },
1343
+ list_campaigns: { method: "GET", path: "/campaigns", query: ["api_key"] },
1344
+ get_campaign: { method: "GET", path: "/campaigns/{campaignId}", query: ["api_key"] },
1345
+ update_campaign: { method: "POST", path: "/campaigns/{campaignId}/settings", query: ["api_key"], body: {} },
1346
+ add_leads: { method: "POST", path: "/campaigns/{campaignId}/leads", query: ["api_key"], body: { lead_list: [] } },
1347
+ list_leads: { method: "GET", path: "/campaigns/{campaignId}/leads", query: ["api_key", "offset", "limit"] },
1348
+ get_lead: { method: "GET", path: "/leads/{leadId}", query: ["api_key"] },
1349
+ add_email_account: { method: "POST", path: "/email-accounts/save", query: ["api_key"], body: { from_name: "", from_email: "", smtp_host: "", smtp_port: 587 } },
1350
+ list_email_accounts: { method: "GET", path: "/email-accounts", query: ["api_key"] },
1351
+ get_campaign_stats: { method: "GET", path: "/campaigns/{campaignId}/analytics", query: ["api_key"] },
1352
+ create_sequence: { method: "POST", path: "/campaigns/{campaignId}/sequences", query: ["api_key"], body: { sequences: [] } },
1353
+ list_sequences: { method: "GET", path: "/campaigns/{campaignId}/sequences", query: ["api_key"] },
1354
+ },
1355
+ authHeader: (creds) => ({
1356
+ "Content-Type": "application/json",
1357
+ }),
1358
+ },
1359
+
1360
+ // ── Zapier ──────────────────────────────────────────────────
1361
+ zapier: {
1362
+ name: "Zapier",
1363
+ type: "automation",
1364
+ description: "Workflow automation — zaps, actions (limited API, most interaction via webhooks)",
1365
+ baseUrl: "https://api.zapier.com/v1",
1366
+ authType: "api_key",
1367
+ credentialKeys: ["apiKey"],
1368
+ capabilities: [
1369
+ { name: "manage_zaps", actions: ["list", "get", "enable", "disable"], description: "View and toggle zaps" },
1370
+ { name: "manage_actions", actions: ["list"], description: "List available actions" },
1371
+ ],
1372
+ endpoints: {
1373
+ list_zaps: { method: "GET", path: "/zaps" },
1374
+ get_zap: { method: "GET", path: "/zaps/{zapId}" },
1375
+ enable_zap: { method: "PUT", path: "/zaps/{zapId}", body: { is_enabled: true } },
1376
+ disable_zap: { method: "PUT", path: "/zaps/{zapId}", body: { is_enabled: false } },
1377
+ list_actions: { method: "GET", path: "/actions" },
1378
+ },
1379
+ authHeader: (creds) => ({
1380
+ "Authorization": `Bearer ${creds.apiKey}`,
1381
+ "Content-Type": "application/json",
1382
+ }),
1383
+ },
1384
+
1385
+ // ── MuleSoft ────────────────────────────────────────────────
1386
+ mulesoft: {
1387
+ name: "MuleSoft",
1388
+ type: "integration",
1389
+ description: "Integration platform — APIs, applications, environments via Anypoint Platform",
1390
+ baseUrl: "https://anypoint.mulesoft.com",
1391
+ authType: "token",
1392
+ credentialKeys: ["token"],
1393
+ capabilities: [
1394
+ { name: "manage_apis", actions: ["list", "get"], description: "View API definitions and specifications" },
1395
+ { name: "manage_applications", actions: ["list", "get", "deploy"], description: "Deploy and manage applications" },
1396
+ { name: "manage_environments", actions: ["list"], description: "List deployment environments" },
1397
+ ],
1398
+ endpoints: {
1399
+ list_organizations: { method: "GET", path: "/accounts/api/me" },
1400
+ list_environments: { method: "GET", path: "/accounts/api/organizations/{orgId}/environments" },
1401
+ list_apis: { method: "GET", path: "/apimanager/api/v1/organizations/{orgId}/environments/{envId}/apis", query: ["limit", "offset"] },
1402
+ get_api: { method: "GET", path: "/apimanager/api/v1/organizations/{orgId}/environments/{envId}/apis/{apiId}" },
1403
+ list_applications: { method: "GET", path: "/amc/application-manager/api/v2/organizations/{orgId}/environments/{envId}/deployments" },
1404
+ get_application: { method: "GET", path: "/amc/application-manager/api/v2/organizations/{orgId}/environments/{envId}/deployments/{deploymentId}" },
1405
+ deploy_application: { method: "POST", path: "/amc/application-manager/api/v2/organizations/{orgId}/environments/{envId}/deployments", body: { name: "", target: {} } },
1406
+ },
1407
+ authHeader: (creds) => ({
1408
+ "Authorization": `Bearer ${creds.token}`,
1409
+ "Content-Type": "application/json",
1410
+ }),
1411
+ },
1412
+
1413
+ // ── Microsoft Azure ─────────────────────────────────────────
1414
+ azure: {
1415
+ name: "Microsoft Azure",
1416
+ type: "cloud",
1417
+ description: "Cloud infrastructure — resources, resource groups, storage, VMs via Azure Resource Manager",
1418
+ baseUrl: "https://management.azure.com",
1419
+ authType: "oauth",
1420
+ credentialKeys: ["access_token", "subscriptionId"],
1421
+ capabilities: [
1422
+ { name: "manage_resources", actions: ["list", "get", "create", "delete"], description: "Manage Azure resources" },
1423
+ { name: "manage_resource_groups", actions: ["list", "create"], description: "Manage resource groups" },
1424
+ { name: "manage_storage", actions: ["list_accounts", "list_containers"], description: "Manage storage accounts" },
1425
+ { name: "manage_vms", actions: ["list", "get", "start", "stop"], description: "Manage virtual machines" },
1426
+ ],
1427
+ endpoints: {
1428
+ list_subscriptions: { method: "GET", path: "/subscriptions", query: ["api-version=2022-12-01"] },
1429
+ list_resource_groups: { method: "GET", path: "/subscriptions/{subscriptionId}/resourcegroups", query: ["api-version=2023-07-01"] },
1430
+ create_resource_group: { method: "PUT", path: "/subscriptions/{subscriptionId}/resourcegroups/{resourceGroupName}", query: ["api-version=2023-07-01"], body: { location: "" } },
1431
+ list_resources: { method: "GET", path: "/subscriptions/{subscriptionId}/resources", query: ["api-version=2023-07-01"] },
1432
+ get_resource: { method: "GET", path: "/{resourceId}", query: ["api-version=2023-07-01"] },
1433
+ delete_resource: { method: "DELETE", path: "/{resourceId}", query: ["api-version=2023-07-01"] },
1434
+ list_storage_accounts: { method: "GET", path: "/subscriptions/{subscriptionId}/providers/Microsoft.Storage/storageAccounts", query: ["api-version=2023-01-01"] },
1435
+ list_vms: { method: "GET", path: "/subscriptions/{subscriptionId}/providers/Microsoft.Compute/virtualMachines", query: ["api-version=2023-09-01"] },
1436
+ get_vm: { method: "GET", path: "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}", query: ["api-version=2023-09-01"] },
1437
+ start_vm: { method: "POST", path: "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}/start", query: ["api-version=2023-09-01"] },
1438
+ stop_vm: { method: "POST", path: "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}/deallocate", query: ["api-version=2023-09-01"] },
1439
+ },
1440
+ authHeader: (creds) => ({
1441
+ "Authorization": `Bearer ${creds.access_token}`,
1442
+ "Content-Type": "application/json",
1443
+ }),
1444
+ },
1445
+
1446
+ // ── Pipedrive ───────────────────────────────────────────────
1447
+ pipedrive: {
1448
+ name: "Pipedrive",
1449
+ type: "crm",
1450
+ description: "Sales CRM — deals, persons, organizations, activities, pipelines, notes",
1451
+ baseUrl: "https://api.pipedrive.com/v1",
1452
+ authType: "api_key",
1453
+ credentialKeys: ["apiKey"],
1454
+ capabilities: [
1455
+ { name: "manage_deals", actions: ["create", "list", "get", "update", "delete"], description: "Full deal lifecycle management" },
1456
+ { name: "manage_persons", actions: ["create", "list", "get", "update", "delete"], description: "Manage contact persons" },
1457
+ { name: "manage_organizations", actions: ["create", "list", "get"], description: "Manage organizations" },
1458
+ { name: "manage_activities", actions: ["create", "list", "get"], description: "Schedule and track activities" },
1459
+ { name: "manage_pipelines", actions: ["list", "get"], description: "View sales pipelines and stages" },
1460
+ { name: "manage_notes", actions: ["create", "list"], description: "Add and view notes" },
1461
+ ],
1462
+ endpoints: {
1463
+ create_deal: { method: "POST", path: "/deals", query: ["api_token"], body: { title: "" } },
1464
+ list_deals: { method: "GET", path: "/deals", query: ["api_token", "start", "limit", "status", "sort"] },
1465
+ get_deal: { method: "GET", path: "/deals/{dealId}", query: ["api_token"] },
1466
+ update_deal: { method: "PUT", path: "/deals/{dealId}", query: ["api_token"], body: {} },
1467
+ delete_deal: { method: "DELETE", path: "/deals/{dealId}", query: ["api_token"] },
1468
+ create_person: { method: "POST", path: "/persons", query: ["api_token"], body: { name: "" } },
1469
+ list_persons: { method: "GET", path: "/persons", query: ["api_token", "start", "limit", "sort"] },
1470
+ get_person: { method: "GET", path: "/persons/{personId}", query: ["api_token"] },
1471
+ update_person: { method: "PUT", path: "/persons/{personId}", query: ["api_token"], body: {} },
1472
+ delete_person: { method: "DELETE", path: "/persons/{personId}", query: ["api_token"] },
1473
+ create_organization: { method: "POST", path: "/organizations", query: ["api_token"], body: { name: "" } },
1474
+ list_organizations: { method: "GET", path: "/organizations", query: ["api_token", "start", "limit", "sort"] },
1475
+ create_activity: { method: "POST", path: "/activities", query: ["api_token"], body: { subject: "", type: "" } },
1476
+ list_activities: { method: "GET", path: "/activities", query: ["api_token", "start", "limit", "type"] },
1477
+ list_pipelines: { method: "GET", path: "/pipelines", query: ["api_token"] },
1478
+ get_pipeline: { method: "GET", path: "/pipelines/{pipelineId}", query: ["api_token"] },
1479
+ create_note: { method: "POST", path: "/notes", query: ["api_token"], body: { content: "" } },
1480
+ list_notes: { method: "GET", path: "/notes", query: ["api_token", "start", "limit", "sort"] },
1481
+ search_items: { method: "GET", path: "/itemSearch", query: ["api_token", "term", "item_types", "fields"] },
1482
+ },
1483
+ authHeader: (creds) => ({
1484
+ "Content-Type": "application/json",
1485
+ }),
1486
+ },
1487
+
1488
+ // ── LinkedIn ────────────────────────────────────────────────
1489
+ linkedin: {
1490
+ name: "LinkedIn",
1491
+ type: "social",
1492
+ description: "Professional network — posts, profile, connections, organizations via LinkedIn API",
1493
+ baseUrl: "https://api.linkedin.com/rest",
1494
+ authType: "oauth",
1495
+ credentialKeys: ["access_token"],
1496
+ capabilities: [
1497
+ { name: "manage_posts", actions: ["create", "list", "delete"], description: "Create and manage posts" },
1498
+ { name: "manage_profile", actions: ["get"], description: "View profile information" },
1499
+ { name: "manage_connections", actions: ["list"], description: "View connections" },
1500
+ { name: "manage_organizations", actions: ["get", "list_posts"], description: "View company pages and posts" },
1501
+ ],
1502
+ endpoints: {
1503
+ create_post: { method: "POST", path: "/posts", body: { author: "", commentary: "", visibility: "PUBLIC", distribution: { feedDistribution: "MAIN_FEED" }, lifecycleState: "PUBLISHED" } },
1504
+ get_profile: { method: "GET", path: "/me", query: ["projection"] },
1505
+ list_connections: { method: "GET", path: "/connections", query: ["start", "count", "projection"] },
1506
+ get_organization: { method: "GET", path: "/organizations/{organizationId}", query: ["projection"] },
1507
+ list_org_posts: { method: "GET", path: "/posts", query: ["author", "q", "count", "start"] },
1508
+ delete_post: { method: "DELETE", path: "/posts/{postId}" },
1509
+ get_post: { method: "GET", path: "/posts/{postId}" },
1510
+ upload_image: { method: "POST", path: "/images", query: ["action=initializeUpload"], body: { initializeUploadRequest: { owner: "" } } },
1511
+ },
1512
+ authHeader: (creds) => ({
1513
+ "Authorization": `Bearer ${creds.access_token}`,
1514
+ "Content-Type": "application/json",
1515
+ "LinkedIn-Version": "202402",
1516
+ "X-Restli-Protocol-Version": "2.0.0",
1517
+ }),
1518
+ },
1519
+
764
1520
  };
765
1521
 
766
1522
  // ── Helpers ────────────────────────────────────────────────