chat-agent-toolkit 1.2.73 → 1.2.74
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/dist/connectors/index.d.ts +84 -0
- package/dist/connectors/server.d.ts +46 -0
- package/dist/connectors/smoke-test.d.ts +5 -0
- package/dist/index.d.ts +2 -0
- package/dist/research-agent.cjs.js +1 -1
- package/dist/research-agent.cjs.js.map +1 -1
- package/dist/research-agent.es.js +1 -1
- package/dist/research-agent.es.js.map +1 -1
- package/package.json +13 -2
- package/src/connectors/README.md +374 -0
- package/src/connectors/catalog.json +1 -0
- package/src/connectors/index.ts +128 -0
- package/src/connectors/oomol-saas-server.js +125 -0
- package/src/connectors/package-lock.json +872 -0
- package/src/connectors/package.json +19 -0
- package/src/connectors/server.js +125 -0
- package/src/connectors/server.ts +220 -0
- package/src/connectors/smoke-test.js +14 -0
- package/src/connectors/smoke-test.ts +44 -0
- package/src/index.ts +4 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"research-agent.cjs.js","names":[],"sources":["../src/prompts/search-prompts.ts","../src/memory/types.ts","../src/memory/storage/in-memory-storage.ts","../src/memory/agent-memory-manager.ts","../src/memory/storage/drizzle-storage.ts","../src/memory/mastra-integration.ts","../src/tools/qwksearch-api-tools.ts","../src/utils/outputParser.ts","../src/utils/chat-helpers.ts","../src/tools/search/doc-utils.ts","../src/tools/search/link-summarizer.ts","../src/tools/search/metaSearchAgent.ts","../src/tools/search/search-handlers.ts","../src/tools/search/suggestionGeneratorAgent.ts","../src/tools/search/document.ts","../src/mastra/agents.ts","../src/mastra/workflows.ts","../src/mastra/rag.ts","../src/mastra/evals.ts","../src/mastra/telemetry.ts","../src/mastra/model-routing.ts","../src/config/provider-ui-config.ts","../src/config/environment-variables.ts","../src/config/language-models-database.ts","../src/config/config-manager.ts","../src/config/model-registry.ts","../src/utils/provider-image-cropper.ts"],"sourcesContent":["/**\n * @module agent-toolkit/prompts/search-prompts\n * @description Prompt templates for web search and writing assistant agents.\n */\nimport type { FewShotExample } from './meta-search-types';\n\nexport const webSearchRetrieverPrompt = `\nYou are an AI question rephraser. You will be given a conversation and a follow-up question, you will have to rephrase the follow up question so it is a standalone question and can be used by another LLM to search the web for information to answer it.\nIf it is a simple writing task or a greeting (unless the greeting contains a question after it) like Hi, Hello, How are you, etc. than a question then you need to return \\`not_needed\\` as the response (This is because the LLM won't need to search the web for finding information on this topic).\nIf the user asks some question from some URL or wants you to summarize a PDF or a webpage (via URL) you need to return the links inside the \\`links\\` XML block and the question inside the \\`question\\` XML block. If the user wants to you to summarize the webpage or the PDF you need to return \\`summarize\\` inside the \\`question\\` XML block in place of a question and the link to summarize in the \\`links\\` XML block.\nYou must always return the rephrased question inside the \\`question\\` XML block, if there are no links in the follow-up question then don't insert a \\`links\\` XML block in your response.\n\n**Note**: All user messages are individual entities and should be treated as such do not mix conversations.\n`;\n\nexport const webSearchRetrieverFewShots: FewShotExample[] = [\n [\n 'user',\n `<conversation>\n</conversation>\n<query>\nWhat is the capital of France\n</query>`,\n ],\n [\n 'assistant',\n `<question>\nCapital of france\n</question>`,\n ],\n [\n 'user',\n `<conversation>\n</conversation>\n<query>\nHi, how are you?\n</query>`,\n ],\n [\n 'assistant',\n `<question>\nnot_needed\n</question>`,\n ],\n [\n 'user',\n `<conversation>\n</conversation>\n<query>\nWhat is Docker?\n</query>`,\n ],\n [\n 'assistant',\n `<question>\nWhat is Docker\n</question>`,\n ],\n [\n 'user',\n `<conversation>\n</conversation>\n<query>\nCan you tell me what is X from https://example.com\n</query>`,\n ],\n [\n 'assistant',\n `<question>\nWhat is X?\n</question>\n<links>\nhttps://example.com\n</links>`,\n ],\n [\n 'user',\n `<conversation>\n</conversation>\n<query>\nSummarize the content from https://example.com\n</query>`,\n ],\n [\n 'assistant',\n `<question>\nsummarize\n</question>\n<links>\nhttps://example.com\n</links>`,\n ],\n];\n\nexport const webSearchResponsePrompt = `\n You are QwkSearch, an AI model skilled in web search and crafting detailed, engaging, and well-structured answers. You excel at summarizing web pages and extracting relevant information to create professional, blog-style responses.\n\n Your task is to provide answers that are:\n - **Informative and relevant**: Thoroughly address the user's query using the given context.\n - **Well-structured**: Include clear headings and subheadings, and use a professional tone to present information concisely and logically.\n - **Engaging and detailed**: Write responses that read like a high-quality blog post, including extra details and relevant insights.\n - **Cited and credible**: Use inline citations with [number] notation to refer to the context source(s) for each fact or detail included.\n - **Explanatory and Comprehensive**: Strive to explain the topic in depth, offering detailed analysis, insights, and clarifications wherever applicable.\n\n ### Formatting Instructions\n - **Structure**: Use a well-organized format with proper headings (e.g., \"## Example heading 1\" or \"## Example heading 2\"). Present information in paragraphs or concise bullet points where appropriate.\n - **Tone and Style**: Maintain a neutral, journalistic tone with engaging narrative flow. Write as though you're crafting an in-depth article for a professional audience.\n - **Markdown Usage**: Format your response with Markdown for clarity. Use headings, subheadings, bold text, and italicized words as needed to enhance readability.\n - **Length and Depth**: Provide comprehensive coverage of the topic. Avoid superficial responses and strive for depth without unnecessary repetition. Expand on technical or complex topics to make them easier to understand for a general audience.\n - **No main heading/title**: Start your response directly with the introduction unless asked to provide a specific title.\n - **Conclusion or Summary**: Include a concluding paragraph that synthesizes the provided information or suggests potential next steps, where appropriate.\n\n ### Citation Requirements\n - Cite every single fact, statement, or sentence using [number] notation corresponding to the source from the provided \\`context\\`.\n - Integrate citations naturally at the end of sentences or clauses as appropriate. For example, \"The Eiffel Tower is one of the most visited landmarks in the world[1].\"\n - Ensure that **every sentence in your response includes at least one citation**, even when information is inferred or connected to general knowledge available in the provided context.\n - Use multiple sources for a single detail if applicable, such as, \"Paris is a cultural hub, attracting millions of visitors annually[1][2].\"\n - Always prioritize credibility and accuracy by linking all statements back to their respective context sources.\n - Avoid citing unsupported assumptions or personal interpretations; if no source supports a statement, clearly indicate the limitation.\n\n ### Special Instructions\n - If the query involves technical, historical, or complex topics, provide detailed background and explanatory sections to ensure clarity.\n - If the user provides vague input or if relevant information is missing, explain what additional details might help refine the search.\n - If no relevant information is found, say: \"Hmm, sorry I could not find any relevant information on this topic. Would you like me to search again or ask something else?\" Be transparent about limitations and suggest alternatives or ways to reframe the query.\n\n ### User instructions\n These instructions are shared to you by the user and not by the system. You will have to follow them but give them less priority than the above instructions. If the user has provided specific instructions or preferences, incorporate them into your response while adhering to the overall guidelines.\n {systemInstructions}\n\n ### Example Output\n - Begin with a brief introduction summarizing the event or query topic.\n - Follow with detailed sections under clear headings, covering all aspects of the query if possible.\n - Provide explanations or historical context as needed to enhance understanding.\n - End with a conclusion or overall perspective if relevant.\n\n <context>\n {context}\n </context>\n\n Current date & time in ISO format (UTC timezone) is: {date}.\n`;\n\nexport const writingAssistantPrompt = `\nYou are QwkSearch, an AI model who is expert at searching the web and answering user's queries. You are currently set on focus mode 'Writing Assistant', this means you will be helping the user write a response to a given query.\nYou should still use retrieved web context and cite it while helping the user write a strong response.\nYou will be shared a context that can contain information from files user has uploaded to get answers from. You will have to generate answers upon that.\n\nYou have to cite the answer using [number] notation. You must cite the sentences with their relevent context number. You must cite each and every part of the answer so the user can know where the information is coming from.\nPlace these citations at the end of that particular sentence. You can cite the same sentence multiple times if it is relevant to the user's query like [number1][number2].\nHowever you do not need to cite it using the same number. You can use different numbers to cite the same sentence multiple times. The number refers to the number of the search result (passed in the context) used to generate that part of the answer.\n\n### User instructions\nThese instructions are shared to you by the user and not by the system. You will have to follow them but give them less priority than the above instructions. If the user has provided specific instructions or preferences, incorporate them into your response while adhering to the overall guidelines.\n{systemInstructions}\n\n<context>\n{context}\n</context>\n`;\n\nexport default {\n webSearchResponsePrompt,\n webSearchRetrieverPrompt,\n webSearchRetrieverFewShots,\n writingAssistantPrompt,\n};\n","/**\r\n * Memory System Types and Constants\r\n *\r\n * Defines interfaces and configuration for the memory management system\r\n */\r\n\r\n/**\r\n * Memory types for categorization\r\n */\r\nexport const MEMORY_TYPES = {\r\n FACT: \"fact\",\r\n CONVERSATION: \"conversation\",\r\n PREFERENCE: \"preference\",\r\n PERSONAL: \"personal\",\r\n WORK: \"work\",\r\n MANUAL: \"manual\",\r\n} as const;\r\n\r\nexport type MemoryType = (typeof MEMORY_TYPES)[keyof typeof MEMORY_TYPES];\r\n\r\n/**\r\n * Configuration constants for memory management\r\n */\r\nexport const MEMORY_CONFIG = {\r\n DEFAULT_MAX_MEMORIES: 100,\r\n DEFAULT_SUMMARY_THRESHOLD: 10,\r\n DEFAULT_CACHE_EXPIRY: 5 * 60 * 1000, // 5 minutes\r\n DEFAULT_BATCH_SIZE: 5,\r\n DEFAULT_RELEVANCE_THRESHOLD: 0.3,\r\n DEFAULT_IMPORTANCE_RANGE: { min: 0, max: 10 },\r\n DEFAULT_RATE_LIMIT: { requests: 10, windowMs: 60000 },\r\n DEFAULT_TIMEOUT: 30000, // 30 seconds\r\n VECTOR_SEARCH_ENABLED: true,\r\n AUTO_SUMMARIZATION_ENABLED: true,\r\n} as const;\r\n\r\n/**\r\n * Memory record structure\r\n */\r\nexport interface MemoryRecord {\r\n id: string;\r\n user_id: string;\r\n memory_type: MemoryType;\r\n content: string;\r\n importance: number;\r\n access_count: number;\r\n metadata?: Record<string, any>;\r\n created_at: Date;\r\n updated_at: Date;\r\n relevance_score?: number;\r\n}\r\n\r\n/**\r\n * Message structure for conversation tracking\r\n */\r\nexport interface Message {\r\n role: \"user\" | \"assistant\";\r\n content: string;\r\n timestamp: number;\r\n metadata?: Record<string, any>;\r\n}\r\n\r\n/**\r\n * Memory search options\r\n */\r\nexport interface MemorySearchOptions {\r\n minImportance?: number;\r\n memoryType?: MemoryType;\r\n includeMetadata?: boolean;\r\n}\r\n\r\n/**\r\n * Memory update payload\r\n */\r\nexport interface MemoryUpdate {\r\n importance?: number;\r\n access_count?: number | { increment: number };\r\n updated_at?: Date;\r\n metadata?: Record<string, any>;\r\n}\r\n\r\n/**\r\n * Memory context options\r\n */\r\nexport interface MemoryContextOptions {\r\n maxMemories?: number;\r\n minImportance?: number;\r\n}\r\n\r\n/**\r\n * Performance metrics\r\n */\r\nexport interface MemoryMetrics {\r\n cacheHits: number;\r\n cacheMisses: number;\r\n vectorSearches: number;\r\n summarizations: number;\r\n errors: number;\r\n cacheSize: number;\r\n recentMessagesCount: number;\r\n isProcessing: boolean;\r\n}\r\n\r\n/**\r\n * Memory initialization options\r\n */\r\nexport interface MemoryOptions {\r\n maxMemories?: number;\r\n summaryThreshold?: number;\r\n cacheExpiry?: number;\r\n batchSize?: number;\r\n relevanceThreshold?: number;\r\n enableVectorSearch?: boolean;\r\n enableAutoSummarization?: boolean;\r\n}\r\n\r\n/**\r\n * Extracted fact structure\r\n */\r\nexport interface ExtractedFact {\r\n content: string;\r\n importance?: number;\r\n category?: MemoryType;\r\n metadata?: Record<string, any>;\r\n}\r\n","// @ts-nocheck\r\n/**\r\n * Simple Memory Class\r\n *\r\n * Core memory management functionality with:\r\n * - Message deduplication\r\n * - Automatic summarization\r\n * - Vector-based relevance search\r\n * - Caching with TTL\r\n * - Batch processing\r\n * - Conflict resolution\r\n */\r\n\r\nimport { writeLanguageResponse } from \"write-language\";\r\nimport type { IMemoryStorage } from \"./storage-interface\";\r\nimport type {\r\n MemoryRecord,\r\n Message,\r\n MemorySearchOptions,\r\n MemoryMetrics,\r\n MemoryOptions,\r\n MemoryContextOptions,\r\n ExtractedFact,\r\n MemoryType,\r\n} from \"../types\";\r\nimport { MEMORY_CONFIG, MEMORY_TYPES } from \"../types\";\r\n\r\nexport class SimpleMemory {\r\n private userId: string;\r\n private storage: IMemoryStorage;\r\n private maxMemories: number;\r\n private summaryThreshold: number;\r\n private cacheExpiry: number;\r\n private batchSize: number;\r\n private relevanceThreshold: number;\r\n private enableVectorSearch: boolean;\r\n private enableAutoSummarization: boolean;\r\n private recentMessages: Message[];\r\n private memoryCache: Map<string, { data: any; timestamp: number }>;\r\n private isProcessing: boolean;\r\n private processingQueue: any[];\r\n private summarizeTimeout?: NodeJS.Timeout;\r\n private metrics: {\r\n cacheHits: number;\r\n cacheMisses: number;\r\n vectorSearches: number;\r\n summarizations: number;\r\n errors: number;\r\n };\r\n\r\n /**\r\n * Initialize memory system for a user\r\n */\r\n constructor(\r\n userId: string,\r\n storage: IMemoryStorage,\r\n options: MemoryOptions = {},\r\n ) {\r\n if (!userId || !storage) {\r\n throw new Error(\"userId and storage are required parameters\");\r\n }\r\n\r\n this.userId = userId;\r\n this.storage = storage;\r\n this.maxMemories =\r\n options.maxMemories || MEMORY_CONFIG.DEFAULT_MAX_MEMORIES;\r\n this.summaryThreshold =\r\n options.summaryThreshold || MEMORY_CONFIG.DEFAULT_SUMMARY_THRESHOLD;\r\n this.cacheExpiry =\r\n options.cacheExpiry || MEMORY_CONFIG.DEFAULT_CACHE_EXPIRY;\r\n this.batchSize = options.batchSize || MEMORY_CONFIG.DEFAULT_BATCH_SIZE;\r\n this.relevanceThreshold =\r\n options.relevanceThreshold || MEMORY_CONFIG.DEFAULT_RELEVANCE_THRESHOLD;\r\n\r\n // Feature flags\r\n this.enableVectorSearch =\r\n options.enableVectorSearch !== false &&\r\n MEMORY_CONFIG.VECTOR_SEARCH_ENABLED;\r\n this.enableAutoSummarization =\r\n options.enableAutoSummarization !== false &&\r\n MEMORY_CONFIG.AUTO_SUMMARIZATION_ENABLED;\r\n\r\n // State management\r\n this.recentMessages = [];\r\n this.memoryCache = new Map();\r\n this.isProcessing = false;\r\n this.processingQueue = [];\r\n\r\n // Performance metrics\r\n this.metrics = {\r\n cacheHits: 0,\r\n cacheMisses: 0,\r\n vectorSearches: 0,\r\n summarizations: 0,\r\n errors: 0,\r\n };\r\n }\r\n\r\n /**\r\n * Add a message to current session with intelligent deduplication\r\n */\r\n addMessage(\r\n role: \"user\" | \"assistant\",\r\n content: string,\r\n metadata: Record<string, any> = {},\r\n ): boolean {\r\n if (!role || !content || typeof content !== \"string\") {\r\n console.warn(\"Invalid message parameters:\", { role, content });\r\n return false;\r\n }\r\n\r\n // Intelligent deduplication - check last few messages\r\n const lastMessages = this.recentMessages.slice(-3);\r\n const isDuplicate = lastMessages.some(\r\n (msg) =>\r\n msg.role === role &&\r\n msg.content === content &&\r\n Date.now() - msg.timestamp < 60000, // Within 1 minute\r\n );\r\n\r\n if (isDuplicate) {\r\n console.log(\"Duplicate message detected, skipping\");\r\n return false;\r\n }\r\n\r\n // Add message with metadata\r\n const message: Message = {\r\n role,\r\n content: content.trim(),\r\n timestamp: metadata.timestamp || Date.now(),\r\n metadata: { ...metadata },\r\n };\r\n\r\n this.recentMessages.push(message);\r\n\r\n // Auto-summarization with debouncing\r\n if (\r\n this.enableAutoSummarization &&\r\n this.recentMessages.length >= this.summaryThreshold &&\r\n !this.isProcessing\r\n ) {\r\n this.debouncedSummarize();\r\n }\r\n\r\n return true;\r\n }\r\n\r\n /**\r\n * Debounced summarization to prevent excessive processing\r\n */\r\n private debouncedSummarize(): void {\r\n if (this.summarizeTimeout) {\r\n clearTimeout(this.summarizeTimeout);\r\n }\r\n\r\n this.summarizeTimeout = setTimeout(() => {\r\n this.summarizeAndStore().catch((error) => {\r\n console.error(\"Auto-summarization failed:\", error);\r\n this.metrics.errors++;\r\n });\r\n }, 1000); // 1 second debounce\r\n }\r\n\r\n /**\r\n * Store important facts with validation and conflict resolution\r\n */\r\n async storeFact(\r\n content: string,\r\n importance: number = 1,\r\n category: MemoryType = MEMORY_TYPES.FACT,\r\n metadata: Record<string, any> = {},\r\n ): Promise<string> {\r\n // Input validation\r\n if (\r\n !content ||\r\n typeof content !== \"string\" ||\r\n content.trim().length === 0\r\n ) {\r\n throw new Error(\"Content cannot be empty\");\r\n }\r\n\r\n if (\r\n importance < MEMORY_CONFIG.DEFAULT_IMPORTANCE_RANGE.min ||\r\n importance > MEMORY_CONFIG.DEFAULT_IMPORTANCE_RANGE.max\r\n ) {\r\n throw new Error(\r\n `Importance must be between ${MEMORY_CONFIG.DEFAULT_IMPORTANCE_RANGE.min} and ${MEMORY_CONFIG.DEFAULT_IMPORTANCE_RANGE.max}`,\r\n );\r\n }\r\n\r\n const normalizedContent = content.trim();\r\n const normalizedCategory = Object.values(MEMORY_TYPES).includes(category)\r\n ? category\r\n : MEMORY_TYPES.FACT;\r\n\r\n try {\r\n // Check for existing similar facts using fuzzy matching\r\n const existingFacts = await this.findSimilarFacts(normalizedContent);\r\n\r\n if (existingFacts.length > 0) {\r\n // Update existing fact if importance is higher\r\n const bestMatch = existingFacts[0];\r\n if (importance > bestMatch.importance) {\r\n await this.storage.updateMemory(bestMatch.id, {\r\n importance,\r\n updated_at: new Date(),\r\n access_count: { increment: 1 },\r\n metadata: { ...bestMatch.metadata, ...metadata },\r\n });\r\n }\r\n return bestMatch.id;\r\n }\r\n\r\n // Insert new fact\r\n const id = await this.storage.insertMemory(\r\n this.userId,\r\n normalizedCategory,\r\n normalizedContent,\r\n Math.max(0, Math.min(10, importance)),\r\n metadata,\r\n );\r\n\r\n // Clear cache after new insertion\r\n this.clearCache();\r\n\r\n return id;\r\n } catch (error) {\r\n console.error(\"Error storing fact:\", error);\r\n this.metrics.errors++;\r\n throw error;\r\n }\r\n }\r\n\r\n /**\r\n * Find similar facts using content similarity\r\n */\r\n private async findSimilarFacts(content: string): Promise<MemoryRecord[]> {\r\n try {\r\n return await this.storage.findSimilarMemories(this.userId, content, 5);\r\n } catch (error) {\r\n console.error(\"Error finding similar facts:\", error);\r\n return [];\r\n }\r\n }\r\n\r\n /**\r\n * Enhanced memory recall with caching and vector search\r\n */\r\n async recallRelevantMemories(\r\n query: string = \"\",\r\n limit: number = 10,\r\n options: MemorySearchOptions = {},\r\n ): Promise<MemoryRecord[]> {\r\n const cacheKey = `${query}-${limit}-${JSON.stringify(options)}`;\r\n\r\n // Check cache first\r\n if (this.memoryCache.has(cacheKey)) {\r\n const cached = this.memoryCache.get(cacheKey)!;\r\n if (Date.now() - cached.timestamp < this.cacheExpiry) {\r\n this.metrics.cacheHits++;\r\n return cached.data;\r\n }\r\n this.memoryCache.delete(cacheKey);\r\n }\r\n\r\n this.metrics.cacheMisses++;\r\n\r\n try {\r\n let memories = await this.storage.findMemories(\r\n this.userId,\r\n query,\r\n limit,\r\n options,\r\n );\r\n\r\n if (memories.length === 0) {\r\n return [];\r\n }\r\n\r\n // Apply vector search if enabled and query provided\r\n if (this.enableVectorSearch && query.trim() && memories.length > 0) {\r\n memories = await this.applyVectorSearch(query, memories, options);\r\n }\r\n\r\n // Apply relevance filtering\r\n if (options.minImportance) {\r\n memories = memories.filter(\r\n (m) => m.importance >= options.minImportance!,\r\n );\r\n }\r\n\r\n // Format results\r\n const result = memories.map((m) => ({\r\n ...m,\r\n relevance_score: m.relevance_score || 0,\r\n metadata: options.includeMetadata ? m.metadata : undefined,\r\n }));\r\n\r\n // Cache the result\r\n this.memoryCache.set(cacheKey, {\r\n data: result,\r\n timestamp: Date.now(),\r\n });\r\n\r\n return result;\r\n } catch (error) {\r\n console.error(\"Error retrieving memories:\", error);\r\n this.metrics.errors++;\r\n return [];\r\n }\r\n }\r\n\r\n /**\r\n * Apply vector search to memories\r\n */\r\n private async applyVectorSearch(\r\n query: string,\r\n memories: MemoryRecord[],\r\n options: MemorySearchOptions,\r\n ): Promise<MemoryRecord[]> {\r\n // Placeholder for vector search implementation\r\n // In production, integrate with your vector similarity API\r\n // try {\r\n // this.metrics.vectorSearches++;\r\n // const sentencesByRelevance = await weighRelevanceConceptVectorAPI(\r\n // query,\r\n // memories.map(m => m.content)\r\n // );\r\n // await this.updateRelevanceScores(memories, sentencesByRelevance);\r\n // return memories\r\n // .map(memory => {\r\n // const relevanceData = sentencesByRelevance.find(s => s.sentence === memory.content);\r\n // return {\r\n // ...memory,\r\n // relevance_score: relevanceData?.relevance || 0\r\n // };\r\n // })\r\n // .sort((a, b) => b.relevance_score - a.relevance_score);\r\n // } catch (vectorError) {\r\n // console.warn('Vector search failed, falling back to basic search:', vectorError);\r\n // return memories;\r\n // }\r\n return memories;\r\n }\r\n\r\n /**\r\n * Update relevance scores for memories\r\n */\r\n private async updateRelevanceScores(\r\n memories: MemoryRecord[],\r\n sentencesByRelevance: Array<{ sentence: string; relevance: number }>,\r\n ): Promise<void> {\r\n const updates = sentencesByRelevance\r\n .filter((m) => m.relevance > this.relevanceThreshold)\r\n .map((m) => {\r\n const memory = memories.find((mem) => mem.content === m.sentence);\r\n if (memory) {\r\n return {\r\n id: memory.id,\r\n updates: {\r\n importance: Math.min(10, memory.importance + m.relevance * 0.5),\r\n access_count: { increment: 1 },\r\n updated_at: new Date(),\r\n },\r\n };\r\n }\r\n return null;\r\n })\r\n .filter(Boolean) as Array<{ id: string; updates: any }>;\r\n\r\n if (updates.length > 0) {\r\n await this.storage.batchUpdateMemories(updates);\r\n }\r\n }\r\n\r\n /**\r\n * Improved summarization with error handling and batch processing\r\n */\r\n async summarizeAndStore(): Promise<boolean> {\r\n if (this.recentMessages.length === 0 || this.isProcessing) {\r\n return false;\r\n }\r\n\r\n this.isProcessing = true;\r\n this.metrics.summarizations++;\r\n\r\n try {\r\n // Create conversation summary\r\n const conversationText = this.recentMessages\r\n .map((msg) => `${msg.role}: ${msg.content}`)\r\n .join(\"\\n\");\r\n\r\n // Extract facts using LLM\r\n const factsResponse =\r\n await this.extractFactsFromConversation(conversationText);\r\n\r\n if (!Array.isArray(factsResponse) || factsResponse.length === 0) {\r\n console.warn(\"No facts extracted from conversation\");\r\n return false;\r\n }\r\n\r\n // Process facts in batches\r\n await this.processFactsInBatches(factsResponse);\r\n\r\n // Clear processed messages\r\n this.recentMessages = [];\r\n\r\n return true;\r\n } catch (error) {\r\n console.error(\"Error in summarizeAndStore:\", error);\r\n this.metrics.errors++;\r\n return false;\r\n } finally {\r\n this.isProcessing = false;\r\n }\r\n }\r\n\r\n /**\r\n * Extract facts from conversation using LLM\r\n */\r\n private async extractFactsFromConversation(\r\n conversationText: string,\r\n ): Promise<ExtractedFact[]> {\r\n try {\r\n const { extract: factsResponse } = await writeLanguageResponse({\r\n agent: \"remember-facts\",\r\n chat_history: conversationText,\r\n provider: \"groq\",\r\n model: \"mixtral-8x7b-32768\",\r\n timeout: MEMORY_CONFIG.DEFAULT_TIMEOUT,\r\n });\r\n\r\n return Array.isArray(factsResponse) ? factsResponse : [];\r\n } catch (error) {\r\n console.error(\"Error extracting facts:\", error);\r\n return [];\r\n }\r\n }\r\n\r\n /**\r\n * Process facts in batches to avoid overwhelming the database\r\n */\r\n private async processFactsInBatches(\r\n factsResponse: ExtractedFact[],\r\n ): Promise<void> {\r\n for (let i = 0; i < factsResponse.length; i += this.batchSize) {\r\n const batch = factsResponse.slice(i, i + this.batchSize);\r\n\r\n const storePromises = batch.map(async (fact) => {\r\n try {\r\n if (fact && typeof fact === \"object\" && fact.content) {\r\n return await this.storeFact(\r\n fact.content,\r\n fact.importance || 1,\r\n fact.category || MEMORY_TYPES.CONVERSATION,\r\n fact.metadata || {},\r\n );\r\n } else if (typeof fact === \"string\" && fact.trim()) {\r\n return await this.storeFact(\r\n fact.trim(),\r\n 1,\r\n MEMORY_TYPES.CONVERSATION,\r\n );\r\n }\r\n } catch (error) {\r\n console.error(\"Error storing individual fact:\", error);\r\n return null;\r\n }\r\n });\r\n\r\n await Promise.allSettled(storePromises);\r\n\r\n // Small delay between batches\r\n if (i + this.batchSize < factsResponse.length) {\r\n await new Promise((resolve) => setTimeout(resolve, 100));\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Clear cache utility\r\n */\r\n clearCache(): void {\r\n this.memoryCache.clear();\r\n }\r\n\r\n /**\r\n * Get memory context with better formatting and relevance\r\n */\r\n async getMemoryContext(\r\n query: string = \"\",\r\n includeRecent: boolean = true,\r\n options: MemoryContextOptions = {},\r\n ): Promise<string> {\r\n const memories = await this.recallRelevantMemories(\r\n query,\r\n options.maxMemories || 8,\r\n { minImportance: options.minImportance || 0.5 },\r\n );\r\n\r\n if (memories.length === 0 && this.recentMessages.length === 0) {\r\n return \"\";\r\n }\r\n\r\n let context = \"\";\r\n\r\n // Add relevant memories\r\n if (memories.length > 0) {\r\n context += \"What I remember about you:\\n\";\r\n memories\r\n .filter((memory) => memory.importance > (options.minImportance || 0.5))\r\n .forEach((memory) => {\r\n const importanceIndicator =\r\n memory.importance >= 8\r\n ? \"\\u2b50\"\r\n : memory.importance >= 5\r\n ? \"\\u2022\"\r\n : \"-\";\r\n context += `${importanceIndicator} ${memory.content}\\n`;\r\n });\r\n }\r\n\r\n // Add recent conversation if requested\r\n if (includeRecent && this.recentMessages.length > 0) {\r\n context += context\r\n ? \"\\nRecent conversation:\\n\"\r\n : \"Recent conversation:\\n\";\r\n this.recentMessages.slice(-3).forEach((msg) => {\r\n const truncatedContent =\r\n msg.content.length > 100\r\n ? msg.content.substring(0, 100) + \"...\"\r\n : msg.content;\r\n context += `${msg.role}: ${truncatedContent}\\n`;\r\n });\r\n }\r\n\r\n return context;\r\n }\r\n\r\n /**\r\n * Get performance metrics\r\n */\r\n getMetrics(): MemoryMetrics {\r\n return {\r\n ...this.metrics,\r\n cacheSize: this.memoryCache.size,\r\n recentMessagesCount: this.recentMessages.length,\r\n isProcessing: this.isProcessing,\r\n };\r\n }\r\n}\r\n","// @ts-nocheck\r\n/**\r\n * Memory Agent\r\n *\r\n * Enhanced Memory Agent with:\r\n * - Rate limiting\r\n * - Multiple LLM provider support\r\n * - Health monitoring\r\n * - Conversation management\r\n * - Memory analytics\r\n */\r\n\r\nimport { SimpleMemory } from \"./storage/in-memory-storage\";\r\nimport type { IMemoryStorage } from \"./storage/storage-interface\";\r\nimport type { MemoryType, MemorySearchOptions } from \"./types\";\r\nimport { MEMORY_CONFIG, MEMORY_TYPES } from \"./types\";\r\n\r\n/**\r\n * LLM provider interface\r\n */\r\ninterface LLMProvider {\r\n invoke: (prompt: string) => Promise<{ content: string; tokensUsed: number }>;\r\n}\r\n\r\n/**\r\n * Chat options\r\n */\r\ninterface ChatOptions {\r\n provider?: string;\r\n apiKey?: string;\r\n model?: string;\r\n temperature?: number;\r\n systemPrompt?: string;\r\n includeHistory?: boolean;\r\n maxMemories?: number;\r\n minImportance?: number;\r\n}\r\n\r\n/**\r\n * Chat response\r\n */\r\ninterface ChatResponse {\r\n content?: string;\r\n memoryContext?: string;\r\n success: boolean;\r\n tokensUsed?: number;\r\n responseTime?: number;\r\n sessionId?: string;\r\n timestamp: string;\r\n error?: string;\r\n}\r\n\r\n/**\r\n * Agent analytics\r\n */\r\ninterface AgentAnalytics {\r\n totalMessages: number;\r\n totalTokens: number;\r\n averageResponseTime: number;\r\n errorCount: number;\r\n sessionStartTime: number;\r\n}\r\n\r\n/**\r\n * Rate limit configuration\r\n */\r\ninterface RateLimitConfig {\r\n requests: number;\r\n windowMs: number;\r\n}\r\n\r\n/**\r\n * Agent options\r\n */\r\nexport interface MemoryAgentOptions {\r\n memoryOptions?: any;\r\n defaultProvider?: string;\r\n defaultApiKey?: string;\r\n defaultModel?: string;\r\n rateLimit?: RateLimitConfig;\r\n providers?: Record<string, (apiKey: string, model: string, temperature: number) => LLMProvider>;\r\n}\r\n\r\nexport class MemoryAgent {\r\n private memory: SimpleMemory;\r\n private defaultProvider: string;\r\n private defaultApiKey?: string;\r\n private defaultModel?: string;\r\n private rateLimiter: Map<string, number[]>;\r\n private rateLimitConfig: RateLimitConfig;\r\n private providers: Record<string, (apiKey: string, model: string, temperature: number) => LLMProvider>;\r\n private sessionId: string;\r\n private conversationHistory: Array<{ role: string; content: string }>;\r\n private analytics: AgentAnalytics;\r\n private userId: string;\r\n\r\n /**\r\n * Initialize memory agent\r\n */\r\n constructor(userId: string, storage: IMemoryStorage, options: MemoryAgentOptions = {}) {\r\n if (!userId || !storage) {\r\n throw new Error(\"userId and storage are required parameters\");\r\n }\r\n\r\n this.userId = userId;\r\n this.memory = new SimpleMemory(userId, storage, options.memoryOptions || {});\r\n this.defaultProvider = options.defaultProvider || \"groq\";\r\n this.defaultApiKey = options.defaultApiKey;\r\n this.defaultModel = options.defaultModel;\r\n\r\n // Rate limiting\r\n this.rateLimiter = new Map();\r\n this.rateLimitConfig = {\r\n ...MEMORY_CONFIG.DEFAULT_RATE_LIMIT,\r\n ...options.rateLimit,\r\n };\r\n\r\n // LLM providers\r\n this.providers = options.providers || this.getDefaultProviders();\r\n\r\n // Session management\r\n this.sessionId = this.generateSessionId();\r\n this.conversationHistory = [];\r\n\r\n // Analytics\r\n this.analytics = {\r\n totalMessages: 0,\r\n totalTokens: 0,\r\n averageResponseTime: 0,\r\n errorCount: 0,\r\n sessionStartTime: Date.now(),\r\n };\r\n }\r\n\r\n /**\r\n * Get default LLM providers\r\n */\r\n private getDefaultProviders(): Record<string, (apiKey: string, model: string, temperature: number) => LLMProvider> {\r\n return {\r\n groq: (apiKey, model, temperature) => ({\r\n invoke: async (prompt) => {\r\n // Implementation would go here\r\n return { content: \"Default response\", tokensUsed: 0 };\r\n },\r\n }),\r\n openai: (apiKey, model, temperature) => ({\r\n invoke: async (prompt) => {\r\n // Implementation would go here\r\n return { content: \"Default response\", tokensUsed: 0 };\r\n },\r\n }),\r\n };\r\n }\r\n\r\n /**\r\n * Generate unique session ID\r\n */\r\n private generateSessionId(): string {\r\n return `${this.userId}-${Date.now()}-${Math.random().toString(36).substr(2, 9)}`;\r\n }\r\n\r\n /**\r\n * Rate limiting check with sliding window\r\n */\r\n private checkRateLimit(key: string, maxRequests?: number, windowMs?: number): boolean {\r\n const config = {\r\n maxRequests: maxRequests || this.rateLimitConfig.requests,\r\n windowMs: windowMs || this.rateLimitConfig.windowMs,\r\n };\r\n\r\n const now = Date.now();\r\n const requests = this.rateLimiter.get(key) || [];\r\n\r\n // Remove old requests outside the window\r\n const validRequests = requests.filter(\r\n (time) => now - time < config.windowMs,\r\n );\r\n\r\n if (validRequests.length >= config.maxRequests) {\r\n return false;\r\n }\r\n\r\n validRequests.push(now);\r\n this.rateLimiter.set(key, validRequests);\r\n return true;\r\n }\r\n\r\n /**\r\n * Main chat method with comprehensive error handling\r\n */\r\n async chat(message: string, options: ChatOptions = {}): Promise<ChatResponse> {\r\n const startTime = Date.now();\r\n\r\n // Input validation\r\n if (!message || typeof message !== \"string\" || message.trim().length === 0) {\r\n return {\r\n error: \"Message cannot be empty\",\r\n success: false,\r\n timestamp: new Date().toISOString(),\r\n };\r\n }\r\n\r\n // Rate limiting\r\n const rateLimitKey = `chat-${this.userId}`;\r\n if (!this.checkRateLimit(rateLimitKey)) {\r\n return {\r\n error: \"Rate limit exceeded. Please try again later.\",\r\n success: false,\r\n timestamp: new Date().toISOString(),\r\n };\r\n }\r\n\r\n try {\r\n // Add user message to memory\r\n this.memory.addMessage(\"user\", message, {\r\n sessionId: this.sessionId,\r\n timestamp: Date.now(),\r\n });\r\n\r\n // Get memory context\r\n const memoryContext = await this.memory.getMemoryContext(message, true, {\r\n maxMemories: options.maxMemories || 8,\r\n minImportance: options.minImportance || 0.5,\r\n });\r\n\r\n // Build enhanced prompt\r\n const prompt = this.buildPrompt(message, memoryContext, options);\r\n\r\n // Generate response\r\n const response = await this.generateResponse(prompt, options);\r\n\r\n if (!response || !response.content) {\r\n throw new Error(\"Invalid response from LLM\");\r\n }\r\n\r\n // Add response to memory\r\n this.memory.addMessage(\"assistant\", response.content, {\r\n sessionId: this.sessionId,\r\n tokensUsed: response.tokensUsed,\r\n timestamp: Date.now(),\r\n });\r\n\r\n // Update analytics\r\n this.updateAnalytics(response.tokensUsed, Date.now() - startTime);\r\n\r\n return {\r\n content: response.content,\r\n memoryContext: memoryContext,\r\n success: true,\r\n tokensUsed: response.tokensUsed || 0,\r\n responseTime: Date.now() - startTime,\r\n sessionId: this.sessionId,\r\n timestamp: new Date().toISOString(),\r\n };\r\n } catch (error) {\r\n console.error(\"Chat error:\", error);\r\n this.analytics.errorCount++;\r\n\r\n return {\r\n error: error.message || \"An unexpected error occurred\",\r\n success: false,\r\n timestamp: new Date().toISOString(),\r\n };\r\n }\r\n }\r\n\r\n /**\r\n * Generate LLM response with timeout and error handling\r\n */\r\n private async generateResponse(prompt: string, options: ChatOptions): Promise<{ content: string; tokensUsed: number }> {\r\n const provider = options.provider || this.defaultProvider;\r\n const apiKey = options.apiKey || this.defaultApiKey;\r\n const model = options.model || this.defaultModel;\r\n const temperature = options.temperature || 0.7;\r\n\r\n if (!this.providers || !this.providers[provider]) {\r\n throw new Error(`Provider ${provider} not available`);\r\n }\r\n\r\n const llm = this.providers[provider](apiKey || \"\", model || \"\", temperature);\r\n\r\n // Add timeout to LLM call\r\n const timeoutPromise = new Promise<never>((_, reject) =>\r\n setTimeout(\r\n () => reject(new Error(\"LLM request timeout\")),\r\n MEMORY_CONFIG.DEFAULT_TIMEOUT,\r\n ),\r\n );\r\n\r\n return await Promise.race([llm.invoke(prompt), timeoutPromise]);\r\n }\r\n\r\n /**\r\n * Build enhanced prompt with context\r\n */\r\n private buildPrompt(message: string, memoryContext: string, options: ChatOptions): string {\r\n let prompt = \"\";\r\n\r\n // Add system context if provided\r\n if (options.systemPrompt) {\r\n prompt += `${options.systemPrompt}\\n\\n`;\r\n }\r\n\r\n // Add memory context\r\n if (memoryContext) {\r\n prompt += `${memoryContext}\\n\\n`;\r\n }\r\n\r\n // Add conversation history if requested\r\n if (options.includeHistory && this.conversationHistory.length > 0) {\r\n prompt += \"Recent conversation history:\\n\";\r\n this.conversationHistory.slice(-5).forEach((msg) => {\r\n prompt += `${msg.role}: ${msg.content}\\n`;\r\n });\r\n prompt += \"\\n\";\r\n }\r\n\r\n prompt += `User: ${message}\\n\\nAssistant:`;\r\n\r\n return prompt;\r\n }\r\n\r\n /**\r\n * Update analytics\r\n */\r\n private updateAnalytics(tokensUsed: number, responseTime: number): void {\r\n this.analytics.totalMessages++;\r\n this.analytics.totalTokens += tokensUsed || 0;\r\n this.analytics.averageResponseTime =\r\n (this.analytics.averageResponseTime * (this.analytics.totalMessages - 1) +\r\n responseTime) /\r\n this.analytics.totalMessages;\r\n }\r\n\r\n /**\r\n * Remember a fact manually\r\n */\r\n async remember(\r\n fact: string,\r\n importance: number = 1,\r\n category: MemoryType = MEMORY_TYPES.MANUAL,\r\n metadata: Record<string, any> = {},\r\n ): Promise<string> {\r\n try {\r\n return await this.memory.storeFact(fact, importance, category, {\r\n ...metadata,\r\n source: \"manual\",\r\n timestamp: Date.now(),\r\n });\r\n } catch (error) {\r\n console.error(\"Error remembering fact:\", error);\r\n throw error;\r\n }\r\n }\r\n\r\n /**\r\n * Get memories with filtering\r\n */\r\n async getMemories(query: string = \"\", limit: number = 10, options: MemorySearchOptions = {}): Promise<any[]> {\r\n return await this.memory.recallRelevantMemories(query, limit, options);\r\n }\r\n\r\n /**\r\n * Force store summary of current conversation\r\n */\r\n async forceStoreSummary(): Promise<boolean> {\r\n return await this.memory.summarizeAndStore();\r\n }\r\n\r\n /**\r\n * Health check for the agent\r\n */\r\n async healthCheck(): Promise<any> {\r\n try {\r\n const memoryMetrics = this.memory.getMetrics();\r\n const rateLimitStatus = this.checkRateLimit(\"health-check\", 1, 1000);\r\n\r\n return {\r\n status: \"healthy\",\r\n memory: memoryMetrics,\r\n rateLimit: rateLimitStatus,\r\n analytics: this.analytics,\r\n sessionId: this.sessionId,\r\n uptime: Date.now() - this.analytics.sessionStartTime,\r\n timestamp: new Date().toISOString(),\r\n };\r\n } catch (error) {\r\n return {\r\n status: \"unhealthy\",\r\n error: error.message,\r\n timestamp: new Date().toISOString(),\r\n };\r\n }\r\n }\r\n\r\n /**\r\n * Get analytics and performance metrics\r\n */\r\n getAnalytics(): any {\r\n return {\r\n ...this.analytics,\r\n memory: this.memory.getMetrics(),\r\n sessionId: this.sessionId,\r\n uptime: Date.now() - this.analytics.sessionStartTime,\r\n };\r\n }\r\n\r\n /**\r\n * Reset session and clear conversation history\r\n */\r\n resetSession(): void {\r\n this.sessionId = this.generateSessionId();\r\n this.conversationHistory = [];\r\n this.analytics.sessionStartTime = Date.now();\r\n }\r\n}\r\n","/**\r\n * Drizzle Storage Adapter\r\n *\r\n * Implementation of IMemoryStorage using Drizzle ORM\r\n */\r\n\r\nimport { sql, eq, and, desc, or, like } from \"drizzle-orm\";\r\nimport type { IMemoryStorage } from \"./storage-interface\";\r\nimport type {\r\n MemoryRecord,\r\n MemoryType,\r\n MemorySearchOptions,\r\n MemoryUpdate,\r\n} from \"../types\";\r\n\r\n/**\r\n * The Drizzle table passed to {@link DrizzleMemoryStorage} must expose these\r\n * columns (see {@link createMemorySchema} for the expected shape).\r\n */\r\nexport interface MemoryTable {\r\n id: any;\r\n user_id: any;\r\n memory_type: any;\r\n content: any;\r\n importance: any;\r\n access_count: any;\r\n metadata: any;\r\n created_at: any;\r\n updated_at: any;\r\n}\r\n\r\n/**\r\n * Drizzle-based storage adapter.\r\n *\r\n * Pass the Drizzle database instance and the memory table object defined in\r\n * your schema (not a table-name string) so queries reference real columns:\r\n *\r\n * ```ts\r\n * import { sqliteTable, text, integer, real } from \"drizzle-orm/sqlite-core\";\r\n * const userMemories = sqliteTable(\"user_memories\", { ... });\r\n * const storage = new DrizzleMemoryStorage(db, userMemories);\r\n * ```\r\n */\r\nexport class DrizzleMemoryStorage implements IMemoryStorage {\r\n private db: any;\r\n private table: MemoryTable & Record<string, any>;\r\n\r\n constructor(db: any, table: MemoryTable & Record<string, any>) {\r\n this.db = db;\r\n this.table = table;\r\n }\r\n\r\n /**\r\n * Insert a new memory record\r\n */\r\n async insertMemory(\r\n userId: string,\r\n memoryType: MemoryType,\r\n content: string,\r\n importance: number,\r\n metadata?: Record<string, any>,\r\n ): Promise<string> {\r\n const result = await this.db\r\n .insert(this.table)\r\n .values({\r\n user_id: userId,\r\n memory_type: memoryType,\r\n content: content,\r\n importance: importance,\r\n access_count: 0,\r\n metadata: metadata || {},\r\n created_at: new Date(),\r\n updated_at: new Date(),\r\n })\r\n .returning({ id: this.table.id });\r\n\r\n return result[0]?.id;\r\n }\r\n\r\n /**\r\n * Find memories by user ID and optional filters\r\n */\r\n async findMemories(\r\n userId: string,\r\n query?: string,\r\n limit: number = 10,\r\n options: MemorySearchOptions = {},\r\n ): Promise<MemoryRecord[]> {\r\n const conditions = [eq(this.table.user_id, userId)];\r\n\r\n if (query && query.trim()) {\r\n conditions.push(like(this.table.content, `%${query}%`));\r\n }\r\n\r\n if (options.memoryType) {\r\n conditions.push(eq(this.table.memory_type, options.memoryType));\r\n }\r\n\r\n const results = await this.db\r\n .select({\r\n id: this.table.id,\r\n user_id: this.table.user_id,\r\n memory_type: this.table.memory_type,\r\n content: this.table.content,\r\n importance: this.table.importance,\r\n access_count: this.table.access_count,\r\n metadata: this.table.metadata,\r\n created_at: this.table.created_at,\r\n updated_at: this.table.updated_at,\r\n })\r\n .from(this.table)\r\n .where(and(...conditions))\r\n .orderBy(\r\n desc(this.table.importance),\r\n desc(this.table.access_count),\r\n desc(this.table.updated_at),\r\n )\r\n .limit(Math.min(limit, 50)); // Cap at 50 for performance\r\n\r\n return results as MemoryRecord[];\r\n }\r\n\r\n /**\r\n * Find similar memories based on content\r\n */\r\n async findSimilarMemories(\r\n userId: string,\r\n content: string,\r\n limit: number = 5,\r\n ): Promise<MemoryRecord[]> {\r\n // Simple similarity check using keywords\r\n const words = content\r\n .toLowerCase()\r\n .split(/\\s+/)\r\n .filter((w) => w.length > 2);\r\n const searchTerms = words.slice(0, 3); // Use first 3 words\r\n\r\n if (searchTerms.length === 0) {\r\n return [];\r\n }\r\n\r\n const conditions = searchTerms.map((term) =>\r\n like(this.table.content, `%${term}%`),\r\n );\r\n\r\n const results = await this.db\r\n .select()\r\n .from(this.table)\r\n .where(and(eq(this.table.user_id, userId), or(...conditions)))\r\n .orderBy(desc(this.table.importance), desc(this.table.updated_at))\r\n .limit(limit);\r\n\r\n return results as MemoryRecord[];\r\n }\r\n\r\n /**\r\n * Update a memory record\r\n */\r\n async updateMemory(id: string, updates: MemoryUpdate): Promise<void> {\r\n const updateData: any = {};\r\n\r\n if (updates.importance !== undefined) {\r\n updateData.importance = updates.importance;\r\n }\r\n\r\n if (updates.access_count !== undefined) {\r\n if (typeof updates.access_count === \"object\" && updates.access_count.increment) {\r\n updateData.access_count = sql`${this.table.access_count} + ${updates.access_count.increment}`;\r\n } else {\r\n updateData.access_count = updates.access_count;\r\n }\r\n }\r\n\r\n if (updates.updated_at !== undefined) {\r\n updateData.updated_at = updates.updated_at;\r\n }\r\n\r\n if (updates.metadata !== undefined) {\r\n updateData.metadata = updates.metadata;\r\n }\r\n\r\n await this.db.update(this.table).set(updateData).where(eq(this.table.id, id));\r\n }\r\n\r\n /**\r\n * Delete a memory record\r\n */\r\n async deleteMemory(id: string): Promise<void> {\r\n await this.db.delete(this.table).where(eq(this.table.id, id));\r\n }\r\n\r\n /**\r\n * Get memory by ID\r\n */\r\n async getMemoryById(id: string): Promise<MemoryRecord | null> {\r\n const results = await this.db\r\n .select()\r\n .from(this.table)\r\n .where(eq(this.table.id, id))\r\n .limit(1);\r\n\r\n return (results[0] as MemoryRecord) || null;\r\n }\r\n\r\n /**\r\n * Batch update memories\r\n */\r\n async batchUpdateMemories(\r\n updates: Array<{ id: string; updates: MemoryUpdate }>,\r\n ): Promise<void> {\r\n const promises = updates.map(({ id, updates: updateData }) =>\r\n this.updateMemory(id, updateData),\r\n );\r\n await Promise.allSettled(promises);\r\n }\r\n}\r\n\r\n/**\r\n * Database schema for memory system\r\n * This is kept here for reference but should be managed by your migration system\r\n */\r\nexport function createMemorySchema(db: any) {\r\n return {\r\n user_memories: {\r\n id: \"uuid\",\r\n user_id: \"string\",\r\n memory_type: \"string\",\r\n content: \"text\",\r\n importance: \"number\",\r\n access_count: \"number\",\r\n metadata: \"jsonb\",\r\n created_at: \"timestamp\",\r\n updated_at: \"timestamp\",\r\n },\r\n };\r\n}\r\n","/**\r\n * @fileoverview Mastra Memory Integration for Cloudflare Workers\r\n *\r\n * Integrates Mastra's memory system with Cloudflare Workers environment.\r\n * Provides persistent conversation memory using D1, KV, or Durable Objects.\r\n *\r\n * Features:\r\n * - Multi-storage backend support (D1, KV, Durable Objects)\r\n * - Thread-based conversation management\r\n * - Resource scoping for multi-user scenarios\r\n * - Cloudflare Workers optimized (edge-ready)\r\n * - Compatible with existing MemoryAgent architecture\r\n *\r\n * @see https://docs.mastra.ai/core/memory\r\n */\r\n\r\nimport { Mastra } from '@mastra/core';\r\nimport { Agent } from '@mastra/core/agent';\r\nimport type { D1Database, KVNamespace } from '@cloudflare/workers-types';\r\nimport type { IMemoryStorage } from './storage/storage-interface';\r\nimport type { MemoryRecord, MemoryType, MemorySearchOptions, MemoryUpdate } from './types';\r\n\r\n/**\r\n * Cloudflare Workers environment bindings\r\n */\r\nexport interface CloudflareEnv {\r\n DB?: D1Database;\r\n KV?: KVNamespace;\r\n OPENAI_API_KEY?: string;\r\n ANTHROPIC_API_KEY?: string;\r\n GROQ_API_KEY?: string;\r\n}\r\n\r\n/**\r\n * Storage backend types for Mastra memory\r\n */\r\nexport type MastraStorageBackend = 'memory' | 'd1' | 'kv';\r\n\r\n/**\r\n * Configuration for Mastra memory integration\r\n */\r\nexport interface MastraMemoryConfig {\r\n /** Storage backend (memory, d1, or kv) */\r\n storage: MastraStorageBackend;\r\n /** Cloudflare environment bindings */\r\n env?: CloudflareEnv;\r\n /** D1 table name (for d1 storage) */\r\n tableName?: string;\r\n /** KV key prefix (for kv storage) */\r\n kvPrefix?: string;\r\n /** Enable debug logging */\r\n debug?: boolean;\r\n}\r\n\r\n/**\r\n * D1-based storage adapter for Mastra Memory\r\n * Implements IMemoryStorage using Cloudflare D1\r\n */\r\nexport class MastraD1MemoryStorage implements IMemoryStorage {\r\n private db: D1Database;\r\n private tableName: string;\r\n\r\n constructor(db: D1Database, tableName: string = 'mastra_memories') {\r\n this.db = db;\r\n this.tableName = tableName;\r\n }\r\n\r\n /**\r\n * Initialize D1 schema for Mastra memory\r\n */\r\n async initSchema(): Promise<void> {\r\n await this.db.exec(`\r\n CREATE TABLE IF NOT EXISTS ${this.tableName} (\r\n id TEXT PRIMARY KEY,\r\n user_id TEXT NOT NULL,\r\n thread_id TEXT NOT NULL,\r\n resource_id TEXT,\r\n memory_type TEXT NOT NULL,\r\n content TEXT NOT NULL,\r\n importance REAL DEFAULT 1.0,\r\n access_count INTEGER DEFAULT 0,\r\n metadata TEXT,\r\n created_at INTEGER NOT NULL,\r\n updated_at INTEGER NOT NULL\r\n );\r\n\r\n CREATE INDEX IF NOT EXISTS idx_user_thread ON ${this.tableName}(user_id, thread_id);\r\n CREATE INDEX IF NOT EXISTS idx_resource ON ${this.tableName}(resource_id);\r\n CREATE INDEX IF NOT EXISTS idx_importance ON ${this.tableName}(importance DESC);\r\n `);\r\n }\r\n\r\n async insertMemory(\r\n userId: string,\r\n memoryType: MemoryType,\r\n content: string,\r\n importance: number,\r\n metadata?: Record<string, any>\r\n ): Promise<string> {\r\n const id = crypto.randomUUID();\r\n const now = Date.now();\r\n\r\n await this.db\r\n .prepare(\r\n `INSERT INTO ${this.tableName}\r\n (id, user_id, thread_id, resource_id, memory_type, content, importance, metadata, created_at, updated_at)\r\n VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`\r\n )\r\n .bind(\r\n id,\r\n userId,\r\n metadata?.thread_id || 'default',\r\n metadata?.resource_id || null,\r\n memoryType,\r\n content,\r\n importance,\r\n JSON.stringify(metadata || {}),\r\n now,\r\n now\r\n )\r\n .run();\r\n\r\n return id;\r\n }\r\n\r\n async findMemories(\r\n userId: string,\r\n query?: string,\r\n limit: number = 10,\r\n options: MemorySearchOptions = {}\r\n ): Promise<MemoryRecord[]> {\r\n let sql = `SELECT * FROM ${this.tableName} WHERE user_id = ?`;\r\n const params: any[] = [userId];\r\n\r\n if (options.memoryType) {\r\n sql += ' AND memory_type = ?';\r\n params.push(options.memoryType);\r\n }\r\n\r\n if (query) {\r\n sql += ' AND content LIKE ?';\r\n params.push(`%${query}%`);\r\n }\r\n\r\n if (options.minImportance !== undefined) {\r\n sql += ' AND importance >= ?';\r\n params.push(options.minImportance);\r\n }\r\n\r\n sql += ' ORDER BY importance DESC, updated_at DESC LIMIT ?';\r\n params.push(limit);\r\n\r\n const result = await this.db.prepare(sql).bind(...params).all();\r\n\r\n return (result.results || []).map((row: any) => ({\r\n id: row.id,\r\n user_id: row.user_id,\r\n memory_type: row.memory_type,\r\n content: row.content,\r\n importance: row.importance,\r\n access_count: row.access_count,\r\n metadata: JSON.parse(row.metadata || '{}'),\r\n created_at: new Date(row.created_at),\r\n updated_at: new Date(row.updated_at),\r\n }));\r\n }\r\n\r\n async findSimilarMemories(\r\n userId: string,\r\n content: string,\r\n limit: number = 5\r\n ): Promise<MemoryRecord[]> {\r\n // Simple keyword-based similarity for D1 (no vector search)\r\n const words = content.toLowerCase().split(/\\s+/).filter(w => w.length > 2);\r\n const searchTerms = words.slice(0, 3);\r\n\r\n if (searchTerms.length === 0) return [];\r\n\r\n const likeConditions = searchTerms.map(() => 'content LIKE ?').join(' OR ');\r\n const params = [userId, ...searchTerms.map(term => `%${term}%`), limit];\r\n\r\n const result = await this.db\r\n .prepare(\r\n `SELECT * FROM ${this.tableName}\r\n WHERE user_id = ? AND (${likeConditions})\r\n ORDER BY importance DESC, updated_at DESC\r\n LIMIT ?`\r\n )\r\n .bind(...params)\r\n .all();\r\n\r\n return (result.results || []).map((row: any) => ({\r\n id: row.id,\r\n user_id: row.user_id,\r\n memory_type: row.memory_type,\r\n content: row.content,\r\n importance: row.importance,\r\n access_count: row.access_count,\r\n metadata: JSON.parse(row.metadata || '{}'),\r\n created_at: new Date(row.created_at),\r\n updated_at: new Date(row.updated_at),\r\n }));\r\n }\r\n\r\n async updateMemory(id: string, updates: MemoryUpdate): Promise<void> {\r\n const fields: string[] = [];\r\n const params: any[] = [];\r\n\r\n if (updates.importance !== undefined) {\r\n fields.push('importance = ?');\r\n params.push(updates.importance);\r\n }\r\n\r\n if (updates.access_count !== undefined) {\r\n if (typeof updates.access_count === 'object' && updates.access_count.increment) {\r\n fields.push('access_count = access_count + ?');\r\n params.push(updates.access_count.increment);\r\n } else {\r\n fields.push('access_count = ?');\r\n params.push(updates.access_count);\r\n }\r\n }\r\n\r\n if (updates.metadata !== undefined) {\r\n fields.push('metadata = ?');\r\n params.push(JSON.stringify(updates.metadata));\r\n }\r\n\r\n fields.push('updated_at = ?');\r\n params.push(Date.now());\r\n params.push(id);\r\n\r\n if (fields.length > 0) {\r\n await this.db\r\n .prepare(`UPDATE ${this.tableName} SET ${fields.join(', ')} WHERE id = ?`)\r\n .bind(...params)\r\n .run();\r\n }\r\n }\r\n\r\n async deleteMemory(id: string): Promise<void> {\r\n await this.db.prepare(`DELETE FROM ${this.tableName} WHERE id = ?`).bind(id).run();\r\n }\r\n\r\n async getMemoryById(id: string): Promise<MemoryRecord | null> {\r\n const result = await this.db\r\n .prepare(`SELECT * FROM ${this.tableName} WHERE id = ?`)\r\n .bind(id)\r\n .first();\r\n\r\n if (!result) return null;\r\n\r\n return {\r\n id: result.id as string,\r\n user_id: result.user_id as string,\r\n memory_type: result.memory_type as MemoryType,\r\n content: result.content as string,\r\n importance: result.importance as number,\r\n access_count: result.access_count as number,\r\n metadata: JSON.parse((result.metadata as string) || '{}'),\r\n created_at: new Date(result.created_at as number),\r\n updated_at: new Date(result.updated_at as number),\r\n };\r\n }\r\n\r\n async batchUpdateMemories(updates: Array<{ id: string; updates: MemoryUpdate }>): Promise<void> {\r\n for (const { id, updates: updateData } of updates) {\r\n await this.updateMemory(id, updateData);\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * KV-based storage adapter for Mastra Memory\r\n * Uses Cloudflare KV for simple key-value storage\r\n */\r\nexport class MastraKVMemoryStorage implements IMemoryStorage {\r\n private kv: KVNamespace;\r\n private prefix: string;\r\n\r\n constructor(kv: KVNamespace, prefix: string = 'mastra:memory:') {\r\n this.kv = kv;\r\n this.prefix = prefix;\r\n }\r\n\r\n private getUserKey(userId: string): string {\r\n return `${this.prefix}user:${userId}`;\r\n }\r\n\r\n private getMemoryKey(id: string): string {\r\n return `${this.prefix}memory:${id}`;\r\n }\r\n\r\n async insertMemory(\r\n userId: string,\r\n memoryType: MemoryType,\r\n content: string,\r\n importance: number,\r\n metadata?: Record<string, any>\r\n ): Promise<string> {\r\n const id = crypto.randomUUID();\r\n const now = Date.now();\r\n\r\n const memory: MemoryRecord = {\r\n id,\r\n user_id: userId,\r\n memory_type: memoryType,\r\n content,\r\n importance,\r\n access_count: 0,\r\n metadata: metadata || {},\r\n created_at: new Date(now),\r\n updated_at: new Date(now),\r\n };\r\n\r\n // Store memory\r\n await this.kv.put(this.getMemoryKey(id), JSON.stringify(memory));\r\n\r\n // Update user's memory list\r\n const userKey = this.getUserKey(userId);\r\n const userMemories = await this.kv.get(userKey, 'json') as string[] || [];\r\n userMemories.push(id);\r\n await this.kv.put(userKey, JSON.stringify(userMemories));\r\n\r\n return id;\r\n }\r\n\r\n async findMemories(\r\n userId: string,\r\n query?: string,\r\n limit: number = 10,\r\n options: MemorySearchOptions = {}\r\n ): Promise<MemoryRecord[]> {\r\n const userKey = this.getUserKey(userId);\r\n const memoryIds = await this.kv.get(userKey, 'json') as string[] || [];\r\n\r\n const memories = await Promise.all(\r\n memoryIds.map(id => this.getMemoryById(id))\r\n );\r\n\r\n let filtered = memories.filter((m): m is MemoryRecord => m !== null);\r\n\r\n if (query) {\r\n filtered = filtered.filter(m =>\r\n m.content.toLowerCase().includes(query.toLowerCase())\r\n );\r\n }\r\n\r\n if (options.memoryType) {\r\n filtered = filtered.filter(m => m.memory_type === options.memoryType);\r\n }\r\n\r\n if (options.minImportance !== undefined) {\r\n filtered = filtered.filter(m => m.importance >= options.minImportance!);\r\n }\r\n\r\n return filtered\r\n .sort((a, b) => b.importance - a.importance || b.updated_at.getTime() - a.updated_at.getTime())\r\n .slice(0, limit);\r\n }\r\n\r\n async findSimilarMemories(\r\n userId: string,\r\n content: string,\r\n limit: number = 5\r\n ): Promise<MemoryRecord[]> {\r\n const words = content.toLowerCase().split(/\\s+/).filter(w => w.length > 2);\r\n const searchTerms = words.slice(0, 3);\r\n\r\n if (searchTerms.length === 0) return [];\r\n\r\n const memories = await this.findMemories(userId, '', 50);\r\n\r\n return memories\r\n .filter(m =>\r\n searchTerms.some(term => m.content.toLowerCase().includes(term))\r\n )\r\n .slice(0, limit);\r\n }\r\n\r\n async updateMemory(id: string, updates: MemoryUpdate): Promise<void> {\r\n const memory = await this.getMemoryById(id);\r\n if (!memory) return;\r\n\r\n if (updates.importance !== undefined) {\r\n memory.importance = updates.importance;\r\n }\r\n\r\n if (updates.access_count !== undefined) {\r\n if (typeof updates.access_count === 'object') {\r\n memory.access_count += updates.access_count.increment ?? 0;\r\n } else {\r\n memory.access_count = updates.access_count;\r\n }\r\n }\r\n\r\n if (updates.metadata !== undefined) {\r\n memory.metadata = { ...memory.metadata, ...updates.metadata };\r\n }\r\n\r\n memory.updated_at = new Date();\r\n\r\n await this.kv.put(this.getMemoryKey(id), JSON.stringify(memory));\r\n }\r\n\r\n async deleteMemory(id: string): Promise<void> {\r\n const memory = await this.getMemoryById(id);\r\n if (!memory) return;\r\n\r\n await this.kv.delete(this.getMemoryKey(id));\r\n\r\n // Remove from user's list\r\n const userKey = this.getUserKey(memory.user_id);\r\n const userMemories = await this.kv.get(userKey, 'json') as string[] || [];\r\n const filtered = userMemories.filter(mId => mId !== id);\r\n await this.kv.put(userKey, JSON.stringify(filtered));\r\n }\r\n\r\n async getMemoryById(id: string): Promise<MemoryRecord | null> {\r\n const data = await this.kv.get(this.getMemoryKey(id), 'json') as any;\r\n if (!data) return null;\r\n\r\n return {\r\n ...data,\r\n created_at: new Date(data.created_at),\r\n updated_at: new Date(data.updated_at),\r\n };\r\n }\r\n\r\n async batchUpdateMemories(updates: Array<{ id: string; updates: MemoryUpdate }>): Promise<void> {\r\n await Promise.all(\r\n updates.map(({ id, updates: updateData }) => this.updateMemory(id, updateData))\r\n );\r\n }\r\n}\r\n\r\n/**\r\n * Mastra Memory Manager for Cloudflare Workers\r\n * Wraps Mastra's memory system with Cloudflare-compatible storage\r\n */\r\nexport class MastraMemoryManager {\r\n private mastra: Mastra | null = null;\r\n private storage: IMemoryStorage;\r\n private config: MastraMemoryConfig;\r\n\r\n constructor(config: MastraMemoryConfig) {\r\n this.config = config;\r\n\r\n // Initialize storage backend\r\n if (config.storage === 'd1' && config.env?.DB) {\r\n this.storage = new MastraD1MemoryStorage(config.env.DB, config.tableName);\r\n } else if (config.storage === 'kv' && config.env?.KV) {\r\n this.storage = new MastraKVMemoryStorage(config.env.KV, config.kvPrefix);\r\n } else {\r\n throw new Error(`Invalid storage configuration: ${config.storage}`);\r\n }\r\n }\r\n\r\n /**\r\n * Initialize Mastra instance with memory\r\n */\r\n async initialize(): Promise<Mastra> {\r\n if (this.mastra) return this.mastra;\r\n\r\n // Memory persistence is handled by this manager's own D1/KV storage\r\n // adapters rather than a Mastra memory backend.\r\n this.mastra = new Mastra({});\r\n\r\n // Initialize D1 schema if needed\r\n if (this.config.storage === 'd1' && this.storage instanceof MastraD1MemoryStorage) {\r\n await this.storage.initSchema();\r\n }\r\n\r\n return this.mastra;\r\n }\r\n\r\n /**\r\n * Get storage instance (for direct access)\r\n */\r\n getStorage(): IMemoryStorage {\r\n return this.storage;\r\n }\r\n\r\n /**\r\n * Create an agent with memory\r\n */\r\n async createAgent(config: {\r\n id: string;\r\n name: string;\r\n instructions: string;\r\n model: any;\r\n tools?: Record<string, any>;\r\n userId: string;\r\n threadId?: string;\r\n resourceId?: string;\r\n }): Promise<Agent> {\r\n const mastra = await this.initialize();\r\n\r\n // Get or create agent with memory\r\n const agent = new Agent({\r\n id: config.id,\r\n name: config.name,\r\n instructions: config.instructions,\r\n model: config.model,\r\n tools: config.tools || {},\r\n });\r\n\r\n // Attach memory context\r\n (agent as any).memoryContext = {\r\n userId: config.userId,\r\n threadId: config.threadId || 'default',\r\n resourceId: config.resourceId,\r\n };\r\n\r\n return agent;\r\n }\r\n\r\n /**\r\n * Store a message in memory\r\n */\r\n async storeMessage(\r\n userId: string,\r\n threadId: string,\r\n role: 'user' | 'assistant',\r\n content: string,\r\n metadata?: Record<string, any>\r\n ): Promise<string> {\r\n return await this.storage.insertMemory(\r\n userId,\r\n 'conversation',\r\n content,\r\n 1.0,\r\n {\r\n thread_id: threadId,\r\n role,\r\n ...metadata,\r\n }\r\n );\r\n }\r\n\r\n /**\r\n * Recall conversation history\r\n */\r\n async recallConversation(\r\n userId: string,\r\n threadId: string,\r\n limit: number = 20\r\n ): Promise<Array<{ role: 'user' | 'assistant'; content: string; timestamp: Date }>> {\r\n const memories = await this.storage.findMemories(\r\n userId,\r\n undefined,\r\n limit,\r\n { memoryType: 'conversation' }\r\n );\r\n\r\n return memories\r\n .filter(m => m.metadata?.thread_id === threadId)\r\n .map(m => ({\r\n role: m.metadata?.role || 'user',\r\n content: m.content,\r\n timestamp: m.created_at,\r\n }))\r\n .sort((a, b) => a.timestamp.getTime() - b.timestamp.getTime());\r\n }\r\n\r\n /**\r\n * Get relevant context for a query\r\n */\r\n async getRelevantContext(\r\n userId: string,\r\n query: string,\r\n limit: number = 5\r\n ): Promise<string> {\r\n const memories = await this.storage.findSimilarMemories(userId, query, limit);\r\n\r\n if (memories.length === 0) return '';\r\n\r\n return memories.map(m => m.content).join('\\n\\n');\r\n }\r\n}\r\n\r\n/**\r\n * Quick helper to create Mastra memory manager for Cloudflare Workers\r\n *\r\n * @example\r\n * ```ts\r\n * const memoryManager = createMastraMemory({\r\n * storage: 'd1',\r\n * env: env, // Cloudflare env bindings\r\n * });\r\n *\r\n * const agent = await memoryManager.createAgent({\r\n * id: 'assistant',\r\n * name: 'AI Assistant',\r\n * instructions: 'Help users with their questions',\r\n * model: openai('gpt-4o'),\r\n * userId: 'user-123',\r\n * threadId: 'conversation-1',\r\n * });\r\n * ```\r\n */\r\nexport function createMastraMemory(config: MastraMemoryConfig): MastraMemoryManager {\r\n return new MastraMemoryManager(config);\r\n}\r\n","/**\r\n * @fileoverview Specialized tools for AI agents to interact with the QwkSearch API.\r\n * Provides web search, content extraction, and AI response generation.\r\n */\r\n\r\n// @ts-nocheck\r\nimport { z } from \"zod\";\r\nimport * as QwkSearch from 'qwksearch-api-client'; // Update this path to match your QwkSearch module location\r\n\r\n// Configuration for QwkSearch API\r\nconst QWKSEARCH_CONFIG = {\r\n baseURL: typeof process !== \"undefined\" && process?.env.QWKSEARCH_URL || 'https://qwksearch.com/api',\r\n apiKey: typeof process !== \"undefined\" && process?.env.QWKSEARCH_API_KEY || null,\r\n};\r\n\r\n/**\r\n * List of tools available for agent usage, including their schemas and implementation.\r\n */\r\nexport const AGENT_TOOLS = [\r\n\r\n {\r\n name: \"web_search\",\r\n description:\r\n \"Search the web for information on any topic using QwkSearch API. Input: search query string and optional category. Returns relevant search results with titles, descriptions, and URLs from 100+ sources via SearXNG metasearch engine.\",\r\n schema: z.object({\r\n query: z.string(),\r\n category: z.enum([\"general\", \"news\", \"videos\", \"images\", \"science\", \"files\", \"it\"]).optional().default(\"general\"),\r\n recency: z.enum([\"none\", \"day\", \"week\", \"month\", \"year\"]).optional().default(\"none\"),\r\n page: z.number().optional().default(1),\r\n language: z.string().optional().default(\"en-US\"),\r\n public: z.boolean().optional().default(false),\r\n timeout: z.number().optional().default(10),\r\n baseURL: z.string().optional(),\r\n apiKey: z.string().optional()\r\n }),\r\n func: async ({ query, category = \"general\", recency = \"none\", page = 1, language = \"en-US\", public: isPublic = false, timeout = 10, baseURL, apiKey }) => {\r\n try {\r\n // Use provided config or fall back to environment/defaults\r\n const baseUrl = baseURL || QWKSEARCH_CONFIG.baseURL;\r\n const headers = apiKey || QWKSEARCH_CONFIG.apiKey ? { 'x-api-key': apiKey || QWKSEARCH_CONFIG.apiKey } : undefined;\r\n\r\n const result = await QwkSearch.searchWeb({\r\n query: {\r\n q: query,\r\n cat: category,\r\n recency: recency,\r\n page: page,\r\n lang: language,\r\n public: isPublic,\r\n timeout: timeout\r\n },\r\n baseUrl: baseUrl,\r\n ...(headers && { headers })\r\n });\r\n\r\n if (!result.data || !result.data.results || result.data.results.length === 0) {\r\n return `No search results found for \"${query}\". Please try a different search term.`;\r\n }\r\n\r\n let resultText = `Web search results for \"${query}\" (${category} category):\\n\\n`;\r\n\r\n result.data.results.forEach((searchResult, index) => {\r\n resultText += `${index + 1}. ${searchResult.title}\\n`;\r\n resultText += ` URL: ${searchResult.url}\\n`;\r\n if (searchResult.domain) {\r\n resultText += ` Domain: ${searchResult.domain}\\n`;\r\n }\r\n if (searchResult.snippet) {\r\n resultText += ` Description: ${searchResult.snippet}\\n`;\r\n }\r\n if (searchResult.engines && searchResult.engines.length > 0) {\r\n resultText += ` Sources: ${searchResult.engines.join(\", \")}\\n`;\r\n }\r\n resultText += `\\n`;\r\n });\r\n\r\n resultText += `Found ${result.data.results.length} results from multiple search engines. This is the complete search information.`;\r\n\r\n return resultText;\r\n } catch (error) {\r\n return `Unable to perform web search for \"${query}\". Error: ${error.message}`;\r\n }\r\n },\r\n },\r\n {\r\n name: \"extract_page\",\r\n description:\r\n \"Extract and summarize content from a web page using QwkSearch API. Supports articles, PDFs, and YouTube videos. Uses Mozilla Readability and Postlight Mercury algorithms with 100+ custom adapters for major sites. Input: URL of the page to extract. Returns structured content with citation information.\",\r\n schema: z.object({\r\n url: z.string().url(),\r\n images: z.boolean().optional().default(true),\r\n links: z.boolean().optional().default(true),\r\n formatting: z.boolean().optional().default(true),\r\n absoluteURLs: z.boolean().optional().default(true),\r\n timeout: z.number().min(1).max(30).optional().default(10),\r\n baseURL: z.string().optional(),\r\n apiKey: z.string().optional()\r\n }),\r\n func: async ({ url, images = true, links = true, formatting = true, absoluteURLs = true, timeout = 10, baseURL, apiKey }) => {\r\n try {\r\n // Use provided config or fall back to environment/defaults\r\n const baseUrl = baseURL || QWKSEARCH_CONFIG.baseURL;\r\n const headers = apiKey || QWKSEARCH_CONFIG.apiKey ? { 'x-api-key': apiKey || QWKSEARCH_CONFIG.apiKey } : undefined;\r\n\r\n const result = await QwkSearch.extractContent({\r\n query: {\r\n url: url,\r\n images: images,\r\n links: links,\r\n formatting: formatting,\r\n absoluteURLs: absoluteURLs,\r\n timeout: timeout\r\n },\r\n baseUrl: baseUrl,\r\n ...(headers && { headers })\r\n });\r\n\r\n if (!result.data) {\r\n return `No content could be extracted from \"${url}\". Please check the URL and try again.`;\r\n }\r\n\r\n const data = result.data;\r\n\r\n let resultText = `Content extracted from: ${data.url || url}\\n\\n`;\r\n\r\n if (data.title) {\r\n resultText += `Title: ${data.title}\\n\\n`;\r\n }\r\n\r\n if (data.author) {\r\n resultText += `Author: ${data.author}\\n`;\r\n if (data.author_cite) {\r\n resultText += `Author (Citation Format): ${data.author_cite}\\n`;\r\n }\r\n if (data.author_type) {\r\n resultText += `Author Type: ${data.author_type}\\n`;\r\n }\r\n }\r\n\r\n if (data.date) {\r\n resultText += `Publication Date: ${data.date}\\n`;\r\n }\r\n\r\n if (data.source) {\r\n resultText += `Source: ${data.source}\\n`;\r\n }\r\n\r\n if (data.word_count) {\r\n resultText += `Word Count: ${data.word_count}\\n`;\r\n }\r\n\r\n if (data.cite) {\r\n resultText += `\\nCitation (APA Format): ${data.cite}\\n`;\r\n }\r\n\r\n if (data.html) {\r\n resultText += `\\nContent:\\n${data.html}\\n\\n`;\r\n }\r\n\r\n resultText += `This is the complete page extraction information.`;\r\n\r\n return resultText;\r\n } catch (error) {\r\n return `Unable to extract content from \"${url}\". Error: ${error.message}`;\r\n }\r\n },\r\n },\r\n {\r\n name: \"generate_ai_response\",\r\n description:\r\n \"Generate AI language model responses using QwkSearch API with various agent templates. Supports multiple providers (Groq, OpenAI, Anthropic, etc.) and agent types for different tasks like summarization, question answering, and content generation.\",\r\n schema: z.object({\r\n provider: z.enum([\"groq\", \"openai\", \"anthropic\", \"together\", \"xai\", \"google\", \"perplexity\", \"cloudflare\"]),\r\n key: z.string().optional(),\r\n agent: z.enum([\r\n \"question\",\r\n \"summarize-bullets\",\r\n \"summarize\",\r\n \"suggest-followups\",\r\n \"answer-cite-sources\",\r\n \"query-resolution\",\r\n \"knowledge-graph-nodes\",\r\n \"summary-longtext\"\r\n ]).optional().default(\"question\"),\r\n model: z.string().optional().default(\"meta-llama/llama-4-maverick-17b-128e-instruct\"),\r\n temperature: z.number().min(0).max(2).optional().default(0.7),\r\n html: z.boolean().optional().default(true),\r\n query: z.string().optional(),\r\n chat_history: z.string().optional(),\r\n article: z.string().optional(),\r\n baseURL: z.string().optional(),\r\n apiKey: z.string().optional()\r\n }),\r\n func: async ({ provider, key, agent = \"question\", model = \"meta-llama/llama-4-maverick-17b-128e-instruct\", temperature = 0.7, html = true, query, chat_history, article, baseURL, apiKey }) => {\r\n try {\r\n // Use provided config or fall back to environment/defaults\r\n const baseUrl = baseURL || QWKSEARCH_CONFIG.baseURL;\r\n const headers = apiKey || QWKSEARCH_CONFIG.apiKey ? { 'x-api-key': apiKey || QWKSEARCH_CONFIG.apiKey } : undefined;\r\n\r\n const requestBody = {\r\n agent,\r\n provider,\r\n model,\r\n html,\r\n temperature\r\n };\r\n\r\n if (key) {\r\n requestBody.key = key;\r\n }\r\n\r\n if (query) {\r\n requestBody.query = query;\r\n }\r\n\r\n if (chat_history) {\r\n requestBody.chat_history = chat_history;\r\n }\r\n\r\n if (article) {\r\n requestBody.article = article;\r\n }\r\n\r\n const result = await QwkSearch.writeLanguage({\r\n body: requestBody,\r\n baseUrl: baseUrl,\r\n ...(headers && { headers })\r\n });\r\n\r\n if (!result.data) {\r\n return `No response generated. Please check your input parameters and try again.`;\r\n }\r\n\r\n let resultText = `AI Response (${agent} agent, ${provider} provider):\\n\\n`;\r\n\r\n if (result.data.content) {\r\n resultText += result.data.content;\r\n }\r\n\r\n if (result.data.extract) {\r\n resultText += `\\n\\nStructured Extract:\\n${JSON.stringify(result.data.extract, null, 2)}`;\r\n }\r\n\r\n resultText += `\\n\\nThis is the complete AI-generated response.`;\r\n\r\n return resultText;\r\n } catch (error) {\r\n return `Unable to generate AI response. Error: ${error.message}`;\r\n }\r\n },\r\n },\r\n {\r\n name: \"render_page_with_javascript\",\r\n description:\r\n \"Render a web page with JavaScript execution using Cloudflare Browser Rendering. Use this for JavaScript-heavy sites (SPAs, React apps), pages behind bot protection (Cloudflare, reCAPTCHA), or when extract_page fails. Returns fully rendered HTML with JavaScript executed. Slower but more complete than extract_page.\",\r\n schema: z.object({\r\n url: z.string().url(),\r\n blockImages: z.boolean().optional().default(true),\r\n wait: z.number().min(0).max(10000).optional().default(0),\r\n timeout: z.number().min(1000).max(60000).optional().default(30000),\r\n waitUntil: z.enum([\"domcontentloaded\", \"load\", \"networkidle0\", \"networkidle2\"]).optional().default(\"networkidle2\"),\r\n bypassCaptcha: z.boolean().optional().default(true),\r\n sessionId: z.string().optional().default(\"default\"),\r\n format: z.enum([\"html\", \"json\"]).optional().default(\"html\"),\r\n scraperUrl: z.string().optional(),\r\n scraperApiKey: z.string().optional()\r\n }),\r\n func: async ({ url, blockImages = true, wait = 0, timeout = 30000, waitUntil = \"networkidle2\", bypassCaptcha = true, sessionId = \"default\", format = \"html\", scraperUrl, scraperApiKey }) => {\r\n try {\r\n const scraperEndpoint = scraperUrl || (typeof process !== \"undefined\" && process?.env?.SCRAPER_URL) || 'https://scraper.qwksearch.workers.dev';\r\n const apiKey = scraperApiKey || (typeof process !== \"undefined\" && process?.env?.SCRAPER_API_KEY);\r\n\r\n const requestUrl = new URL('/api/render', scraperEndpoint);\r\n\r\n const body = {\r\n url,\r\n blockImages,\r\n wait,\r\n timeout,\r\n waitUntil,\r\n bypassCaptcha,\r\n sessionId,\r\n format\r\n };\r\n\r\n const headers: Record<string, string> = {\r\n 'Content-Type': 'application/json',\r\n };\r\n\r\n if (apiKey) {\r\n headers['Authorization'] = `Bearer ${apiKey}`;\r\n }\r\n\r\n const response = await fetch(requestUrl.toString(), {\r\n method: 'POST',\r\n headers,\r\n body: JSON.stringify(body),\r\n });\r\n\r\n if (!response.ok) {\r\n const errorText = await response.text();\r\n return `Failed to render page: ${errorText}`;\r\n }\r\n\r\n if (format === 'json') {\r\n const data = await response.json();\r\n let resultText = `Page rendered successfully: ${data.url}\\n\\n`;\r\n if (data.title) {\r\n resultText += `Title: ${data.title}\\n`;\r\n }\r\n resultText += `Load Time: ${data.loadTime}ms\\n`;\r\n if (data.challengeBypassed) {\r\n resultText += `Challenge Bypassed: Yes (${data.retryCount} retries)\\n`;\r\n }\r\n resultText += `\\nRendered HTML Content:\\n${data.html}\\n\\n`;\r\n resultText += `This is the complete rendered page content.`;\r\n return resultText;\r\n }\r\n\r\n const html = await response.text();\r\n return `Page rendered successfully.\\n\\nHTML Content:\\n${html}`;\r\n } catch (error) {\r\n return `Unable to render page \"${url}\". Error: ${error.message}`;\r\n }\r\n },\r\n },\r\n];","/**\r\n * @module agent-toolkit/utils/outputParser\r\n * @description Parsers that extract values from XML-tagged sections of LLM\r\n * output (e.g. `<links>...</links>`, `<question>...</question>`).\r\n */\r\n\r\nconst LIST_MARKER_REGEX = /^(\\s*(-|\\*|\\d+\\.\\s|\\d+\\)\\s|•)\\s*)+/;\r\n\r\ninterface LineListOutputParserArgs {\r\n key?: string;\r\n}\r\n\r\nexport class LineListOutputParser {\r\n private key = \"questions\";\r\n\r\n constructor(args?: LineListOutputParserArgs) {\r\n this.key = args?.key ?? this.key;\r\n }\r\n\r\n async parse(text: string): Promise<string[]> {\r\n text = text.trim() || \"\";\r\n\r\n const startKeyIndex = text.indexOf(`<${this.key}>`);\r\n const endKeyIndex = text.indexOf(`</${this.key}>`);\r\n\r\n if (startKeyIndex === -1 || endKeyIndex === -1) {\r\n return [];\r\n }\r\n\r\n const questionsStartIndex = startKeyIndex + `<${this.key}>`.length;\r\n const lines = text\r\n .slice(questionsStartIndex, endKeyIndex)\r\n .trim()\r\n .split(\"\\n\")\r\n .filter((line) => line.trim() !== \"\")\r\n .map((line) => line.replace(LIST_MARKER_REGEX, \"\"));\r\n\r\n return lines;\r\n }\r\n}\r\n\r\ninterface LineOutputParserArgs {\r\n key?: string;\r\n}\r\n\r\nexport class LineOutputParser {\r\n private key = \"questions\";\r\n\r\n constructor(args?: LineOutputParserArgs) {\r\n this.key = args?.key ?? this.key;\r\n }\r\n\r\n async parse(text: string): Promise<string | undefined> {\r\n text = text.trim() || \"\";\r\n\r\n const startKeyIndex = text.indexOf(`<${this.key}>`);\r\n const endKeyIndex = text.indexOf(`</${this.key}>`);\r\n\r\n if (startKeyIndex === -1 || endKeyIndex === -1) {\r\n return undefined;\r\n }\r\n\r\n const questionsStartIndex = startKeyIndex + `<${this.key}>`.length;\r\n const line = text\r\n .slice(questionsStartIndex, endKeyIndex)\r\n .trim()\r\n .replace(LIST_MARKER_REGEX, \"\");\r\n\r\n return line;\r\n }\r\n}\r\n\r\nexport default LineOutputParser;\r\n","/**\n * Chat history formatting utilities\n */\n\ntype ChatHistoryMessage = {\n content?: unknown;\n role?: string;\n type?: string;\n};\n\nexport const formatChatHistoryAsString = (history: ChatHistoryMessage[]) => {\n return history\n .map(\n (message) =>\n `${message.role === 'assistant' || message.type === 'ai' ? 'AI' : 'User'}: ${String(message.content ?? '')}`,\n )\n .join('\\n');\n};\n","/**\r\n * @module research/search/doc-utils\r\n * @description Document utilities: fallback docs, reranking, and formatting.\r\n */\r\nimport type { Document } from \"./document\";\r\n\r\nexport interface R2CredentialsInput {\r\n accountId: string;\r\n accessKeyId: string;\r\n secretAccessKey: string;\r\n bucket: string;\r\n}\r\n\r\nexport function buildFallbackDocs(query: string): Document[] {\r\n const trimmedQuery = (query || \"\").trim();\r\n const searchQuery = trimmedQuery.length > 0 ? trimmedQuery : \"web search\";\r\n const fallbackUrl = `https://www.google.com/search?q=${encodeURIComponent(searchQuery)}`;\r\n\r\n return [\r\n {\r\n pageContent:\r\n \"No indexed sources were returned by the configured search providers for this query.\",\r\n metadata: {\r\n title: `Search results for: ${searchQuery}`,\r\n url: fallbackUrl,\r\n source: \"Google Search\",\r\n },\r\n },\r\n ];\r\n}\r\n\r\nexport function normalizeSourcesOutput(output: unknown, query: string): Document[] {\r\n if (Array.isArray(output) && output.length > 0) {\r\n return output as Document[];\r\n }\r\n return buildFallbackDocs(query);\r\n}\r\n\r\n/**\r\n * Resolves an uploaded fileId to its extracted `{ title, content }` payload.\r\n * Hosts register a loader (e.g. reading the native R2 binding) so the search\r\n * pipeline does not depend on filesystem or credential-based access.\r\n */\r\nexport type UploadFileLoader = (\r\n fileId: string,\r\n) => Promise<{ title: string; content: string } | null>;\r\n\r\nlet uploadFileLoader: UploadFileLoader | null = null;\r\n\r\n/**\r\n * Registers the loader used by {@link rerankDocs} to resolve uploaded\r\n * fileIds to extracted content. The registered loader takes precedence over\r\n * the S3-credentials fallback.\r\n */\r\nexport function registerUploadFileLoader(loader: UploadFileLoader): void {\r\n uploadFileLoader = loader;\r\n}\r\n\r\nasync function downloadExtractedContent(fileId: string, r2Credentials: R2CredentialsInput): Promise<{ title: string; content: string } | null> {\r\n try {\r\n const { manageStorage } = await import(\"manage-storage\");\r\n const config = {\r\n provider: \"cloudflare\" as const,\r\n BUCKET_NAME: r2Credentials.bucket,\r\n ACCESS_KEY_ID: r2Credentials.accessKeyId,\r\n SECRET_ACCESS_KEY: r2Credentials.secretAccessKey,\r\n BUCKET_URL: `https://${r2Credentials.accountId}.r2.cloudflarestorage.com`,\r\n };\r\n const extractedKey = `${fileId}-extracted.json`;\r\n const data = await manageStorage(\"download\", { ...config, key: extractedKey });\r\n const parsed = JSON.parse(data);\r\n return { title: parsed.title || \"Uploaded Document\", content: parsed.content || \"\" };\r\n } catch (error) {\r\n console.error(`[rerankDocs] Failed to download extracted content for fileId ${fileId}:`, error);\r\n return null;\r\n }\r\n}\r\n\r\nexport async function rerankDocs(\r\n query: string,\r\n docs: Document[],\r\n fileIds: string[],\r\n optimizationMode: \"speed\" | \"balanced\" | \"quality\",\r\n r2Credentials?: R2CredentialsInput,\r\n): Promise<Document[]> {\r\n if (docs.length === 0 && fileIds.length === 0) {\r\n return docs;\r\n }\r\n\r\n let filesData: { title: string; content: string }[] = [];\r\n\r\n if (fileIds.length > 0) {\r\n const results = await Promise.all(\r\n fileIds.map(async (fileId) => {\r\n if (uploadFileLoader) {\r\n try {\r\n const loaded = await uploadFileLoader(fileId);\r\n if (loaded) return loaded;\r\n } catch (error) {\r\n console.error(\r\n `[rerankDocs] Registered upload loader failed for fileId ${fileId}:`,\r\n error,\r\n );\r\n }\r\n }\r\n if (r2Credentials) {\r\n return downloadExtractedContent(fileId, r2Credentials);\r\n }\r\n return null;\r\n }),\r\n );\r\n filesData = results.filter((r) => r !== null);\r\n }\r\n\r\n if (query.toLocaleLowerCase() === \"summarize\") {\r\n return docs.slice(0, 15);\r\n }\r\n\r\n const docsWithContent = docs.filter(\r\n (doc) => doc.pageContent && doc.pageContent.length > 0,\r\n );\r\n\r\n const fileDocs: Document[] = filesData.map((fileData) => ({\r\n pageContent: fileData.content,\r\n metadata: { title: fileData.title, url: \"File\" },\r\n }));\r\n\r\n // Combine file docs with web results, cap at 15\r\n return [...fileDocs, ...docsWithContent].slice(0, 15);\r\n}\r\n\r\nexport function processDocs(docs: Document[]): string {\r\n return docs\r\n .map(\r\n (_, index) =>\r\n `${index + 1}. ${docs[index].metadata.title} ${docs[index].pageContent}`,\r\n )\r\n .join(\"\\n\");\r\n}\r\n","/**\r\n * @module research/search/link-summarizer\r\n * @description Groups link documents by URL then summarizes each group with an LLM.\r\n */\r\nimport { generateText, type LanguageModel } from \"ai\";\r\nimport type { Document } from \"./document\";\r\nimport { buildFallbackDocs } from \"./doc-utils\";\r\n\r\nconst SUMMARIZER_PROMPT = `You are a web search summarizer, tasked with summarizing a piece of text retrieved from a web search. Your job is to summarize the\r\ntext into a detailed, 2-4 paragraph explanation that captures the main ideas and provides a comprehensive answer to the query.\r\nIf the query is \"summarize\", you should provide a detailed summary of the text. If the query is a specific question, you should answer it in the summary.\r\n\r\n- **Journalistic tone**: The summary should sound professional and journalistic, not too casual or vague.\r\n- **Thorough and detailed**: Ensure that every key point from the text is captured and that the summary directly answers the query.\r\n- **Not too lengthy, but detailed**: The summary should be informative but not excessively long. Focus on providing detailed information in a concise format.\r\n\r\nThe text will be shared inside the \\`text\\` XML tag, and the query inside the \\`query\\` XML tag.\r\n\r\n<example>\r\n1. \\`<text>\r\nDocker is a set of platform-as-a-service products that use OS-level virtualization to deliver software in packages called containers.\r\nIt was first released in 2013 and is developed by Docker, Inc. Docker is designed to make it easier to create, deploy, and run applications\r\nby using containers.\r\n</text>\r\n\r\n<query>\r\nWhat is Docker and how does it work?\r\n</query>\r\n\r\nResponse:\r\nDocker is a revolutionary platform-as-a-service product developed by Docker, Inc., that uses container technology to make application\r\ndeployment more efficient. It allows developers to package their software with all necessary dependencies, making it easier to run in\r\nany environment. Released in 2013, Docker has transformed the way applications are built, deployed, and managed.\r\n\\`\r\n2. \\`<text>\r\nThe theory of relativity, or simply relativity, encompasses two interrelated theories of Albert Einstein: special relativity and general\r\nrelativity. However, the word \"relativity\" is sometimes used in reference to Galilean invariance. The term \"theory of relativity\" was based\r\non the expression \"relative theory\" used by Max Planck in 1906. The theory of relativity usually encompasses two interrelated theories by\r\nAlbert Einstein: special relativity and general relativity. Special relativity applies to all physical phenomena in the absence of gravity.\r\nGeneral relativity explains the law of gravitation and its relation to other forces of nature. It applies to the cosmological and astrophysical\r\nrealm, including astronomy.\r\n</text>\r\n\r\n<query>\r\nsummarize\r\n</query>\r\n\r\nResponse:\r\nThe theory of relativity, developed by Albert Einstein, encompasses two main theories: special relativity and general relativity. Special\r\nrelativity applies to all physical phenomena in the absence of gravity, while general relativity explains the law of gravitation and its\r\nrelation to other forces of nature. The theory of relativity is based on the concept of \"relative theory,\" as introduced by Max Planck in\r\n1906. It is a fundamental theory in physics that has revolutionized our understanding of the universe.\r\n\\`\r\n</example>\r\n\r\nEverything below is the actual data you will be working with. Good luck!\r\n\r\n<query>\r\n{question}\r\n</query>\r\n\r\n<text>\r\n{content}\r\n</text>\r\n\r\nMake sure to answer the query in the summary.`;\r\n\r\n/**\r\n * Groups fetched link documents by URL (max 10 chunks per URL), then\r\n * summarizes each group with the LLM in parallel.\r\n */\r\nexport async function groupAndSummarizeDocs(\r\n llm: LanguageModel,\r\n linkDocs: Document[],\r\n question: string,\r\n): Promise<Document[]> {\r\n // Group chunks by URL, capping at 10 chunks each\r\n const docGroups: Document[] = [];\r\n\r\n for (const doc of linkDocs) {\r\n const existing = docGroups.find(\r\n (d) => d.metadata.url === doc.metadata.url && d.metadata.totalDocs < 10,\r\n );\r\n\r\n if (!existing) {\r\n docGroups.push({ ...doc, metadata: { ...doc.metadata, totalDocs: 1 } });\r\n } else {\r\n existing.pageContent += `\\n\\n${doc.pageContent}`;\r\n existing.metadata.totalDocs += 1;\r\n }\r\n }\r\n\r\n // Summarize each group in parallel\r\n const docs: Document[] = [];\r\n\r\n await Promise.all(\r\n docGroups.map(async (doc) => {\r\n const prompt = SUMMARIZER_PROMPT.replace(\"{question}\", question).replace(\r\n \"{content}\",\r\n doc.pageContent,\r\n );\r\n const { text } = await generateText({ model: llm, prompt });\r\n\r\n docs.push({\r\n pageContent: text,\r\n metadata: { title: doc.metadata.title, url: doc.metadata.url },\r\n });\r\n }),\r\n );\r\n\r\n return docs.length > 0 ? docs : buildFallbackDocs(question);\r\n}\r\n","/**\r\n * @fileoverview Orchestrator for complex research queries.\r\n * Manages query expansion, web search execution, and result synthesis using\r\n * LLMs through the Vercel AI SDK (generateText/streamText).\r\n */\r\nimport { generateText, streamText, type LanguageModel } from \"ai\";\r\nimport { LineOutputParser, LineListOutputParser } from \"../../utils/outputParser\";\r\nimport type { Document } from \"./document\";\r\n\r\n/** Strip HTML tags and decode entities — works in Cloudflare edge runtime */\r\nfunction htmlToText(html: string): string {\r\n return html\r\n .replace(/<(script|style)[^>]*>[\\s\\S]*?<\\/(script|style)>/gi, ' ')\r\n .replace(/<[^>]+>/g, ' ')\r\n .replace(/ /g, ' ')\r\n .replace(/&/g, '&')\r\n .replace(/</g, '<')\r\n .replace(/>/g, '>')\r\n .replace(/"/g, '\"')\r\n .replace(/'/g, \"'\")\r\n .replace(/&[a-z#][a-z0-9]+;/gi, ' ')\r\n .replace(/\\s+/g, ' ')\r\n .trim();\r\n}\r\nimport { formatChatHistoryAsString } from \"../../utils\";\r\nimport EventEmitter from \"events\";\r\nimport type {\r\n Config,\r\n ChatTurnMessage,\r\n MetaSearchAgentType,\r\n SearchingEvent,\r\n} from \"./meta-search-types\";\r\nimport {\r\n buildFallbackDocs,\r\n rerankDocs,\r\n processDocs,\r\n normalizeSourcesOutput,\r\n type R2CredentialsInput,\r\n} from \"./doc-utils\";\r\nimport { groupAndSummarizeDocs } from \"./link-summarizer\";\r\n\r\nexport type { MetaSearchAgentType, Config } from \"./meta-search-types\";\r\n\r\nconst waitWithTimeout = async <T>(\r\n promise: Promise<T>,\r\n timeoutMs: number,\r\n): Promise<T | undefined> => {\r\n return Promise.race([\r\n promise,\r\n new Promise<undefined>((resolve) => {\r\n setTimeout(() => resolve(undefined), timeoutMs);\r\n }),\r\n ]);\r\n};\r\n\r\n/**\r\n * Substitutes `{key}` placeholders in a prompt template with the provided\r\n * values, leaving unknown placeholders untouched.\r\n */\r\nconst interpolatePrompt = (\r\n template: string,\r\n vars: Record<string, string>,\r\n): string => {\r\n return Object.entries(vars).reduce(\r\n (result, [key, value]) => result.split(`{${key}}`).join(value),\r\n template,\r\n );\r\n};\r\n\r\nclass MetaSearchAgent implements MetaSearchAgentType {\r\n private config: Config;\r\n\r\n constructor(config: Config) {\r\n this.config = config;\r\n }\r\n\r\n /**\r\n * Rephrases the user's query into a standalone search question (and any\r\n * URLs to summarize), runs the web search, and returns the documents to\r\n * use as answer context.\r\n */\r\n private async retrieveSearchDocs(\r\n llm: LanguageModel,\r\n chatHistory: string,\r\n query: string,\r\n category: string = \"general\",\r\n sourceExtractionEnabled = false,\r\n thinkingTimeLimit = 0,\r\n emitter?: EventEmitter,\r\n ): Promise<{ query: string; docs: Document[] }> {\r\n const { text: retrieverOutput } = await generateText({\r\n model: llm,\r\n temperature: 0,\r\n system: this.config.queryGeneratorPrompt,\r\n messages: [\r\n ...this.config.queryGeneratorFewShots.map(([role, content]) => ({\r\n role,\r\n content,\r\n })),\r\n {\r\n role: \"user\",\r\n content: `\r\n <conversation>\r\n ${chatHistory}\r\n </conversation>\r\n\r\n <query>\r\n ${query}\r\n </query>\r\n `,\r\n },\r\n ],\r\n });\r\n\r\n const linksOutputParser = new LineListOutputParser({ key: \"links\" });\r\n const questionOutputParser = new LineOutputParser({ key: \"question\" });\r\n\r\n const links = await linksOutputParser.parse(retrieverOutput);\r\n let question =\r\n (await questionOutputParser.parse(retrieverOutput)) ?? retrieverOutput;\r\n\r\n if (question === \"not_needed\") {\r\n question = \"latest information\";\r\n }\r\n\r\n if (links.length > 0 && this.config.getDocumentsFromLinks) {\r\n if (question.length === 0) question = \"summarize\";\r\n\r\n const linkDocs = await this.config.getDocumentsFromLinks({ links });\r\n const docs = await groupAndSummarizeDocs(llm, linkDocs, question);\r\n\r\n return { query: question, docs };\r\n }\r\n\r\n question = question.replace(/<think>.*?<\\/think>/g, \"\");\r\n if (!question || question.trim().length === 0) {\r\n question = \"latest information\";\r\n }\r\n\r\n // Validate and sanitize the query before sending to search APIs\r\n // If the LLM returned a long response instead of a concise query, extract the first sentence\r\n // or use the original user query as fallback\r\n question = question.trim();\r\n if (question.length > 500 || question.split(/[.!?]\\s+/).length > 5) {\r\n // Query is too long or contains too many sentences - likely the LLM returned a full response\r\n console.warn(`[MetaSearchAgent] Query is too long (${question.length} chars), truncating or using fallback`);\r\n\r\n // Try to extract first sentence as the query\r\n const firstSentence = question.split(/[.!?]\\s+/)[0].trim();\r\n if (firstSentence.length > 0 && firstSentence.length < 200) {\r\n question = firstSentence;\r\n } else {\r\n // Fallback to original user query\r\n question = query.slice(0, 200);\r\n }\r\n }\r\n\r\n // Emit \"searching\" progress event so the client can show live status\r\n const categoryLabel = this.config.activeEngines.length > 0\r\n ? this.config.activeEngines.slice(0, 2).join(\", \")\r\n : \"Web\";\r\n const emitSearching = (status: SearchingEvent[\"status\"], query: string, cat?: string) => {\r\n emitter?.emit(\"data\", JSON.stringify({\r\n type: \"searching\",\r\n data: { query, category: cat ?? categoryLabel, status } satisfies SearchingEvent,\r\n }));\r\n };\r\n\r\n emitSearching(\"running\", question);\r\n\r\n let res: { results: any[]; suggestions: string[] } = { results: [], suggestions: [] };\r\n\r\n // If no search functions provided, return empty results\r\n if (!this.config.searchSearxng && !this.config.searchTavily) {\r\n res = { results: [], suggestions: [] };\r\n } else {\r\n const runSearxng = async () => {\r\n try {\r\n const result = await this.config.searchSearxng!(question, {\r\n language: \"en\",\r\n engines: this.config.activeEngines,\r\n categories: [category],\r\n });\r\n // Ensure result has the expected structure\r\n return result && typeof result === 'object' && 'results' in result\r\n ? result\r\n : { results: [], suggestions: [] };\r\n } catch (error) {\r\n console.error(\"[MetaSearchAgent] SearXNG search failed:\", error);\r\n return { results: [], suggestions: [] };\r\n }\r\n };\r\n\r\n const isTavilyConfigured = this.config.isTavilyConfigured?.() ?? false;\r\n\r\n if (\r\n isTavilyConfigured &&\r\n this.config.activeEngines.length === 0 &&\r\n category === \"general\"\r\n ) {\r\n try {\r\n const tavilyResult = await this.config.searchTavily!(question, { searchDepth: \"basic\", maxResults: 10 });\r\n res = tavilyResult && typeof tavilyResult === 'object' && 'results' in tavilyResult\r\n ? tavilyResult\r\n : { results: [], suggestions: [] };\r\n } catch (error) {\r\n console.error(\"Tavily search failed, falling back to SearXNG:\", error);\r\n res = this.config.searchSearxng ? await runSearxng() : { results: [], suggestions: [] };\r\n }\r\n } else {\r\n if (isTavilyConfigured && this.config.searchTavily) {\r\n try {\r\n res = await Promise.race([\r\n runSearxng(),\r\n new Promise<{ results: any[]; suggestions: string[] }>((_, reject) =>\r\n setTimeout(() => reject(new Error(\"Timeout\")), 10000)\r\n )\r\n ]);\r\n } catch (err: any) {\r\n if (err.message === \"Timeout\") {\r\n console.warn(\"[MetaSearchAgent] SearXNG search did not respond in 10 seconds, falling back to Tavily.\");\r\n try {\r\n const tavilyResult = await this.config.searchTavily(question, { searchDepth: \"basic\", maxResults: 10 });\r\n res = tavilyResult && typeof tavilyResult === 'object' && 'results' in tavilyResult\r\n ? tavilyResult\r\n : { results: [], suggestions: [] };\r\n } catch (tavilyErr) {\r\n console.error(\"[MetaSearchAgent] Tavily fallback also failed, awaiting SearXNG directly:\", tavilyErr);\r\n res = this.config.searchSearxng ? await runSearxng() : { results: [], suggestions: [] };\r\n }\r\n } else {\r\n console.error(\"[MetaSearchAgent] SearXNG search failed, falling back to Tavily:\", err);\r\n try {\r\n const tavilyResult = await this.config.searchTavily(question, { searchDepth: \"basic\", maxResults: 10 });\r\n res = tavilyResult && typeof tavilyResult === 'object' && 'results' in tavilyResult\r\n ? tavilyResult\r\n : { results: [], suggestions: [] };\r\n } catch (tavilyErr) {\r\n console.error(\"[MetaSearchAgent] Tavily fallback also failed:\", tavilyErr);\r\n res = { results: [], suggestions: [] };\r\n }\r\n }\r\n }\r\n } else {\r\n res = this.config.searchSearxng ? await runSearxng() : { results: [], suggestions: [] };\r\n }\r\n }\r\n }\r\n\r\n let documents: Document[] = (res?.results ?? []).map((result) => ({\r\n pageContent:\r\n result.content ||\r\n (this.config.activeEngines.includes(\"youtube\") ? result.title : \"\"),\r\n metadata: {\r\n title: result.title,\r\n url: result.url,\r\n source: result.source,\r\n ...(result.img_src && { img_src: result.img_src }),\r\n },\r\n }));\r\n\r\n if (documents.length === 0) {\r\n documents = buildFallbackDocs(question);\r\n }\r\n\r\n emitSearching(\"done\", question);\r\n\r\n // Determine extraction budget from thinkingTimeLimit (seconds).\r\n // thinkingTimeLimit === 0 means unlimited; use server config.\r\n let scrapeCount: number;\r\n let perSourceTimeout: number;\r\n\r\n if (thinkingTimeLimit > 0) {\r\n // Spread the time budget across 3 sources\r\n scrapeCount = 3;\r\n perSourceTimeout = Math.max(2, Math.floor(thinkingTimeLimit / scrapeCount));\r\n } else if (sourceExtractionEnabled) {\r\n scrapeCount = 3;\r\n // Default to 5 seconds if no config function available\r\n perSourceTimeout = 5;\r\n } else {\r\n scrapeCount = 0;\r\n perSourceTimeout = 0;\r\n }\r\n\r\n if (scrapeCount > 0) {\r\n const docsToScrape = documents.slice(0, scrapeCount);\r\n emitSearching(\"running\", `Extracting top ${docsToScrape.length} sources`, \"extract\");\r\n\r\n const extractionTasks = this.config.scrapeURL ? docsToScrape.map(async (doc, idx) => {\r\n const url = doc.metadata?.url;\r\n if (!url || !this.config.scrapeURL) return;\r\n try {\r\n const result = await waitWithTimeout(\r\n this.config.scrapeURL(url, { timeout: perSourceTimeout }),\r\n perSourceTimeout * 1000 + 1500,\r\n );\r\n if (typeof result === \"string\" && result.length > 100) {\r\n const text = htmlToText(result)\r\n .replace(/(\\r\\n|\\n|\\r)/gm, \" \")\r\n .replace(/\\s+/g, \" \")\r\n .trim()\r\n .slice(0, 5000);\r\n if (text.length > 100) {\r\n documents[idx].pageContent = text;\r\n }\r\n }\r\n } catch {\r\n // Keep original snippet on scraping failure or timeout\r\n }\r\n }) : [];\r\n\r\n await Promise.allSettled(extractionTasks);\r\n emitSearching(\"done\", `Extracting top ${docsToScrape.length} sources`, \"extract\");\r\n }\r\n\r\n return { query: question, docs: documents };\r\n }\r\n\r\n /**\r\n * Runs the full search-and-answer pipeline, emitting \"sources\",\r\n * \"response\", \"searching\", \"end\", and \"error\" events on the emitter.\r\n */\r\n private async runPipeline(\r\n emitter: EventEmitter,\r\n message: string,\r\n history: ChatTurnMessage[],\r\n llm: LanguageModel,\r\n optimizationMode: \"speed\" | \"balanced\" | \"quality\",\r\n fileIds: string[],\r\n systemInstructions: string,\r\n category: string,\r\n sourceExtractionEnabled: boolean,\r\n thinkingTimeLimit: number,\r\n ): Promise<void> {\r\n try {\r\n let docs: Document[] | null = null;\r\n let query = message;\r\n\r\n if (this.config.searchWeb) {\r\n const result = await this.retrieveSearchDocs(\r\n llm,\r\n formatChatHistoryAsString(history),\r\n message,\r\n category,\r\n sourceExtractionEnabled,\r\n thinkingTimeLimit,\r\n emitter,\r\n );\r\n query = result.query;\r\n docs = result.docs;\r\n }\r\n\r\n const r2Credentials: R2CredentialsInput | undefined = process.env.R2_ACCOUNT_ID\r\n ? {\r\n accountId: process.env.R2_ACCOUNT_ID,\r\n accessKeyId: process.env.R2_ACCESS_KEY_ID || \"\",\r\n secretAccessKey: process.env.R2_SECRET_ACCESS_KEY || \"\",\r\n bucket: process.env.R2_UPLOADS_BUCKET || \"qwksearch-uploads\",\r\n }\r\n : undefined;\r\n\r\n const sortedDocs = await rerankDocs(\r\n query,\r\n docs ?? [],\r\n fileIds,\r\n optimizationMode,\r\n r2Credentials,\r\n );\r\n\r\n const sources = normalizeSourcesOutput(sortedDocs, message);\r\n console.log(\"[MetaSearchAgent] emitting sources:\", sources.length);\r\n emitter.emit(\"data\", JSON.stringify({ type: \"sources\", data: sources }));\r\n\r\n const systemPrompt = interpolatePrompt(this.config.responsePrompt, {\r\n systemInstructions,\r\n context: processDocs(sortedDocs),\r\n date: new Date().toISOString(),\r\n });\r\n\r\n const result = streamText({\r\n model: llm,\r\n temperature: 0.7,\r\n system: systemPrompt,\r\n messages: [...history, { role: \"user\", content: message }],\r\n });\r\n\r\n let responseChunkCount = 0;\r\n for await (const chunk of result.textStream) {\r\n responseChunkCount += 1;\r\n emitter.emit(\"data\", JSON.stringify({ type: \"response\", data: chunk }));\r\n }\r\n console.log(\"[MetaSearchAgent] response stream ended, chunks:\", responseChunkCount);\r\n\r\n if (responseChunkCount === 0) {\r\n const fallbackUrls = sources\r\n .map((doc) => doc.metadata?.url)\r\n .filter((url): url is string => typeof url === \"string\")\r\n .slice(0, 5);\r\n\r\n const fallbackMessage = [\r\n \"I couldn't generate a full answer, but I ran a web search and found these source URLs:\",\r\n ...fallbackUrls.map((url) => `- ${url}`),\r\n ].join(\"\\n\");\r\n\r\n emitter.emit(\"data\", JSON.stringify({ type: \"response\", data: fallbackMessage }));\r\n }\r\n\r\n emitter.emit(\"end\");\r\n } catch (err) {\r\n const errMessage = err instanceof Error ? err.message : String(err);\r\n console.error(\"[MetaSearchAgent] caught error from AI SDK stream:\", errMessage, err);\r\n let userMessage = errMessage;\r\n if (errMessage.includes(\"404\") || errMessage.toLowerCase().includes(\"not found\")) {\r\n userMessage =\r\n \"The selected AI model was not found at the provider. Please go to Settings → Model Providers and select a different model.\";\r\n } else if (errMessage.includes(\"410\")) {\r\n userMessage =\r\n \"The selected AI model is no longer available (deprecated by the provider). Please go to Settings → Model Providers and select a different model.\";\r\n } else if (errMessage.includes(\"401\") || errMessage.includes(\"authentication\")) {\r\n userMessage =\r\n \"Authentication failed with the AI provider. Please check your API key in Settings.\";\r\n } else if (errMessage.includes(\"429\") || errMessage.includes(\"rate limit\")) {\r\n userMessage =\r\n \"Rate limit reached for the AI provider. Please wait a moment and try again.\";\r\n }\r\n emitter.emit(\"error\", JSON.stringify({ data: userMessage }));\r\n }\r\n }\r\n\r\n async searchAndAnswer(\r\n message: string,\r\n history: ChatTurnMessage[],\r\n llm: LanguageModel,\r\n optimizationMode: \"speed\" | \"balanced\" | \"quality\",\r\n fileIds: string[],\r\n systemInstructions: string,\r\n category: string = \"general\",\r\n sourceExtractionEnabled = false,\r\n thinkingTimeLimit = 0,\r\n ) {\r\n const emitter = new EventEmitter();\r\n\r\n // Start on the next macrotask so callers can attach their event\r\n // listeners before the first \"sources\"/\"response\" event can fire.\r\n setTimeout(() => {\r\n this.runPipeline(\r\n emitter,\r\n message,\r\n history,\r\n llm,\r\n optimizationMode,\r\n fileIds,\r\n systemInstructions,\r\n category,\r\n sourceExtractionEnabled,\r\n thinkingTimeLimit,\r\n );\r\n }, 0);\r\n\r\n return emitter;\r\n }\r\n}\r\n\r\nexport default MetaSearchAgent;\r\n","/**\r\n * @module research/search/index\r\n * @description Research library module.\r\n *\r\n * Note: To use these search handlers, you need to provide search functions\r\n * (searchSearxng, searchTavily, etc.) from search-web-api package.\r\n */\r\nimport MetaSearchAgent from \"./metaSearchAgent\";\r\nimport {\r\n webSearchRetrieverPrompt,\r\n webSearchResponsePrompt,\r\n webSearchRetrieverFewShots,\r\n writingAssistantPrompt,\r\n} from \"../../prompts\";\r\nimport type { Config } from \"./meta-search-types\";\r\n\r\nconst prompts = {\r\n webSearchRetrieverPrompt,\r\n webSearchResponsePrompt,\r\n webSearchRetrieverFewShots,\r\n writingAssistantPrompt,\r\n};\r\n\r\n/**\r\n * Creates search handler instances with provided search functions.\r\n * Pass in search functions from extract-webpage to enable web search.\r\n */\r\nexport const createSearchHandlers = (searchFunctions?: Partial<Config>) => ({\r\n webSearch: new MetaSearchAgent({\r\n activeEngines: [],\r\n queryGeneratorPrompt: prompts.webSearchRetrieverPrompt,\r\n responsePrompt: prompts.webSearchResponsePrompt,\r\n queryGeneratorFewShots: prompts.webSearchRetrieverFewShots,\r\n rerank: true,\r\n rerankThreshold: 0.3,\r\n searchWeb: true,\r\n ...searchFunctions,\r\n }),\r\n academicSearch: new MetaSearchAgent({\r\n activeEngines: [\"arxiv\", \"google scholar\", \"pubmed\"],\r\n queryGeneratorPrompt: prompts.webSearchRetrieverPrompt,\r\n responsePrompt: prompts.webSearchResponsePrompt,\r\n queryGeneratorFewShots: prompts.webSearchRetrieverFewShots,\r\n rerank: true,\r\n rerankThreshold: 0,\r\n searchWeb: true,\r\n ...searchFunctions,\r\n }),\r\n writingAssistant: new MetaSearchAgent({\r\n activeEngines: [],\r\n queryGeneratorPrompt: \"\",\r\n queryGeneratorFewShots: [],\r\n responsePrompt: prompts.writingAssistantPrompt,\r\n rerank: true,\r\n rerankThreshold: 0,\r\n searchWeb: true,\r\n ...searchFunctions,\r\n }),\r\n wolframAlphaSearch: new MetaSearchAgent({\r\n activeEngines: [\"wolframalpha\"],\r\n queryGeneratorPrompt: prompts.webSearchRetrieverPrompt,\r\n responsePrompt: prompts.webSearchResponsePrompt,\r\n queryGeneratorFewShots: prompts.webSearchRetrieverFewShots,\r\n rerank: false,\r\n rerankThreshold: 0,\r\n searchWeb: true,\r\n ...searchFunctions,\r\n }),\r\n youtubeSearch: new MetaSearchAgent({\r\n activeEngines: [\"youtube\"],\r\n queryGeneratorPrompt: prompts.webSearchRetrieverPrompt,\r\n responsePrompt: prompts.webSearchResponsePrompt,\r\n queryGeneratorFewShots: prompts.webSearchRetrieverFewShots,\r\n rerank: true,\r\n rerankThreshold: 0.3,\r\n searchWeb: true,\r\n ...searchFunctions,\r\n }),\r\n redditSearch: new MetaSearchAgent({\r\n activeEngines: [\"reddit\"],\r\n queryGeneratorPrompt: prompts.webSearchRetrieverPrompt,\r\n responsePrompt: prompts.webSearchResponsePrompt,\r\n queryGeneratorFewShots: prompts.webSearchRetrieverFewShots,\r\n rerank: true,\r\n rerankThreshold: 0.3,\r\n searchWeb: true,\r\n ...searchFunctions,\r\n }),\r\n});\r\n\r\n/**\r\n * Default search handlers without search functions.\r\n * These will not perform actual web searches unless search functions are added to the Config.\r\n * @deprecated Use createSearchHandlers() with search functions instead\r\n */\r\nexport const searchHandlers = createSearchHandlers();\r\n","/**\r\n * @module research/chains/suggestionGeneratorAgent\r\n * @description Generates follow-up question suggestions from a conversation\r\n * using the Vercel AI SDK.\r\n */\r\nimport { generateText, type LanguageModel } from \"ai\";\r\nimport { LineListOutputParser } from \"../../utils/outputParser\";\r\nimport { formatChatHistoryAsString } from \"../../utils\";\r\nimport type { ChatTurnMessage } from \"./meta-search-types\";\r\n\r\nconst createSuggestionGeneratorPrompt = (maxQuestions: number = 4) => `\r\nYou are an AI suggestion generator for an AI powered search engine. You will be given a conversation below. You need to generate ${maxQuestions} suggestions based on the conversation. The suggestion should be relevant to the conversation that can be used by the user to ask the chat model for more information.\r\nYou need to make sure the suggestions are relevant to the conversation and are helpful to the user. Keep a note that the user might use these suggestions to ask a chat model for more information.\r\nMake sure the suggestions are medium in length and are informative and relevant to the conversation.\r\n\r\nProvide these suggestions separated by newlines between the XML tags <suggestions> and </suggestions>. For example:\r\n\r\n<suggestions>\r\nTell me more about SpaceX and their recent projects\r\nWhat is the latest news on SpaceX?\r\nWho is the CEO of SpaceX?\r\n</suggestions>\r\n\r\nConversation:\r\n{chat_history}\r\n`;\r\n\r\ntype SuggestionGeneratorInput = {\r\n chat_history: ChatTurnMessage[];\r\n maxQuestions?: number;\r\n};\r\n\r\nconst outputParser = new LineListOutputParser({\r\n key: \"suggestions\",\r\n});\r\n\r\nconst generateSuggestions = async (\r\n input: SuggestionGeneratorInput,\r\n llm: LanguageModel,\r\n): Promise<string[]> => {\r\n const maxQuestions = input.maxQuestions ?? 4;\r\n const prompt = createSuggestionGeneratorPrompt(maxQuestions).replace(\r\n \"{chat_history}\",\r\n formatChatHistoryAsString(input.chat_history),\r\n );\r\n\r\n const { text } = await generateText({\r\n model: llm,\r\n temperature: 0,\r\n prompt,\r\n });\r\n\r\n return outputParser.parse(text);\r\n};\r\n\r\nexport default generateSuggestions;\r\n","/**\r\n * @module research/search/document\r\n * @description Minimal document shape shared across the search pipeline.\r\n * A document is a chunk of page content plus citation metadata (title, url, source, etc.).\r\n */\r\n\r\nexport interface Document<\r\n Metadata extends Record<string, any> = Record<string, any>,\r\n> {\r\n pageContent: string;\r\n metadata: Metadata;\r\n}\r\n\r\n/**\r\n * Splits text into overlapping chunks on whitespace boundaries.\r\n * Default chunkSize 1000, chunkOverlap 200.\r\n */\r\nexport function splitTextIntoChunks(\r\n text: string,\r\n chunkSize = 1000,\r\n chunkOverlap = 200,\r\n): string[] {\r\n const trimmed = (text || \"\").trim();\r\n if (trimmed.length <= chunkSize) {\r\n return trimmed.length > 0 ? [trimmed] : [];\r\n }\r\n\r\n const chunks: string[] = [];\r\n let start = 0;\r\n\r\n while (start < trimmed.length) {\r\n let end = Math.min(start + chunkSize, trimmed.length);\r\n\r\n // Break on the last whitespace inside the window so words stay intact\r\n if (end < trimmed.length) {\r\n const lastSpace = trimmed.lastIndexOf(\" \", end);\r\n if (lastSpace > start) end = lastSpace;\r\n }\r\n\r\n chunks.push(trimmed.slice(start, end).trim());\r\n\r\n if (end >= trimmed.length) break;\r\n start = Math.max(end - chunkOverlap, start + 1);\r\n }\r\n\r\n return chunks.filter((chunk) => chunk.length > 0);\r\n}\r\n","/**\n * @fileoverview Mastra Agent Factory\n *\n * Creates typed Mastra agents with tool-calling, model selection,\n * and optional memory integration.\n */\n\nimport { Agent } from \"@mastra/core/agent\";\nimport { createTool } from \"@mastra/core/tools\";\nimport { z } from \"zod\";\n\nexport interface MastraAgentConfig {\n id: string;\n name: string;\n instructions: string;\n model: any;\n tools?: Record<string, any>;\n maxSteps?: number;\n memory?: {\n enabled: boolean;\n threadId?: string;\n userId?: string;\n };\n}\n\n/**\n * Create a Mastra agent with full configuration.\n * Supports tool-calling, multi-step reasoning, and memory.\n *\n * @example\n * ```ts\n * import { createMastraAgent } from \"chat-agent-toolkit/mastra\";\n * import { openai } from \"@ai-sdk/openai\";\n *\n * const agent = createMastraAgent({\n * id: \"research-assistant\",\n * name: \"Research Assistant\",\n * instructions: \"Help users research topics thoroughly.\",\n * model: openai(\"gpt-4o\"),\n * tools: { webSearch, extractPage },\n * });\n *\n * const result = await agent.generate(\"What is RAG?\");\n * ```\n */\nexport function createMastraAgent(config: MastraAgentConfig): Agent {\n return new Agent({\n id: config.id,\n name: config.name,\n instructions: config.instructions,\n model: config.model,\n tools: config.tools || {},\n });\n}\n\n/**\n * Create a Mastra agent with inline tool definitions using Zod schemas.\n * Convenience wrapper for quick prototyping.\n *\n * @example\n * ```ts\n * const agent = createToolAgent({\n * id: \"calculator\",\n * name: \"Calculator\",\n * instructions: \"Perform math operations.\",\n * model: openai(\"gpt-4o\"),\n * toolDefs: [{\n * id: \"add\",\n * description: \"Add two numbers\",\n * inputSchema: z.object({ a: z.number(), b: z.number() }),\n * outputSchema: z.object({ result: z.number() }),\n * execute: async ({ context }) => ({ result: context.a + context.b }),\n * }],\n * });\n * ```\n */\nexport function createToolAgent(config: {\n id: string;\n name: string;\n instructions: string;\n model: any;\n toolDefs: Array<{\n id: string;\n description: string;\n inputSchema: z.ZodType;\n outputSchema: z.ZodType;\n execute: (params: { context: any }) => Promise<any>;\n }>;\n}): Agent {\n const tools: Record<string, any> = {};\n\n for (const def of config.toolDefs) {\n tools[def.id] = createTool({\n id: def.id,\n description: def.description,\n inputSchema: def.inputSchema,\n outputSchema: def.outputSchema,\n execute: def.execute,\n });\n }\n\n return new Agent({\n id: config.id,\n name: config.name,\n instructions: config.instructions,\n model: config.model,\n tools,\n });\n}\n","/**\n * @fileoverview Mastra Workflow Builder\n *\n * Graph-based deterministic workflows with typed steps, chaining,\n * branching, and parallel execution support.\n */\n\nimport { createWorkflow, createStep } from \"@mastra/core/workflows\";\nimport { z } from \"zod\";\n\nexport interface WorkflowStepConfig<TInput = any, TOutput = any> {\n id: string;\n inputSchema: z.ZodType<TInput>;\n outputSchema: z.ZodType<TOutput>;\n execute: (params: { inputData: TInput }) => Promise<TOutput>;\n}\n\n/**\n * Create a typed workflow step.\n *\n * @example\n * ```ts\n * const fetchStep = createWorkflowStep({\n * id: \"fetch-sources\",\n * inputSchema: z.object({ query: z.string() }),\n * outputSchema: z.object({ sources: z.array(z.string()) }),\n * execute: async ({ inputData }) => {\n * const sources = await searchWeb(inputData.query);\n * return { sources };\n * },\n * });\n * ```\n */\nexport function createWorkflowStep<TInput, TOutput>(\n config: WorkflowStepConfig<TInput, TOutput>\n) {\n return createStep({\n id: config.id,\n inputSchema: config.inputSchema,\n outputSchema: config.outputSchema,\n execute: config.execute,\n });\n}\n\n/**\n * Create a research workflow: fetch → analyze → summarize.\n * Pre-built pipeline for common research tasks.\n *\n * @example\n * ```ts\n * const workflow = createResearchWorkflow({\n * fetchFn: async (topic) => fetchSources(topic),\n * analyzeFn: async (sources) => analyzeContent(sources),\n * summarizeFn: async (analysis) => generateSummary(analysis),\n * });\n *\n * const run = await workflow.createRunAsync();\n * const result = await run.start({ inputData: { topic: \"quantum computing\" } });\n * ```\n */\nexport function createResearchWorkflow(handlers: {\n fetchFn: (topic: string) => Promise<string[]>;\n analyzeFn: (sources: string[]) => Promise<string>;\n summarizeFn: (analysis: string) => Promise<string>;\n}) {\n const fetchStep = createStep({\n id: \"fetch-sources\",\n inputSchema: z.object({ topic: z.string() }),\n outputSchema: z.object({ sources: z.array(z.string()) }),\n execute: async ({ inputData }) => {\n const sources = await handlers.fetchFn(inputData.topic);\n return { sources };\n },\n });\n\n const analyzeStep = createStep({\n id: \"analyze-content\",\n inputSchema: z.object({ sources: z.array(z.string()) }),\n outputSchema: z.object({ analysis: z.string() }),\n execute: async ({ inputData }) => {\n const analysis = await handlers.analyzeFn(inputData.sources);\n return { analysis };\n },\n });\n\n const summarizeStep = createStep({\n id: \"summarize\",\n inputSchema: z.object({ analysis: z.string() }),\n outputSchema: z.object({ summary: z.string() }),\n execute: async ({ inputData }) => {\n const summary = await handlers.summarizeFn(inputData.analysis);\n return { summary };\n },\n });\n\n return createWorkflow({\n id: \"research-workflow\",\n inputSchema: z.object({ topic: z.string() }),\n outputSchema: z.object({ summary: z.string() }),\n })\n .then(fetchStep)\n .then(analyzeStep)\n .then(summarizeStep)\n .commit();\n}\n\n/**\n * Create a RAG workflow: chunk → embed → retrieve → generate.\n * End-to-end retrieval-augmented generation pipeline.\n *\n * @example\n * ```ts\n * const workflow = createRAGWorkflow({\n * chunkFn: async (doc) => splitIntoChunks(doc),\n * embedFn: async (chunks) => embedChunks(chunks),\n * retrieveFn: async (query) => findRelevant(query),\n * generateFn: async (context, query) => llmGenerate(context, query),\n * });\n * ```\n */\nexport function createRAGWorkflow(handlers: {\n chunkFn: (document: string) => Promise<string[]>;\n embedFn: (chunks: string[]) => Promise<number[][]>;\n retrieveFn: (query: string) => Promise<string[]>;\n generateFn: (context: string[], query: string) => Promise<string>;\n}) {\n const retrieveStep = createStep({\n id: \"retrieve\",\n inputSchema: z.object({ query: z.string() }),\n outputSchema: z.object({ context: z.array(z.string()), query: z.string() }),\n execute: async ({ inputData }) => {\n const context = await handlers.retrieveFn(inputData.query);\n return { context, query: inputData.query };\n },\n });\n\n const generateStep = createStep({\n id: \"generate\",\n inputSchema: z.object({ context: z.array(z.string()), query: z.string() }),\n outputSchema: z.object({ answer: z.string() }),\n execute: async ({ inputData }) => {\n const answer = await handlers.generateFn(inputData.context, inputData.query);\n return { answer };\n },\n });\n\n return createWorkflow({\n id: \"rag-workflow\",\n inputSchema: z.object({ query: z.string() }),\n outputSchema: z.object({ answer: z.string() }),\n })\n .then(retrieveStep)\n .then(generateStep)\n .commit();\n}\n","/**\n * @fileoverview Mastra RAG (Retrieval-Augmented Generation)\n *\n * Document processing, chunking, embedding, and vector-store retrieval.\n * Uses Vercel AI SDK embeddings with pluggable vector backends.\n */\n\nimport { embed, embedMany } from \"ai\";\n\nexport interface RAGConfig {\n embeddingModel: any;\n chunkSize?: number;\n chunkOverlap?: number;\n topK?: number;\n}\n\nexport interface RAGDocument {\n id: string;\n content: string;\n metadata?: Record<string, any>;\n}\n\nexport interface RAGChunk {\n id: string;\n documentId: string;\n text: string;\n embedding: number[];\n metadata?: Record<string, any>;\n}\n\nexport interface RAGRetrievalResult {\n chunk: RAGChunk;\n score: number;\n}\n\n/**\n * In-memory RAG pipeline with document chunking, embedding, and retrieval.\n * For production, swap the vector store with Pinecone, Qdrant, or pgvector.\n *\n * @example\n * ```ts\n * import { MastraRAG } from \"chat-agent-toolkit/mastra\";\n * import { openai } from \"@ai-sdk/openai\";\n *\n * const rag = new MastraRAG({\n * embeddingModel: openai.embedding(\"text-embedding-3-small\"),\n * chunkSize: 512,\n * topK: 5,\n * });\n *\n * await rag.ingest([\n * { id: \"doc1\", content: \"Long document text...\" },\n * ]);\n *\n * const results = await rag.retrieve(\"What is the main topic?\");\n * ```\n */\nexport class MastraRAG {\n private config: Required<RAGConfig>;\n private chunks: RAGChunk[] = [];\n\n constructor(config: RAGConfig) {\n this.config = {\n embeddingModel: config.embeddingModel,\n chunkSize: config.chunkSize ?? 512,\n chunkOverlap: config.chunkOverlap ?? 64,\n topK: config.topK ?? 5,\n };\n }\n\n /**\n * Split text into overlapping chunks of configured size.\n */\n private splitIntoChunks(text: string): string[] {\n const chunks: string[] = [];\n const words = text.split(/\\s+/);\n const { chunkSize, chunkOverlap } = this.config;\n\n let start = 0;\n while (start < words.length) {\n const end = Math.min(start + chunkSize, words.length);\n chunks.push(words.slice(start, end).join(\" \"));\n start += chunkSize - chunkOverlap;\n }\n\n return chunks;\n }\n\n /**\n * Ingest documents: chunk, embed, and store.\n */\n async ingest(documents: RAGDocument[]): Promise<number> {\n let totalChunks = 0;\n\n for (const doc of documents) {\n const textChunks = this.splitIntoChunks(doc.content);\n\n const { embeddings } = await embedMany({\n model: this.config.embeddingModel,\n values: textChunks,\n });\n\n for (let i = 0; i < textChunks.length; i++) {\n this.chunks.push({\n id: `${doc.id}_chunk_${i}`,\n documentId: doc.id,\n text: textChunks[i],\n embedding: embeddings[i],\n metadata: doc.metadata,\n });\n }\n\n totalChunks += textChunks.length;\n }\n\n return totalChunks;\n }\n\n /**\n * Retrieve relevant chunks for a query using cosine similarity.\n */\n async retrieve(query: string): Promise<RAGRetrievalResult[]> {\n if (this.chunks.length === 0) return [];\n\n const { embedding } = await embed({\n model: this.config.embeddingModel,\n value: query,\n });\n\n const scored = this.chunks.map((chunk) => ({\n chunk,\n score: cosineSimilarity(embedding, chunk.embedding),\n }));\n\n scored.sort((a, b) => b.score - a.score);\n\n return scored.slice(0, this.config.topK);\n }\n\n /**\n * Retrieve and format context string for LLM consumption.\n */\n async getContext(query: string): Promise<string> {\n const results = await this.retrieve(query);\n if (results.length === 0) return \"\";\n\n return results\n .map((r, i) => `[${i + 1}] (score: ${r.score.toFixed(3)}) ${r.chunk.text}`)\n .join(\"\\n\\n\");\n }\n\n /**\n * Get total chunk count in the store.\n */\n get size(): number {\n return this.chunks.length;\n }\n\n /**\n * Clear all stored chunks.\n */\n clear(): void {\n this.chunks = [];\n }\n}\n\n/**\n * Factory for creating a configured RAG pipeline.\n */\nexport function createRAGPipeline(config: RAGConfig): MastraRAG {\n return new MastraRAG(config);\n}\n\nfunction cosineSimilarity(a: number[], b: number[]): number {\n let dotProduct = 0;\n let normA = 0;\n let normB = 0;\n\n for (let i = 0; i < a.length; i++) {\n dotProduct += a[i] * b[i];\n normA += a[i] * a[i];\n normB += b[i] * b[i];\n }\n\n const denominator = Math.sqrt(normA) * Math.sqrt(normB);\n if (denominator === 0) return 0;\n return dotProduct / denominator;\n}\n","/**\n * @fileoverview Mastra Evals\n *\n * Scorer-based evaluation functions for LLM outputs.\n * Assess factuality, relevance, coherence, and safety.\n */\n\nexport interface EvalResult {\n score: number;\n reason: string;\n}\n\nexport interface EvalSuiteResult {\n overall: number;\n results: Record<string, EvalResult>;\n}\n\n/**\n * Evaluate factuality/groundedness of a response.\n * Checks whether the output references sources or evidence.\n *\n * @example\n * ```ts\n * const result = await factualityEval(\n * \"The earth orbits the sun (source: NASA).\",\n * \"What does the earth orbit?\"\n * );\n * // { score: 0.9, reason: \"Response includes source attribution.\" }\n * ```\n */\nexport async function factualityEval(\n output: string,\n _query?: string,\n sources?: string[]\n): Promise<EvalResult> {\n const hasSourceRef = /\\b(source|according to|reference|cited?|per)\\b/i.test(output);\n const hasUrl = /https?:\\/\\/\\S+/.test(output);\n const matchesSources = sources?.some((s) =>\n output.toLowerCase().includes(s.toLowerCase().slice(0, 30))\n );\n\n let score = 0.3;\n const reasons: string[] = [];\n\n if (hasSourceRef) {\n score += 0.25;\n reasons.push(\"includes source attribution\");\n }\n if (hasUrl) {\n score += 0.15;\n reasons.push(\"contains URL reference\");\n }\n if (matchesSources) {\n score += 0.3;\n reasons.push(\"matches provided source material\");\n }\n if (!hasSourceRef && !hasUrl && !matchesSources) {\n reasons.push(\"no grounding evidence found\");\n }\n\n return {\n score: Math.min(score, 1.0),\n reason: reasons.join(\"; \") + \".\",\n };\n}\n\n/**\n * Evaluate relevance of a response to the query.\n * Uses keyword overlap and length heuristics.\n */\nexport async function relevanceEval(\n output: string,\n query: string\n): Promise<EvalResult> {\n const queryWords = new Set(\n query.toLowerCase().split(/\\s+/).filter((w) => w.length > 2)\n );\n const outputWords = output.toLowerCase().split(/\\s+/);\n const matchCount = outputWords.filter((w) => queryWords.has(w)).length;\n const overlapRatio = queryWords.size > 0 ? matchCount / queryWords.size : 0;\n\n const isTooShort = output.length < 20;\n const isTooLong = output.length > query.length * 50;\n\n let score = Math.min(overlapRatio * 1.5, 0.7);\n const reasons: string[] = [];\n\n if (overlapRatio > 0.5) {\n score += 0.2;\n reasons.push(\"high keyword overlap with query\");\n } else if (overlapRatio > 0.2) {\n reasons.push(\"moderate keyword overlap\");\n } else {\n reasons.push(\"low keyword overlap with query\");\n }\n\n if (isTooShort) {\n score -= 0.2;\n reasons.push(\"response too short\");\n }\n if (isTooLong) {\n score -= 0.1;\n reasons.push(\"response excessively long\");\n }\n\n if (!isTooShort && !isTooLong && overlapRatio > 0.3) {\n score += 0.1;\n }\n\n return {\n score: Math.max(0, Math.min(score, 1.0)),\n reason: reasons.join(\"; \") + \".\",\n };\n}\n\n/**\n * Evaluate coherence and structure of a response.\n * Checks sentence structure, paragraph flow, and logical markers.\n */\nexport async function coherenceEval(output: string): Promise<EvalResult> {\n const sentences = output.split(/[.!?]+/).filter((s) => s.trim().length > 5);\n const hasLogicalMarkers = /\\b(therefore|because|however|furthermore|additionally|first|second|finally)\\b/i.test(output);\n const hasParagraphs = output.includes(\"\\n\\n\") || output.includes(\"\\n\");\n const avgSentenceLength =\n sentences.length > 0\n ? sentences.reduce((sum, s) => sum + s.trim().split(/\\s+/).length, 0) / sentences.length\n : 0;\n\n let score = 0.4;\n const reasons: string[] = [];\n\n if (sentences.length >= 2) {\n score += 0.15;\n reasons.push(\"multiple sentences\");\n }\n if (hasLogicalMarkers) {\n score += 0.2;\n reasons.push(\"uses logical connectors\");\n }\n if (hasParagraphs && output.length > 200) {\n score += 0.1;\n reasons.push(\"structured with paragraphs\");\n }\n if (avgSentenceLength > 5 && avgSentenceLength < 40) {\n score += 0.15;\n reasons.push(\"appropriate sentence length\");\n }\n if (sentences.length < 2 && output.length > 100) {\n score -= 0.2;\n reasons.push(\"run-on text without sentence breaks\");\n }\n\n return {\n score: Math.max(0, Math.min(score, 1.0)),\n reason: reasons.join(\"; \") + \".\",\n };\n}\n\n/**\n * Evaluate output for toxic or harmful content.\n * Basic keyword/pattern-based detection.\n */\nexport async function toxicityEval(output: string): Promise<EvalResult> {\n const toxicPatterns = [\n /\\b(hate|kill|destroy|attack)\\s+(all|every|them)\\b/i,\n /\\b(stupid|idiot|moron|dumb)\\s+(people|person|users?)\\b/i,\n /\\b(should\\s+die|deserve\\s+to\\s+die)\\b/i,\n ];\n\n const matches = toxicPatterns.filter((p) => p.test(output));\n const score = matches.length === 0 ? 1.0 : Math.max(0, 1.0 - matches.length * 0.4);\n\n return {\n score,\n reason:\n matches.length === 0\n ? \"No toxic patterns detected.\"\n : `Detected ${matches.length} potentially harmful pattern(s).`,\n };\n}\n\n/**\n * Run a full evaluation suite against a response.\n *\n * @example\n * ```ts\n * const results = await runEvalSuite({\n * output: agentResponse,\n * query: \"What is photosynthesis?\",\n * sources: [\"Biology textbook chapter 3\"],\n * });\n *\n * console.log(results.overall); // 0.78\n * console.log(results.results.factuality.score); // 0.85\n * ```\n */\nexport async function runEvalSuite(params: {\n output: string;\n query?: string;\n sources?: string[];\n}): Promise<EvalSuiteResult> {\n const { output, query = \"\", sources } = params;\n\n const [factuality, relevance, coherence, toxicity] = await Promise.all([\n factualityEval(output, query, sources),\n relevanceEval(output, query),\n coherenceEval(output),\n toxicityEval(output),\n ]);\n\n const results: Record<string, EvalResult> = {\n factuality,\n relevance,\n coherence,\n toxicity,\n };\n\n const scores = Object.values(results).map((r) => r.score);\n const overall = scores.reduce((sum, s) => sum + s, 0) / scores.length;\n\n return { overall, results };\n}\n","/**\n * @fileoverview Mastra Telemetry & Instance Factory\n *\n * Creates configured Mastra instances with OpenTelemetry-compatible\n * tracing, logging, and agent registration.\n */\n\nimport { Mastra } from \"@mastra/core\";\n\nexport interface TelemetryConfig {\n serviceName: string;\n enabled?: boolean;\n sampling?: number;\n exporterUrl?: string;\n}\n\nexport interface MastraInstanceConfig {\n agents?: Record<string, any>;\n workflows?: Record<string, any>;\n telemetry?: TelemetryConfig;\n storage?: any;\n}\n\n/**\n * Create a fully configured Mastra instance with agents, workflows,\n * and telemetry. Central entry point for Mastra framework setup.\n *\n * @example\n * ```ts\n * import { createMastraInstance } from \"chat-agent-toolkit/mastra\";\n *\n * const mastra = createMastraInstance({\n * agents: { assistant, researcher },\n * workflows: { researchWorkflow },\n * telemetry: {\n * serviceName: \"my-app\",\n * enabled: true,\n * },\n * });\n *\n * const agent = mastra.getAgent(\"assistant\");\n * const result = await agent.generate(\"Hello\");\n * ```\n */\nexport function createMastraInstance(config: MastraInstanceConfig): Mastra {\n const mastraConfig: any = {};\n\n if (config.agents) {\n mastraConfig.agents = config.agents;\n }\n\n if (config.workflows) {\n mastraConfig.workflows = config.workflows;\n }\n\n if (config.telemetry) {\n mastraConfig.telemetry = {\n serviceName: config.telemetry.serviceName,\n enabled: config.telemetry.enabled ?? true,\n sampling: {\n default: config.telemetry.sampling ?? 1.0,\n },\n };\n }\n\n if (config.storage) {\n mastraConfig.storage = config.storage;\n }\n\n return new Mastra(mastraConfig);\n}\n","/**\n * @fileoverview Mastra Model Routing\n *\n * Multi-provider model routing with strategy selection:\n * cost-optimized, latency-optimized, capability-based, or round-robin.\n */\n\nimport { Agent } from \"@mastra/core/agent\";\n\nexport type RoutingStrategy = \"cost\" | \"latency\" | \"capability\" | \"round-robin\";\n\nexport interface ModelRouterConfig {\n providers: Array<{\n id: string;\n model: any;\n costPer1kTokens?: number;\n avgLatencyMs?: number;\n capabilities?: string[];\n priority?: number;\n }>;\n strategy: RoutingStrategy;\n fallbackProviderId?: string;\n}\n\n/**\n * Model router that selects providers based on configurable strategies.\n *\n * @example\n * ```ts\n * import { createModelRouter } from \"chat-agent-toolkit/mastra\";\n * import { openai } from \"@ai-sdk/openai\";\n * import { anthropic } from \"@ai-sdk/anthropic\";\n *\n * const router = createModelRouter({\n * providers: [\n * { id: \"openai\", model: openai(\"gpt-4o\"), costPer1kTokens: 0.005 },\n * { id: \"anthropic\", model: anthropic(\"claude-sonnet-4-20250514\"), costPer1kTokens: 0.003 },\n * { id: \"fast\", model: openai(\"gpt-4o-mini\"), costPer1kTokens: 0.0002, avgLatencyMs: 200 },\n * ],\n * strategy: \"cost\",\n * });\n *\n * const model = router.select(); // cheapest provider\n * const model2 = router.select({ capabilities: [\"vision\"] }); // capability match\n * ```\n */\nexport function createModelRouter(config: ModelRouterConfig) {\n let roundRobinIndex = 0;\n\n return {\n select(options?: {\n capabilities?: string[];\n maxCost?: number;\n maxLatency?: number;\n }): any {\n let candidates = [...config.providers];\n\n if (options?.capabilities) {\n candidates = candidates.filter((p) =>\n options.capabilities!.every(\n (cap) => p.capabilities?.includes(cap)\n )\n );\n }\n\n if (options?.maxCost) {\n candidates = candidates.filter(\n (p) => (p.costPer1kTokens ?? Infinity) <= options.maxCost!\n );\n }\n\n if (options?.maxLatency) {\n candidates = candidates.filter(\n (p) => (p.avgLatencyMs ?? Infinity) <= options.maxLatency!\n );\n }\n\n if (candidates.length === 0) {\n const fallback = config.providers.find(\n (p) => p.id === config.fallbackProviderId\n );\n if (fallback) return fallback.model;\n return config.providers[0]?.model;\n }\n\n switch (config.strategy) {\n case \"cost\":\n candidates.sort(\n (a, b) => (a.costPer1kTokens ?? 0) - (b.costPer1kTokens ?? 0)\n );\n return candidates[0].model;\n\n case \"latency\":\n candidates.sort(\n (a, b) => (a.avgLatencyMs ?? 0) - (b.avgLatencyMs ?? 0)\n );\n return candidates[0].model;\n\n case \"capability\":\n candidates.sort(\n (a, b) => (b.capabilities?.length ?? 0) - (a.capabilities?.length ?? 0)\n );\n return candidates[0].model;\n\n case \"round-robin\":\n const selected = candidates[roundRobinIndex % candidates.length];\n roundRobinIndex++;\n return selected.model;\n\n default:\n return candidates[0].model;\n }\n },\n\n createAgent(\n agentConfig: { id: string; name: string; instructions: string; tools?: Record<string, any> },\n routingOptions?: { capabilities?: string[]; maxCost?: number; maxLatency?: number }\n ): Agent {\n const model = this.select(routingOptions);\n return new Agent({\n id: agentConfig.id,\n name: agentConfig.name,\n instructions: agentConfig.instructions,\n model,\n tools: agentConfig.tools || {},\n });\n },\n };\n}\n\n/**\n * Load a Mastra-compatible model from a provider string.\n * Convenience wrapper around Vercel AI SDK provider imports.\n *\n * @example\n * ```ts\n * const model = await loadMastraModel(\"openai\", \"gpt-4o\");\n * const model2 = await loadMastraModel(\"anthropic\", \"claude-sonnet-4-20250514\");\n * const model3 = await loadMastraModel(\"groq\", \"llama-3.3-70b-versatile\");\n * ```\n */\nexport async function loadMastraModel(\n provider: \"openai\" | \"anthropic\" | \"groq\" | \"google\",\n modelId: string\n): Promise<any> {\n switch (provider) {\n case \"openai\": {\n const { openai } = await import(\"@ai-sdk/openai\");\n return openai(modelId);\n }\n case \"anthropic\": {\n const { anthropic } = await import(\"@ai-sdk/anthropic\");\n return anthropic(modelId);\n }\n case \"groq\": {\n const { createGroq } = await import(\"@ai-sdk/groq\");\n return createGroq({})(modelId);\n }\n case \"google\": {\n const { google } = await import(\"@ai-sdk/google\");\n return google(modelId);\n }\n default:\n throw new Error(`Unsupported provider: ${provider}`);\n }\n}\n","/**\r\n * @module research/models/providers/index\r\n * @description Research library module.\r\n *\r\n * This file provides metadata about providers without importing them directly,\r\n * to avoid circular dependency issues with the config system.\r\n */\r\nimport { ModelProviderUISection } from \"../types\";\r\n\r\n/**\r\n * Gets provider UI configuration without triggering circular dependencies.\r\n * This function uses static metadata instead of importing provider classes.\r\n */\r\nexport const getModelProvidersUIConfigSection =\r\n (): ModelProviderUISection[] => {\r\n // Import statically defined metadata instead of loading the providers\r\n // This breaks the circular dependency\r\n return [\r\n {\r\n key: \"openai\",\r\n name: \"OpenAI\",\r\n fields: getOpenAIConfigFields(),\r\n },\r\n {\r\n key: \"anthropic\",\r\n name: \"Anthropic\",\r\n fields: getAnthropicConfigFields(),\r\n },\r\n {\r\n key: \"gemini\",\r\n name: \"Google Gemini\",\r\n fields: getGeminiConfigFields(),\r\n },\r\n {\r\n key: \"groq\",\r\n name: \"Groq\",\r\n fields: getGroqConfigFields(),\r\n },\r\n {\r\n key: \"deepseek\",\r\n name: \"DeepSeek\",\r\n fields: getDeepSeekConfigFields(),\r\n },\r\n {\r\n key: \"nvidia\",\r\n name: \"NVIDIA\",\r\n fields: getNvidiaConfigFields(),\r\n },\r\n {\r\n key: \"openrouter\",\r\n name: \"OpenRouter\",\r\n fields: getOpenRouterConfigFields(),\r\n },\r\n {\r\n key: \"perplexity\",\r\n name: \"Perplexity\",\r\n fields: getPerplexityConfigFields(),\r\n },\r\n ];\r\n };\r\n\r\n// Static config field definitions to avoid loading provider classes\r\n// These match the providerConfigFields in each provider file\r\nfunction getOpenAIConfigFields() {\r\n return [\r\n {\r\n type: \"password\" as const,\r\n name: \"API Key\",\r\n key: \"apiKey\",\r\n description: \"Your OpenAI API key\",\r\n required: true,\r\n placeholder: \"OpenAI API Key\",\r\n env: \"OPENAI_API_KEY\",\r\n scope: \"server\" as const,\r\n },\r\n {\r\n type: \"string\" as const,\r\n name: \"Base URL\",\r\n key: \"baseURL\",\r\n description: \"The base URL for the OpenAI API\",\r\n required: true,\r\n placeholder: \"OpenAI Base URL\",\r\n default: \"https://api.openai.com/v1\",\r\n env: \"OPENAI_BASE_URL\",\r\n scope: \"server\" as const,\r\n },\r\n ];\r\n}\r\n\r\n\r\nfunction getAnthropicConfigFields() {\r\n return [\r\n {\r\n type: \"password\" as const,\r\n name: \"API Key\",\r\n key: \"apiKey\",\r\n description: \"Your Anthropic API key\",\r\n required: true,\r\n placeholder: \"Anthropic API Key\",\r\n env: \"ANTHROPIC_API_KEY\",\r\n scope: \"server\" as const,\r\n },\r\n ];\r\n}\r\n\r\nfunction getGeminiConfigFields() {\r\n return [\r\n {\r\n type: \"password\" as const,\r\n name: \"API Key\",\r\n key: \"apiKey\",\r\n description: \"Your Google Gemini API key\",\r\n required: true,\r\n placeholder: \"Google Gemini API Key\",\r\n env: \"GEMINI_API_KEY\",\r\n scope: \"server\" as const,\r\n },\r\n ];\r\n}\r\n\r\nfunction getGroqConfigFields() {\r\n return [\r\n {\r\n type: \"password\" as const,\r\n name: \"API Key\",\r\n key: \"apiKey\",\r\n description: \"Your Groq API key. Free tier includes fast inference on Llama and Mixtral models - get yours at console.groq.com\",\r\n required: true,\r\n placeholder: \"gsk_...\",\r\n env: \"GROQ_API_KEY\",\r\n scope: \"server\" as const,\r\n },\r\n ];\r\n}\r\n\r\nfunction getDeepSeekConfigFields() {\r\n return [\r\n {\r\n type: \"password\" as const,\r\n name: \"API Key\",\r\n key: \"apiKey\",\r\n description: \"Your DeepSeek API key\",\r\n required: true,\r\n placeholder: \"DeepSeek API Key\",\r\n env: \"DEEPSEEK_API_KEY\",\r\n scope: \"server\" as const,\r\n },\r\n ];\r\n}\r\n\r\nfunction getNvidiaConfigFields() {\r\n return [\r\n {\r\n type: \"password\" as const,\r\n name: \"API Key\",\r\n key: \"apiKey\",\r\n description: \"Your NVIDIA API key. Free tier includes access to Nemotron, Llama, and other models - get yours at build.nvidia.com\",\r\n required: true,\r\n placeholder: \"nvapi-...\",\r\n env: \"NVIDIA_API_KEY\",\r\n scope: \"server\" as const,\r\n },\r\n {\r\n type: \"string\" as const,\r\n name: \"Base URL\",\r\n key: \"baseURL\",\r\n description: \"The base URL for NVIDIA's OpenAI-compatible API\",\r\n required: true,\r\n placeholder: \"https://integrate.api.nvidia.com/v1\",\r\n default: \"https://integrate.api.nvidia.com/v1\",\r\n env: \"NVIDIA_BASE_URL\",\r\n scope: \"server\" as const,\r\n },\r\n ];\r\n}\r\n\r\nfunction getOpenRouterConfigFields() {\r\n return [\r\n {\r\n type: \"password\" as const,\r\n name: \"API Key\",\r\n key: \"apiKey\",\r\n description: \"Your OpenRouter API key. Get one free at openrouter.ai - includes free access to Llama 3.3 70B, Nemotron, and other models.\",\r\n required: true,\r\n placeholder: \"sk-or-v1-...\",\r\n env: \"OPENROUTER_API_KEY\",\r\n scope: \"server\" as const,\r\n },\r\n {\r\n type: \"string\" as const,\r\n name: \"Base URL\",\r\n key: \"baseURL\",\r\n description: \"The base URL for OpenRouter's OpenAI-compatible API\",\r\n required: true,\r\n placeholder: \"https://openrouter.ai/api/v1\",\r\n default: \"https://openrouter.ai/api/v1\",\r\n env: \"OPENROUTER_BASE_URL\",\r\n scope: \"server\" as const,\r\n },\r\n ];\r\n}\r\n\r\nfunction getPerplexityConfigFields() {\r\n return [\r\n {\r\n type: \"password\" as const,\r\n name: \"API Key\",\r\n key: \"apiKey\",\r\n description: \"Your Perplexity API key\",\r\n required: true,\r\n placeholder: \"pplx-...\",\r\n env: \"PERPLEXITY_API_KEY\",\r\n scope: \"server\" as const,\r\n links: [\r\n {\r\n name: \"Get API Key\",\r\n url: \"https://www.perplexity.ai/settings/api\",\r\n },\r\n ],\r\n },\r\n ];\r\n}\r\n","/**\r\n * Runtime env-var accessor.\r\n * Supports both local development (process.env) and Cloudflare Workers\r\n * (cloudflare:workers virtual module) via dynamic import.\r\n */\r\nexport function getEnv(key: string): string | undefined {\r\n // Try Cloudflare Workers context first (production)\r\n try {\r\n // @ts-ignore - cloudflare:workers is a virtual module provided by @cloudflare/vite-plugin\r\n const cfWorkers = require(\"cloudflare:workers\");\r\n return cfWorkers.env?.[key];\r\n } catch {\r\n // Fallback to process.env for local development\r\n return process.env[key];\r\n }\r\n}\r\n","/**\r\n * List of default models for the chat providers and a list of models\r\n * @property {string} provider - The provider name\r\n * @property {string} docs - The documentation URL for the model\r\n * @property {string} api_key - The API key url for the model\r\n * @property {string} default - The default model for the chat provider\r\n * @property {Object[]} models - The list of models available for the chat provider\r\n * @category Generate\r\n */\r\nexport const LANGUAGE_MODELS = [\r\n {\r\n \"provider\": \"NVIDIA\",\r\n \"docs\": \"https://docs.api.nvidia.com/nim/reference/llm-apis\",\r\n \"api_key\": \"https://build.nvidia.com/settings/api-keys\",\r\n \"default\": \"nvidia/llama-3.1-nemotron-70b-instruct\",\r\n \"models\": [\r\n {\r\n \"name\": \"Llama 3.1 Nemotron 70B Instruct\",\r\n \"id\": \"nvidia/llama-3.1-nemotron-70b-instruct\",\r\n \"contextLength\": 131_072,\r\n \"free\": true,\r\n \"type\": \"text\"\r\n },\r\n {\r\n \"name\": \"Nemotron 3 Super 120B\",\r\n \"id\": \"nvidia/nemotron-3-super-120b-a12b\",\r\n \"contextLength\": 1_000_000,\r\n \"free\": true,\r\n \"type\": \"text\"\r\n },\r\n {\r\n \"name\": \"Nemotron-4 340B\",\r\n \"id\": \"nvidia/nemotron-4-340b\",\r\n \"contextLength\": 131_072,\r\n \"free\": false,\r\n \"type\": \"text\"\r\n },\r\n {\r\n \"name\": \"Llama 3.3 70B Instruct\",\r\n \"id\": \"meta/llama-3.3-70b-instruct\",\r\n \"contextLength\": 131_072,\r\n \"free\": true,\r\n \"type\": \"text\"\r\n },\r\n {\r\n \"name\": \"Llama 3.1 405B Instruct\",\r\n \"id\": \"meta/llama-3.1-405b-instruct\",\r\n \"contextLength\": 131_072,\r\n \"free\": false,\r\n \"type\": \"text\"\r\n },\r\n {\r\n \"name\": \"Llama 3.1 8B Instruct\",\r\n \"id\": \"meta/llama-3.1-8b-instruct\",\r\n \"contextLength\": 131_072,\r\n \"free\": true,\r\n \"type\": \"text\"\r\n },\r\n {\r\n \"name\": \"Gemma 4 31B IT\",\r\n \"id\": \"google/gemma-4-31b-it\",\r\n \"contextLength\": 131_072,\r\n \"free\": true,\r\n \"type\": \"text\"\r\n },\r\n {\r\n \"name\": \"Mistral Large 2\",\r\n \"id\": \"mistralai/mistral-large-2\",\r\n \"contextLength\": 131_072,\r\n \"free\": false,\r\n \"type\": \"text\"\r\n }\r\n ]\r\n},\r\n {\r\n provider: \"Cloudflare\",\r\n docs: \"https://developers.cloudflare.com/workers-ai/\",\r\n api_key: \"https://dash.cloudflare.com/profile/api-tokens\",\r\n default: \"llama-4-scout-17b-16e-instruct\",\r\n models: [\r\n {\r\n name: \"Llama 4 Scout 17B 16E Instruct\",\r\n id: \"llama-4-scout-17b-16e-instruct\",\r\n contextLength: 128000,\r\n },\r\n {\r\n name: \"Llama 3.3 70B Instruct FP8 Fast\",\r\n id: \"llama-3.3-70b-instruct-fp8-fast\",\r\n contextLength: 128000,\r\n },\r\n {\r\n name: \"Llama 3.1 8B Instruct Fast\",\r\n id: \"llama-3.1-8b-instruct-fast\",\r\n contextLength: 128000,\r\n },\r\n {\r\n name: \"Gemma 3 12B IT\",\r\n id: \"gemma-3-12b-it\",\r\n contextLength: 128000,\r\n },\r\n {\r\n name: \"Mistral Small 3.1 24B Instruct\",\r\n id: \"mistral-small-3.1-24b-instruct\",\r\n contextLength: 128000,\r\n },\r\n {\r\n name: \"QwQ 32B\",\r\n id: \"qwq-32b\",\r\n contextLength: 32768,\r\n },\r\n {\r\n name: \"Qwen2.5 Coder 32B Instruct\",\r\n id: \"qwen2.5-coder-32b-instruct\",\r\n contextLength: 32768,\r\n },\r\n {\r\n name: \"Llama Guard 3 8B\",\r\n id: \"llama-guard-3-8b\",\r\n contextLength: 8192,\r\n },\r\n {\r\n name: \"DeepSeek R1 Distill Qwen 32B\",\r\n id: \"deepseek-r1-distill-qwen-32b\",\r\n contextLength: 32768,\r\n },\r\n {\r\n name: \"Llama 3.2 1B Instruct\",\r\n id: \"llama-3.2-1b-instruct\",\r\n contextLength: 131072,\r\n },\r\n {\r\n name: \"Llama 3.2 3B Instruct\",\r\n id: \"llama-3.2-3b-instruct\",\r\n contextLength: 131072,\r\n },\r\n {\r\n name: \"Llama 3.2 11B Vision Instruct\",\r\n id: \"llama-3.2-11b-vision-instruct\",\r\n contextLength: 131072,\r\n },\r\n {\r\n name: \"Llama 3.1 8B Instruct AWQ\",\r\n id: \"llama-3.1-8b-instruct-awq\",\r\n contextLength: 128000,\r\n },\r\n {\r\n name: \"Llama 3.1 8B Instruct FP8\",\r\n id: \"llama-3.1-8b-instruct-fp8\",\r\n contextLength: 128000,\r\n },\r\n {\r\n name: \"MeloTTS\",\r\n id: \"melotts\",\r\n contextLength: 1024,\r\n },\r\n {\r\n name: \"Llama 3.1 8B Instruct\",\r\n id: \"llama-3.1-8b-instruct\",\r\n contextLength: 128000,\r\n },\r\n {\r\n name: \"Meta Llama 3 8B Instruct\",\r\n id: \"meta-llama-3-8b-instruct\",\r\n contextLength: 8192,\r\n },\r\n {\r\n name: \"Whisper Large V3 Turbo\",\r\n id: \"whisper-large-v3-turbo\",\r\n contextLength: 448000,\r\n },\r\n {\r\n name: \"Llama 3 8B Instruct AWQ\",\r\n id: \"llama-3-8b-instruct-awq\",\r\n contextLength: 8192,\r\n },\r\n {\r\n name: \"LLaVA 1.5 7B HF\",\r\n id: \"llava-1.5-7b-hf\",\r\n contextLength: 4096,\r\n },\r\n {\r\n name: \"Una Cybertron 7B V2 BF16\",\r\n id: \"una-cybertron-7b-v2-bf16\",\r\n contextLength: 32768,\r\n },\r\n {\r\n name: \"Whisper Tiny EN\",\r\n id: \"whisper-tiny-en\",\r\n contextLength: 448000,\r\n },\r\n {\r\n name: \"Llama 3 8B Instruct\",\r\n id: \"llama-3-8b-instruct\",\r\n contextLength: 8192,\r\n },\r\n {\r\n name: \"Mistral 7B Instruct v0.2\",\r\n id: \"mistral-7b-instruct-v0.2\",\r\n contextLength: 32768,\r\n },\r\n {\r\n name: \"Gemma 7B IT LoRA\",\r\n id: \"gemma-7b-it-lora\",\r\n contextLength: 8192,\r\n },\r\n {\r\n name: \"Gemma 2B IT LoRA\",\r\n id: \"gemma-2b-it-lora\",\r\n contextLength: 8192,\r\n },\r\n {\r\n name: \"Llama 2 7B Chat HF LoRA\",\r\n id: \"llama-2-7b-chat-hf-lora\",\r\n contextLength: 4096,\r\n },\r\n {\r\n name: \"Gemma 7B IT\",\r\n id: \"gemma-7b-it\",\r\n contextLength: 8192,\r\n },\r\n {\r\n name: \"Starling LM 7B Beta\",\r\n id: \"starling-lm-7b-beta\",\r\n contextLength: 8192,\r\n },\r\n {\r\n name: \"Hermes 2 Pro Mistral 7B\",\r\n id: \"hermes-2-pro-mistral-7b\",\r\n contextLength: 32768,\r\n },\r\n {\r\n name: \"Mistral 7B Instruct v0.2 LoRA\",\r\n id: \"mistral-7b-instruct-v0.2-lora\",\r\n contextLength: 32768,\r\n },\r\n {\r\n name: \"Qwen1.5 1.8B Chat\",\r\n id: \"qwen1.5-1.8b-chat\",\r\n contextLength: 32768,\r\n },\r\n {\r\n name: \"UForm Gen2 Qwen 500M\",\r\n id: \"uform-gen2-qwen-500m\",\r\n contextLength: 2048,\r\n },\r\n {\r\n name: \"BART Large CNN\",\r\n id: \"bart-large-cnn\",\r\n contextLength: 1024,\r\n },\r\n {\r\n name: \"Phi-2\",\r\n id: \"phi-2\",\r\n contextLength: 2048,\r\n },\r\n {\r\n name: \"TinyLlama 1.1B Chat v1.0\",\r\n id: \"tinyllama-1.1b-chat-v1.0\",\r\n contextLength: 2048,\r\n },\r\n {\r\n name: \"Qwen1.5 14B Chat AWQ\",\r\n id: \"qwen1.5-14b-chat-awq\",\r\n contextLength: 32768,\r\n },\r\n {\r\n name: \"Qwen1.5 7B Chat AWQ\",\r\n id: \"qwen1.5-7b-chat-awq\",\r\n contextLength: 32768,\r\n },\r\n {\r\n name: \"Qwen1.5 0.5B Chat\",\r\n id: \"qwen1.5-0.5b-chat\",\r\n contextLength: 32768,\r\n },\r\n {\r\n name: \"DiscoLM German 7B v1 AWQ\",\r\n id: \"discolm-german-7b-v1-awq\",\r\n contextLength: 32768,\r\n },\r\n {\r\n name: \"Falcon 7B Instruct\",\r\n id: \"falcon-7b-instruct\",\r\n contextLength: 2048,\r\n },\r\n {\r\n name: \"OpenChat 3.5 0106\",\r\n id: \"openchat-3.5-0106\",\r\n contextLength: 8192,\r\n },\r\n {\r\n name: \"SQLCoder 7B 2\",\r\n id: \"sqlcoder-7b-2\",\r\n contextLength: 16384,\r\n },\r\n {\r\n name: \"DeepSeek Math 7B Instruct\",\r\n id: \"deepseek-math-7b-instruct\",\r\n contextLength: 4096,\r\n },\r\n {\r\n name: \"DETR ResNet-50\",\r\n id: \"detr-resnet-50\",\r\n contextLength: 1024,\r\n },\r\n {\r\n name: \"Stable Diffusion XL Lightning\",\r\n id: \"stable-diffusion-xl-lightning\",\r\n contextLength: 77,\r\n },\r\n {\r\n name: \"DreamShaper 8 LCM\",\r\n id: \"dreamshaper-8-lcm\",\r\n contextLength: 77,\r\n },\r\n {\r\n name: \"Stable Diffusion v1.5 Img2Img\",\r\n id: \"stable-diffusion-v1-5-img2img\",\r\n contextLength: 77,\r\n },\r\n {\r\n name: \"Stable Diffusion v1.5 Inpainting\",\r\n id: \"stable-diffusion-v1-5-inpainting\",\r\n contextLength: 77,\r\n },\r\n {\r\n name: \"DeepSeek Coder 6.7B Instruct AWQ\",\r\n id: \"deepseek-coder-6.7b-instruct-awq\",\r\n contextLength: 16384,\r\n },\r\n {\r\n name: \"DeepSeek Coder 6.7B Base AWQ\",\r\n id: \"deepseek-coder-6.7b-base-awq\",\r\n contextLength: 16384,\r\n },\r\n {\r\n name: \"LlamaGuard 7B AWQ\",\r\n id: \"llamaguard-7b-awq\",\r\n contextLength: 4096,\r\n },\r\n {\r\n name: \"Neural Chat 7B v3.1 AWQ\",\r\n id: \"neural-chat-7b-v3-1-awq\",\r\n contextLength: 8192,\r\n },\r\n {\r\n name: \"OpenHermes 2.5 Mistral 7B AWQ\",\r\n id: \"openhermes-2.5-mistral-7b-awq\",\r\n contextLength: 8192,\r\n },\r\n {\r\n name: \"Llama 2 13B Chat AWQ\",\r\n id: \"llama-2-13b-chat-awq\",\r\n contextLength: 4096,\r\n },\r\n {\r\n name: \"Mistral 7B Instruct v0.1 AWQ\",\r\n id: \"mistral-7b-instruct-v0.1-awq\",\r\n contextLength: 8192,\r\n },\r\n {\r\n name: \"Zephyr 7B Beta AWQ\",\r\n id: \"zephyr-7b-beta-awq\",\r\n contextLength: 8192,\r\n },\r\n {\r\n name: \"Stable Diffusion XL Base 1.0\",\r\n id: \"stable-diffusion-xl-base-1.0\",\r\n contextLength: 77,\r\n },\r\n {\r\n name: \"BGE Large EN v1.5\",\r\n id: \"bge-large-en-v1.5\",\r\n contextLength: 512,\r\n },\r\n {\r\n name: \"BGE Small EN v1.5\",\r\n id: \"bge-small-en-v1.5\",\r\n contextLength: 512,\r\n },\r\n {\r\n name: \"Llama 2 7B Chat FP16\",\r\n id: \"llama-2-7b-chat-fp16\",\r\n contextLength: 4096,\r\n },\r\n {\r\n name: \"Mistral 7B Instruct v0.1\",\r\n id: \"mistral-7b-instruct-v0.1\",\r\n contextLength: 8192,\r\n },\r\n {\r\n name: \"BGE Base EN v1.5\",\r\n id: \"bge-base-en-v1.5\",\r\n contextLength: 512,\r\n },\r\n {\r\n name: \"DistilBERT SST-2 Int8\",\r\n id: \"distilbert-sst-2-int8\",\r\n contextLength: 512,\r\n },\r\n {\r\n name: \"Llama 2 7B Chat Int8\",\r\n id: \"llama-2-7b-chat-int8\",\r\n contextLength: 4096,\r\n },\r\n {\r\n name: \"M2M100 1.2B\",\r\n id: \"m2m100-1.2b\",\r\n contextLength: 1024,\r\n },\r\n {\r\n name: \"ResNet-50\",\r\n id: \"resnet-50\",\r\n contextLength: 224,\r\n },\r\n {\r\n name: \"Whisper\",\r\n id: \"whisper\",\r\n contextLength: 448000,\r\n },\r\n {\r\n name: \"Llama 3.1 70B Instruct\",\r\n id: \"llama-3.1-70b-instruct\",\r\n contextLength: 128000,\r\n },\r\n ],\r\n },\r\n {\r\n provider: \"Perplexity\",\r\n docs: \"https://docs.perplexity.ai/models/model-cards\",\r\n api_key: \"https://www.perplexity.ai/account/api/keys\",\r\n default: \"sonar\",\r\n models: [\r\n {\r\n name: \"Sonar Pro\",\r\n id: \"sonar-pro\",\r\n contextLength: 200000,\r\n },\r\n {\r\n name: \"Sonar\",\r\n id: \"sonar\",\r\n contextLength: 128000,\r\n },\r\n {\r\n name: \"Sonar Reasoning Pro\",\r\n id: \"sonar-reasoning-pro\",\r\n contextLength: 128000,\r\n },\r\n {\r\n name: \"Sonar Reasoning\",\r\n id: \"sonar-reasoning\",\r\n contextLength: 128000,\r\n },\r\n {\r\n name: \"Sonar Deep Research\",\r\n id: \"sonar-deep-research\",\r\n contextLength: 128000,\r\n },\r\n {\r\n name: \"Llama 3.1 Sonar Small 128k Online\",\r\n id: \"llama-3.1-sonar-small-128k-online\",\r\n contextLength: 127072,\r\n },\r\n {\r\n name: \"Llama 3.1 Sonar Large 128k Online\",\r\n id: \"llama-3.1-sonar-large-128k-online\",\r\n contextLength: 127072,\r\n },\r\n {\r\n name: \"Llama 3.1 Sonar Huge 128k Online\",\r\n id: \"llama-3.1-sonar-huge-128k-online\",\r\n contextLength: 127072,\r\n },\r\n ],\r\n },\r\n {\r\n provider: \"Groq\",\r\n docs: \"https://console.groq.com/docs/overview\",\r\n api_key: \"https://console.groq.com/keys\",\r\n default: \"llama-3.3-70b-versatile\",\r\n models: [\r\n {\r\n name: \"Llama 3.3 70B Versatile (Free)\",\r\n id: \"llama-3.3-70b-versatile\",\r\n contextLength: 131072,\r\n free: true,\r\n type: \"text-generation\",\r\n rateLimit: \"300K TPM / 1K RPM = ~432M tokens/day\",\r\n },\r\n {\r\n name: \"Llama 3.1 8B Instant (Free)\",\r\n id: \"llama-3.1-8b-instant\",\r\n contextLength: 8192,\r\n free: true,\r\n type: \"text-generation\",\r\n rateLimit: \"250K TPM / 1K RPM = ~360M tokens/day\",\r\n },\r\n {\r\n name: \"Llama 4 Scout 17B (Free)\",\r\n id: \"meta-llama/llama-4-scout-17b-16e-instruct\",\r\n contextLength: 131072,\r\n free: true,\r\n type: \"text-generation\",\r\n rateLimit: \"300K TPM / 1K RPM = ~432M tokens/day\",\r\n },\r\n {\r\n name: \"Qwen 3 32B (Free)\",\r\n id: \"qwen/qwen3-32b\",\r\n contextLength: 128000,\r\n free: true,\r\n type: \"text-generation\",\r\n rateLimit: \"300K TPM / 1K RPM = ~432M tokens/day\",\r\n },\r\n {\r\n name: \"GPT-OSS 120B (Free)\",\r\n id: \"openai/gpt-oss-120b\",\r\n contextLength: 32768,\r\n free: true,\r\n type: \"text-generation\",\r\n rateLimit: \"250K TPM / 1K RPM = ~360M tokens/day\",\r\n },\r\n {\r\n name: \"GPT-OSS 20B (Free)\",\r\n id: \"openai/gpt-oss-20b\",\r\n contextLength: 32768,\r\n free: true,\r\n type: \"text-generation\",\r\n rateLimit: \"250K TPM / 1K RPM = ~360M tokens/day\",\r\n },\r\n {\r\n name: \"Groq Compound (Free)\",\r\n id: \"groq/compound\",\r\n contextLength: 32768,\r\n free: true,\r\n type: \"text-generation\",\r\n rateLimit: \"200K TPM / 200 RPM = ~288M tokens/day\",\r\n },\r\n {\r\n name: \"Groq Compound Mini (Free)\",\r\n id: \"groq/compound-mini\",\r\n contextLength: 32768,\r\n free: true,\r\n type: \"text-generation\",\r\n rateLimit: \"200K TPM / 200 RPM = ~288M tokens/day\",\r\n },\r\n {\r\n name: \"GPT-OSS Safeguard 20B (Free)\",\r\n id: \"openai/gpt-oss-safeguard-20b\",\r\n contextLength: 32768,\r\n free: true,\r\n type: \"text-generation\",\r\n rateLimit: \"150K TPM / 1K RPM = ~216M tokens/day\",\r\n },\r\n ],\r\n },\r\n {\r\n provider: \"OpenAI\",\r\n docs: \"https://platform.openai.com/docs/overview\",\r\n api_key: \"https://platform.openai.com/api-keys\",\r\n default: \"gpt-4o\",\r\n models: [\r\n {\r\n name: \"GPT-4 Omni\",\r\n id: \"gpt-4o\",\r\n contextLength: 128000,\r\n },\r\n {\r\n name: \"GPT-4 Omni Mini\",\r\n id: \"gpt-4o-mini\",\r\n contextLength: 128000,\r\n },\r\n {\r\n name: \"GPT-4 Turbo\",\r\n id: \"gpt-4-turbo\",\r\n contextLength: 128000,\r\n },\r\n {\r\n name: \"GPT-4\",\r\n id: \"gpt-4\",\r\n contextLength: 8192,\r\n },\r\n {\r\n name: \"GPT-3.5 Turbo\",\r\n id: \"gpt-3.5-turbo\",\r\n contextLength: 16385,\r\n },\r\n ],\r\n },\r\n {\r\n provider: \"Anthropic\",\r\n docs: \"https://docs.anthropic.com/en/docs/welcome\",\r\n api_key: \"https://console.anthropic.com/settings/keys\",\r\n default: \"claude-3-7-sonnet-20250219\",\r\n models: [\r\n {\r\n name: \"Claude 3.7 Sonnet\",\r\n id: \"claude-3-7-sonnet-20250219\",\r\n contextLength: 200000,\r\n },\r\n {\r\n name: \"Claude 3.5 Sonnet\",\r\n id: \"claude-3-5-sonnet-20241022\",\r\n contextLength: 200000,\r\n },\r\n {\r\n name: \"Claude 3 Opus\",\r\n id: \"claude-3-opus-20240229\",\r\n contextLength: 200000,\r\n },\r\n {\r\n name: \"Claude 3 Sonnet\",\r\n id: \"claude-3-sonnet-20240229\",\r\n contextLength: 200000,\r\n },\r\n {\r\n name: \"Claude 3 Haiku\",\r\n id: \"claude-3-haiku-20240307\",\r\n contextLength: 200000,\r\n },\r\n ],\r\n },\r\n {\r\n provider: \"TogetherAI\",\r\n docs: \"https://docs.together.ai/docs/quickstart\",\r\n api_key: \"https://api.together.xyz/settings/api-keys\",\r\n default: \"meta-llama/Meta-Llama-3.1-8B-Instruct-Turbo\",\r\n models: [\r\n {\r\n name: \"Llama 3.1 8B Instruct Turbo\",\r\n id: \"meta-llama/Meta-Llama-3.1-8B-Instruct-Turbo\",\r\n contextLength: 131072,\r\n },\r\n {\r\n name: \"Llama 3.1 70B Instruct Turbo\",\r\n id: \"meta-llama/Meta-Llama-3.1-70B-Instruct-Turbo\",\r\n contextLength: 131072,\r\n },\r\n {\r\n name: \"Llama 3.1 405B Instruct Turbo\",\r\n id: \"meta-llama/Meta-Llama-3.1-405B-Instruct-Turbo\",\r\n contextLength: 130815,\r\n },\r\n {\r\n name: \"Llama 3 8B Instruct Turbo\",\r\n id: \"meta-llama/Meta-Llama-3-8B-Instruct-Turbo\",\r\n contextLength: 8192,\r\n },\r\n {\r\n name: \"Llama 3 70B Instruct Turbo\",\r\n id: \"meta-llama/Meta-Llama-3-70B-Instruct-Turbo\",\r\n contextLength: 8192,\r\n },\r\n {\r\n name: \"Llama 3.2 3B Instruct Turbo\",\r\n id: \"meta-llama/Llama-3.2-3B-Instruct-Turbo\",\r\n contextLength: 131072,\r\n },\r\n {\r\n name: \"Llama 3 8B Instruct Lite\",\r\n id: \"meta-llama/Meta-Llama-3-8B-Instruct-Lite\",\r\n contextLength: 8192,\r\n },\r\n {\r\n name: \"Llama 3 70B Instruct Lite\",\r\n id: \"meta-llama/Meta-Llama-3-70B-Instruct-Lite\",\r\n contextLength: 8192,\r\n },\r\n {\r\n name: \"Llama 3 8B Instruct Reference\",\r\n id: \"meta-llama/Llama-3-8b-chat-hf\",\r\n contextLength: 8192,\r\n },\r\n {\r\n name: \"Llama 3 70B Instruct Reference\",\r\n id: \"meta-llama/Llama-3-70b-chat-hf\",\r\n contextLength: 8192,\r\n },\r\n {\r\n name: \"Llama 3.1 Nemotron 70B\",\r\n id: \"nvidia/Llama-3.1-Nemotron-70B-Instruct-HF\",\r\n contextLength: 32768,\r\n },\r\n {\r\n name: \"Qwen 2.5 Coder 32B Instruct\",\r\n id: \"Qwen/Qwen2.5-Coder-32B-Instruct\",\r\n contextLength: 32769,\r\n },\r\n {\r\n name: \"WizardLM-2 8x22B\",\r\n id: \"microsoft/WizardLM-2-8x22B\",\r\n contextLength: 65536,\r\n },\r\n {\r\n name: \"Gemma 2 27B\",\r\n id: \"google/gemma-2-27b-it\",\r\n contextLength: 8192,\r\n },\r\n {\r\n name: \"Gemma 2 9B\",\r\n id: \"google/gemma-2-9b-it\",\r\n contextLength: 8192,\r\n },\r\n {\r\n name: \"DBRX Instruct\",\r\n id: \"databricks/dbrx-instruct\",\r\n contextLength: 32768,\r\n },\r\n {\r\n name: \"DeepSeek LLM Chat (67B)\",\r\n id: \"deepseek-ai/deepseek-llm-67b-chat\",\r\n contextLength: 4096,\r\n },\r\n {\r\n name: \"Gemma Instruct (2B)\",\r\n id: \"google/gemma-2b-it\",\r\n contextLength: 8192,\r\n },\r\n {\r\n name: \"MythoMax-L2 (13B)\",\r\n id: \"Gryphe/MythoMax-L2-13b\",\r\n contextLength: 4096,\r\n },\r\n {\r\n name: \"LLaMA-2 Chat (13B)\",\r\n id: \"meta-llama/Llama-2-13b-chat-hf\",\r\n contextLength: 4096,\r\n },\r\n {\r\n name: \"Mistral (7B) Instruct\",\r\n id: \"mistralai/Mistral-7B-Instruct-v0.1\",\r\n contextLength: 8192,\r\n },\r\n {\r\n name: \"Mistral (7B) Instruct v0.2\",\r\n id: \"mistralai/Mistral-7B-Instruct-v0.2\",\r\n contextLength: 32768,\r\n },\r\n {\r\n name: \"Mistral (7B) Instruct v0.3\",\r\n id: \"mistralai/Mistral-7B-Instruct-v0.3\",\r\n contextLength: 32768,\r\n },\r\n {\r\n name: \"Mixtral-8x7B Instruct (46.7B)\",\r\n id: \"mistralai/Mixtral-8x7B-Instruct-v0.1\",\r\n contextLength: 32768,\r\n },\r\n {\r\n name: \"Mixtral-8x22B Instruct (141B)\",\r\n id: \"mistralai/Mixtral-8x22B-Instruct-v0.1\",\r\n contextLength: 65536,\r\n },\r\n {\r\n name: \"Nous Hermes 2 - Mixtral 8x7B-DPO (46.7B)\",\r\n id: \"NousResearch/Nous-Hermes-2-Mixtral-8x7B-DPO\",\r\n contextLength: 32768,\r\n },\r\n {\r\n name: \"Qwen 2.5 7B Instruct Turbo\",\r\n id: \"Qwen/Qwen2.5-7B-Instruct-Turbo\",\r\n contextLength: 32768,\r\n },\r\n {\r\n name: \"Qwen 2.5 72B Instruct Turbo\",\r\n id: \"Qwen/Qwen2.5-72B-Instruct-Turbo\",\r\n contextLength: 32768,\r\n },\r\n {\r\n name: \"Qwen 2 Instruct (72B)\",\r\n id: \"Qwen/Qwen2-72B-Instruct\",\r\n contextLength: 32768,\r\n },\r\n {\r\n name: \"StripedHyena Nous (7B)\",\r\n id: \"togethercomputer/StripedHyena-Nous-7B\",\r\n contextLength: 32768,\r\n },\r\n {\r\n name: \"Upstage SOLAR Instruct v1 (11B)\",\r\n id: \"upstage/SOLAR-10.7B-Instruct-v1.0\",\r\n contextLength: 4096,\r\n },\r\n {\r\n name: \"Llama 3.2 11B Vision Instruct Turbo (Free)\",\r\n id: \"meta-llama/Llama-Vision-Free\",\r\n contextLength: 131072,\r\n },\r\n {\r\n name: \"Llama 3.2 11B Vision Instruct Turbo\",\r\n id: \"meta-llama/Llama-3.2-11B-Vision-Instruct-Turbo\",\r\n contextLength: 131072,\r\n },\r\n {\r\n name: \"Llama 3.2 90B Vision Instruct Turbo\",\r\n id: \"meta-llama/Llama-3.2-90B-Vision-Instruct-Turbo\",\r\n contextLength: 131072,\r\n },\r\n ],\r\n },\r\n {\r\n provider: \"XAI\",\r\n docs: \"https://docs.x.ai/docs#models\",\r\n api_key: \"https://console.x.ai/\",\r\n default: \"grok-beta\",\r\n models: [\r\n {\r\n name: \"Grok\",\r\n id: \"grok-beta\",\r\n contextLength: 131072,\r\n },\r\n {\r\n name: \"Grok Vision\",\r\n id: \"grok-vision-beta\",\r\n contextLength: 8192,\r\n },\r\n ],\r\n },\r\n {\r\n provider: \"Google\",\r\n docs: \"https://cloud.google.com/vertex-ai/generative-ai/docs/learn/models\",\r\n api_key:\r\n \"https://cloud.google.com/vertex-ai/generative-ai/docs/start/express-mode/overview#api-keys\",\r\n models: [\r\n {\r\n name: \"Gemini 2.5 Pro Preview\",\r\n id: \"gemini-2.5-pro-preview-05-06\",\r\n contextLength: 1048576,\r\n },\r\n {\r\n name: \"Gemini 2.5 Flash Preview\",\r\n id: \"gemini-2.5-flash-preview-04-17\",\r\n contextLength: 1048576,\r\n },\r\n {\r\n name: \"Gemini 2.0 Flash\",\r\n id: \"gemini-2.0-flash-001\",\r\n contextLength: 1048576,\r\n },\r\n {\r\n name: \"Gemini 2.0 Flash-Lite\",\r\n id: \"gemini-2.0-flash-lite-001\",\r\n contextLength: 1048576,\r\n },\r\n {\r\n name: \"Gemini 2.0 Flash-Live\",\r\n id: \"gemini-2.0-flash-live-preview-04-09\",\r\n contextLength: 32768,\r\n },\r\n {\r\n name: \"Imagen 3\",\r\n id: \"imagen-3.0-generate-002\",\r\n contextLength: 480,\r\n },\r\n {\r\n name: \"Imagen 3 Fast\",\r\n id: \"imagen-3.0-fast-generate-001\",\r\n contextLength: 480,\r\n },\r\n {\r\n name: \"Llama 3.2 90B Vision Instruct Turbo\",\r\n id: \"meta-llama/Llama-3.2-90B-Vision-Instruct-Turbo\",\r\n contextLength: 131072,\r\n },\r\n {\r\n name: \"Llama 3.3 70B\",\r\n id: \"meta-llama/Llama-3.3-70B\",\r\n contextLength: 131072,\r\n },\r\n {\r\n name: \"Gemma 3\",\r\n id: \"gemma-3\",\r\n contextLength: 131072,\r\n },\r\n {\r\n name: \"Gemma 2\",\r\n id: \"gemma-2\",\r\n contextLength: 131072,\r\n },\r\n {\r\n name: \"Gemma\",\r\n id: \"gemma\",\r\n contextLength: 131072,\r\n },\r\n ],\r\n },\r\n {\r\n provider: \"Amazon\",\r\n docs: \"https://docs.aws.amazon.com/bedrock/\",\r\n api_key: \"https://console.aws.amazon.com/iam/home#/security_credentials\",\r\n default: \"anthropic.claude-3-5-sonnet-20241022-v2:0\",\r\n models: [\r\n {\r\n name: \"AI21 Jamba 1.5 Mini\",\r\n id: \"ai21.jamba-1-5-mini-v1:0\",\r\n contextLength: 256000,\r\n provider: \"AI21 Labs\",\r\n },\r\n {\r\n name: \"AI21 Jamba 1.5 Large\",\r\n id: \"ai21.jamba-1-5-large-v1:0\",\r\n contextLength: 256000,\r\n provider: \"AI21 Labs\",\r\n },\r\n {\r\n name: \"Amazon Nova Canvas\",\r\n id: \"amazon.nova-canvas-v1:0\",\r\n contextLength: 77,\r\n provider: \"Amazon\",\r\n type: \"image\",\r\n },\r\n {\r\n name: \"Amazon Nova Lite\",\r\n id: \"amazon.nova-lite-v1:0\",\r\n contextLength: 300000,\r\n provider: \"Amazon\",\r\n },\r\n {\r\n name: \"Amazon Nova Micro\",\r\n id: \"amazon.nova-micro-v1:0\",\r\n contextLength: 128000,\r\n provider: \"Amazon\",\r\n },\r\n {\r\n name: \"Amazon Nova Pro\",\r\n id: \"amazon.nova-pro-v1:0\",\r\n contextLength: 300000,\r\n provider: \"Amazon\",\r\n },\r\n {\r\n name: \"Amazon Nova Reel\",\r\n id: \"amazon.nova-reel-v1:0\",\r\n contextLength: 10000,\r\n provider: \"Amazon\",\r\n type: \"video\",\r\n },\r\n {\r\n name: \"Amazon Nova Reel V2 Lite\",\r\n id: \"amazon.nova-reel-v2-lite-v1:0\",\r\n contextLength: 10000,\r\n provider: \"Amazon\",\r\n type: \"video\",\r\n },\r\n {\r\n name: \"Amazon Nova Reel V2 Standard\",\r\n id: \"amazon.nova-reel-v2-standard-v1:0\",\r\n contextLength: 10000,\r\n provider: \"Amazon\",\r\n type: \"video\",\r\n },\r\n {\r\n name: \"Amazon Rerank\",\r\n id: \"amazon.rerank-v1:0\",\r\n contextLength: 8192,\r\n provider: \"Amazon\",\r\n type: \"reranker\",\r\n },\r\n {\r\n name: \"Amazon Titan Embeddings G1 - Text\",\r\n id: \"amazon.titan-embed-text-v1\",\r\n contextLength: 8192,\r\n provider: \"Amazon\",\r\n type: \"embedding\",\r\n },\r\n {\r\n name: \"Amazon Titan Embeddings G1 - Text v2\",\r\n id: \"amazon.titan-embed-text-v2:0\",\r\n contextLength: 8192,\r\n provider: \"Amazon\",\r\n type: \"embedding\",\r\n },\r\n {\r\n name: \"Amazon Titan Image Generator G1\",\r\n id: \"amazon.titan-image-generator-v1\",\r\n contextLength: 128,\r\n provider: \"Amazon\",\r\n type: \"image\",\r\n },\r\n {\r\n name: \"Amazon Titan Image Generator G2\",\r\n id: \"amazon.titan-image-generator-v2:0\",\r\n contextLength: 128,\r\n provider: \"Amazon\",\r\n type: \"image\",\r\n },\r\n {\r\n name: \"Amazon Titan Multimodal Embeddings G1\",\r\n id: \"amazon.titan-embed-image-v1\",\r\n contextLength: 8192,\r\n provider: \"Amazon\",\r\n type: \"embedding\",\r\n },\r\n {\r\n name: \"Amazon Titan Text G1 - Express\",\r\n id: \"amazon.titan-text-express-v1\",\r\n contextLength: 8192,\r\n provider: \"Amazon\",\r\n },\r\n {\r\n name: \"Amazon Titan Text G1 - Lite\",\r\n id: \"amazon.titan-text-lite-v1\",\r\n contextLength: 4096,\r\n provider: \"Amazon\",\r\n },\r\n {\r\n name: \"Amazon Titan Text G1 - Premier\",\r\n id: \"amazon.titan-text-premier-v1:0\",\r\n contextLength: 32000,\r\n provider: \"Amazon\",\r\n },\r\n {\r\n name: \"Claude 3.5 Sonnet v2\",\r\n id: \"anthropic.claude-3-5-sonnet-20241022-v2:0\",\r\n contextLength: 200000,\r\n provider: \"Anthropic\",\r\n },\r\n {\r\n name: \"Claude 3.5 Sonnet v1\",\r\n id: \"anthropic.claude-3-5-sonnet-20240620-v1:0\",\r\n contextLength: 200000,\r\n provider: \"Anthropic\",\r\n },\r\n {\r\n name: \"Claude 3.5 Haiku\",\r\n id: \"anthropic.claude-3-5-haiku-20241022-v1:0\",\r\n contextLength: 200000,\r\n provider: \"Anthropic\",\r\n },\r\n {\r\n name: \"Claude 3 Opus\",\r\n id: \"anthropic.claude-3-opus-20240229-v1:0\",\r\n contextLength: 200000,\r\n provider: \"Anthropic\",\r\n },\r\n {\r\n name: \"Claude 3 Sonnet\",\r\n id: \"anthropic.claude-3-sonnet-20240229-v1:0\",\r\n contextLength: 200000,\r\n provider: \"Anthropic\",\r\n },\r\n {\r\n name: \"Claude 3 Haiku\",\r\n id: \"anthropic.claude-3-haiku-20240307-v1:0\",\r\n contextLength: 200000,\r\n provider: \"Anthropic\",\r\n },\r\n {\r\n name: \"Claude Instant\",\r\n id: \"anthropic.claude-instant-v1\",\r\n contextLength: 100000,\r\n provider: \"Anthropic\",\r\n },\r\n {\r\n name: \"Cohere Command\",\r\n id: \"cohere.command-text-v14\",\r\n contextLength: 4096,\r\n provider: \"Cohere\",\r\n },\r\n {\r\n name: \"Cohere Command Light\",\r\n id: \"cohere.command-light-text-v14\",\r\n contextLength: 4096,\r\n provider: \"Cohere\",\r\n },\r\n {\r\n name: \"Cohere Command R\",\r\n id: \"cohere.command-r-v1:0\",\r\n contextLength: 128000,\r\n provider: \"Cohere\",\r\n },\r\n {\r\n name: \"Cohere Command R+\",\r\n id: \"cohere.command-r-plus-v1:0\",\r\n contextLength: 128000,\r\n provider: \"Cohere\",\r\n },\r\n {\r\n name: \"Cohere Embed English\",\r\n id: \"cohere.embed-english-v3\",\r\n contextLength: 512,\r\n provider: \"Cohere\",\r\n type: \"embedding\",\r\n },\r\n {\r\n name: \"Cohere Embed Multilingual\",\r\n id: \"cohere.embed-multilingual-v3\",\r\n contextLength: 512,\r\n provider: \"Cohere\",\r\n type: \"embedding\",\r\n },\r\n {\r\n name: \"Cohere Rerank English\",\r\n id: \"cohere.rerank-english-v3:0\",\r\n contextLength: 4096,\r\n provider: \"Cohere\",\r\n type: \"reranker\",\r\n },\r\n {\r\n name: \"Cohere Rerank Multilingual\",\r\n id: \"cohere.rerank-multilingual-v3:0\",\r\n contextLength: 4096,\r\n provider: \"Cohere\",\r\n type: \"reranker\",\r\n },\r\n {\r\n name: \"DeepSeek R1\",\r\n id: \"deepseek.deepseek-r1-distill-qwen-32b-v1:0\",\r\n contextLength: 32768,\r\n provider: \"DeepSeek\",\r\n },\r\n {\r\n name: \"Luma Dream Machine\",\r\n id: \"luma.dream-machine-v1:0\",\r\n contextLength: 512,\r\n provider: \"Luma AI\",\r\n type: \"video\",\r\n },\r\n\r\n {\r\n name: \"Llama 3.2 11B Vision Instruct\",\r\n id: \"meta.llama3-2-11b-instruct-v1:0\",\r\n contextLength: 128000,\r\n provider: \"Meta\",\r\n },\r\n {\r\n name: \"Llama 3.2 90B Vision Instruct\",\r\n id: \"meta.llama3-2-90b-instruct-v1:0\",\r\n contextLength: 128000,\r\n provider: \"Meta\",\r\n },\r\n {\r\n name: \"Mistral 7B Instruct\",\r\n id: \"mistral.mistral-7b-instruct-v0:2\",\r\n contextLength: 32768,\r\n provider: \"Mistral AI\",\r\n },\r\n {\r\n name: \"Mixtral 8x7B Instruct\",\r\n id: \"mistral.mixtral-8x7b-instruct-v0:1\",\r\n contextLength: 32768,\r\n provider: \"Mistral AI\",\r\n },\r\n {\r\n name: \"Mistral Small\",\r\n id: \"mistral.mistral-small-2402-v1:0\",\r\n contextLength: 32768,\r\n provider: \"Mistral AI\",\r\n },\r\n {\r\n name: \"Mistral Large\",\r\n id: \"mistral.mistral-large-2402-v1:0\",\r\n contextLength: 32768,\r\n provider: \"Mistral AI\",\r\n },\r\n {\r\n name: \"Mistral Large 2\",\r\n id: \"mistral.mistral-large-2407-v1:0\",\r\n contextLength: 128000,\r\n provider: \"Mistral AI\",\r\n },\r\n {\r\n name: \"Mistral Large 2411\",\r\n id: \"mistral.mistral-large-2411-v1:0\",\r\n contextLength: 128000,\r\n provider: \"Mistral AI\",\r\n },\r\n {\r\n name: \"Stable Diffusion XL\",\r\n id: \"stability.stable-diffusion-xl-v1\",\r\n contextLength: 77,\r\n provider: \"Stability AI\",\r\n type: \"image\",\r\n },\r\n {\r\n name: \"SDXL 1.0\",\r\n id: \"stability.stable-diffusion-xl-v0\",\r\n contextLength: 77,\r\n provider: \"Stability AI\",\r\n type: \"image\",\r\n },\r\n {\r\n name: \"Stable Image Ultra\",\r\n id: \"stability.stable-image-ultra-v1:0\",\r\n contextLength: 77,\r\n provider: \"Stability AI\",\r\n type: \"image\",\r\n },\r\n {\r\n name: \"Stable Image Core\",\r\n id: \"stability.stable-image-core-v1:0\",\r\n contextLength: 77,\r\n provider: \"Stability AI\",\r\n type: \"image\",\r\n },\r\n ],\r\n },\r\n {\r\n \"provider\": \"OpenRouter\",\r\n \"docs\": \"https://openrouter.ai/docs\",\r\n \"api_key\": \"https://openrouter.ai/settings/keys\",\r\n \"default\": \"openrouter/free\",\r\n \"models\": [\r\n {\r\n \"name\": \"OpenRouter Free (rotating)\",\r\n \"id\": \"openrouter/free\",\r\n \"contextLength\": 200_000,\r\n \"free\": true,\r\n \"type\": \"text\"\r\n },\r\n {\r\n \"name\": \"Nemotron 3 Super 120B\",\r\n \"id\": \"nvidia/nemotron-3-super-120b-a12b:free\",\r\n \"contextLength\": 1_000_000,\r\n \"free\": true,\r\n \"type\": \"text\"\r\n },\r\n {\r\n \"name\": \"Nemotron 3 Ultra 550B\",\r\n \"id\": \"nvidia/nemotron-3-ultra-550b-a55b:free\",\r\n \"contextLength\": 1_000_000,\r\n \"free\": true,\r\n \"type\": \"text\"\r\n },\r\n {\r\n \"name\": \"Nemotron 3 Nano 30B A3B\",\r\n \"id\": \"nvidia/nemotron-3-nano-30b-a3b:free\",\r\n \"contextLength\": 256_000,\r\n \"free\": true,\r\n \"type\": \"text\"\r\n },\r\n {\r\n \"name\": \"Nemotron 3 Nano Omni 30B A3B Reasoning\",\r\n \"id\": \"nvidia/nemotron-3-nano-omni-30b-a3b-reasoning:free\",\r\n \"contextLength\": 256_000,\r\n \"free\": true,\r\n \"type\": \"text\"\r\n },\r\n {\r\n \"name\": \"Nemotron Nano 12B v2 VL\",\r\n \"id\": \"nvidia/nemotron-nano-12b-v2-vl:free\",\r\n \"contextLength\": 128_000,\r\n \"free\": true,\r\n \"type\": \"text\"\r\n },\r\n {\r\n \"name\": \"Nemotron Nano 9B v2\",\r\n \"id\": \"nvidia/nemotron-nano-9b-v2:free\",\r\n \"contextLength\": 128_000,\r\n \"free\": true,\r\n \"type\": \"text\"\r\n },\r\n {\r\n \"name\": \"Nemotron 3.5 Content Safety\",\r\n \"id\": \"nvidia/nemotron-3.5-content-safety:free\",\r\n \"contextLength\": 128_000,\r\n \"free\": true,\r\n \"type\": \"text\"\r\n },\r\n {\r\n \"name\": \"Gemma 4 31B IT\",\r\n \"id\": \"google/gemma-4-31b-it:free\",\r\n \"contextLength\": 262_000,\r\n \"free\": true,\r\n \"type\": \"text\"\r\n },\r\n {\r\n \"name\": \"Gemma 4 26B A4B IT\",\r\n \"id\": \"google/gemma-4-26b-a4b-it:free\",\r\n \"contextLength\": 262_000,\r\n \"free\": true,\r\n \"type\": \"text\"\r\n },\r\n {\r\n \"name\": \"GPT-OSS 120B\",\r\n \"id\": \"openai/gpt-oss-120b:free\",\r\n \"contextLength\": 131_072,\r\n \"free\": true,\r\n \"type\": \"text\"\r\n },\r\n {\r\n \"name\": \"GPT-OSS 20B\",\r\n \"id\": \"openai/gpt-oss-20b:free\",\r\n \"contextLength\": 131_072,\r\n \"free\": true,\r\n \"type\": \"text\"\r\n },\r\n {\r\n \"name\": \"Qwen3 Coder\",\r\n \"id\": \"qwen/qwen3-coder:free\",\r\n \"contextLength\": 1_000_000,\r\n \"free\": true,\r\n \"type\": \"text\"\r\n },\r\n {\r\n \"name\": \"Qwen3 Next 80B A3B Instruct\",\r\n \"id\": \"qwen/qwen3-next-80b-a3b-instruct:free\",\r\n \"contextLength\": 262_000,\r\n \"free\": true,\r\n \"type\": \"text\"\r\n },\r\n {\r\n \"name\": \"Llama 3.3 70B Instruct\",\r\n \"id\": \"meta-llama/llama-3.3-70b-instruct:free\",\r\n \"contextLength\": 131_072,\r\n \"free\": true,\r\n \"type\": \"text\"\r\n },\r\n {\r\n \"name\": \"Llama 3.2 3B Instruct\",\r\n \"id\": \"meta-llama/llama-3.2-3b-instruct:free\",\r\n \"contextLength\": 131_072,\r\n \"free\": true,\r\n \"type\": \"text\"\r\n },\r\n {\r\n \"name\": \"Hermes 3 Llama 3.1 405B\",\r\n \"id\": \"nousresearch/hermes-3-llama-3.1-405b:free\",\r\n \"contextLength\": 131_072,\r\n \"free\": true,\r\n \"type\": \"text\"\r\n },\r\n {\r\n \"name\": \"Laguna XS 2.1\",\r\n \"id\": \"poolside/laguna-xs-2.1:free\",\r\n \"contextLength\": 262_000,\r\n \"free\": true,\r\n \"type\": \"text\"\r\n },\r\n {\r\n \"name\": \"Laguna XS 2\",\r\n \"id\": \"poolside/laguna-xs.2:free\",\r\n \"contextLength\": 262_000,\r\n \"free\": true,\r\n \"type\": \"text\"\r\n },\r\n {\r\n \"name\": \"Laguna M 1\",\r\n \"id\": \"poolside/laguna-m.1:free\",\r\n \"contextLength\": 262_000,\r\n \"free\": true,\r\n \"type\": \"text\"\r\n },\r\n {\r\n \"name\": \"North Mini Code\",\r\n \"id\": \"cohere/north-mini-code:free\",\r\n \"contextLength\": 256_000,\r\n \"free\": true,\r\n \"type\": \"text\"\r\n },\r\n {\r\n \"name\": \"LFM 2.5 1.2B Thinking\",\r\n \"id\": \"liquid/lfm-2.5-1.2b-thinking:free\",\r\n \"contextLength\": 33_000,\r\n \"free\": true,\r\n \"type\": \"text\"\r\n },\r\n {\r\n \"name\": \"LFM 2.5 1.2B Instruct\",\r\n \"id\": \"liquid/lfm-2.5-1.2b-instruct:free\",\r\n \"contextLength\": 33_000,\r\n \"free\": true,\r\n \"type\": \"text\"\r\n },\r\n {\r\n \"name\": \"OpenRouter Free (rotating)\",\r\n \"id\": \"openrouter/free\",\r\n \"contextLength\": 200_000,\r\n \"free\": true,\r\n \"type\": \"text\"\r\n }\r\n ]\r\n}\r\n];\r\n\r\n/** List of available LLM provider services */\r\nexport const LANGUAGE_PROVIDERS = LANGUAGE_MODELS.map((p) =>\r\n p.provider.toLocaleLowerCase(),\r\n);\r\n\r\n/**\r\n * Guest-safe models that are known to work reliably.\r\n * Based on test results: only models with HTTP 200 status.\r\n */\r\nexport const GUEST_SAFE_MODELS = {\r\n openrouter: [\r\n \"openrouter/free\",\r\n \"nvidia/nemotron-3-super-120b-a12b:free\",\r\n \"nvidia/nemotron-3-ultra-550b-a55b:free\",\r\n \"nvidia/nemotron-3-nano-30b-a3b:free\",\r\n \"nvidia/nemotron-3-nano-omni-30b-a3b-reasoning:free\",\r\n \"nvidia/nemotron-nano-9b-v2:free\",\r\n \"nvidia/nemotron-3.5-content-safety:free\",\r\n \"google/gemma-4-31b-it:free\",\r\n \"google/gemma-4-26b-a4b-it:free\",\r\n \"openai/gpt-oss-20b:free\",\r\n \"poolside/laguna-xs-2.1:free\",\r\n \"poolside/laguna-m.1:free\",\r\n \"cohere/north-mini-code:free\",\r\n ],\r\n nvidia: [\r\n \"nvidia/nemotron-3-super-120b-a12b\",\r\n \"meta/llama-3.1-8b-instruct\",\r\n ],\r\n};\r\n\r\n/**\r\n * Filter models to only those in the guest-safe list.\r\n * Returns models with `free: true` property.\r\n */\r\nexport function filterModelsForGuests(models: any[]): any[] {\r\n return models.filter((m) => m.free === true);\r\n}\r\n\r\n/**\r\n * Get guest-safe provider list (only tested working models).\r\n * Uses GUEST_SAFE_MODELS whitelist to ensure reliability.\r\n */\r\nexport function getGuestSafeProviders(): typeof LANGUAGE_MODELS {\r\n return LANGUAGE_MODELS.map((provider) => ({\r\n ...provider,\r\n models: provider.models.filter(\r\n (model: any) =>\r\n GUEST_SAFE_MODELS[provider.provider.toLowerCase() as keyof typeof GUEST_SAFE_MODELS]?.includes(\r\n model.id,\r\n ) || false,\r\n ),\r\n })).filter((p) => p.models.length > 0);\r\n}\r\n","/**\r\n * @fileoverview Configuration Manager\r\n *\r\n * Manages model providers, MCP servers, and search configuration in memory.\r\n * Handles environment variable loading, provider hashing, and config updates.\r\n */\r\nimport type { ConfigModelProvider, MCPServerConfig, Config, UIConfigSections, Model } from \"./config-types\";\r\nimport { getModelProvidersUIConfigSection } from \"./provider-ui-config\";\r\nimport { getEnv } from \"./environment-variables\";\r\nimport { LANGUAGE_MODELS } from \"./language-models-database\";\r\n\r\n// Maps a provider UI key (from provider-ui-config) to the matching\r\n// `provider` name in the LANGUAGE_MODELS database. Names differ in a few\r\n// cases (e.g. the \"gemini\" UI key corresponds to the \"Google\" model list).\r\nconst PROVIDER_KEY_TO_DB_NAME: Record<string, string> = {\r\n openai: \"openai\",\r\n anthropic: \"anthropic\",\r\n gemini: \"google\",\r\n groq: \"groq\",\r\n deepseek: \"deepseek\",\r\n nvidia: \"nvidia\",\r\n openrouter: \"openrouter\",\r\n};\r\n\r\n/**\r\n * Returns the default chat models for a provider from the LANGUAGE_MODELS\r\n * database so that env-based providers expose a usable model list instead of\r\n * an empty one. Returns [] when no matching provider list exists.\r\n */\r\nconst getDefaultChatModels = (providerKey: string): Model[] => {\r\n const dbName = PROVIDER_KEY_TO_DB_NAME[providerKey] ?? providerKey;\r\n const entry = LANGUAGE_MODELS.find(\r\n (p) => p.provider.toLowerCase() === dbName.toLowerCase(),\r\n );\r\n if (!entry?.models) return [];\r\n\r\n return entry.models.map((m: any) => ({\r\n name: m.name,\r\n key: m.id,\r\n }));\r\n};\r\n\r\nconst hashObj = (obj: { [key: string]: any }) => {\r\n const str = JSON.stringify(obj, Object.keys(obj).sort());\r\n let hash = 0;\r\n for (let i = 0; i < str.length; i++) {\r\n hash = (hash << 5) - hash + str.charCodeAt(i);\r\n hash |= 0;\r\n }\r\n return String(Math.abs(hash).toString(36));\r\n};\r\n\r\nclass ConfigManager {\r\n configVersion = 1;\r\n currentConfig: Config = {\r\n version: this.configVersion,\r\n setupComplete: getEnv(\"SETUP_COMPLETE\") === \"true\" || false,\r\n preferences: {},\r\n personalization: {},\r\n modelProviders: [],\r\n mcpServers: [],\r\n search: {\r\n searxngURL: \"\",\r\n tavilyApiKey: \"\",\r\n sourceScrapeCount: 3,\r\n sourceScrapeTimeout: 5,\r\n },\r\n };\r\n uiConfigSections: UIConfigSections = {\r\n preferences: [],\r\n personalization: [],\r\n modelProviders: [],\r\n mcpServers: [],\r\n search: [\r\n {\r\n name: \"SearXNG URL\",\r\n key: \"searxngURL\",\r\n type: \"string\",\r\n required: false,\r\n description: \"The URL of your SearXNG instance\",\r\n placeholder: \"http://localhost:4000\",\r\n default: \"\",\r\n scope: \"server\",\r\n env: \"SEARXNG_API_URL\",\r\n },\r\n {\r\n name: \"Tavily API Key\",\r\n key: \"tavilyApiKey\",\r\n type: \"string\",\r\n required: false,\r\n description: \"Your Tavily API key for enhanced search capabilities.\",\r\n placeholder: \"tvly-...\",\r\n default: \"\",\r\n scope: \"server\",\r\n env: \"TAVILY_API_KEY\",\r\n },\r\n {\r\n name: \"Scrape timeout (seconds)\",\r\n key: \"sourceScrapeTimeout\",\r\n type: \"select\",\r\n options: [\r\n { name: \"3 seconds\", value: \"3\" },\r\n { name: \"5 seconds (default)\", value: \"5\" },\r\n { name: \"10 seconds\", value: \"10\" },\r\n { name: \"15 seconds\", value: \"15\" },\r\n { name: \"20 seconds\", value: \"20\" },\r\n ],\r\n required: false,\r\n description: \"Maximum time to wait when scraping each source URL.\",\r\n default: \"5\",\r\n scope: \"server\",\r\n },\r\n ],\r\n };\r\n\r\n private initialized = false;\r\n\r\n constructor() {\r\n // Don't initialize in constructor to avoid circular dependency\r\n // Initialize lazily when config is first accessed\r\n }\r\n\r\n private ensureInitialized() {\r\n if (this.initialized) return;\r\n this.initialize();\r\n this.initialized = true;\r\n }\r\n\r\n private initialize() {\r\n const providerConfigSections = getModelProvidersUIConfigSection();\r\n this.uiConfigSections.modelProviders = providerConfigSections;\r\n\r\n const newProviders: ConfigModelProvider[] = [];\r\n\r\n providerConfigSections.forEach((provider) => {\r\n\r\n const tempConfig: Record<string, any> = {};\r\n const required: string[] = [];\r\n\r\n provider.fields.forEach((field) => {\r\n tempConfig[field.key] =\r\n getEnv(field.env!) || field.default || \"\";\r\n if (field.required) required.push(field.key);\r\n });\r\n\r\n let configured = true;\r\n required.forEach((r) => {\r\n if (!tempConfig[r]) configured = false;\r\n });\r\n\r\n if (configured) {\r\n const hash = hashObj(tempConfig);\r\n const exists = this.currentConfig.modelProviders.find(\r\n (p) => p.hash === hash,\r\n );\r\n\r\n if (!exists) {\r\n newProviders.push({\r\n id: hash,\r\n name: `${provider.name}`,\r\n type: provider.key,\r\n chatModels: getDefaultChatModels(provider.key),\r\n config: tempConfig,\r\n hash: hash,\r\n isEnvBased: true,\r\n });\r\n }\r\n }\r\n });\r\n\r\n if (newProviders.length > 0) {\r\n this.currentConfig.modelProviders.push(...newProviders);\r\n }\r\n\r\n // Search config from env\r\n this.uiConfigSections.search.forEach((f) => {\r\n if (f.env && !this.currentConfig.search[f.key]) {\r\n this.currentConfig.search[f.key] =\r\n getEnv(f.env) ?? f.default ?? \"\";\r\n }\r\n });\r\n }\r\n\r\n public getConfig(key: string, defaultValue?: any): any {\r\n this.ensureInitialized();\r\n const nested = key.split(\".\");\r\n let obj: any = this.currentConfig;\r\n\r\n for (let i = 0; i < nested.length; i++) {\r\n const part = nested[i];\r\n if (obj == null) return defaultValue;\r\n obj = obj[part];\r\n }\r\n\r\n return obj === undefined ? defaultValue : obj;\r\n }\r\n\r\n public updateConfig(key: string, val: any) {\r\n const parts = key.split(\".\");\r\n if (parts.length === 0) return;\r\n\r\n let target: any = this.currentConfig;\r\n for (let i = 0; i < parts.length - 1; i++) {\r\n const part = parts[i];\r\n if (target[part] === null || typeof target[part] !== \"object\") {\r\n target[part] = {};\r\n }\r\n target = target[part];\r\n }\r\n\r\n const finalKey = parts[parts.length - 1];\r\n target[finalKey] = val;\r\n }\r\n\r\n public addModelProvider(type: string, name: string, config: any) {\r\n this.ensureInitialized();\r\n const hash = hashObj(config);\r\n\r\n const newModelProvider: ConfigModelProvider = {\r\n id: hash,\r\n name,\r\n type,\r\n config,\r\n chatModels: [],\r\n hash: hash,\r\n };\r\n\r\n this.currentConfig.modelProviders.push(newModelProvider);\r\n return newModelProvider;\r\n }\r\n\r\n public removeModelProvider(id: string) {\r\n this.currentConfig.modelProviders =\r\n this.currentConfig.modelProviders.filter((p) => p.id !== id);\r\n }\r\n\r\n public async updateModelProvider(id: string, name: string, config: any) {\r\n const provider = this.currentConfig.modelProviders.find(\r\n (p) => p.id === id,\r\n );\r\n if (!provider) throw new Error(\"Provider not found\");\r\n\r\n provider.name = name;\r\n provider.config = config;\r\n return provider;\r\n }\r\n\r\n public addProviderModel(providerId: string, type: \"chat\", model: any) {\r\n const provider = this.currentConfig.modelProviders.find(\r\n (p) => p.id === providerId,\r\n );\r\n if (!provider) throw new Error(\"Invalid provider id\");\r\n\r\n delete model.type;\r\n provider.chatModels.push(model);\r\n return model;\r\n }\r\n\r\n public removeProviderModel(\r\n providerId: string,\r\n type: \"chat\",\r\n modelKey: string,\r\n ) {\r\n const provider = this.currentConfig.modelProviders.find(\r\n (p) => p.id === providerId,\r\n );\r\n if (!provider) throw new Error(\"Invalid provider id\");\r\n\r\n provider.chatModels = provider.chatModels.filter((m) => m.key !== modelKey);\r\n }\r\n\r\n public isSetupComplete() {\r\n return this.currentConfig.setupComplete;\r\n }\r\n\r\n public markSetupComplete() {\r\n if (!this.currentConfig.setupComplete) {\r\n this.currentConfig.setupComplete = true;\r\n }\r\n }\r\n\r\n public getUIConfigSections(): UIConfigSections {\r\n this.ensureInitialized();\r\n return this.uiConfigSections;\r\n }\r\n\r\n public getCurrentConfig(): Config {\r\n this.ensureInitialized();\r\n return JSON.parse(JSON.stringify(this.currentConfig));\r\n }\r\n}\r\n\r\nconst configManager = new ConfigManager();\r\n\r\nexport default configManager;\r\n","/**\r\n * @fileoverview Registry for managing and loading Vercel AI SDK model providers.\r\n *\r\n * Exposes the full API expected by the app's API routes and chat handler:\r\n * - `activeProviders` (sync getter) / `getActiveProviders()`\r\n * - `isProviderEnvBased(providerId)`\r\n * - `loadChatModel(providerId, modelKey)` — returns an AI SDK `LanguageModel`\r\n * - provider/model CRUD passthroughs to {@link configManager}\r\n */\r\nimport configManager from \"./config-manager\";\r\nimport { LANGUAGE_MODELS, getGuestSafeProviders } from \"./language-models-database\";\r\nimport { getModelProvidersUIConfigSection } from \"./provider-ui-config\";\r\nimport type { ConfigModelProvider, Model } from \"./config-types\";\r\n\r\n// Maps a provider UI key to the matching `provider` name in the\r\n// LANGUAGE_MODELS database (e.g. the \"gemini\" UI key ↔ \"Google\" model list).\r\nconst PROVIDER_KEY_TO_DB_NAME: Record<string, string> = {\r\n openai: \"openai\",\r\n anthropic: \"anthropic\",\r\n gemini: \"google\",\r\n groq: \"groq\",\r\n deepseek: \"deepseek\",\r\n nvidia: \"nvidia\",\r\n openrouter: \"openrouter\",\r\n};\r\n\r\n/** Default chat models for a provider type from the LANGUAGE_MODELS database. */\r\nconst getDefaultChatModels = (providerType: string): Model[] => {\r\n const dbName = PROVIDER_KEY_TO_DB_NAME[providerType] ?? providerType;\r\n const entry = LANGUAGE_MODELS.find(\r\n (p) => p.provider.toLowerCase() === dbName.toLowerCase(),\r\n );\r\n if (!entry?.models) return [];\r\n return entry.models.map((m: any) => ({ name: m.name, key: m.id }));\r\n};\r\n\r\n/** Merges default and user-added models, deduplicated by model key. */\r\nconst mergeChatModels = (provider: ConfigModelProvider): Model[] => {\r\n const merged = new Map<string, Model>();\r\n for (const m of getDefaultChatModels(provider.type)) {\r\n merged.set(m.key, m);\r\n }\r\n for (const m of provider.chatModels || []) {\r\n merged.set(m.key, { key: m.key, name: m.name });\r\n }\r\n return [...merged.values()];\r\n};\r\n\r\nexport default class ModelRegistry {\r\n /**\r\n * Currently configured providers (env-based + user-added).\r\n * Sync getter used by the chat handler for logging and lookups.\r\n */\r\n get activeProviders(): ConfigModelProvider[] {\r\n return configManager.getCurrentConfig().modelProviders;\r\n }\r\n\r\n /**\r\n * Providers with their full chat model lists (defaults merged with\r\n * user-added models), shaped for the settings/providers UI.\r\n */\r\n async getActiveProviders(guestMode: boolean = false) {\r\n const providers = this.activeProviders;\r\n const dbModels = guestMode ? getGuestSafeProviders() : LANGUAGE_MODELS;\r\n\r\n return providers.map((p) => ({\r\n id: p.id,\r\n name: p.name,\r\n type: p.type,\r\n chatModels: guestMode ? this.getGuestChatModels(p, dbModels) : mergeChatModels(p),\r\n })).filter((p) => p.chatModels.length > 0);\r\n }\r\n\r\n /**\r\n * Get guest-safe chat models for a provider (only tested working models).\r\n */\r\n private getGuestChatModels(provider: ConfigModelProvider, guestProviders: typeof LANGUAGE_MODELS): Model[] {\r\n const dbName = PROVIDER_KEY_TO_DB_NAME[provider.type.toLowerCase()];\r\n const dbEntry = guestProviders.find(\r\n (p) => p.provider.toLowerCase() === (dbName?.toLowerCase() || provider.type.toLowerCase()),\r\n );\r\n if (!dbEntry?.models) return [];\r\n return dbEntry.models.map((m: any) => ({ name: m.name, key: m.id }));\r\n }\r\n\r\n /**\r\n * Finds a provider by id, falling back to free providers in order:\r\n * OpenRouter (no daily limits, best for guests), Groq (fastest, daily limits),\r\n * then NVIDIA, then the first configured provider.\r\n * Client-side provider ids are config hashes that go stale whenever\r\n * server env config changes, so a graceful fallback keeps existing\r\n * chat sessions working after a redeploy.\r\n */\r\n private findProvider(providerId?: string): ConfigModelProvider | undefined {\r\n const providers = this.activeProviders;\r\n let provider = providers.find((p) => p.id === providerId);\r\n\r\n if (!provider && providers.length > 0) {\r\n // Prioritize OpenRouter (no daily limits) over Groq (has daily limits)\r\n provider =\r\n providers.find((p) => p.name.toLowerCase().includes(\"openrouter\")) ??\r\n providers.find((p) => p.name.toLowerCase().includes(\"groq\")) ??\r\n providers.find((p) => p.name.toLowerCase().includes(\"nvidia\")) ??\r\n providers[0];\r\n }\r\n\r\n return provider;\r\n }\r\n\r\n /** Whether the resolved provider was configured from environment variables. */\r\n isProviderEnvBased(providerId?: string): boolean {\r\n return this.findProvider(providerId)?.isEnvBased === true;\r\n }\r\n\r\n /**\r\n * Instantiates a Vercel AI SDK language model for the given provider and\r\n * model key. Falls back to the provider's first/default model when no key\r\n * is given. Temperature is a per-call setting in the AI SDK, so callers\r\n * pass it to generateText/streamText rather than the model instance.\r\n */\r\n async loadChatModel(providerId?: string, modelKey?: string): Promise<any> {\r\n const provider = this.findProvider(providerId);\r\n\r\n if (!provider) {\r\n throw new Error(\r\n \"No model providers configured. Please add a provider in settings.\",\r\n );\r\n }\r\n\r\n const type = provider.type.toLowerCase();\r\n const config = provider.config || {};\r\n const apiKey = config.apiKey || \"\";\r\n const availableModels = mergeChatModels(provider);\r\n const modelName =\r\n modelKey || availableModels[0]?.key || \"\";\r\n\r\n console.log(\r\n `[ModelRegistry] loadChatModel: providerId=${providerId} provider=${provider.name} type=${type} requestedModel=${modelKey ?? \"(default)\"} resolvedModel=${modelName}`,\r\n );\r\n\r\n if (!modelName) {\r\n throw new Error(`No chat models available for provider \"${provider.name}\"`);\r\n }\r\n\r\n // Validate that the requested model exists in the provider's model list\r\n if (modelKey && !availableModels.some((m) => m.key === modelKey)) {\r\n console.warn(\r\n `[ModelRegistry] Requested model \"${modelKey}\" not found in provider \"${provider.name}\". Available models: ${availableModels.map((m) => m.key).join(\", \")}`,\r\n );\r\n throw new Error(\r\n `Model \"${modelKey}\" is not available for provider \"${provider.name}\". Please select a different model in Settings.`,\r\n );\r\n }\r\n\r\n // Validate API key is present\r\n if (!apiKey) {\r\n throw new Error(\r\n `No API key configured for provider \"${provider.name}\". Please add your API key in Settings → Model Providers.`,\r\n );\r\n }\r\n\r\n // OpenAI-compatible providers differ only by base URL.\r\n const openAICompatibleBaseURLs: Record<string, string> = {\r\n openai: \"https://api.openai.com/v1\",\r\n togetherai: \"https://api.together.xyz/v1\",\r\n perplexity: \"https://api.perplexity.ai\",\r\n nvidia: \"https://integrate.api.nvidia.com/v1\",\r\n openrouter: \"https://openrouter.ai/api/v1\",\r\n deepseek: \"https://api.deepseek.com\",\r\n xai: \"https://api.x.ai/v1\",\r\n };\r\n\r\n if (type in openAICompatibleBaseURLs) {\r\n const { createOpenAI } = await import(\"@ai-sdk/openai\");\r\n return createOpenAI({\r\n apiKey,\r\n baseURL: config.baseURL || openAICompatibleBaseURLs[type],\r\n }).chat(modelName);\r\n }\r\n\r\n switch (type) {\r\n case \"cloudflare\": {\r\n const { createOpenAI } = await import(\"@ai-sdk/openai\");\r\n const [cfApiToken, accountId] = apiKey.split(\":\");\r\n return createOpenAI({\r\n apiKey: cfApiToken,\r\n baseURL: `https://api.cloudflare.com/client/v4/accounts/${accountId}/ai/v1`,\r\n }).chat(modelName);\r\n }\r\n case \"groq\": {\r\n const { createGroq } = await import(\"@ai-sdk/groq\");\r\n return createGroq({ apiKey })(modelName);\r\n }\r\n case \"anthropic\": {\r\n const { createAnthropic } = await import(\"@ai-sdk/anthropic\");\r\n return createAnthropic({ apiKey })(modelName);\r\n }\r\n case \"gemini\":\r\n case \"google\": {\r\n const { createGoogleGenerativeAI } = await import(\"@ai-sdk/google\");\r\n return createGoogleGenerativeAI({ apiKey })(modelName);\r\n }\r\n default:\r\n throw new Error(`Unsupported provider type: ${type}`);\r\n }\r\n }\r\n\r\n /**\r\n * Registers a new provider. Accepts both `(type, config)` — used by the\r\n * providers API route — and `(type, name, config)`.\r\n */\r\n async addProvider(type: string, nameOrConfig: any, config?: Record<string, any>) {\r\n let name: string;\r\n let finalConfig: Record<string, any>;\r\n if (typeof nameOrConfig === \"object\" && nameOrConfig !== null && !config) {\r\n finalConfig = nameOrConfig;\r\n const section = getModelProvidersUIConfigSection().find(\r\n (s) => s.key === type,\r\n );\r\n name = section?.name || type.toUpperCase();\r\n } else {\r\n name = String(nameOrConfig);\r\n finalConfig = config || {};\r\n }\r\n\r\n const newProvider = configManager.addModelProvider(type, name, finalConfig);\r\n return {\r\n ...newProvider,\r\n chatModels: getDefaultChatModels(type),\r\n };\r\n }\r\n\r\n async removeProvider(providerId: string) {\r\n configManager.removeModelProvider(providerId);\r\n }\r\n\r\n /**\r\n * Updates a provider's config. Accepts both `(id, config)` — used by the\r\n * providers API route — and `(id, name, config)`.\r\n */\r\n async updateProvider(providerId: string, nameOrConfig: any, config?: Record<string, any>) {\r\n let name: string;\r\n let finalConfig: Record<string, any>;\r\n if (typeof nameOrConfig === \"object\" && nameOrConfig !== null && !config) {\r\n finalConfig = nameOrConfig;\r\n const existing = this.activeProviders.find((p) => p.id === providerId);\r\n name = existing?.name || providerId;\r\n } else {\r\n name = String(nameOrConfig);\r\n finalConfig = config || {};\r\n }\r\n\r\n const updated = await configManager.updateModelProvider(\r\n providerId,\r\n name,\r\n finalConfig,\r\n );\r\n return {\r\n ...updated,\r\n chatModels: mergeChatModels(updated),\r\n };\r\n }\r\n\r\n async addProviderModel(providerId: string, type: \"chat\", model: any) {\r\n return configManager.addProviderModel(providerId, type, model);\r\n }\r\n\r\n async removeProviderModel(providerId: string, type: \"chat\", modelKey: string) {\r\n configManager.removeProviderModel(providerId, type, modelKey);\r\n }\r\n}\r\n","const PROVIDERS = {\n openrouter: { row: 0, col: 0 },\n tongyi: { row: 0, col: 1 },\n ollama: { row: 0, col: 2 },\n huggingface: { row: 0, col: 3 },\n localai: { row: 0, col: 4 },\n openllm: { row: 0, col: 5 },\n zhipu: { row: 1, col: 0 },\n replicate: { row: 1, col: 1 },\n azure: { row: 1, col: 2 },\n anthropic: { row: 1, col: 3 },\n groq: { row: 1, col: 4 },\n sagemaker: { row: 1, col: 5 },\n \"01ai\": { row: 2, col: 0 },\n bedrock: { row: 2, col: 1 },\n openai: { row: 2, col: 2 },\n cohere: { row: 2, col: 3 },\n together: { row: 2, col: 4 },\n xorbits: { row: 2, col: 5 },\n wenxin: { row: 3, col: 0 },\n moonshot: { row: 3, col: 1 },\n gemini: { row: 3, col: 2 },\n mistral: { row: 3, col: 3 },\n jina: { row: 3, col: 4 },\n chatglm: { row: 3, col: 5 },\n} as const;\n\nexport type Provider = keyof typeof PROVIDERS;\n\nconst COLS = 6;\nconst ROWS = 4;\n\n/**\n * Returns a cropped canvas containing just the provider box.\n */\nexport async function cropProvider(\n image: HTMLImageElement | ImageBitmap,\n provider: Provider\n): Promise<HTMLCanvasElement> {\n if (!(provider in PROVIDERS)) {\n throw new Error(`Unknown provider: ${provider}`);\n }\n\n const { row, col } = PROVIDERS[provider];\n\n const tileWidth = image.width / COLS;\n const tileHeight = image.height / ROWS;\n\n const canvas = document.createElement(\"canvas\");\n canvas.width = tileWidth;\n canvas.height = tileHeight;\n\n const ctx = canvas.getContext(\"2d\");\n if (!ctx) {\n throw new Error(\"Failed to get 2D context\");\n }\n\n ctx.drawImage(\n image,\n col * tileWidth,\n row * tileHeight,\n tileWidth,\n tileHeight,\n 0,\n 0,\n tileWidth,\n tileHeight\n );\n\n return canvas;\n}\n\n/**\n * Returns the provider image as a Blob.\n */\nexport async function cropProviderAsBlob(\n image: HTMLImageElement | ImageBitmap,\n provider: Provider,\n type: \"image/png\" | \"image/jpeg\" | \"image/webp\" = \"image/png\",\n quality?: number\n): Promise<Blob> {\n const canvas = await cropProvider(image, provider);\n\n return new Promise<Blob>((resolve, reject) => {\n canvas.toBlob(\n (blob) => {\n if (blob) {\n resolve(blob);\n } else {\n reject(new Error(\"Failed to create blob\"));\n }\n },\n type,\n quality\n );\n });\n}\n\n/**\n * Returns the provider image as a data URL.\n */\nexport async function cropProviderAsDataURL(\n image: HTMLImageElement | ImageBitmap,\n provider: Provider,\n type: \"image/png\" | \"image/jpeg\" | \"image/webp\" = \"image/png\",\n quality?: number\n): Promise<string> {\n const canvas = await cropProvider(image, provider);\n return canvas.toDataURL(type, quality);\n}\n\n/**\n * Helper to load and crop in one call.\n */\nexport async function getProviderImage(\n spriteSheetUrl: string,\n provider: Provider\n): Promise<HTMLCanvasElement> {\n const img = new Image();\n img.src = spriteSheetUrl;\n await img.decode();\n return cropProvider(img, provider);\n}\n\n/**\n * Get all available provider names.\n */\nexport function getProviderNames(): Provider[] {\n return Object.keys(PROVIDERS) as Provider[];\n}\n"],"mappings":"s0BAMA,IAAa,EAA2B,wuCAS3B,EAA+C,CAC1D,CACE,OACA,qFAMF,CACE,YACA,8CAIF,CACE,OACA,wEAMF,CACE,YACA,uCAIF,CACE,OACA,uEAMF,CACE,YACA,2CAIF,CACE,OACA,0GAMF,CACE,YACA,+EAOF,CACE,OACA,sGAMF,CACE,YACA,+EASS,EAA0B,m2IAgD1B,EAAyB,o/CCrIzB,EAAe,CAC1B,KAAM,OACN,aAAc,eACd,WAAY,aACZ,SAAU,WACV,KAAM,OACN,OAAQ,UAQG,EAAgB,CAC3B,qBAAsB,IACtB,0BAA2B,GAC3B,qBAAsB,IACtB,mBAAoB,EACpB,4BAA6B,GAC7B,yBAA0B,CAAE,IAAK,EAAG,IAAK,IACzC,mBAAoB,CAAE,SAAU,GAAI,SAAU,KAC9C,gBAAiB,IACjB,uBAAuB,EACvB,4BAA4B,GCNjB,EAAb,MACE,OACA,QACA,YACA,iBACA,YACA,UACA,mBACA,mBACA,wBACA,eACA,YACA,aACA,gBACA,iBACA,QAWA,WAAA,CACE,EACA,EACA,EAAyB,CAAC,GAE1B,IAAK,IAAW,EACd,MAAM,IAAI,MAAM,8CAGlB,KAAK,OAAS,EACd,KAAK,QAAU,EACf,KAAK,YACH,EAAQ,aAAe,EAAc,qBACvC,KAAK,iBACH,EAAQ,kBAAoB,EAAc,0BAC5C,KAAK,YACH,EAAQ,aAAe,EAAc,qBACvC,KAAK,UAAY,EAAQ,WAAa,EAAc,mBACpD,KAAK,mBACH,EAAQ,oBAAsB,EAAc,4BAG9C,KAAK,oBAC4B,IAA/B,EAAQ,oBACR,EAAc,sBAChB,KAAK,yBACiC,IAApC,EAAQ,yBACR,EAAc,2BAGhB,KAAK,eAAiB,GACtB,KAAK,YAAc,IAAI,IACvB,KAAK,cAAe,EACpB,KAAK,gBAAkB,GAGvB,KAAK,QAAU,CACb,UAAW,EACX,YAAa,EACb,eAAgB,EAChB,eAAgB,EAChB,OAAQ,EAEZ,CAKA,UAAA,CACE,EACA,EACA,EAAgC,CAAC,GAEjC,IAAK,IAAS,GAA8B,iBAAZ,EAE9B,OADA,QAAQ,KAAK,8BAA+B,CAAE,OAAM,aAC7C,EAYT,GARqB,KAAK,eAAe,OAAM,GACd,KAC9B,GACC,EAAI,OAAS,GACb,EAAI,UAAY,GAChB,KAAK,MAAQ,EAAI,UAAY,KAK/B,OAAO,EAIT,MAAM,EAAmB,CACvB,OACA,QAAS,EAAQ,OACjB,UAAW,EAAS,WAAa,KAAK,MACtC,SAAU,IAAK,IAcjB,OAXA,KAAK,eAAe,KAAK,GAIvB,KAAK,yBACL,KAAK,eAAe,QAAU,KAAK,mBAClC,KAAK,cAEN,KAAK,sBAGA,CACT,CAKA,kBAAA,GACM,KAAK,kBACP,aAAa,KAAK,kBAGpB,KAAK,iBAAmB,WAAA,KACtB,KAAK,oBAAoB,MAAO,IAC9B,QAAQ,MAAM,6BAA8B,GAC5C,KAAK,QAAQ,YAEd,IACL,CAKA,eAAM,CACJ,EACA,EAAqB,EACrB,EAAuB,EAAa,KACpC,EAAgC,CAAC,GAGjC,IACG,GACkB,iBAAZ,GACmB,IAA1B,EAAQ,OAAO,OAEf,MAAM,IAAI,MAAM,2BAGlB,GACE,EAAa,EAAc,yBAAyB,KACpD,EAAa,EAAc,yBAAyB,IAEpD,MAAM,IAAI,MACR,8BAA8B,EAAc,yBAAyB,WAAW,EAAc,yBAAyB,OAI3H,MAAM,EAAoB,EAAQ,OAC5B,EAAqB,OAAO,OAAO,GAAc,SAAS,GAC5D,EACA,EAAa,KAEjB,IAEE,MAAM,QAAsB,KAAK,iBAAiB,GAElD,GAAI,EAAc,OAAS,EAAG,CAE5B,MAAM,EAAY,EAAc,GAShC,OARI,EAAa,EAAU,kBACnB,KAAK,QAAQ,aAAa,EAAU,GAAI,CAC5C,aACA,WAAY,IAAI,KAChB,aAAc,CAAE,UAAW,GAC3B,SAAU,IAAK,EAAU,YAAa,KAGnC,EAAU,EACnB,CAGA,MAAM,QAAW,KAAK,QAAQ,aAC5B,KAAK,OACL,EACA,EACA,KAAK,IAAI,EAAG,KAAK,IAAI,GAAI,IACzB,GAMF,OAFA,KAAK,aAEE,CACT,CAAA,MAAS,GAGP,MAFA,QAAQ,MAAM,sBAAuB,GACrC,KAAK,QAAQ,SACP,CACR,CACF,CAKA,sBAAc,CAAiB,GAC7B,IACE,aAAa,KAAK,QAAQ,oBAAoB,KAAK,OAAQ,EAAS,EACtE,CAAA,MAAS,GAEP,OADA,QAAQ,MAAM,+BAAgC,GACvC,EACT,CACF,CAKA,4BAAM,CACJ,EAAgB,GAChB,EAAgB,GAChB,EAA+B,CAAC,GAEhC,MAAM,EAAW,GAAG,KAAS,KAAS,KAAK,UAAU,KAGrD,GAAI,KAAK,YAAY,IAAI,GAAW,CAClC,MAAM,EAAS,KAAK,YAAY,IAAI,GACpC,GAAI,KAAK,MAAQ,EAAO,UAAY,KAAK,YAEvC,OADA,KAAK,QAAQ,YACN,EAAO,KAEhB,KAAK,YAAY,OAAO,EAC1B,CAEA,KAAK,QAAQ,cAEb,IACE,IAAI,QAAiB,KAAK,QAAQ,aAChC,KAAK,OACL,EACA,EACA,GAGF,GAAwB,IAApB,EAAS,OACX,MAAO,GAIL,KAAK,oBAAsB,EAAM,QAAU,EAAS,OAAS,IAC/D,QAAiB,KAAK,kBAAkB,EAAO,EAAU,IAIvD,EAAQ,gBACV,EAAW,EAAS,OACjB,GAAM,EAAE,YAAc,EAAQ,gBAKnC,MAAM,EAAS,EAAS,IAAK,IAAA,IACxB,EACH,gBAAiB,EAAE,iBAAmB,EACtC,SAAU,EAAQ,gBAAkB,EAAE,cAAW,KASnD,OALA,KAAK,YAAY,IAAI,EAAU,CAC7B,KAAM,EACN,UAAW,KAAK,QAGX,CACT,CAAA,MAAS,GAGP,OAFA,QAAQ,MAAM,6BAA8B,GAC5C,KAAK,QAAQ,SACN,EACT,CACF,CAKA,uBAAc,CACZ,EACA,EACA,GAwBA,OAAO,CACT,CAKA,2BAAc,CACZ,EACA,GAEA,MAAM,EAAU,EACb,OAAQ,GAAM,EAAE,UAAY,KAAK,oBACjC,IAAK,IACJ,MAAM,EAAS,EAAS,KAAM,GAAQ,EAAI,UAAY,EAAE,UACxD,OAAI,EACK,CACL,GAAI,EAAO,GACX,QAAS,CACP,WAAY,KAAK,IAAI,GAAI,EAAO,WAA2B,GAAd,EAAE,WAC/C,aAAc,CAAE,UAAW,GAC3B,WAAY,IAAI,OAIf,OAER,OAAO,SAEN,EAAQ,OAAS,SACb,KAAK,QAAQ,oBAAoB,EAE3C,CAKA,uBAAM,GACJ,GAAmC,IAA/B,KAAK,eAAe,QAAgB,KAAK,aAC3C,OAAO,EAGT,KAAK,cAAe,EACpB,KAAK,QAAQ,iBAEb,IAEE,MAAM,EAAmB,KAAK,eAC3B,IAAK,GAAQ,GAAG,EAAI,SAAS,EAAI,WACjC,KAAK,MAGF,QACE,KAAK,6BAA6B,GAE1C,OAAK,MAAM,QAAQ,IAA2C,IAAzB,EAAc,cAM7C,KAAK,sBAAsB,GAGjC,KAAK,eAAiB,IAEf,IAVL,QAAQ,KAAK,yCACN,EAUX,CAAA,MAAS,GAGP,OAFA,QAAQ,MAAM,8BAA+B,GAC7C,KAAK,QAAQ,UACN,CACT,CAAA,QACE,KAAK,cAAe,CACtB,CACF,CAKA,kCAAc,CACZ,GAEA,IACE,MAAQ,QAAS,SAAkB,EAAA,EAAA,uBAA4B,CAC7D,MAAO,iBACP,aAAc,EACd,SAAU,OACV,MAAO,qBACP,QAAS,EAAc,kBAGzB,OAAO,MAAM,QAAQ,GAAiB,EAAgB,EACxD,CAAA,MAAS,GAEP,OADA,QAAQ,MAAM,0BAA2B,GAClC,EACT,CACF,CAKA,2BAAc,CACZ,GAEA,IAAK,IAAI,EAAI,EAAG,EAAI,EAAc,OAAQ,GAAK,KAAK,UAAW,CAG7D,MAAM,EAFQ,EAAc,MAAM,EAAG,EAAI,KAAK,WAElB,IAAI,MAAO,IACrC,IACE,GAAI,GAAwB,iBAAT,GAAqB,EAAK,QAC3C,aAAa,KAAK,UAChB,EAAK,QACL,EAAK,YAAc,EACnB,EAAK,UAAY,EAAa,aAC9B,EAAK,UAAY,CAAC,GAEf,GAAoB,iBAAT,GAAqB,EAAK,OAC1C,aAAa,KAAK,UAChB,EAAK,OACL,EACA,EAAa,aAGnB,CAAA,MAAS,GAEP,OADA,QAAQ,MAAM,iCAAkC,GACzC,IACT,UAGI,QAAQ,WAAW,GAGrB,EAAI,KAAK,UAAY,EAAc,cAC/B,IAAI,QAAS,GAAY,WAAW,EAAS,KAEvD,CACF,CAKA,UAAA,GACE,KAAK,YAAY,OACnB,CAKA,sBAAM,CACJ,EAAgB,GAChB,GAAyB,EACzB,EAAgC,CAAC,GAEjC,MAAM,QAAiB,KAAK,uBAC1B,EACA,EAAQ,aAAe,EACvB,CAAE,cAAe,EAAQ,eAAiB,KAG5C,GAAwB,IAApB,EAAS,QAA+C,IAA/B,KAAK,eAAe,OAC/C,MAAO,GAGT,IAAI,EAAU,GAgCd,OA7BI,EAAS,OAAS,IACpB,GAAW,+BACX,EACG,OAAQ,GAAW,EAAO,YAAc,EAAQ,eAAiB,KACjE,QAAS,IACR,MAAM,EACJ,EAAO,YAAc,EACjB,IACA,EAAO,YAAc,EACnB,IACA,IACR,GAAW,GAAG,KAAuB,EAAO,eAK9C,GAAiB,KAAK,eAAe,OAAS,IAChD,GAAW,EACP,2BACA,yBACJ,KAAK,eAAe,OAAM,GAAI,QAAS,IACrC,MAAM,EACJ,EAAI,QAAQ,OAAS,IACjB,EAAI,QAAQ,UAAU,EAAG,KAAO,MAChC,EAAI,QACV,GAAW,GAAG,EAAI,SAAS,SAIxB,CACT,CAKA,UAAA,GACE,MAAO,IACF,KAAK,QACR,UAAW,KAAK,YAAY,KAC5B,oBAAqB,KAAK,eAAe,OACzC,aAAc,KAAK,aAEvB,GG3eW,EAAb,MACE,GACA,UAEA,WAAA,CAAY,EAAgB,EAAoB,mBAC9C,KAAK,GAAK,EACV,KAAK,UAAY,CACnB,CAKA,gBAAM,SACE,KAAK,GAAG,KAAK,sCACY,KAAK,icAcc,KAAK,oFACR,KAAK,+EACH,KAAK,oCAExD,CAEA,kBAAM,CACJ,EACA,EACA,EACA,EACA,GAEA,MAAM,EAAK,OAAO,aACZ,EAAM,KAAK,MAsBjB,aApBM,KAAK,GACR,QACC,eAAe,KAAK,iLAIrB,KACC,EACA,EACA,GAAU,WAAa,UACvB,GAAU,aAAe,KACzB,EACA,EACA,EACA,KAAK,UAAU,GAAY,CAAC,GAC5B,EACA,GAED,MAEI,CACT,CAEA,kBAAM,CACJ,EACA,EACA,EAAgB,GAChB,EAA+B,CAAC,GAEhC,IAAI,EAAM,iBAAiB,KAAK,8BAChC,MAAM,EAAgB,CAAC,GAsBvB,OApBI,EAAQ,aACV,GAAO,uBACP,EAAO,KAAK,EAAQ,aAGlB,IACF,GAAO,sBACP,EAAO,KAAK,IAAI,YAGY,IAA1B,EAAQ,gBACV,GAAO,uBACP,EAAO,KAAK,EAAQ,gBAGtB,GAAO,qDACP,EAAO,KAAK,WAES,KAAK,GAAG,QAAQ,GAAK,QAAQ,GAAQ,OAE3C,SAAW,IAAI,IAAK,IAAA,CACjC,GAAI,EAAI,GACR,QAAS,EAAI,QACb,YAAa,EAAI,YACjB,QAAS,EAAI,QACb,WAAY,EAAI,WAChB,aAAc,EAAI,aAClB,SAAU,KAAK,MAAM,EAAI,UAAY,MACrC,WAAY,IAAI,KAAK,EAAI,YACzB,WAAY,IAAI,KAAK,EAAI,cAE7B,CAEA,yBAAM,CACJ,EACA,EACA,EAAgB,GAIhB,MAAM,EADQ,EAAQ,cAAc,MAAM,OAAO,OAAO,GAAK,EAAE,OAAS,GAC9C,MAAM,EAAG,GAEnC,GAA2B,IAAvB,EAAY,OAAc,MAAO,GAErC,MAAM,EAAiB,EAAY,IAAA,IAAU,kBAAkB,KAAK,QAC9D,EAAS,CAAC,KAAW,EAAY,IAAI,GAAQ,IAAI,MAAU,GAYjE,cAVqB,KAAK,GACvB,QACC,iBAAiB,KAAK,8CACI,4EAI3B,QAAQ,GACR,OAEY,SAAW,IAAI,IAAK,IAAA,CACjC,GAAI,EAAI,GACR,QAAS,EAAI,QACb,YAAa,EAAI,YACjB,QAAS,EAAI,QACb,WAAY,EAAI,WAChB,aAAc,EAAI,aAClB,SAAU,KAAK,MAAM,EAAI,UAAY,MACrC,WAAY,IAAI,KAAK,EAAI,YACzB,WAAY,IAAI,KAAK,EAAI,cAE7B,CAEA,kBAAM,CAAa,EAAY,GAC7B,MAAM,EAAmB,GACnB,EAAgB,QAEK,IAAvB,EAAQ,aACV,EAAO,KAAK,kBACZ,EAAO,KAAK,EAAQ,kBAGO,IAAzB,EAAQ,eAC0B,iBAAzB,EAAQ,cAA6B,EAAQ,aAAa,WACnE,EAAO,KAAK,mCACZ,EAAO,KAAK,EAAQ,aAAa,aAEjC,EAAO,KAAK,oBACZ,EAAO,KAAK,EAAQ,qBAIC,IAArB,EAAQ,WACV,EAAO,KAAK,gBACZ,EAAO,KAAK,KAAK,UAAU,EAAQ,YAGrC,EAAO,KAAK,kBACZ,EAAO,KAAK,KAAK,OACjB,EAAO,KAAK,GAER,EAAO,OAAS,SACZ,KAAK,GACR,QAAQ,UAAU,KAAK,iBAAiB,EAAO,KAAK,sBACpD,QAAQ,GACR,KAEP,CAEA,kBAAM,CAAa,SACX,KAAK,GAAG,QAAQ,eAAe,KAAK,0BAA0B,KAAK,GAAI,KAC/E,CAEA,mBAAM,CAAc,GAClB,MAAM,QAAe,KAAK,GACvB,QAAQ,iBAAiB,KAAK,0BAC9B,KAAK,GACL,QAEH,OAAK,EAEE,CACL,GAAI,EAAO,GACX,QAAS,EAAO,QAChB,YAAa,EAAO,YACpB,QAAS,EAAO,QAChB,WAAY,EAAO,WACnB,aAAc,EAAO,aACrB,SAAU,KAAK,MAAO,EAAO,UAAuB,MACpD,WAAY,IAAI,KAAK,EAAO,YAC5B,WAAY,IAAI,KAAK,EAAO,aAXV,IAatB,CAEA,yBAAM,CAAoB,GACxB,IAAK,MAAM,GAAE,EAAI,QAAS,KAAgB,QAClC,KAAK,aAAa,EAAI,EAEhC,GAOW,EAAb,MACE,GACA,OAEA,WAAA,CAAY,EAAiB,EAAiB,kBAC5C,KAAK,GAAK,EACV,KAAK,OAAS,CAChB,CAEA,UAAA,CAAmB,GACjB,MAAO,GAAG,KAAK,cAAc,GAC/B,CAEA,YAAA,CAAqB,GACnB,MAAO,GAAG,KAAK,gBAAgB,GACjC,CAEA,kBAAM,CACJ,EACA,EACA,EACA,EACA,GAEA,MAAM,EAAK,OAAO,aACZ,EAAM,KAAK,MAEX,EAAuB,CAC3B,KACA,QAAS,EACT,YAAa,EACb,UACA,aACA,aAAc,EACd,SAAU,GAAY,CAAC,EACvB,WAAY,IAAI,KAAK,GACrB,WAAY,IAAI,KAAK,UAIjB,KAAK,GAAG,IAAI,KAAK,aAAa,GAAK,KAAK,UAAU,IAGxD,MAAM,EAAU,KAAK,WAAW,GAC1B,QAAqB,KAAK,GAAG,IAAI,EAAS,SAAuB,GAIvE,OAHA,EAAa,KAAK,SACZ,KAAK,GAAG,IAAI,EAAS,KAAK,UAAU,IAEnC,CACT,CAEA,kBAAM,CACJ,EACA,EACA,EAAgB,GAChB,EAA+B,CAAC,GAEhC,MAAM,EAAU,KAAK,WAAW,GAC1B,QAAkB,KAAK,GAAG,IAAI,EAAS,SAAuB,GAMpE,IAAI,SAJmB,QAAQ,IAC7B,EAAU,IAAI,GAAM,KAAK,cAAc,MAGjB,OAAQ,GAA+B,OAAN,GAgBzD,OAdI,IACF,EAAW,EAAS,OAAO,GACzB,EAAE,QAAQ,cAAc,SAAS,EAAM,iBAIvC,EAAQ,aACV,EAAW,EAAS,OAAO,GAAK,EAAE,cAAgB,EAAQ,kBAG9B,IAA1B,EAAQ,gBACV,EAAW,EAAS,OAAO,GAAK,EAAE,YAAc,EAAQ,gBAGnD,EACJ,KAAA,CAAM,EAAG,IAAM,EAAE,WAAa,EAAE,YAAc,EAAE,WAAW,UAAY,EAAE,WAAW,WACpF,MAAM,EAAG,EACd,CAEA,yBAAM,CACJ,EACA,EACA,EAAgB,GAGhB,MAAM,EADQ,EAAQ,cAAc,MAAM,OAAO,OAAO,GAAK,EAAE,OAAS,GAC9C,MAAM,EAAG,GAEnC,OAA2B,IAAvB,EAAY,OAAqB,UAEd,KAAK,aAAa,EAAQ,GAAI,KAGlD,OAAO,GACN,EAAY,KAAK,GAAQ,EAAE,QAAQ,cAAc,SAAS,KAE3D,MAAM,EAAG,EACd,CAEA,kBAAM,CAAa,EAAY,GAC7B,MAAM,QAAe,KAAK,cAAc,GACnC,SAEsB,IAAvB,EAAQ,aACV,EAAO,WAAa,EAAQ,iBAGD,IAAzB,EAAQ,eAC0B,iBAAzB,EAAQ,aACjB,EAAO,cAAgB,EAAQ,aAAa,WAAa,EAEzD,EAAO,aAAe,EAAQ,mBAIT,IAArB,EAAQ,WACV,EAAO,SAAW,IAAK,EAAO,YAAa,EAAQ,WAGrD,EAAO,WAAa,IAAI,WAElB,KAAK,GAAG,IAAI,KAAK,aAAa,GAAK,KAAK,UAAU,IAC1D,CAEA,kBAAM,CAAa,GACjB,MAAM,QAAe,KAAK,cAAc,GACxC,IAAK,EAAQ,aAEP,KAAK,GAAG,OAAO,KAAK,aAAa,IAGvC,MAAM,EAAU,KAAK,WAAW,EAAO,SAEjC,SADqB,KAAK,GAAG,IAAI,EAAS,SAAuB,IACzC,OAAO,GAAO,IAAQ,SAC9C,KAAK,GAAG,IAAI,EAAS,KAAK,UAAU,GAC5C,CAEA,mBAAM,CAAc,GAClB,MAAM,QAAa,KAAK,GAAG,IAAI,KAAK,aAAa,GAAK,QACtD,OAAK,EAEE,IACF,EACH,WAAY,IAAI,KAAK,EAAK,YAC1B,WAAY,IAAI,KAAK,EAAK,aALV,IAOpB,CAEA,yBAAM,CAAoB,SAClB,QAAQ,IACZ,EAAQ,IAAA,EAAO,KAAI,QAAS,KAAiB,KAAK,aAAa,EAAI,IAEvE,GAOW,EAAb,MACE,OAAgC,KAChC,QACA,OAEA,WAAA,CAAY,GAIV,GAHA,KAAK,OAAS,EAGS,OAAnB,EAAO,SAAoB,EAAO,KAAK,GACzC,KAAK,QAAU,IAAI,EAAsB,EAAO,IAAI,GAAI,EAAO,eAC1D,IAAuB,OAAnB,EAAO,UAAoB,EAAO,KAAK,GAGhD,MAAM,IAAI,MAAM,kCAAkC,EAAO,WAFzD,KAAK,QAAU,IAAI,EAAsB,EAAO,IAAI,GAAI,EAAO,SAEG,CAEtE,CAKA,gBAAM,GACJ,OAAI,KAAK,SAIT,KAAK,OAAS,IAAI,EAAA,OAAO,CAAC,GAGE,OAAxB,KAAK,OAAO,SAAoB,KAAK,mBAAmB,SACpD,KAAK,QAAQ,cARG,KAAK,MAY/B,CAKA,UAAA,GACE,OAAO,KAAK,OACd,CAKA,iBAAM,CAAY,SAUK,KAAK,aAG1B,MAAM,EAAQ,IAAI,EAAA,MAAM,CACtB,GAAI,EAAO,GACX,KAAM,EAAO,KACb,aAAc,EAAO,aACrB,MAAO,EAAO,MACd,MAAO,EAAO,OAAS,CAAC,IAU1B,OANA,EAAe,cAAgB,CAC7B,OAAQ,EAAO,OACf,SAAU,EAAO,UAAY,UAC7B,WAAY,EAAO,YAGd,CACT,CAKA,kBAAM,CACJ,EACA,EACA,EACA,EACA,GAEA,aAAa,KAAK,QAAQ,aACxB,EACA,eACA,EACA,EACA,CACE,UAAW,EACX,UACG,GAGT,CAKA,wBAAM,CACJ,EACA,EACA,EAAgB,IAShB,aAPuB,KAAK,QAAQ,aAClC,OACA,EACA,EACA,CAAE,WAAY,kBAIb,OAAO,GAAK,EAAE,UAAU,YAAc,GACtC,IAAI,IAAA,CACH,KAAM,EAAE,UAAU,MAAQ,OAC1B,QAAS,EAAE,QACX,UAAW,EAAE,cAEd,KAAA,CAAM,EAAG,IAAM,EAAE,UAAU,UAAY,EAAE,UAAU,UACxD,CAKA,wBAAM,CACJ,EACA,EACA,EAAgB,GAEhB,MAAM,QAAiB,KAAK,QAAQ,oBAAoB,EAAQ,EAAO,GAEvE,OAAwB,IAApB,EAAS,OAAqB,GAE3B,EAAS,IAAI,GAAK,EAAE,SAAS,KAAK,OAC3C,GCxjBI,EAAmB,CACvB,QAA4B,oBAAZ,SAA2B,SAAS,IAAI,eAAiB,4BACzE,OAA2B,oBAAZ,SAA2B,SAAS,IAAI,mBAAqB,MAMjE,EAAc,CAEzB,CACE,KAAM,aACN,YACE,0OACF,OAAQ,EAAA,EAAE,OAAO,CACf,MAAO,EAAA,EAAE,SACT,SAAU,EAAA,EAAE,KAAK,CAAC,UAAW,OAAQ,SAAU,SAAU,UAAW,QAAS,OAAO,WAAW,QAAQ,WACvG,QAAS,EAAA,EAAE,KAAK,CAAC,OAAQ,MAAO,OAAQ,QAAS,SAAS,WAAW,QAAQ,QAC7E,KAAM,EAAA,EAAE,SAAS,WAAW,QAAQ,GACpC,SAAU,EAAA,EAAE,SAAS,WAAW,QAAQ,SACxC,OAAQ,EAAA,EAAE,UAAU,WAAW,SAAQ,GACvC,QAAS,EAAA,EAAE,SAAS,WAAW,QAAQ,IACvC,QAAS,EAAA,EAAE,SAAS,WACpB,OAAQ,EAAA,EAAE,SAAS,aAErB,KAAM,OAAS,QAAO,WAAW,UAAW,UAAU,OAAQ,OAAO,EAAG,WAAW,QAAS,OAAQ,GAAW,EAAO,UAAU,GAAI,UAAS,aAC3I,IAEE,MAAM,EAAU,GAAW,EAAiB,QACtC,EAAU,GAAU,EAAiB,OAAS,CAAE,YAAa,GAAU,EAAiB,aAAW,EAEnG,QAAe,EAAU,UAAU,CACvC,MAAO,CACL,EAAG,EACH,IAAK,EACI,UACH,OACN,KAAM,EACN,OAAQ,EACC,WAEF,aACL,GAAW,CAAE,aAGnB,IAAK,EAAO,OAAS,EAAO,KAAK,SAA0C,IAA/B,EAAO,KAAK,QAAQ,OAC9D,MAAO,gCAAgC,0CAGzC,IAAI,EAAa,2BAA2B,OAAW,mBAmBvD,OAjBA,EAAO,KAAK,QAAQ,QAAA,CAAS,EAAc,KACzC,GAAc,GAAG,EAAQ,MAAM,EAAa,UAC5C,GAAc,WAAW,EAAa,QAClC,EAAa,SACf,GAAc,cAAc,EAAa,YAEvC,EAAa,UACf,GAAc,mBAAmB,EAAa,aAE5C,EAAa,SAAW,EAAa,QAAQ,OAAS,IACxD,GAAc,eAAe,EAAa,QAAQ,KAAK,WAEzD,GAAc,OAGhB,GAAc,SAAS,EAAO,KAAK,QAAQ,wFAEpC,CACT,CAAA,MAAS,GACP,MAAO,qCAAqC,cAAkB,EAAM,SACtE,IAGJ,CACE,KAAM,eACN,YACE,gTACF,OAAQ,EAAA,EAAE,OAAO,CACf,IAAK,EAAA,EAAE,SAAS,MAChB,OAAQ,EAAA,EAAE,UAAU,WAAW,SAAQ,GACvC,MAAO,EAAA,EAAE,UAAU,WAAW,SAAQ,GACtC,WAAY,EAAA,EAAE,UAAU,WAAW,SAAQ,GAC3C,aAAc,EAAA,EAAE,UAAU,WAAW,SAAQ,GAC7C,QAAS,EAAA,EAAE,SAAS,IAAI,GAAG,IAAI,IAAI,WAAW,QAAQ,IACtD,QAAS,EAAA,EAAE,SAAS,WACpB,OAAQ,EAAA,EAAE,SAAS,aAErB,KAAM,OAAS,MAAK,UAAS,EAAM,SAAQ,EAAM,cAAa,EAAM,gBAAe,EAAM,UAAU,GAAI,UAAS,aAC9G,IAEE,MAAM,EAAU,GAAW,EAAiB,QACtC,EAAU,GAAU,EAAiB,OAAS,CAAE,YAAa,GAAU,EAAiB,aAAW,EAEnG,QAAe,EAAU,eAAe,CAC5C,MAAO,CACA,MACG,SACD,QACK,aACE,eACL,WAEF,aACL,GAAW,CAAE,aAGnB,IAAK,EAAO,KACV,MAAO,uCAAuC,0CAGhD,MAAM,EAAO,EAAO,KAEpB,IAAI,EAAa,2BAA2B,EAAK,KAAO,QAsCxD,OApCI,EAAK,QACP,GAAc,UAAU,EAAK,aAG3B,EAAK,SACP,GAAc,WAAW,EAAK,WAC1B,EAAK,cACP,GAAc,6BAA6B,EAAK,iBAE9C,EAAK,cACP,GAAc,gBAAgB,EAAK,kBAInC,EAAK,OACP,GAAc,qBAAqB,EAAK,UAGtC,EAAK,SACP,GAAc,WAAW,EAAK,YAG5B,EAAK,aACP,GAAc,eAAe,EAAK,gBAGhC,EAAK,OACP,GAAc,4BAA4B,EAAK,UAG7C,EAAK,OACP,GAAc,eAAe,EAAK,YAGpC,GAAc,oDAEP,CACT,CAAA,MAAS,GACP,MAAO,mCAAmC,cAAgB,EAAM,SAClE,IAGJ,CACE,KAAM,uBACN,YACE,yPACF,OAAQ,EAAA,EAAE,OAAO,CACf,SAAU,EAAA,EAAE,KAAK,CAAC,OAAQ,SAAU,YAAa,WAAY,MAAO,SAAU,aAAc,eAC5F,IAAK,EAAA,EAAE,SAAS,WAChB,MAAO,EAAA,EAAE,KAAK,CACZ,WACA,oBACA,YACA,oBACA,sBACA,mBACA,wBACA,qBACC,WAAW,QAAQ,YACtB,MAAO,EAAA,EAAE,SAAS,WAAW,QAAQ,iDACrC,YAAa,EAAA,EAAE,SAAS,IAAI,GAAG,IAAI,GAAG,WAAW,QAAQ,IACzD,KAAM,EAAA,EAAE,UAAU,WAAW,SAAQ,GACrC,MAAO,EAAA,EAAE,SAAS,WAClB,aAAc,EAAA,EAAE,SAAS,WACzB,QAAS,EAAA,EAAE,SAAS,WACpB,QAAS,EAAA,EAAE,SAAS,WACpB,OAAQ,EAAA,EAAE,SAAS,aAErB,KAAM,OAAS,WAAU,MAAK,QAAQ,WAAY,QAAQ,gDAAiD,cAAc,GAAK,QAAO,EAAM,QAAO,eAAc,UAAS,UAAS,aAChL,IAEE,MAAM,EAAU,GAAW,EAAiB,QACtC,EAAU,GAAU,EAAiB,OAAS,CAAE,YAAa,GAAU,EAAiB,aAAW,EAEnG,EAAc,CAClB,QACA,WACA,QACA,OACA,eAGE,IACF,EAAY,IAAM,GAGhB,IACF,EAAY,MAAQ,GAGlB,IACF,EAAY,aAAe,GAGzB,IACF,EAAY,QAAU,GAGxB,MAAM,QAAe,EAAU,cAAc,CAC3C,KAAM,EACG,aACL,GAAW,CAAE,aAGnB,IAAK,EAAO,KACV,MAAO,2EAGT,IAAI,EAAa,gBAAgB,YAAgB,mBAYjD,OAVI,EAAO,KAAK,UACd,GAAc,EAAO,KAAK,SAGxB,EAAO,KAAK,UACd,GAAc,4BAA4B,KAAK,UAAU,EAAO,KAAK,QAAS,KAAM,MAGtF,GAAc,kDAEP,CACT,CAAA,MAAS,GACP,MAAO,0CAA0C,EAAM,SACzD,IAGJ,CACE,KAAM,8BACN,YACE,6TACF,OAAQ,EAAA,EAAE,OAAO,CACf,IAAK,EAAA,EAAE,SAAS,MAChB,YAAa,EAAA,EAAE,UAAU,WAAW,SAAQ,GAC5C,KAAM,EAAA,EAAE,SAAS,IAAI,GAAG,IAAI,KAAO,WAAW,QAAQ,GACtD,QAAS,EAAA,EAAE,SAAS,IAAI,KAAM,IAAI,KAAO,WAAW,QAAQ,KAC5D,UAAW,EAAA,EAAE,KAAK,CAAC,mBAAoB,OAAQ,eAAgB,iBAAiB,WAAW,QAAQ,gBACnG,cAAe,EAAA,EAAE,UAAU,WAAW,SAAQ,GAC9C,UAAW,EAAA,EAAE,SAAS,WAAW,QAAQ,WACzC,OAAQ,EAAA,EAAE,KAAK,CAAC,OAAQ,SAAS,WAAW,QAAQ,QACpD,WAAY,EAAA,EAAE,SAAS,WACvB,cAAe,EAAA,EAAE,SAAS,aAE5B,KAAM,OAAS,MAAK,eAAc,EAAM,OAAO,EAAG,UAAU,IAAO,YAAY,eAAgB,iBAAgB,EAAM,YAAY,UAAW,SAAS,OAAQ,aAAY,oBACvK,IACE,MAAM,EAAkB,GAAkC,oBAAZ,SAA2B,SAAS,KAAK,aAAgB,wCACjG,EAAS,GAAqC,oBAAZ,SAA2B,SAAS,KAAK,gBAE3E,EAAa,IAAI,IAAI,cAAe,GAEpC,EAAO,CACX,MACA,cACA,OACA,UACA,YACA,gBACA,YACA,UAGI,EAAkC,CACtC,eAAgB,oBAGd,IACF,EAAQ,cAAmB,UAAU,KAGvC,MAAM,QAAiB,MAAM,EAAW,WAAY,CAClD,OAAQ,OACR,UACA,KAAM,KAAK,UAAU,KAGvB,IAAK,EAAS,GAEZ,MAAO,gCADiB,EAAS,SAInC,GAAe,SAAX,EAAmB,CACrB,MAAM,QAAa,EAAS,OAC5B,IAAI,EAAa,+BAA+B,EAAK,UAUrD,OATI,EAAK,QACP,GAAc,UAAU,EAAK,WAE/B,GAAc,cAAc,EAAK,eAC7B,EAAK,oBACP,GAAc,4BAA4B,EAAK,yBAEjD,GAAc,6BAA6B,EAAK,WAChD,GAAc,8CACP,CACT,CAGA,MAAO,uDADY,EAAS,QAE9B,CAAA,MAAS,GACP,MAAO,0BAA0B,cAAgB,EAAM,SACzD,KC7TA,EAAoB,qCAMb,EAAb,MACE,IAAc,YAEd,WAAA,CAAY,GACV,KAAK,IAAM,GAAM,KAAO,KAAK,GAC/B,CAEA,WAAM,CAAM,GAGV,MAAM,GAFN,EAAO,EAAK,QAAU,IAEK,QAAQ,IAAI,KAAK,QACtC,EAAc,EAAK,QAAQ,KAAK,KAAK,QAE3C,IAAsB,IAAlB,IAAwC,IAAhB,EAC1B,MAAO,GAGT,MAAM,EAAsB,EAAgB,IAAI,KAAK,OAAO,OAQ5D,OAPc,EACX,MAAM,EAAqB,GAC3B,OACA,MAAM,MACN,OAAQ,GAAyB,KAAhB,EAAK,QACtB,IAAK,GAAS,EAAK,QAAQ,EAAmB,IAGnD,GAOW,EAAb,MACE,IAAc,YAEd,WAAA,CAAY,GACV,KAAK,IAAM,GAAM,KAAO,KAAK,GAC/B,CAEA,WAAM,CAAM,GAGV,MAAM,GAFN,EAAO,EAAK,QAAU,IAEK,QAAQ,IAAI,KAAK,QACtC,EAAc,EAAK,QAAQ,KAAK,KAAK,QAE3C,IAAsB,IAAlB,IAAwC,IAAhB,EAC1B,OAGF,MAAM,EAAsB,EAAgB,IAAI,KAAK,OAAO,OAM5D,OALa,EACV,MAAM,EAAqB,GAC3B,OACA,QAAQ,EAAmB,GAGhC,GC3DW,EAA6B,GACjC,EACJ,IACE,GACC,GAAoB,cAAjB,EAAQ,MAAyC,OAAjB,EAAQ,KAAgB,KAAO,WAAW,OAAO,EAAQ,SAAW,OAE1G,KAAK,MCHV,SAAgB,EAAkB,GAChC,MAAM,GAAgB,GAAS,IAAI,OAC7B,EAAc,EAAa,OAAS,EAAI,EAAe,aAG7D,MAAO,CACL,CACE,YACE,sFACF,SAAU,CACR,MAAO,uBAAuB,IAC9B,IARc,mCAAmC,mBAAmB,KASpE,OAAQ,kBAIhB,CAEA,SAAgB,EAAuB,EAAiB,GACtD,OAAI,MAAM,QAAQ,IAAW,EAAO,OAAS,EACpC,EAEF,EAAkB,EAC3B,CAWA,IAAI,EAA4C,KA+BhD,eAAsB,EACpB,EACA,EACA,EACA,EACA,GAEA,GAAoB,IAAhB,EAAK,QAAmC,IAAnB,EAAQ,OAC/B,OAAO,EAGT,IAAI,EAAkD,GAyBtD,GAvBI,EAAQ,OAAS,IAoBnB,SAnBsB,QAAQ,IAC5B,EAAQ,IAAI,MAAO,IACjB,GAAI,EACF,IACE,MAAM,QAAe,EAAiB,GACtC,GAAI,EAAQ,OAAO,CACrB,CAAA,MAAS,GACP,QAAQ,MACN,2DAA2D,KAC3D,EAEJ,CAEF,OAAI,EA/CZ,eAAwC,EAAgB,GACtD,IACE,MAAM,cAAE,SAAwB,OAAO,kBACjC,EAAS,CACb,SAAU,aACV,YAAa,EAAc,OAC3B,cAAe,EAAc,YAC7B,kBAAmB,EAAc,gBACjC,WAAY,WAAW,EAAc,sCAEjC,EAAe,GAAG,mBAClB,QAAa,EAAc,WAAY,IAAK,EAAQ,IAAK,IACzD,EAAS,KAAK,MAAM,GAC1B,MAAO,CAAE,MAAO,EAAO,OAAS,oBAAqB,QAAS,EAAO,SAAW,GAClF,CAAA,MAAS,GAEP,OADA,QAAQ,MAAM,gEAAgE,KAAW,GAClF,IACT,CACF,CA8BiB,CAAyB,EAAQ,GAEnC,SAGS,OAAQ,GAAY,OAAN,IAGF,cAA9B,EAAM,oBACR,OAAO,EAAK,MAAM,EAAG,IAGvB,MAAM,EAAkB,EAAK,OAC1B,GAAQ,EAAI,aAAe,EAAI,YAAY,OAAS,GASvD,MAAO,IANsB,EAAU,IAAK,IAAA,CAC1C,YAAa,EAAS,QACtB,SAAU,CAAE,MAAO,EAAS,MAAO,IAAK,cAIlB,GAAiB,MAAM,EAAG,GACpD,CAEA,SAAgB,EAAY,GAC1B,OAAO,EACJ,IAAA,CACE,EAAG,IACF,GAAG,EAAQ,MAAM,EAAK,GAAO,SAAS,SAAS,EAAK,GAAO,eAE9D,KAAK,KACV,CCnEA,eAAsB,EACpB,EACA,EACA,GAGA,MAAM,EAAwB,GAE9B,IAAK,MAAM,KAAO,EAAU,CAC1B,MAAM,EAAW,EAAU,KACxB,GAAM,EAAE,SAAS,MAAQ,EAAI,SAAS,KAAO,EAAE,SAAS,UAAY,IAGlE,GAGH,EAAS,aAAe,OAAO,EAAI,cACnC,EAAS,SAAS,WAAa,GAH/B,EAAU,KAAK,IAAK,EAAK,SAAU,IAAK,EAAI,SAAU,UAAW,IAKrE,CAGA,MAAM,EAAmB,GAiBzB,aAfM,QAAQ,IACZ,EAAU,IAAI,MAAO,IAKnB,MAAM,KAAE,SAAS,EAAA,EAAA,cAAmB,CAAE,MAAO,EAAK,OA7F9B,0pGAyFa,QAAQ,aAAc,GAAU,QAC/D,YACA,EAAI,eAIN,EAAK,KAAK,CACR,YAAa,EACb,SAAU,CAAE,MAAO,EAAI,SAAS,MAAO,IAAK,EAAI,SAAS,UAKxD,EAAK,OAAS,EAAI,EAAO,EAAkB,EACpD,CCpEA,IA0BM,EAAN,MACE,OAEA,WAAA,CAAY,GACV,KAAK,OAAS,CAChB,CAOA,wBAAc,CACZ,EACA,EACA,EACA,EAAmB,UACnB,GAA0B,EAC1B,EAAoB,EACpB,GAEA,MAAQ,KAAM,SAAoB,EAAA,EAAA,cAAmB,CACnD,MAAO,EACP,YAAa,EACb,OAAQ,KAAK,OAAO,qBACpB,SAAU,IACL,KAAK,OAAO,uBAAuB,IAAA,EAAM,EAAM,MAAA,CAChD,OACA,aAEF,CACE,KAAM,OACN,QAAS,qCAET,0DAIA,mCAOA,EAAoB,IAAI,EAAqB,CAAE,IAAK,UACpD,EAAuB,IAAI,EAAiB,CAAE,IAAK,aAEnD,QAAc,EAAkB,MAAM,GAC5C,IAAI,QACK,EAAqB,MAAM,IAAqB,EAMzD,GAJiB,eAAb,IACF,EAAW,sBAGT,EAAM,OAAS,GAAK,KAAK,OAAO,sBAAuB,CACjC,IAApB,EAAS,SAAc,EAAW,aAGtC,MAAM,QAAa,EAAsB,QADlB,KAAK,OAAO,sBAAsB,CAAE,UACH,GAExD,MAAO,CAAE,MAAO,EAAU,OAC5B,CAWA,GATA,EAAW,EAAS,QAAQ,uBAAwB,IAC/C,GAAuC,IAA3B,EAAS,OAAO,SAC/B,EAAW,sBAMb,EAAW,EAAS,OAChB,EAAS,OAAS,KAAO,EAAS,MAAM,YAAY,OAAS,EAAG,CAElE,QAAQ,KAAK,wCAAwC,EAAS,+CAG9D,MAAM,EAAgB,EAAS,MAAM,YAAY,GAAG,OAElD,EADE,EAAc,OAAS,GAAK,EAAc,OAAS,IAC1C,EAGA,EAAM,MAAM,EAAG,IAE9B,CAGA,MAAM,EAAgB,KAAK,OAAO,cAAc,OAAS,EACrD,KAAK,OAAO,cAAc,MAAM,EAAG,GAAG,KAAK,MAC3C,MACE,EAAA,CAAiB,EAAkC,EAAe,KACtE,GAAS,KAAK,OAAQ,KAAK,UAAU,CACnC,KAAM,YACN,KAAM,CAAE,QAAO,SAAU,GAAO,EAAe,cAInD,EAAc,UAAW,GAEzB,IAAI,EAAiD,CAAE,QAAS,GAAI,YAAa,IAGjF,GAAK,KAAK,OAAO,eAAkB,KAAK,OAAO,aAExC,CACL,MAAM,EAAa,UACjB,IACE,MAAM,QAAe,KAAK,OAAO,cAAe,EAAU,CACxD,SAAU,KACV,QAAS,KAAK,OAAO,cACrB,WAAY,CAAC,KAGf,OAAO,GAA4B,iBAAX,GAAuB,YAAa,EACxD,EACA,CAAE,QAAS,GAAI,YAAa,GAClC,CAAA,MAAS,GAEP,OADA,QAAQ,MAAM,2CAA4C,GACnD,CAAE,QAAS,GAAI,YAAa,GACrC,GAGI,EAAqB,KAAK,OAAO,yBAA0B,EAEjE,GACE,GACqC,IAArC,KAAK,OAAO,cAAc,QACb,YAAb,EAEA,IACE,MAAM,QAAqB,KAAK,OAAO,aAAc,EAAU,CAAE,YAAa,QAAS,WAAY,KACnG,EAAM,GAAwC,iBAAjB,GAA6B,YAAa,EACnE,EACA,CAAE,QAAS,GAAI,YAAa,GAClC,CAAA,MAAS,GACP,QAAQ,MAAM,iDAAkD,GAChE,EAAM,KAAK,OAAO,oBAAsB,IAAe,CAAE,QAAS,GAAI,YAAa,GACrF,MAEA,GAAI,GAAsB,KAAK,OAAO,aACpC,IACE,QAAY,QAAQ,KAAK,CACvB,IACA,IAAI,QAAA,CAAoD,EAAG,IACzD,WAAA,IAAiB,EAAO,IAAI,MAAM,YAAa,OAGrD,CAAA,MAAS,GACP,GAAoB,YAAhB,EAAI,QAAuB,CAC7B,QAAQ,KAAK,2FACb,IACE,MAAM,QAAqB,KAAK,OAAO,aAAa,EAAU,CAAE,YAAa,QAAS,WAAY,KAClG,EAAM,GAAwC,iBAAjB,GAA6B,YAAa,EACnE,EACA,CAAE,QAAS,GAAI,YAAa,GAClC,CAAA,MAAS,GACP,QAAQ,MAAM,4EAA6E,GAC3F,EAAM,KAAK,OAAO,oBAAsB,IAAe,CAAE,QAAS,GAAI,YAAa,GACrF,CACF,KAAO,CACL,QAAQ,MAAM,mEAAoE,GAClF,IACE,MAAM,QAAqB,KAAK,OAAO,aAAa,EAAU,CAAE,YAAa,QAAS,WAAY,KAClG,EAAM,GAAwC,iBAAjB,GAA6B,YAAa,EACnE,EACA,CAAE,QAAS,GAAI,YAAa,GAClC,CAAA,MAAS,GACP,QAAQ,MAAM,iDAAkD,GAChE,EAAM,CAAE,QAAS,GAAI,YAAa,GACpC,CACF,CACF,MAEA,EAAM,KAAK,OAAO,oBAAsB,IAAe,CAAE,QAAS,GAAI,YAAa,GAGzF,MAzEE,EAAM,CAAE,QAAS,GAAI,YAAa,IA2EpC,IAoBI,EACA,EArBA,GAAyB,GAAK,SAAW,IAAI,IAAK,IAAA,CACpD,YACE,EAAO,UACN,KAAK,OAAO,cAAc,SAAS,WAAa,EAAO,MAAQ,IAClE,SAAU,CACR,MAAO,EAAO,MACd,IAAK,EAAO,IACZ,OAAQ,EAAO,UACX,EAAO,SAAW,CAAE,QAAS,EAAO,aA4B5C,GAxByB,IAArB,EAAU,SACZ,EAAY,EAAkB,IAGhC,EAAc,OAAQ,GAOlB,EAAoB,GAEtB,EAAc,EACd,EAAmB,KAAK,IAAI,EAAG,KAAK,MAAM,EAAoB,KACrD,GACT,EAAc,EAEd,EAAmB,IAEnB,EAAc,EACd,EAAmB,GAGjB,EAAc,EAAG,CACnB,MAAM,EAAe,EAAU,MAAM,EAAG,GACxC,EAAc,UAAW,kBAAkB,EAAa,iBAAkB,WAE1E,MAAM,EAAkB,KAAK,OAAO,UAAY,EAAa,IAAI,MAAO,EAAK,KAC3E,MAAM,EAAM,EAAI,UAAU,IAxRlC,IAAoB,EAyRZ,GAAK,GAAQ,KAAK,OAAO,UACzB,IACE,MAAM,OA1PQ,OACtB,EACA,IAEO,QAAQ,KAAK,CAClB,EACA,IAAI,QAAoB,IACtB,WAAA,IAAiB,OAAQ,GAAY,OAmPZ,CACnB,KAAK,OAAO,UAAU,EAAK,CAAE,QAAS,IACnB,IAAnB,EAA0B,MAE5B,GAAsB,iBAAX,GAAuB,EAAO,OAAS,IAAK,CACrD,MAAM,GAhSE,EAgSgB,EA/R3B,EACJ,QAAQ,oDAAqD,KAC7D,QAAQ,WAAY,KACpB,QAAQ,UAAW,KACnB,QAAQ,SAAU,KAClB,QAAQ,QAAS,KACjB,QAAQ,QAAS,KACjB,QAAQ,UAAW,KACnB,QAAQ,SAAU,KAClB,QAAQ,sBAAuB,KAC/B,QAAQ,OAAQ,KAChB,QAqRU,QAAQ,iBAAkB,KAC1B,QAAQ,OAAQ,KAChB,OACA,MAAM,EAAG,KACR,EAAK,OAAS,MAChB,EAAU,GAAK,YAAc,EAEjC,CACF,CAAA,MAEA,IACG,SAEC,QAAQ,WAAW,GACzB,EAAc,OAAQ,kBAAkB,EAAa,iBAAkB,UACzE,CAEA,MAAO,CAAE,MAAO,EAAU,KAAM,EAClC,CAMA,iBAAc,CACZ,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,GAEA,IACE,IAAI,EAA0B,KAC1B,EAAQ,EAEZ,GAAI,KAAK,OAAO,UAAW,CACzB,MAAM,QAAe,KAAK,mBACxB,EACA,EAA0B,GAC1B,EACA,EACA,EACA,EACA,GAEF,EAAQ,EAAO,MACf,EAAO,EAAO,IAChB,CAEA,MAAM,EAAgD,QAAQ,IAAI,cAC9D,CACE,UAAW,QAAQ,IAAI,cACvB,YAAa,QAAQ,IAAI,kBAAoB,GAC7C,gBAAiB,QAAQ,IAAI,sBAAwB,GACrD,OAAQ,QAAQ,IAAI,mBAAqB,0BAE3C,EAEE,QAAmB,EACvB,EACA,GAAQ,GACR,EACA,EACA,GAGI,EAAU,EAAuB,EAAY,GACA,EAAQ,OAC3D,EAAQ,KAAK,OAAQ,KAAK,UAAU,CAAE,KAAM,UAAW,KAAM,KAQ7D,MAAM,GAAA,EAAA,EAAA,YAAoB,CACxB,MAAO,EACP,YAAa,GACb,QAnUN,EA0T2C,KAAK,OAAO,eAzTvD,EAyTuE,CACjE,qBACA,QAAS,EAAY,GACrB,MAAA,IAAU,MAAO,eA1ThB,OAAO,QAAQ,GAAM,OAAA,CACzB,GAAS,EAAK,KAAW,EAAO,MAAM,IAAI,MAAQ,KAAK,GACxD,IA+TI,SAAU,IAAI,EAAS,CAAE,KAAM,OAAQ,QAAS,MAGlD,IAAI,EAAqB,EACzB,UAAW,MAAM,KAAS,EAAO,WAC/B,GAAsB,EACtB,EAAQ,KAAK,OAAQ,KAAK,UAAU,CAAE,KAAM,WAAY,KAAM,KAIhE,GAA2B,IAAvB,EAA0B,CAM5B,MAAM,EAAkB,CACtB,4FANmB,EAClB,IAAK,GAAQ,EAAI,UAAU,KAC3B,OAAQ,GAAsC,iBAAR,GACtC,MAAM,EAAG,GAIM,IAAK,GAAQ,KAAK,MAClC,KAAK,MAEP,EAAQ,KAAK,OAAQ,KAAK,UAAU,CAAE,KAAM,WAAY,KAAM,IAChE,CAEA,EAAQ,KAAK,MACf,CAAA,MAAS,GACP,MAAM,EAAa,aAAe,MAAQ,EAAI,QAAU,OAAO,GAC/D,QAAQ,MAAM,qDAAsD,EAAY,GAChF,IAAI,EAAc,EACd,EAAW,SAAS,QAAU,EAAW,cAAc,SAAS,aAClE,EACE,6HACO,EAAW,SAAS,OAC7B,EACE,mJACO,EAAW,SAAS,QAAU,EAAW,SAAS,kBAC3D,EACE,sFACO,EAAW,SAAS,QAAU,EAAW,SAAS,iBAC3D,EACE,+EAEJ,EAAQ,KAAK,QAAS,KAAK,UAAU,CAAE,KAAM,IAC/C,CAhXE,IACJ,EACA,CA+WA,CAEA,qBAAM,CACJ,EACA,EACA,EACA,EACA,EACA,EACA,EAAmB,UACnB,GAA0B,EAC1B,EAAoB,GAEpB,MAAM,EAAU,IAAI,EAAA,QAmBpB,OAfA,WAAA,KACE,KAAK,YACH,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,IAED,GAEI,CACT,GC7bI,EAAU,CACd,2BACA,0BACA,6BACA,0BAOW,EAAwB,IAAA,CACnC,UAAW,IAAI,EAAgB,CAC7B,cAAe,GACf,qBAAsB,EAAQ,yBAC9B,eAAgB,EAAQ,wBACxB,uBAAwB,EAAQ,2BAChC,QAAQ,EACR,gBAAiB,GACjB,WAAW,KACR,IAEL,eAAgB,IAAI,EAAgB,CAClC,cAAe,CAAC,QAAS,iBAAkB,UAC3C,qBAAsB,EAAQ,yBAC9B,eAAgB,EAAQ,wBACxB,uBAAwB,EAAQ,2BAChC,QAAQ,EACR,gBAAiB,EACjB,WAAW,KACR,IAEL,iBAAkB,IAAI,EAAgB,CACpC,cAAe,GACf,qBAAsB,GACtB,uBAAwB,GACxB,eAAgB,EAAQ,uBACxB,QAAQ,EACR,gBAAiB,EACjB,WAAW,KACR,IAEL,mBAAoB,IAAI,EAAgB,CACtC,cAAe,CAAC,gBAChB,qBAAsB,EAAQ,yBAC9B,eAAgB,EAAQ,wBACxB,uBAAwB,EAAQ,2BAChC,QAAQ,EACR,gBAAiB,EACjB,WAAW,KACR,IAEL,cAAe,IAAI,EAAgB,CACjC,cAAe,CAAC,WAChB,qBAAsB,EAAQ,yBAC9B,eAAgB,EAAQ,wBACxB,uBAAwB,EAAQ,2BAChC,QAAQ,EACR,gBAAiB,GACjB,WAAW,KACR,IAEL,aAAc,IAAI,EAAgB,CAChC,cAAe,CAAC,UAChB,qBAAsB,EAAQ,yBAC9B,eAAgB,EAAQ,wBACxB,uBAAwB,EAAQ,2BAChC,QAAQ,EACR,gBAAiB,GACjB,WAAW,KACR,MASM,EAAiB,ICrFxB,EAAA,CAAmC,EAAuB,IAAM,sIAC6D,owBAqB7H,EAAe,IAAI,EAAqB,CAC5C,IAAK,gBIwBM,EAAb,MACE,OACA,OAA6B,GAE7B,WAAA,CAAY,GACV,KAAK,OAAS,CACZ,eAAgB,EAAO,eACvB,UAAW,EAAO,WAAa,IAC/B,aAAc,EAAO,cAAgB,GACrC,KAAM,EAAO,MAAQ,EAEzB,CAKA,eAAA,CAAwB,GACtB,MAAM,EAAmB,GACnB,EAAQ,EAAK,MAAM,QACnB,UAAE,EAAA,aAAW,GAAiB,KAAK,OAEzC,IAAI,EAAQ,EACZ,KAAO,EAAQ,EAAM,QAAQ,CAC3B,MAAM,EAAM,KAAK,IAAI,EAAQ,EAAW,EAAM,QAC9C,EAAO,KAAK,EAAM,MAAM,EAAO,GAAK,KAAK,MACzC,GAAS,EAAY,CACvB,CAEA,OAAO,CACT,CAKA,YAAM,CAAO,GACX,IAAI,EAAc,EAElB,IAAK,MAAM,KAAO,EAAW,CAC3B,MAAM,EAAa,KAAK,gBAAgB,EAAI,UAEtC,WAAE,SAAe,EAAA,EAAA,WAAgB,CACrC,MAAO,KAAK,OAAO,eACnB,OAAQ,IAGV,IAAK,IAAI,EAAI,EAAG,EAAI,EAAW,OAAQ,IACrC,KAAK,OAAO,KAAK,CACf,GAAI,GAAG,EAAI,YAAY,IACvB,WAAY,EAAI,GAChB,KAAM,EAAW,GACjB,UAAW,EAAW,GACtB,SAAU,EAAI,WAIlB,GAAe,EAAW,MAC5B,CAEA,OAAO,CACT,CAKA,cAAM,CAAS,GACb,GAA2B,IAAvB,KAAK,OAAO,OAAc,MAAO,GAErC,MAAM,UAAE,SAAc,EAAA,EAAA,OAAY,CAChC,MAAO,KAAK,OAAO,eACnB,MAAO,IAGH,EAAS,KAAK,OAAO,IAAK,IAAA,CAC9B,QACA,MAAO,EAAiB,EAAW,EAAM,cAK3C,OAFA,EAAO,KAAA,CAAM,EAAG,IAAM,EAAE,MAAQ,EAAE,OAE3B,EAAO,MAAM,EAAG,KAAK,OAAO,KACrC,CAKA,gBAAM,CAAW,GACf,MAAM,QAAgB,KAAK,SAAS,GACpC,OAAuB,IAAnB,EAAQ,OAAqB,GAE1B,EACJ,IAAA,CAAK,EAAG,IAAM,IAAI,EAAI,cAAc,EAAE,MAAM,QAAQ,OAAO,EAAE,MAAM,QACnE,KAAK,OACV,CAKA,QAAI,GACF,OAAO,KAAK,OAAO,MACrB,CAKA,KAAA,GACE,KAAK,OAAS,EAChB,GAUF,SAAS,EAAiB,EAAa,GACrC,IAAI,EAAa,EACb,EAAQ,EACR,EAAQ,EAEZ,IAAK,IAAI,EAAI,EAAG,EAAI,EAAE,OAAQ,IAC5B,GAAc,EAAE,GAAK,EAAE,GACvB,GAAS,EAAE,GAAK,EAAE,GAClB,GAAS,EAAE,GAAK,EAAE,GAGpB,MAAM,EAAc,KAAK,KAAK,GAAS,KAAK,KAAK,GACjD,OAAoB,IAAhB,EAA0B,EACvB,EAAa,CACtB,CC7JA,eAAsB,EACpB,EACA,EACA,GAEA,MAAM,EAAe,kDAAkD,KAAK,GACtE,EAAS,iBAAiB,KAAK,GAC/B,EAAiB,GAAS,KAAM,GACpC,EAAO,cAAc,SAAS,EAAE,cAAc,MAAM,EAAG,MAGzD,IAAI,EAAQ,GACZ,MAAM,EAAoB,GAkB1B,OAhBI,IACF,GAAS,IACT,EAAQ,KAAK,gCAEX,IACF,GAAS,IACT,EAAQ,KAAK,2BAEX,IACF,GAAS,GACT,EAAQ,KAAK,qCAEV,GAAiB,GAAW,GAC/B,EAAQ,KAAK,+BAGR,CACL,MAAO,KAAK,IAAI,EAAO,GACvB,OAAQ,EAAQ,KAAK,MAAQ,IAEjC,CAMA,eAAsB,EACpB,EACA,GAEA,MAAM,EAAa,IAAI,IACrB,EAAM,cAAc,MAAM,OAAO,OAAQ,GAAM,EAAE,OAAS,IAGtD,EADc,EAAO,cAAc,MAAM,OAChB,OAAQ,GAAM,EAAW,IAAI,IAAI,OAC1D,EAAe,EAAW,KAAO,EAAI,EAAa,EAAW,KAAO,EAEpE,EAAa,EAAO,OAAS,GAC7B,EAAY,EAAO,OAAwB,GAAf,EAAM,OAExC,IAAI,EAAQ,KAAK,IAAmB,IAAf,EAAoB,IACzC,MAAM,EAAoB,GAwB1B,OAtBI,EAAe,IACjB,GAAS,GACT,EAAQ,KAAK,oCACJ,EAAe,GACxB,EAAQ,KAAK,4BAEb,EAAQ,KAAK,kCAGX,IACF,GAAS,GACT,EAAQ,KAAK,uBAEX,IACF,GAAS,GACT,EAAQ,KAAK,+BAGV,IAAe,GAAa,EAAe,KAC9C,GAAS,IAGJ,CACL,MAAO,KAAK,IAAI,EAAG,KAAK,IAAI,EAAO,IACnC,OAAQ,EAAQ,KAAK,MAAQ,IAEjC,CAMA,eAAsB,EAAc,GAClC,MAAM,EAAY,EAAO,MAAM,UAAU,OAAQ,GAAM,EAAE,OAAO,OAAS,GACnE,EAAoB,iFAAiF,KAAK,GAC1G,EAAgB,EAAO,SAAS,SAAW,EAAO,SAAS,MAC3D,EACJ,EAAU,OAAS,EACf,EAAU,OAAA,CAAQ,EAAK,IAAM,EAAM,EAAE,OAAO,MAAM,OAAO,OAAQ,GAAK,EAAU,OAChF,EAEN,IAAI,EAAQ,GACZ,MAAM,EAAoB,GAuB1B,OArBI,EAAU,QAAU,IACtB,GAAS,IACT,EAAQ,KAAK,uBAEX,IACF,GAAS,GACT,EAAQ,KAAK,4BAEX,GAAiB,EAAO,OAAS,MACnC,GAAS,GACT,EAAQ,KAAK,+BAEX,EAAoB,GAAK,EAAoB,KAC/C,GAAS,IACT,EAAQ,KAAK,gCAEX,EAAU,OAAS,GAAK,EAAO,OAAS,MAC1C,GAAS,GACT,EAAQ,KAAK,wCAGR,CACL,MAAO,KAAK,IAAI,EAAG,KAAK,IAAI,EAAO,IACnC,OAAQ,EAAQ,KAAK,MAAQ,IAEjC,CAMA,eAAsB,EAAa,GAOjC,MAAM,EAAU,CALd,qDACA,0DACA,0CAG4B,OAAQ,GAAM,EAAE,KAAK,IAGnD,MAAO,CACL,MAH+B,IAAnB,EAAQ,OAAe,EAAM,KAAK,IAAI,EAAG,EAAuB,GAAjB,EAAQ,QAInE,OACqB,IAAnB,EAAQ,OACJ,8BACA,YAAY,EAAQ,yCAE9B,CI9KA,SAAgB,EAAO,GAErB,IAGE,OADkB,QAAQ,sBACT,MAAM,EACzB,CAAA,MAEE,OAAO,QAAQ,IAAI,EACrB,CACF,CCNA,IAAa,EAAkB,CAC7B,CACA,SAAY,SACZ,KAAQ,qDACR,QAAW,6CACX,QAAW,yCACX,OAAU,CACR,CACE,KAAQ,kCACR,GAAM,yCACN,cAAiB,OACjB,MAAQ,EACR,KAAQ,QAEV,CACE,KAAQ,wBACR,GAAM,oCACN,cAAiB,IACjB,MAAQ,EACR,KAAQ,QAEV,CACE,KAAQ,kBACR,GAAM,yBACN,cAAiB,OACjB,MAAQ,EACR,KAAQ,QAEV,CACE,KAAQ,yBACR,GAAM,8BACN,cAAiB,OACjB,MAAQ,EACR,KAAQ,QAEV,CACE,KAAQ,0BACR,GAAM,+BACN,cAAiB,OACjB,MAAQ,EACR,KAAQ,QAEV,CACE,KAAQ,wBACR,GAAM,6BACN,cAAiB,OACjB,MAAQ,EACR,KAAQ,QAEV,CACE,KAAQ,iBACR,GAAM,wBACN,cAAiB,OACjB,MAAQ,EACR,KAAQ,QAEV,CACE,KAAQ,kBACR,GAAM,4BACN,cAAiB,OACjB,MAAQ,EACR,KAAQ,UAIZ,CACE,SAAU,aACV,KAAM,gDACN,QAAS,iDACT,QAAS,iCACT,OAAQ,CACN,CACE,KAAM,iCACN,GAAI,iCACJ,cAAe,OAEjB,CACE,KAAM,kCACN,GAAI,kCACJ,cAAe,OAEjB,CACE,KAAM,6BACN,GAAI,6BACJ,cAAe,OAEjB,CACE,KAAM,iBACN,GAAI,iBACJ,cAAe,OAEjB,CACE,KAAM,iCACN,GAAI,iCACJ,cAAe,OAEjB,CACE,KAAM,UACN,GAAI,UACJ,cAAe,OAEjB,CACE,KAAM,6BACN,GAAI,6BACJ,cAAe,OAEjB,CACE,KAAM,mBACN,GAAI,mBACJ,cAAe,MAEjB,CACE,KAAM,+BACN,GAAI,+BACJ,cAAe,OAEjB,CACE,KAAM,wBACN,GAAI,wBACJ,cAAe,QAEjB,CACE,KAAM,wBACN,GAAI,wBACJ,cAAe,QAEjB,CACE,KAAM,gCACN,GAAI,gCACJ,cAAe,QAEjB,CACE,KAAM,4BACN,GAAI,4BACJ,cAAe,OAEjB,CACE,KAAM,4BACN,GAAI,4BACJ,cAAe,OAEjB,CACE,KAAM,UACN,GAAI,UACJ,cAAe,MAEjB,CACE,KAAM,wBACN,GAAI,wBACJ,cAAe,OAEjB,CACE,KAAM,2BACN,GAAI,2BACJ,cAAe,MAEjB,CACE,KAAM,yBACN,GAAI,yBACJ,cAAe,OAEjB,CACE,KAAM,0BACN,GAAI,0BACJ,cAAe,MAEjB,CACE,KAAM,kBACN,GAAI,kBACJ,cAAe,MAEjB,CACE,KAAM,2BACN,GAAI,2BACJ,cAAe,OAEjB,CACE,KAAM,kBACN,GAAI,kBACJ,cAAe,OAEjB,CACE,KAAM,sBACN,GAAI,sBACJ,cAAe,MAEjB,CACE,KAAM,2BACN,GAAI,2BACJ,cAAe,OAEjB,CACE,KAAM,mBACN,GAAI,mBACJ,cAAe,MAEjB,CACE,KAAM,mBACN,GAAI,mBACJ,cAAe,MAEjB,CACE,KAAM,0BACN,GAAI,0BACJ,cAAe,MAEjB,CACE,KAAM,cACN,GAAI,cACJ,cAAe,MAEjB,CACE,KAAM,sBACN,GAAI,sBACJ,cAAe,MAEjB,CACE,KAAM,0BACN,GAAI,0BACJ,cAAe,OAEjB,CACE,KAAM,gCACN,GAAI,gCACJ,cAAe,OAEjB,CACE,KAAM,oBACN,GAAI,oBACJ,cAAe,OAEjB,CACE,KAAM,uBACN,GAAI,uBACJ,cAAe,MAEjB,CACE,KAAM,iBACN,GAAI,iBACJ,cAAe,MAEjB,CACE,KAAM,QACN,GAAI,QACJ,cAAe,MAEjB,CACE,KAAM,2BACN,GAAI,2BACJ,cAAe,MAEjB,CACE,KAAM,uBACN,GAAI,uBACJ,cAAe,OAEjB,CACE,KAAM,sBACN,GAAI,sBACJ,cAAe,OAEjB,CACE,KAAM,oBACN,GAAI,oBACJ,cAAe,OAEjB,CACE,KAAM,2BACN,GAAI,2BACJ,cAAe,OAEjB,CACE,KAAM,qBACN,GAAI,qBACJ,cAAe,MAEjB,CACE,KAAM,oBACN,GAAI,oBACJ,cAAe,MAEjB,CACE,KAAM,gBACN,GAAI,gBACJ,cAAe,OAEjB,CACE,KAAM,4BACN,GAAI,4BACJ,cAAe,MAEjB,CACE,KAAM,iBACN,GAAI,iBACJ,cAAe,MAEjB,CACE,KAAM,gCACN,GAAI,gCACJ,cAAe,IAEjB,CACE,KAAM,oBACN,GAAI,oBACJ,cAAe,IAEjB,CACE,KAAM,gCACN,GAAI,gCACJ,cAAe,IAEjB,CACE,KAAM,mCACN,GAAI,mCACJ,cAAe,IAEjB,CACE,KAAM,mCACN,GAAI,mCACJ,cAAe,OAEjB,CACE,KAAM,+BACN,GAAI,+BACJ,cAAe,OAEjB,CACE,KAAM,oBACN,GAAI,oBACJ,cAAe,MAEjB,CACE,KAAM,0BACN,GAAI,0BACJ,cAAe,MAEjB,CACE,KAAM,gCACN,GAAI,gCACJ,cAAe,MAEjB,CACE,KAAM,uBACN,GAAI,uBACJ,cAAe,MAEjB,CACE,KAAM,+BACN,GAAI,+BACJ,cAAe,MAEjB,CACE,KAAM,qBACN,GAAI,qBACJ,cAAe,MAEjB,CACE,KAAM,+BACN,GAAI,+BACJ,cAAe,IAEjB,CACE,KAAM,oBACN,GAAI,oBACJ,cAAe,KAEjB,CACE,KAAM,oBACN,GAAI,oBACJ,cAAe,KAEjB,CACE,KAAM,uBACN,GAAI,uBACJ,cAAe,MAEjB,CACE,KAAM,2BACN,GAAI,2BACJ,cAAe,MAEjB,CACE,KAAM,mBACN,GAAI,mBACJ,cAAe,KAEjB,CACE,KAAM,wBACN,GAAI,wBACJ,cAAe,KAEjB,CACE,KAAM,uBACN,GAAI,uBACJ,cAAe,MAEjB,CACE,KAAM,cACN,GAAI,cACJ,cAAe,MAEjB,CACE,KAAM,YACN,GAAI,YACJ,cAAe,KAEjB,CACE,KAAM,UACN,GAAI,UACJ,cAAe,OAEjB,CACE,KAAM,yBACN,GAAI,yBACJ,cAAe,SAIrB,CACE,SAAU,aACV,KAAM,gDACN,QAAS,6CACT,QAAS,QACT,OAAQ,CACN,CACE,KAAM,YACN,GAAI,YACJ,cAAe,KAEjB,CACE,KAAM,QACN,GAAI,QACJ,cAAe,OAEjB,CACE,KAAM,sBACN,GAAI,sBACJ,cAAe,OAEjB,CACE,KAAM,kBACN,GAAI,kBACJ,cAAe,OAEjB,CACE,KAAM,sBACN,GAAI,sBACJ,cAAe,OAEjB,CACE,KAAM,oCACN,GAAI,oCACJ,cAAe,QAEjB,CACE,KAAM,oCACN,GAAI,oCACJ,cAAe,QAEjB,CACE,KAAM,mCACN,GAAI,mCACJ,cAAe,UAIrB,CACE,SAAU,OACV,KAAM,yCACN,QAAS,gCACT,QAAS,0BACT,OAAQ,CACN,CACE,KAAM,iCACN,GAAI,0BACJ,cAAe,OACf,MAAM,EACN,KAAM,kBACN,UAAW,wCAEb,CACE,KAAM,8BACN,GAAI,uBACJ,cAAe,KACf,MAAM,EACN,KAAM,kBACN,UAAW,wCAEb,CACE,KAAM,2BACN,GAAI,4CACJ,cAAe,OACf,MAAM,EACN,KAAM,kBACN,UAAW,wCAEb,CACE,KAAM,oBACN,GAAI,iBACJ,cAAe,MACf,MAAM,EACN,KAAM,kBACN,UAAW,wCAEb,CACE,KAAM,sBACN,GAAI,sBACJ,cAAe,MACf,MAAM,EACN,KAAM,kBACN,UAAW,wCAEb,CACE,KAAM,qBACN,GAAI,qBACJ,cAAe,MACf,MAAM,EACN,KAAM,kBACN,UAAW,wCAEb,CACE,KAAM,uBACN,GAAI,gBACJ,cAAe,MACf,MAAM,EACN,KAAM,kBACN,UAAW,yCAEb,CACE,KAAM,4BACN,GAAI,qBACJ,cAAe,MACf,MAAM,EACN,KAAM,kBACN,UAAW,yCAEb,CACE,KAAM,+BACN,GAAI,+BACJ,cAAe,MACf,MAAM,EACN,KAAM,kBACN,UAAW,0CAIjB,CACE,SAAU,SACV,KAAM,4CACN,QAAS,uCACT,QAAS,SACT,OAAQ,CACN,CACE,KAAM,aACN,GAAI,SACJ,cAAe,OAEjB,CACE,KAAM,kBACN,GAAI,cACJ,cAAe,OAEjB,CACE,KAAM,cACN,GAAI,cACJ,cAAe,OAEjB,CACE,KAAM,QACN,GAAI,QACJ,cAAe,MAEjB,CACE,KAAM,gBACN,GAAI,gBACJ,cAAe,SAIrB,CACE,SAAU,YACV,KAAM,6CACN,QAAS,8CACT,QAAS,6BACT,OAAQ,CACN,CACE,KAAM,oBACN,GAAI,6BACJ,cAAe,KAEjB,CACE,KAAM,oBACN,GAAI,6BACJ,cAAe,KAEjB,CACE,KAAM,gBACN,GAAI,yBACJ,cAAe,KAEjB,CACE,KAAM,kBACN,GAAI,2BACJ,cAAe,KAEjB,CACE,KAAM,iBACN,GAAI,0BACJ,cAAe,OAIrB,CACE,SAAU,aACV,KAAM,2CACN,QAAS,6CACT,QAAS,8CACT,OAAQ,CACN,CACE,KAAM,8BACN,GAAI,8CACJ,cAAe,QAEjB,CACE,KAAM,+BACN,GAAI,+CACJ,cAAe,QAEjB,CACE,KAAM,gCACN,GAAI,gDACJ,cAAe,QAEjB,CACE,KAAM,4BACN,GAAI,4CACJ,cAAe,MAEjB,CACE,KAAM,6BACN,GAAI,6CACJ,cAAe,MAEjB,CACE,KAAM,8BACN,GAAI,yCACJ,cAAe,QAEjB,CACE,KAAM,2BACN,GAAI,2CACJ,cAAe,MAEjB,CACE,KAAM,4BACN,GAAI,4CACJ,cAAe,MAEjB,CACE,KAAM,gCACN,GAAI,gCACJ,cAAe,MAEjB,CACE,KAAM,iCACN,GAAI,iCACJ,cAAe,MAEjB,CACE,KAAM,yBACN,GAAI,4CACJ,cAAe,OAEjB,CACE,KAAM,8BACN,GAAI,kCACJ,cAAe,OAEjB,CACE,KAAM,mBACN,GAAI,6BACJ,cAAe,OAEjB,CACE,KAAM,cACN,GAAI,wBACJ,cAAe,MAEjB,CACE,KAAM,aACN,GAAI,uBACJ,cAAe,MAEjB,CACE,KAAM,gBACN,GAAI,2BACJ,cAAe,OAEjB,CACE,KAAM,0BACN,GAAI,oCACJ,cAAe,MAEjB,CACE,KAAM,sBACN,GAAI,qBACJ,cAAe,MAEjB,CACE,KAAM,oBACN,GAAI,yBACJ,cAAe,MAEjB,CACE,KAAM,qBACN,GAAI,iCACJ,cAAe,MAEjB,CACE,KAAM,wBACN,GAAI,qCACJ,cAAe,MAEjB,CACE,KAAM,6BACN,GAAI,qCACJ,cAAe,OAEjB,CACE,KAAM,6BACN,GAAI,qCACJ,cAAe,OAEjB,CACE,KAAM,gCACN,GAAI,uCACJ,cAAe,OAEjB,CACE,KAAM,gCACN,GAAI,wCACJ,cAAe,OAEjB,CACE,KAAM,2CACN,GAAI,8CACJ,cAAe,OAEjB,CACE,KAAM,6BACN,GAAI,iCACJ,cAAe,OAEjB,CACE,KAAM,8BACN,GAAI,kCACJ,cAAe,OAEjB,CACE,KAAM,wBACN,GAAI,0BACJ,cAAe,OAEjB,CACE,KAAM,yBACN,GAAI,wCACJ,cAAe,OAEjB,CACE,KAAM,kCACN,GAAI,oCACJ,cAAe,MAEjB,CACE,KAAM,6CACN,GAAI,+BACJ,cAAe,QAEjB,CACE,KAAM,sCACN,GAAI,iDACJ,cAAe,QAEjB,CACE,KAAM,sCACN,GAAI,iDACJ,cAAe,UAIrB,CACE,SAAU,MACV,KAAM,gCACN,QAAS,wBACT,QAAS,YACT,OAAQ,CACN,CACE,KAAM,OACN,GAAI,YACJ,cAAe,QAEjB,CACE,KAAM,cACN,GAAI,mBACJ,cAAe,QAIrB,CACE,SAAU,SACV,KAAM,qEACN,QACE,6FACF,OAAQ,CACN,CACE,KAAM,yBACN,GAAI,+BACJ,cAAe,SAEjB,CACE,KAAM,2BACN,GAAI,iCACJ,cAAe,SAEjB,CACE,KAAM,mBACN,GAAI,uBACJ,cAAe,SAEjB,CACE,KAAM,wBACN,GAAI,4BACJ,cAAe,SAEjB,CACE,KAAM,wBACN,GAAI,sCACJ,cAAe,OAEjB,CACE,KAAM,WACN,GAAI,0BACJ,cAAe,KAEjB,CACE,KAAM,gBACN,GAAI,+BACJ,cAAe,KAEjB,CACE,KAAM,sCACN,GAAI,iDACJ,cAAe,QAEjB,CACE,KAAM,gBACN,GAAI,2BACJ,cAAe,QAEjB,CACE,KAAM,UACN,GAAI,UACJ,cAAe,QAEjB,CACE,KAAM,UACN,GAAI,UACJ,cAAe,QAEjB,CACE,KAAM,QACN,GAAI,QACJ,cAAe,UAIrB,CACE,SAAU,SACV,KAAM,uCACN,QAAS,gEACT,QAAS,4CACT,OAAQ,CACN,CACE,KAAM,sBACN,GAAI,2BACJ,cAAe,MACf,SAAU,aAEZ,CACE,KAAM,uBACN,GAAI,4BACJ,cAAe,MACf,SAAU,aAEZ,CACE,KAAM,qBACN,GAAI,0BACJ,cAAe,GACf,SAAU,SACV,KAAM,SAER,CACE,KAAM,mBACN,GAAI,wBACJ,cAAe,IACf,SAAU,UAEZ,CACE,KAAM,oBACN,GAAI,yBACJ,cAAe,MACf,SAAU,UAEZ,CACE,KAAM,kBACN,GAAI,uBACJ,cAAe,IACf,SAAU,UAEZ,CACE,KAAM,mBACN,GAAI,wBACJ,cAAe,IACf,SAAU,SACV,KAAM,SAER,CACE,KAAM,2BACN,GAAI,gCACJ,cAAe,IACf,SAAU,SACV,KAAM,SAER,CACE,KAAM,+BACN,GAAI,oCACJ,cAAe,IACf,SAAU,SACV,KAAM,SAER,CACE,KAAM,gBACN,GAAI,qBACJ,cAAe,KACf,SAAU,SACV,KAAM,YAER,CACE,KAAM,oCACN,GAAI,6BACJ,cAAe,KACf,SAAU,SACV,KAAM,aAER,CACE,KAAM,uCACN,GAAI,+BACJ,cAAe,KACf,SAAU,SACV,KAAM,aAER,CACE,KAAM,kCACN,GAAI,kCACJ,cAAe,IACf,SAAU,SACV,KAAM,SAER,CACE,KAAM,kCACN,GAAI,oCACJ,cAAe,IACf,SAAU,SACV,KAAM,SAER,CACE,KAAM,wCACN,GAAI,8BACJ,cAAe,KACf,SAAU,SACV,KAAM,aAER,CACE,KAAM,iCACN,GAAI,+BACJ,cAAe,KACf,SAAU,UAEZ,CACE,KAAM,8BACN,GAAI,4BACJ,cAAe,KACf,SAAU,UAEZ,CACE,KAAM,iCACN,GAAI,iCACJ,cAAe,KACf,SAAU,UAEZ,CACE,KAAM,uBACN,GAAI,4CACJ,cAAe,IACf,SAAU,aAEZ,CACE,KAAM,uBACN,GAAI,4CACJ,cAAe,IACf,SAAU,aAEZ,CACE,KAAM,mBACN,GAAI,2CACJ,cAAe,IACf,SAAU,aAEZ,CACE,KAAM,gBACN,GAAI,wCACJ,cAAe,IACf,SAAU,aAEZ,CACE,KAAM,kBACN,GAAI,0CACJ,cAAe,IACf,SAAU,aAEZ,CACE,KAAM,iBACN,GAAI,yCACJ,cAAe,IACf,SAAU,aAEZ,CACE,KAAM,iBACN,GAAI,8BACJ,cAAe,IACf,SAAU,aAEZ,CACE,KAAM,iBACN,GAAI,0BACJ,cAAe,KACf,SAAU,UAEZ,CACE,KAAM,uBACN,GAAI,gCACJ,cAAe,KACf,SAAU,UAEZ,CACE,KAAM,mBACN,GAAI,wBACJ,cAAe,MACf,SAAU,UAEZ,CACE,KAAM,oBACN,GAAI,6BACJ,cAAe,MACf,SAAU,UAEZ,CACE,KAAM,uBACN,GAAI,0BACJ,cAAe,IACf,SAAU,SACV,KAAM,aAER,CACE,KAAM,4BACN,GAAI,+BACJ,cAAe,IACf,SAAU,SACV,KAAM,aAER,CACE,KAAM,wBACN,GAAI,6BACJ,cAAe,KACf,SAAU,SACV,KAAM,YAER,CACE,KAAM,6BACN,GAAI,kCACJ,cAAe,KACf,SAAU,SACV,KAAM,YAER,CACE,KAAM,cACN,GAAI,6CACJ,cAAe,MACf,SAAU,YAEZ,CACE,KAAM,qBACN,GAAI,0BACJ,cAAe,IACf,SAAU,UACV,KAAM,SAGR,CACE,KAAM,gCACN,GAAI,kCACJ,cAAe,MACf,SAAU,QAEZ,CACE,KAAM,gCACN,GAAI,kCACJ,cAAe,MACf,SAAU,QAEZ,CACE,KAAM,sBACN,GAAI,mCACJ,cAAe,MACf,SAAU,cAEZ,CACE,KAAM,wBACN,GAAI,qCACJ,cAAe,MACf,SAAU,cAEZ,CACE,KAAM,gBACN,GAAI,kCACJ,cAAe,MACf,SAAU,cAEZ,CACE,KAAM,gBACN,GAAI,kCACJ,cAAe,MACf,SAAU,cAEZ,CACE,KAAM,kBACN,GAAI,kCACJ,cAAe,MACf,SAAU,cAEZ,CACE,KAAM,qBACN,GAAI,kCACJ,cAAe,MACf,SAAU,cAEZ,CACE,KAAM,sBACN,GAAI,mCACJ,cAAe,GACf,SAAU,eACV,KAAM,SAER,CACE,KAAM,WACN,GAAI,mCACJ,cAAe,GACf,SAAU,eACV,KAAM,SAER,CACE,KAAM,qBACN,GAAI,oCACJ,cAAe,GACf,SAAU,eACV,KAAM,SAER,CACE,KAAM,oBACN,GAAI,mCACJ,cAAe,GACf,SAAU,eACV,KAAM,WAIb,CACC,SAAY,aACZ,KAAQ,6BACR,QAAW,sCACX,QAAW,kBACX,OAAU,CACR,CACE,KAAQ,6BACR,GAAM,kBACN,cAAiB,IACjB,MAAQ,EACR,KAAQ,QAEV,CACE,KAAQ,wBACR,GAAM,yCACN,cAAiB,IACjB,MAAQ,EACR,KAAQ,QAEV,CACE,KAAQ,wBACR,GAAM,yCACN,cAAiB,IACjB,MAAQ,EACR,KAAQ,QAEV,CACE,KAAQ,0BACR,GAAM,sCACN,cAAiB,MACjB,MAAQ,EACR,KAAQ,QAEV,CACE,KAAQ,yCACR,GAAM,qDACN,cAAiB,MACjB,MAAQ,EACR,KAAQ,QAEV,CACE,KAAQ,0BACR,GAAM,sCACN,cAAiB,MACjB,MAAQ,EACR,KAAQ,QAEV,CACE,KAAQ,sBACR,GAAM,kCACN,cAAiB,MACjB,MAAQ,EACR,KAAQ,QAEV,CACE,KAAQ,8BACR,GAAM,0CACN,cAAiB,MACjB,MAAQ,EACR,KAAQ,QAEV,CACE,KAAQ,iBACR,GAAM,6BACN,cAAiB,MACjB,MAAQ,EACR,KAAQ,QAEV,CACE,KAAQ,qBACR,GAAM,iCACN,cAAiB,MACjB,MAAQ,EACR,KAAQ,QAEV,CACE,KAAQ,eACR,GAAM,2BACN,cAAiB,OACjB,MAAQ,EACR,KAAQ,QAEV,CACE,KAAQ,cACR,GAAM,0BACN,cAAiB,OACjB,MAAQ,EACR,KAAQ,QAEV,CACE,KAAQ,cACR,GAAM,wBACN,cAAiB,IACjB,MAAQ,EACR,KAAQ,QAEV,CACE,KAAQ,8BACR,GAAM,wCACN,cAAiB,MACjB,MAAQ,EACR,KAAQ,QAEV,CACE,KAAQ,yBACR,GAAM,yCACN,cAAiB,OACjB,MAAQ,EACR,KAAQ,QAEV,CACE,KAAQ,wBACR,GAAM,wCACN,cAAiB,OACjB,MAAQ,EACR,KAAQ,QAEV,CACE,KAAQ,0BACR,GAAM,4CACN,cAAiB,OACjB,MAAQ,EACR,KAAQ,QAEV,CACE,KAAQ,gBACR,GAAM,8BACN,cAAiB,MACjB,MAAQ,EACR,KAAQ,QAEV,CACE,KAAQ,cACR,GAAM,4BACN,cAAiB,MACjB,MAAQ,EACR,KAAQ,QAEV,CACE,KAAQ,aACR,GAAM,2BACN,cAAiB,MACjB,MAAQ,EACR,KAAQ,QAEV,CACE,KAAQ,kBACR,GAAM,8BACN,cAAiB,MACjB,MAAQ,EACR,KAAQ,QAEV,CACE,KAAQ,wBACR,GAAM,oCACN,cAAiB,KACjB,MAAQ,EACR,KAAQ,QAEV,CACE,KAAQ,wBACR,GAAM,oCACN,cAAiB,KACjB,MAAQ,EACR,KAAQ,QAEV,CACE,KAAQ,6BACR,GAAM,kBACN,cAAiB,IACjB,MAAQ,EACR,KAAQ,WAeD,GARqB,EAAgB,IAAK,GACrD,EAAE,SAAS,qBAOoB,CAC/B,WAAY,CACV,kBACA,yCACA,yCACA,sCACA,qDACA,kCACA,0CACA,6BACA,iCACA,0BACA,8BACA,2BACA,+BAEF,OAAQ,CACN,oCACA,gCC12CE,GAAkD,CACtD,OAAQ,SACR,UAAW,YACX,OAAQ,SACR,KAAM,OACN,SAAU,WACV,OAAQ,SACR,WAAY,cAQR,GAAwB,IAC5B,MAAM,EAAS,GAAwB,IAAgB,EACjD,EAAQ,EAAgB,KAC3B,GAAM,EAAE,SAAS,gBAAkB,EAAO,eAE7C,OAAK,GAAO,OAEL,EAAM,OAAO,IAAK,IAAA,CACvB,KAAM,EAAE,KACR,IAAK,EAAE,MAJkB,IAQvB,GAAW,IACf,MAAM,EAAM,KAAK,UAAU,EAAK,OAAO,KAAK,GAAK,QACjD,IAAI,EAAO,EACX,IAAK,IAAI,EAAI,EAAG,EAAI,EAAI,OAAQ,IAC9B,GAAQ,GAAQ,GAAK,EAAO,EAAI,WAAW,GAC3C,GAAQ,EAEV,OAAO,OAAO,KAAK,IAAI,GAAM,SAAS,MAmPlC,GAAgB,IAhPtB,MACE,cAAgB,EAChB,cAAwB,CACtB,QAAS,KAAK,cACd,cAA4C,SAA7B,EAAO,oBAAgC,EACtD,YAAa,CAAC,EACd,gBAAiB,CAAC,EAClB,eAAgB,GAChB,WAAY,GACZ,OAAQ,CACN,WAAY,GACZ,aAAc,GACd,kBAAmB,EACnB,oBAAqB,IAGzB,iBAAqC,CACnC,YAAa,GACb,gBAAiB,GACjB,eAAgB,GAChB,WAAY,GACZ,OAAQ,CACN,CACE,KAAM,cACN,IAAK,aACL,KAAM,SACN,UAAU,EACV,YAAa,mCACb,YAAa,wBACb,QAAS,GACT,MAAO,SACP,IAAK,mBAEP,CACE,KAAM,iBACN,IAAK,eACL,KAAM,SACN,UAAU,EACV,YAAa,wDACb,YAAa,WACb,QAAS,GACT,MAAO,SACP,IAAK,kBAEP,CACE,KAAM,2BACN,IAAK,sBACL,KAAM,SACN,QAAS,CACP,CAAE,KAAM,YAAa,MAAO,KAC5B,CAAE,KAAM,sBAAuB,MAAO,KACtC,CAAE,KAAM,aAAc,MAAO,MAC7B,CAAE,KAAM,aAAc,MAAO,MAC7B,CAAE,KAAM,aAAc,MAAO,OAE/B,UAAU,EACV,YAAa,sDACb,QAAS,IACT,MAAO,YAKb,aAAsB,EAEtB,WAAA,GAGA,CAEA,iBAAA,GACM,KAAK,cACT,KAAK,aACL,KAAK,aAAc,EACrB,CAEA,UAAA,GACE,MAAM,EHhHC,CACL,CACE,IAAK,SACL,KAAM,SACN,OA2CC,CACL,CACE,KAAM,WACN,KAAM,UACN,IAAK,SACL,YAAa,sBACb,UAAU,EACV,YAAa,iBACb,IAAK,iBACL,MAAO,UAET,CACE,KAAM,SACN,KAAM,WACN,IAAK,UACL,YAAa,kCACb,UAAU,EACV,YAAa,kBACb,QAAS,4BACT,IAAK,kBACL,MAAO,YA7DP,CACE,IAAK,YACL,KAAM,YACN,OAiEC,CACL,CACE,KAAM,WACN,KAAM,UACN,IAAK,SACL,YAAa,yBACb,UAAU,EACV,YAAa,oBACb,IAAK,oBACL,MAAO,YAxEP,CACE,IAAK,SACL,KAAM,gBACN,OA2EC,CACL,CACE,KAAM,WACN,KAAM,UACN,IAAK,SACL,YAAa,6BACb,UAAU,EACV,YAAa,wBACb,IAAK,iBACL,MAAO,YAlFP,CACE,IAAK,OACL,KAAM,OACN,OAqFC,CACL,CACE,KAAM,WACN,KAAM,UACN,IAAK,SACL,YAAa,mHACb,UAAU,EACV,YAAa,UACb,IAAK,eACL,MAAO,YA5FP,CACE,IAAK,WACL,KAAM,WACN,OA+FC,CACL,CACE,KAAM,WACN,KAAM,UACN,IAAK,SACL,YAAa,wBACb,UAAU,EACV,YAAa,mBACb,IAAK,mBACL,MAAO,YAtGP,CACE,IAAK,SACL,KAAM,SACN,OAyGC,CACL,CACE,KAAM,WACN,KAAM,UACN,IAAK,SACL,YAAa,sHACb,UAAU,EACV,YAAa,YACb,IAAK,iBACL,MAAO,UAET,CACE,KAAM,SACN,KAAM,WACN,IAAK,UACL,YAAa,kDACb,UAAU,EACV,YAAa,sCACb,QAAS,sCACT,IAAK,kBACL,MAAO,YA3HP,CACE,IAAK,aACL,KAAM,aACN,OA8HC,CACL,CACE,KAAM,WACN,KAAM,UACN,IAAK,SACL,YAAa,8HACb,UAAU,EACV,YAAa,eACb,IAAK,qBACL,MAAO,UAET,CACE,KAAM,SACN,KAAM,WACN,IAAK,UACL,YAAa,sDACb,UAAU,EACV,YAAa,+BACb,QAAS,+BACT,IAAK,sBACL,MAAO,YAhJP,CACE,IAAK,aACL,KAAM,aACN,OAmJC,CACL,CACE,KAAM,WACN,KAAM,UACN,IAAK,SACL,YAAa,0BACb,UAAU,EACV,YAAa,WACb,IAAK,qBACL,MAAO,SACP,MAAO,CACL,CACE,KAAM,cACN,IAAK,+CGtFX,KAAK,iBAAiB,eAAiB,EAEvC,MAAM,EAAsC,GAE5C,EAAuB,QAAS,IAE9B,MAAM,EAAkC,CAAC,EACnC,EAAqB,GAE3B,EAAS,OAAO,QAAS,IACvB,EAAW,EAAM,KACf,EAAO,EAAM,MAAS,EAAM,SAAW,GACrC,EAAM,UAAU,EAAS,KAAK,EAAM,OAG1C,IAAI,GAAa,EAKjB,GAJA,EAAS,QAAS,IACX,EAAW,KAAI,GAAa,KAG/B,EAAY,CACd,MAAM,EAAO,GAAQ,GACN,KAAK,cAAc,eAAe,KAC9C,GAAM,EAAE,OAAS,IAIlB,EAAa,KAAK,CAChB,GAAI,EACJ,KAAM,GAAG,EAAS,OAClB,KAAM,EAAS,IACf,WAAY,GAAqB,EAAS,KAC1C,OAAQ,EACF,OACN,YAAY,GAGlB,IAGE,EAAa,OAAS,GACxB,KAAK,cAAc,eAAe,QAAQ,GAI5C,KAAK,iBAAiB,OAAO,QAAS,IAChC,EAAE,MAAQ,KAAK,cAAc,OAAO,EAAE,OACxC,KAAK,cAAc,OAAO,EAAE,KAC1B,EAAO,EAAE,MAAQ,EAAE,SAAW,KAGtC,CAEA,SAAA,CAAiB,EAAa,GAC5B,KAAK,oBACL,MAAM,EAAS,EAAI,MAAM,KACzB,IAAI,EAAW,KAAK,cAEpB,IAAK,IAAI,EAAI,EAAG,EAAI,EAAO,OAAQ,IAAK,CACtC,MAAM,EAAO,EAAO,GACpB,GAAW,MAAP,EAAa,OAAO,EACxB,EAAM,EAAI,EACZ,CAEA,YAAe,IAAR,EAAoB,EAAe,CAC5C,CAEA,YAAA,CAAoB,EAAa,GAC/B,MAAM,EAAQ,EAAI,MAAM,KACxB,GAAqB,IAAjB,EAAM,OAAc,OAExB,IAAI,EAAc,KAAK,cACvB,IAAK,IAAI,EAAI,EAAG,EAAI,EAAM,OAAS,EAAG,IAAK,CACzC,MAAM,EAAO,EAAM,GACE,OAAjB,EAAO,IAA0C,iBAAjB,EAAO,KACzC,EAAO,GAAQ,CAAC,GAElB,EAAS,EAAO,EAClB,CAGA,EADiB,EAAM,EAAM,OAAS,IACnB,CACrB,CAEA,gBAAA,CAAwB,EAAc,EAAc,GAClD,KAAK,oBACL,MAAM,EAAO,GAAQ,GAEf,EAAwC,CAC5C,GAAI,EACJ,OACA,OACA,SACA,WAAY,GACN,QAIR,OADA,KAAK,cAAc,eAAe,KAAK,GAChC,CACT,CAEA,mBAAA,CAA2B,GACzB,KAAK,cAAc,eACjB,KAAK,cAAc,eAAe,OAAQ,GAAM,EAAE,KAAO,EAC7D,CAEA,yBAAa,CAAoB,EAAY,EAAc,GACzD,MAAM,EAAW,KAAK,cAAc,eAAe,KAChD,GAAM,EAAE,KAAO,GAElB,IAAK,EAAU,MAAM,IAAI,MAAM,sBAI/B,OAFA,EAAS,KAAO,EAChB,EAAS,OAAS,EACX,CACT,CAEA,gBAAA,CAAwB,EAAoB,EAAc,GACxD,MAAM,EAAW,KAAK,cAAc,eAAe,KAChD,GAAM,EAAE,KAAO,GAElB,IAAK,EAAU,MAAM,IAAI,MAAM,uBAI/B,cAFO,EAAM,KACb,EAAS,WAAW,KAAK,GAClB,CACT,CAEA,mBAAA,CACE,EACA,EACA,GAEA,MAAM,EAAW,KAAK,cAAc,eAAe,KAChD,GAAM,EAAE,KAAO,GAElB,IAAK,EAAU,MAAM,IAAI,MAAM,uBAE/B,EAAS,WAAa,EAAS,WAAW,OAAQ,GAAM,EAAE,MAAQ,EACpE,CAEA,eAAA,GACE,OAAO,KAAK,cAAc,aAC5B,CAEA,iBAAA,GACO,KAAK,cAAc,gBACtB,KAAK,cAAc,eAAgB,EAEvC,CAEA,mBAAA,GAEE,OADA,KAAK,oBACE,KAAK,gBACd,CAEA,gBAAA,GAEE,OADA,KAAK,oBACE,KAAK,MAAM,KAAK,UAAU,KAAK,eACxC,GCjRI,GAAkD,CACtD,OAAQ,SACR,UAAW,YACX,OAAQ,SACR,KAAM,OACN,SAAU,WACV,OAAQ,SACR,WAAY,cAIR,GAAwB,IAC5B,MAAM,EAAS,GAAwB,IAAiB,EAClD,EAAQ,EAAgB,KAC3B,GAAM,EAAE,SAAS,gBAAkB,EAAO,eAE7C,OAAK,GAAO,OACL,EAAM,OAAO,IAAK,IAAA,CAAc,KAAM,EAAE,KAAM,IAAK,EAAE,MADjC,IAKvB,GAAmB,IACvB,MAAM,EAAS,IAAI,IACnB,IAAK,MAAM,KAAK,GAAqB,EAAS,MAC5C,EAAO,IAAI,EAAE,IAAK,GAEpB,IAAK,MAAM,KAAK,EAAS,YAAc,GACrC,EAAO,IAAI,EAAE,IAAK,CAAE,IAAK,EAAE,IAAK,KAAM,EAAE,OAE1C,MAAO,IAAI,EAAO,WC7Cd,GAAY,CAChB,WAAY,CAAE,IAAK,EAAG,IAAK,GAC3B,OAAQ,CAAE,IAAK,EAAG,IAAK,GACvB,OAAQ,CAAE,IAAK,EAAG,IAAK,GACvB,YAAa,CAAE,IAAK,EAAG,IAAK,GAC5B,QAAS,CAAE,IAAK,EAAG,IAAK,GACxB,QAAS,CAAE,IAAK,EAAG,IAAK,GACxB,MAAO,CAAE,IAAK,EAAG,IAAK,GACtB,UAAW,CAAE,IAAK,EAAG,IAAK,GAC1B,MAAO,CAAE,IAAK,EAAG,IAAK,GACtB,UAAW,CAAE,IAAK,EAAG,IAAK,GAC1B,KAAM,CAAE,IAAK,EAAG,IAAK,GACrB,UAAW,CAAE,IAAK,EAAG,IAAK,GAC1B,OAAQ,CAAE,IAAK,EAAG,IAAK,GACvB,QAAS,CAAE,IAAK,EAAG,IAAK,GACxB,OAAQ,CAAE,IAAK,EAAG,IAAK,GACvB,OAAQ,CAAE,IAAK,EAAG,IAAK,GACvB,SAAU,CAAE,IAAK,EAAG,IAAK,GACzB,QAAS,CAAE,IAAK,EAAG,IAAK,GACxB,OAAQ,CAAE,IAAK,EAAG,IAAK,GACvB,SAAU,CAAE,IAAK,EAAG,IAAK,GACzB,OAAQ,CAAE,IAAK,EAAG,IAAK,GACvB,QAAS,CAAE,IAAK,EAAG,IAAK,GACxB,KAAM,CAAE,IAAK,EAAG,IAAK,GACrB,QAAS,CAAE,IAAK,EAAG,IAAK,IAW1B,eAAsB,GACpB,EACA,GAEA,KAAM,KAAY,IAChB,MAAM,IAAI,MAAM,qBAAqB,KAGvC,MAAM,IAAE,EAAA,IAAK,GAAQ,GAAU,GAEzB,EAAY,EAAM,MAhBb,EAiBL,EAAa,EAAM,OAhBd,EAkBL,EAAS,SAAS,cAAc,UACtC,EAAO,MAAQ,EACf,EAAO,OAAS,EAEhB,MAAM,EAAM,EAAO,WAAW,MAC9B,IAAK,EACH,MAAM,IAAI,MAAM,4BAelB,OAZA,EAAI,UACF,EACA,EAAM,EACN,EAAM,EACN,EACA,EACA,EACA,EACA,EACA,GAGK,CACT,oDtB3BA,MACE,GACA,MAEA,WAAA,CAAY,EAAS,GACnB,KAAK,GAAK,EACV,KAAK,MAAQ,CACf,CAKA,kBAAM,CACJ,EACA,EACA,EACA,EACA,GAgBA,aAdqB,KAAK,GACvB,OAAO,KAAK,OACZ,OAAO,CACN,QAAS,EACT,YAAa,EACJ,UACG,aACZ,aAAc,EACd,SAAU,GAAY,CAAC,EACvB,WAAY,IAAI,KAChB,WAAY,IAAI,OAEjB,UAAU,CAAE,GAAI,KAAK,MAAM,MAEhB,IAAI,EACpB,CAKA,kBAAM,CACJ,EACA,EACA,EAAgB,GAChB,EAA+B,CAAC,GAEhC,MAAM,EAAa,EAAA,EAAA,EAAA,IAAI,KAAK,MAAM,QAAS,IA+B3C,OA7BI,GAAS,EAAM,QACjB,EAAW,MAAA,EAAA,EAAA,MAAU,KAAK,MAAM,QAAS,IAAI,OAG3C,EAAQ,YACV,EAAW,MAAA,EAAA,EAAA,IAAQ,KAAK,MAAM,YAAa,EAAQ,mBAG/B,KAAK,GACxB,OAAO,CACN,GAAI,KAAK,MAAM,GACf,QAAS,KAAK,MAAM,QACpB,YAAa,KAAK,MAAM,YACxB,QAAS,KAAK,MAAM,QACpB,WAAY,KAAK,MAAM,WACvB,aAAc,KAAK,MAAM,aACzB,SAAU,KAAK,MAAM,SACrB,WAAY,KAAK,MAAM,WACvB,WAAY,KAAK,MAAM,aAExB,KAAK,KAAK,OACV,OAAA,EAAA,EAAA,QAAa,IACb,SAAA,EAAA,EAAA,MACM,KAAK,MAAM,aAAU,EAAA,EAAA,MACrB,KAAK,MAAM,eAAY,EAAA,EAAA,MACvB,KAAK,MAAM,aAEjB,MAAM,KAAK,IAAI,EAAO,IAG3B,CAKA,yBAAM,CACJ,EACA,EACA,EAAgB,GAOhB,MAAM,EAJQ,EACX,cACA,MAAM,OACN,OAAQ,GAAM,EAAE,OAAS,GACF,MAAM,EAAG,GAEnC,GAA2B,IAAvB,EAAY,OACd,MAAO,GAGT,MAAM,EAAa,EAAY,IAAK,IAAA,EAAA,EAAA,MAC7B,KAAK,MAAM,QAAS,IAAI,OAU/B,aAPsB,KAAK,GACxB,SACA,KAAK,KAAK,OACV,OAAA,EAAA,EAAA,MAAA,EAAA,EAAA,IAAa,KAAK,MAAM,QAAS,IAAM,EAAA,EAAA,OAAS,KAChD,SAAA,EAAA,EAAA,MAAa,KAAK,MAAM,aAAU,EAAA,EAAA,MAAQ,KAAK,MAAM,aACrD,MAAM,EAGX,CAKA,kBAAM,CAAa,EAAY,GAC7B,MAAM,EAAkB,CAAC,OAEE,IAAvB,EAAQ,aACV,EAAW,WAAa,EAAQ,iBAGL,IAAzB,EAAQ,eAC0B,iBAAzB,EAAQ,cAA6B,EAAQ,aAAa,UACnE,EAAW,aAAe,EAAA,GAAG,GAAG,KAAK,MAAM,kBAAkB,EAAQ,aAAa,YAElF,EAAW,aAAe,EAAQ,mBAIX,IAAvB,EAAQ,aACV,EAAW,WAAa,EAAQ,iBAGT,IAArB,EAAQ,WACV,EAAW,SAAW,EAAQ,gBAG1B,KAAK,GAAG,OAAO,KAAK,OAAO,IAAI,GAAY,OAAA,EAAA,EAAA,IAAS,KAAK,MAAM,GAAI,GAC3E,CAKA,kBAAM,CAAa,SACX,KAAK,GAAG,OAAO,KAAK,OAAO,OAAA,EAAA,EAAA,IAAS,KAAK,MAAM,GAAI,GAC3D,CAKA,mBAAM,CAAc,GAOlB,aANsB,KAAK,GACxB,SACA,KAAK,KAAK,OACV,OAAA,EAAA,EAAA,IAAS,KAAK,MAAM,GAAI,IACxB,MAAM,IAEO,IAAuB,IACzC,CAKA,yBAAM,CACJ,GAEA,MAAM,EAAW,EAAQ,IAAA,EAAO,KAAI,QAAS,KAC3C,KAAK,aAAa,EAAI,UAElB,QAAQ,WAAW,EAC3B,kPDnIF,MACE,OACA,gBACA,cACA,aACA,YACA,gBACA,UACA,UACA,oBACA,UACA,OAKA,WAAA,CAAY,EAAgB,EAAyB,EAA8B,CAAC,GAClF,IAAK,IAAW,EACd,MAAM,IAAI,MAAM,8CAGlB,KAAK,OAAS,EACd,KAAK,OAAS,IAAI,EAAa,EAAQ,EAAS,EAAQ,eAAiB,CAAC,GAC1E,KAAK,gBAAkB,EAAQ,iBAAmB,OAClD,KAAK,cAAgB,EAAQ,cAC7B,KAAK,aAAe,EAAQ,aAG5B,KAAK,YAAc,IAAI,IACvB,KAAK,gBAAkB,IAClB,EAAc,sBACd,EAAQ,WAIb,KAAK,UAAY,EAAQ,WAAa,KAAK,sBAG3C,KAAK,UAAY,KAAK,oBACtB,KAAK,oBAAsB,GAG3B,KAAK,UAAY,CACf,cAAe,EACf,YAAa,EACb,oBAAqB,EACrB,WAAY,EACZ,iBAAkB,KAAK,MAE3B,CAKA,mBAAA,GACE,MAAO,CACL,KAAA,CAAO,EAAQ,EAAO,KAAA,CACpB,OAAQ,MAAO,IAEN,CAAE,QAAS,mBAAoB,WAAY,MAGtD,OAAA,CAAS,EAAQ,EAAO,KAAA,CACtB,OAAQ,MAAO,IAEN,CAAE,QAAS,mBAAoB,WAAY,MAI1D,CAKA,iBAAA,GACE,MAAO,GAAG,KAAK,UAAU,KAAK,SAAS,KAAK,SAAS,SAAS,IAAI,OAAO,EAAG,IAC9E,CAKA,cAAA,CAAuB,EAAa,EAAsB,GACxD,MAAM,EACS,GAAe,KAAK,gBAAgB,SAD7C,EAEM,GAAY,KAAK,gBAAgB,SAGvC,EAAM,KAAK,MAIX,GAHW,KAAK,YAAY,IAAI,IAAQ,IAGf,OAC5B,GAAS,EAAM,EAAO,GAGzB,QAAI,EAAc,QAAU,IAI5B,EAAc,KAAK,GACnB,KAAK,YAAY,IAAI,EAAK,GACnB,GACT,CAKA,UAAM,CAAK,EAAiB,EAAuB,CAAC,GAClD,MAAM,EAAY,KAAK,MAGvB,IAAK,GAA8B,iBAAZ,GAAkD,IAA1B,EAAQ,OAAO,OAC5D,MAAO,CACL,MAAO,0BACP,SAAS,EACT,WAAA,IAAe,MAAO,eAK1B,MAAM,EAAe,QAAQ,KAAK,SAClC,IAAK,KAAK,eAAe,GACvB,MAAO,CACL,MAAO,+CACP,SAAS,EACT,WAAA,IAAe,MAAO,eAI1B,IAEE,KAAK,OAAO,WAAW,OAAQ,EAAS,CACtC,UAAW,KAAK,UAChB,UAAW,KAAK,QAIlB,MAAM,QAAsB,KAAK,OAAO,iBAAiB,GAAS,EAAM,CACtE,YAAa,EAAQ,aAAe,EACpC,cAAe,EAAQ,eAAiB,KAIpC,EAAS,KAAK,YAAY,EAAS,EAAe,GAGlD,QAAiB,KAAK,iBAAiB,EAAQ,GAErD,IAAK,IAAa,EAAS,QACzB,MAAM,IAAI,MAAM,6BAalB,OATA,KAAK,OAAO,WAAW,YAAa,EAAS,QAAS,CACpD,UAAW,KAAK,UAChB,WAAY,EAAS,WACrB,UAAW,KAAK,QAIlB,KAAK,gBAAgB,EAAS,WAAY,KAAK,MAAQ,GAEhD,CACL,QAAS,EAAS,QACH,gBACf,SAAS,EACT,WAAY,EAAS,YAAc,EACnC,aAAc,KAAK,MAAQ,EAC3B,UAAW,KAAK,UAChB,WAAA,IAAe,MAAO,cAE1B,CAAA,MAAS,GAIP,OAHA,QAAQ,MAAM,cAAe,GAC7B,KAAK,UAAU,aAER,CACL,MAAO,EAAM,SAAW,+BACxB,SAAS,EACT,WAAA,IAAe,MAAO,cAE1B,CACF,CAKA,sBAAc,CAAiB,EAAgB,GAC7C,MAAM,EAAW,EAAQ,UAAY,KAAK,gBACpC,EAAS,EAAQ,QAAU,KAAK,cAChC,EAAQ,EAAQ,OAAS,KAAK,aAC9B,EAAc,EAAQ,aAAe,GAE3C,IAAK,KAAK,YAAc,KAAK,UAAU,GACrC,MAAM,IAAI,MAAM,YAAY,mBAG9B,MAAM,EAAM,KAAK,UAAU,GAAU,GAAU,GAAI,GAAS,GAAI,GAG1D,EAAiB,IAAI,QAAA,CAAgB,EAAG,IAC5C,WAAA,IACQ,EAAO,IAAI,MAAM,wBACvB,EAAc,kBAIlB,aAAa,QAAQ,KAAK,CAAC,EAAI,OAAO,GAAS,GACjD,CAKA,WAAA,CAAoB,EAAiB,EAAuB,GAC1D,IAAI,EAAS,GAuBb,OApBI,EAAQ,eACV,GAAU,GAAG,EAAQ,oBAInB,IACF,GAAU,GAAG,SAIX,EAAQ,gBAAkB,KAAK,oBAAoB,OAAS,IAC9D,GAAU,iCACV,KAAK,oBAAoB,OAAM,GAAI,QAAS,IAC1C,GAAU,GAAG,EAAI,SAAS,EAAI,cAEhC,GAAU,MAGZ,GAAU,SAAS,kBAEZ,CACT,CAKA,eAAA,CAAwB,EAAoB,GAC1C,KAAK,UAAU,gBACf,KAAK,UAAU,aAAe,GAAc,EAC5C,KAAK,UAAU,qBACZ,KAAK,UAAU,qBAAuB,KAAK,UAAU,cAAgB,GACpE,GACF,KAAK,UAAU,aACnB,CAKA,cAAM,CACJ,EACA,EAAqB,EACrB,EAAuB,EAAa,OACpC,EAAgC,CAAC,GAEjC,IACE,aAAa,KAAK,OAAO,UAAU,EAAM,EAAY,EAAU,IAC1D,EACH,OAAQ,SACR,UAAW,KAAK,OAEpB,CAAA,MAAS,GAEP,MADA,QAAQ,MAAM,0BAA2B,GACnC,CACR,CACF,CAKA,iBAAM,CAAY,EAAgB,GAAI,EAAgB,GAAI,EAA+B,CAAC,GACxF,aAAa,KAAK,OAAO,uBAAuB,EAAO,EAAO,EAChE,CAKA,uBAAM,GACJ,aAAa,KAAK,OAAO,mBAC3B,CAKA,iBAAM,GACJ,IAIE,MAAO,CACL,OAAQ,UACR,OALoB,KAAK,OAAO,aAMhC,UALsB,KAAK,eAAe,eAAgB,EAAG,KAM7D,UAAW,KAAK,UAChB,UAAW,KAAK,UAChB,OAAQ,KAAK,MAAQ,KAAK,UAAU,iBACpC,WAAA,IAAe,MAAO,cAE1B,CAAA,MAAS,GACP,MAAO,CACL,OAAQ,YACR,MAAO,EAAM,QACb,WAAA,IAAe,MAAO,cAE1B,CACF,CAKA,YAAA,GACE,MAAO,IACF,KAAK,UACR,OAAQ,KAAK,OAAO,aACpB,UAAW,KAAK,UAChB,OAAQ,KAAK,MAAQ,KAAK,UAAU,iBAExC,CAKA,YAAA,GACE,KAAK,UAAY,KAAK,oBACtB,KAAK,oBAAsB,GAC3B,KAAK,UAAU,iBAAmB,KAAK,KACzC,mDsB9WF,MAKE,mBAAI,GACF,OAAO,GAAc,mBAAmB,cAC1C,CAMA,wBAAM,CAAmB,GAAqB,GAC5C,MAAM,EAAY,KAAK,gBACjB,EAAW,EF00CZ,EAAgB,IAAK,IAAA,IACvB,EACH,OAAQ,EAAS,OAAO,OACrB,GACC,EAAkB,EAAS,SAAS,gBAAkD,SACpF,EAAM,MACH,MAEP,OAAQ,GAAM,EAAE,OAAO,OAAS,GEl1CqB,EAEvD,OAAO,EAAU,IAAK,IAAA,CACpB,GAAI,EAAE,GACN,KAAM,EAAE,KACR,KAAM,EAAE,KACR,WAAY,EAAY,KAAK,mBAAmB,EAAG,GAAY,GAAgB,MAC7E,OAAQ,GAAM,EAAE,WAAW,OAAS,EAC1C,CAKA,kBAAA,CAA2B,EAA+B,GACxD,MAAM,EAAS,GAAwB,EAAS,KAAK,eAC/C,EAAU,EAAe,KAC5B,GAAM,EAAE,SAAS,iBAAmB,GAAQ,eAAiB,EAAS,KAAK,gBAE9E,OAAK,GAAS,OACP,EAAQ,OAAO,IAAK,IAAA,CAAc,KAAM,EAAE,KAAM,IAAK,EAAE,MADjC,EAE/B,CAUA,YAAA,CAAqB,GACnB,MAAM,EAAY,KAAK,gBACvB,IAAI,EAAW,EAAU,KAAM,GAAM,EAAE,KAAO,GAW9C,OATK,GAAY,EAAU,OAAS,IAElC,EACE,EAAU,KAAM,GAAM,EAAE,KAAK,cAAc,SAAS,gBACpD,EAAU,KAAM,GAAM,EAAE,KAAK,cAAc,SAAS,UACpD,EAAU,KAAM,GAAM,EAAE,KAAK,cAAc,SAAS,YACpD,EAAU,IAGP,CACT,CAGA,kBAAA,CAAmB,GACjB,OAAqD,IAA9C,KAAK,aAAa,IAAa,UACxC,CAQA,mBAAM,CAAc,EAAqB,GACvC,MAAM,EAAW,KAAK,aAAa,GAEnC,IAAK,EACH,MAAM,IAAI,MACR,qEAIJ,MAAM,EAAO,EAAS,KAAK,cACrB,EAAS,EAAS,QAAU,CAAC,EAC7B,EAAS,EAAO,QAAU,GAC1B,EAAkB,GAAgB,GAClC,EACJ,GAAY,EAAgB,IAAI,KAAO,GAMzC,GAHsE,EAAS,MAG1E,EACH,MAAM,IAAI,MAAM,0CAA0C,EAAS,SAIrE,GAAI,IAAa,EAAgB,KAAM,GAAM,EAAE,MAAQ,GAIrD,MAHA,QAAQ,KACN,oCAAoC,6BAAoC,EAAS,4BAA4B,EAAgB,IAAK,GAAM,EAAE,KAAK,KAAK,SAEhJ,IAAI,MACR,UAAU,qCAA4C,EAAS,uDAKnE,IAAK,EACH,MAAM,IAAI,MACR,uCAAuC,EAAS,iEAKpD,MAAM,EAAmD,CACvD,OAAQ,4BACR,WAAY,8BACZ,WAAY,4BACZ,OAAQ,sCACR,WAAY,+BACZ,SAAU,2BACV,IAAK,uBAGP,GAAI,KAAQ,EAA0B,CACpC,MAAM,aAAE,SAAuB,OAAO,kBACtC,OAAO,EAAa,CAClB,SACA,QAAS,EAAO,SAAW,EAAyB,KACnD,KAAK,EACV,CAEA,OAAQ,GACN,IAAK,aAAc,CACjB,MAAM,aAAE,SAAuB,OAAO,mBAC/B,EAAY,GAAa,EAAO,MAAM,KAC7C,OAAO,EAAa,CAClB,OAAQ,EACR,QAAS,iDAAiD,YACzD,KAAK,EACV,CACA,IAAK,OAAQ,CACX,MAAM,WAAE,SAAqB,OAAO,gBACpC,OAAO,EAAW,CAAE,UAAb,CAAuB,EAChC,CACA,IAAK,YAAa,CAChB,MAAM,gBAAE,SAA0B,OAAO,qBACzC,OAAO,EAAgB,CAAE,UAAlB,CAA4B,EACrC,CACA,IAAK,SACL,IAAK,SAAU,CACb,MAAM,yBAAE,SAAmC,OAAO,kBAClD,OAAO,EAAyB,CAAE,UAA3B,CAAqC,EAC9C,CACA,QACE,MAAM,IAAI,MAAM,8BAA8B,KAEpD,CAMA,iBAAM,CAAY,EAAc,EAAmB,GACjD,IAAI,EACA,EAaJ,MAZ4B,iBAAjB,GAA8C,OAAjB,GAA0B,GAOhE,EAAO,OAAO,GACd,EAAc,GAAU,CAAC,IAPzB,EAAc,EAId,EJ1MK,CACL,CACE,IAAK,SACL,KAAM,SACN,OA2CC,CACL,CACE,KAAM,WACN,KAAM,UACN,IAAK,SACL,YAAa,sBACb,UAAU,EACV,YAAa,iBACb,IAAK,iBACL,MAAO,UAET,CACE,KAAM,SACN,KAAM,WACN,IAAK,UACL,YAAa,kCACb,UAAU,EACV,YAAa,kBACb,QAAS,4BACT,IAAK,kBACL,MAAO,YA7DP,CACE,IAAK,YACL,KAAM,YACN,OAiEC,CACL,CACE,KAAM,WACN,KAAM,UACN,IAAK,SACL,YAAa,yBACb,UAAU,EACV,YAAa,oBACb,IAAK,oBACL,MAAO,YAxEP,CACE,IAAK,SACL,KAAM,gBACN,OA2EC,CACL,CACE,KAAM,WACN,KAAM,UACN,IAAK,SACL,YAAa,6BACb,UAAU,EACV,YAAa,wBACb,IAAK,iBACL,MAAO,YAlFP,CACE,IAAK,OACL,KAAM,OACN,OAqFC,CACL,CACE,KAAM,WACN,KAAM,UACN,IAAK,SACL,YAAa,mHACb,UAAU,EACV,YAAa,UACb,IAAK,eACL,MAAO,YA5FP,CACE,IAAK,WACL,KAAM,WACN,OA+FC,CACL,CACE,KAAM,WACN,KAAM,UACN,IAAK,SACL,YAAa,wBACb,UAAU,EACV,YAAa,mBACb,IAAK,mBACL,MAAO,YAtGP,CACE,IAAK,SACL,KAAM,SACN,OAyGC,CACL,CACE,KAAM,WACN,KAAM,UACN,IAAK,SACL,YAAa,sHACb,UAAU,EACV,YAAa,YACb,IAAK,iBACL,MAAO,UAET,CACE,KAAM,SACN,KAAM,WACN,IAAK,UACL,YAAa,kDACb,UAAU,EACV,YAAa,sCACb,QAAS,sCACT,IAAK,kBACL,MAAO,YA3HP,CACE,IAAK,aACL,KAAM,aACN,OA8HC,CACL,CACE,KAAM,WACN,KAAM,UACN,IAAK,SACL,YAAa,8HACb,UAAU,EACV,YAAa,eACb,IAAK,qBACL,MAAO,UAET,CACE,KAAM,SACN,KAAM,WACN,IAAK,UACL,YAAa,sDACb,UAAU,EACV,YAAa,+BACb,QAAS,+BACT,IAAK,sBACL,MAAO,YAhJP,CACE,IAAK,aACL,KAAM,aACN,OAmJC,CACL,CACE,KAAM,WACN,KAAM,UACN,IAAK,SACL,YAAa,0BACb,UAAU,EACV,YAAa,WACb,IAAK,qBACL,MAAO,SACP,MAAO,CACL,CACE,KAAM,cACN,IAAK,+CIA0C,KAChD,GA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"}
|
|
1
|
+
{"version":3,"file":"research-agent.cjs.js","names":[],"sources":["../src/prompts/search-prompts.ts","../src/memory/types.ts","../src/memory/storage/in-memory-storage.ts","../src/memory/agent-memory-manager.ts","../src/memory/storage/drizzle-storage.ts","../src/memory/mastra-integration.ts","../src/tools/qwksearch-api-tools.ts","../src/utils/outputParser.ts","../src/utils/chat-helpers.ts","../src/tools/search/doc-utils.ts","../src/tools/search/link-summarizer.ts","../src/tools/search/metaSearchAgent.ts","../src/tools/search/search-handlers.ts","../src/tools/search/suggestionGeneratorAgent.ts","../src/tools/search/document.ts","../src/mastra/agents.ts","../src/mastra/workflows.ts","../src/mastra/rag.ts","../src/mastra/evals.ts","../src/mastra/telemetry.ts","../src/mastra/model-routing.ts","../src/config/provider-ui-config.ts","../src/config/environment-variables.ts","../src/config/language-models-database.ts","../src/config/config-manager.ts","../src/config/model-registry.ts","../src/utils/provider-image-cropper.ts","../src/connectors/catalog.json","../src/connectors/openconnector-providers-index.json","../src/connectors/index.ts"],"sourcesContent":["/**\n * @module agent-toolkit/prompts/search-prompts\n * @description Prompt templates for web search and writing assistant agents.\n */\nimport type { FewShotExample } from './meta-search-types';\n\nexport const webSearchRetrieverPrompt = `\nYou are an AI question rephraser. You will be given a conversation and a follow-up question, you will have to rephrase the follow up question so it is a standalone question and can be used by another LLM to search the web for information to answer it.\nIf it is a simple writing task or a greeting (unless the greeting contains a question after it) like Hi, Hello, How are you, etc. than a question then you need to return \\`not_needed\\` as the response (This is because the LLM won't need to search the web for finding information on this topic).\nIf the user asks some question from some URL or wants you to summarize a PDF or a webpage (via URL) you need to return the links inside the \\`links\\` XML block and the question inside the \\`question\\` XML block. If the user wants to you to summarize the webpage or the PDF you need to return \\`summarize\\` inside the \\`question\\` XML block in place of a question and the link to summarize in the \\`links\\` XML block.\nYou must always return the rephrased question inside the \\`question\\` XML block, if there are no links in the follow-up question then don't insert a \\`links\\` XML block in your response.\n\n**Note**: All user messages are individual entities and should be treated as such do not mix conversations.\n`;\n\nexport const webSearchRetrieverFewShots: FewShotExample[] = [\n [\n 'user',\n `<conversation>\n</conversation>\n<query>\nWhat is the capital of France\n</query>`,\n ],\n [\n 'assistant',\n `<question>\nCapital of france\n</question>`,\n ],\n [\n 'user',\n `<conversation>\n</conversation>\n<query>\nHi, how are you?\n</query>`,\n ],\n [\n 'assistant',\n `<question>\nnot_needed\n</question>`,\n ],\n [\n 'user',\n `<conversation>\n</conversation>\n<query>\nWhat is Docker?\n</query>`,\n ],\n [\n 'assistant',\n `<question>\nWhat is Docker\n</question>`,\n ],\n [\n 'user',\n `<conversation>\n</conversation>\n<query>\nCan you tell me what is X from https://example.com\n</query>`,\n ],\n [\n 'assistant',\n `<question>\nWhat is X?\n</question>\n<links>\nhttps://example.com\n</links>`,\n ],\n [\n 'user',\n `<conversation>\n</conversation>\n<query>\nSummarize the content from https://example.com\n</query>`,\n ],\n [\n 'assistant',\n `<question>\nsummarize\n</question>\n<links>\nhttps://example.com\n</links>`,\n ],\n];\n\nexport const webSearchResponsePrompt = `\n You are QwkSearch, an AI model skilled in web search and crafting detailed, engaging, and well-structured answers. You excel at summarizing web pages and extracting relevant information to create professional, blog-style responses.\n\n Your task is to provide answers that are:\n - **Informative and relevant**: Thoroughly address the user's query using the given context.\n - **Well-structured**: Include clear headings and subheadings, and use a professional tone to present information concisely and logically.\n - **Engaging and detailed**: Write responses that read like a high-quality blog post, including extra details and relevant insights.\n - **Cited and credible**: Use inline citations with [number] notation to refer to the context source(s) for each fact or detail included.\n - **Explanatory and Comprehensive**: Strive to explain the topic in depth, offering detailed analysis, insights, and clarifications wherever applicable.\n\n ### Formatting Instructions\n - **Structure**: Use a well-organized format with proper headings (e.g., \"## Example heading 1\" or \"## Example heading 2\"). Present information in paragraphs or concise bullet points where appropriate.\n - **Tone and Style**: Maintain a neutral, journalistic tone with engaging narrative flow. Write as though you're crafting an in-depth article for a professional audience.\n - **Markdown Usage**: Format your response with Markdown for clarity. Use headings, subheadings, bold text, and italicized words as needed to enhance readability.\n - **Length and Depth**: Provide comprehensive coverage of the topic. Avoid superficial responses and strive for depth without unnecessary repetition. Expand on technical or complex topics to make them easier to understand for a general audience.\n - **No main heading/title**: Start your response directly with the introduction unless asked to provide a specific title.\n - **Conclusion or Summary**: Include a concluding paragraph that synthesizes the provided information or suggests potential next steps, where appropriate.\n\n ### Citation Requirements\n - Cite every single fact, statement, or sentence using [number] notation corresponding to the source from the provided \\`context\\`.\n - Integrate citations naturally at the end of sentences or clauses as appropriate. For example, \"The Eiffel Tower is one of the most visited landmarks in the world[1].\"\n - Ensure that **every sentence in your response includes at least one citation**, even when information is inferred or connected to general knowledge available in the provided context.\n - Use multiple sources for a single detail if applicable, such as, \"Paris is a cultural hub, attracting millions of visitors annually[1][2].\"\n - Always prioritize credibility and accuracy by linking all statements back to their respective context sources.\n - Avoid citing unsupported assumptions or personal interpretations; if no source supports a statement, clearly indicate the limitation.\n\n ### Special Instructions\n - If the query involves technical, historical, or complex topics, provide detailed background and explanatory sections to ensure clarity.\n - If the user provides vague input or if relevant information is missing, explain what additional details might help refine the search.\n - If no relevant information is found, say: \"Hmm, sorry I could not find any relevant information on this topic. Would you like me to search again or ask something else?\" Be transparent about limitations and suggest alternatives or ways to reframe the query.\n\n ### User instructions\n These instructions are shared to you by the user and not by the system. You will have to follow them but give them less priority than the above instructions. If the user has provided specific instructions or preferences, incorporate them into your response while adhering to the overall guidelines.\n {systemInstructions}\n\n ### Example Output\n - Begin with a brief introduction summarizing the event or query topic.\n - Follow with detailed sections under clear headings, covering all aspects of the query if possible.\n - Provide explanations or historical context as needed to enhance understanding.\n - End with a conclusion or overall perspective if relevant.\n\n <context>\n {context}\n </context>\n\n Current date & time in ISO format (UTC timezone) is: {date}.\n`;\n\nexport const writingAssistantPrompt = `\nYou are QwkSearch, an AI model who is expert at searching the web and answering user's queries. You are currently set on focus mode 'Writing Assistant', this means you will be helping the user write a response to a given query.\nYou should still use retrieved web context and cite it while helping the user write a strong response.\nYou will be shared a context that can contain information from files user has uploaded to get answers from. You will have to generate answers upon that.\n\nYou have to cite the answer using [number] notation. You must cite the sentences with their relevent context number. You must cite each and every part of the answer so the user can know where the information is coming from.\nPlace these citations at the end of that particular sentence. You can cite the same sentence multiple times if it is relevant to the user's query like [number1][number2].\nHowever you do not need to cite it using the same number. You can use different numbers to cite the same sentence multiple times. The number refers to the number of the search result (passed in the context) used to generate that part of the answer.\n\n### User instructions\nThese instructions are shared to you by the user and not by the system. You will have to follow them but give them less priority than the above instructions. If the user has provided specific instructions or preferences, incorporate them into your response while adhering to the overall guidelines.\n{systemInstructions}\n\n<context>\n{context}\n</context>\n`;\n\nexport default {\n webSearchResponsePrompt,\n webSearchRetrieverPrompt,\n webSearchRetrieverFewShots,\n writingAssistantPrompt,\n};\n","/**\r\n * Memory System Types and Constants\r\n *\r\n * Defines interfaces and configuration for the memory management system\r\n */\r\n\r\n/**\r\n * Memory types for categorization\r\n */\r\nexport const MEMORY_TYPES = {\r\n FACT: \"fact\",\r\n CONVERSATION: \"conversation\",\r\n PREFERENCE: \"preference\",\r\n PERSONAL: \"personal\",\r\n WORK: \"work\",\r\n MANUAL: \"manual\",\r\n} as const;\r\n\r\nexport type MemoryType = (typeof MEMORY_TYPES)[keyof typeof MEMORY_TYPES];\r\n\r\n/**\r\n * Configuration constants for memory management\r\n */\r\nexport const MEMORY_CONFIG = {\r\n DEFAULT_MAX_MEMORIES: 100,\r\n DEFAULT_SUMMARY_THRESHOLD: 10,\r\n DEFAULT_CACHE_EXPIRY: 5 * 60 * 1000, // 5 minutes\r\n DEFAULT_BATCH_SIZE: 5,\r\n DEFAULT_RELEVANCE_THRESHOLD: 0.3,\r\n DEFAULT_IMPORTANCE_RANGE: { min: 0, max: 10 },\r\n DEFAULT_RATE_LIMIT: { requests: 10, windowMs: 60000 },\r\n DEFAULT_TIMEOUT: 30000, // 30 seconds\r\n VECTOR_SEARCH_ENABLED: true,\r\n AUTO_SUMMARIZATION_ENABLED: true,\r\n} as const;\r\n\r\n/**\r\n * Memory record structure\r\n */\r\nexport interface MemoryRecord {\r\n id: string;\r\n user_id: string;\r\n memory_type: MemoryType;\r\n content: string;\r\n importance: number;\r\n access_count: number;\r\n metadata?: Record<string, any>;\r\n created_at: Date;\r\n updated_at: Date;\r\n relevance_score?: number;\r\n}\r\n\r\n/**\r\n * Message structure for conversation tracking\r\n */\r\nexport interface Message {\r\n role: \"user\" | \"assistant\";\r\n content: string;\r\n timestamp: number;\r\n metadata?: Record<string, any>;\r\n}\r\n\r\n/**\r\n * Memory search options\r\n */\r\nexport interface MemorySearchOptions {\r\n minImportance?: number;\r\n memoryType?: MemoryType;\r\n includeMetadata?: boolean;\r\n}\r\n\r\n/**\r\n * Memory update payload\r\n */\r\nexport interface MemoryUpdate {\r\n importance?: number;\r\n access_count?: number | { increment: number };\r\n updated_at?: Date;\r\n metadata?: Record<string, any>;\r\n}\r\n\r\n/**\r\n * Memory context options\r\n */\r\nexport interface MemoryContextOptions {\r\n maxMemories?: number;\r\n minImportance?: number;\r\n}\r\n\r\n/**\r\n * Performance metrics\r\n */\r\nexport interface MemoryMetrics {\r\n cacheHits: number;\r\n cacheMisses: number;\r\n vectorSearches: number;\r\n summarizations: number;\r\n errors: number;\r\n cacheSize: number;\r\n recentMessagesCount: number;\r\n isProcessing: boolean;\r\n}\r\n\r\n/**\r\n * Memory initialization options\r\n */\r\nexport interface MemoryOptions {\r\n maxMemories?: number;\r\n summaryThreshold?: number;\r\n cacheExpiry?: number;\r\n batchSize?: number;\r\n relevanceThreshold?: number;\r\n enableVectorSearch?: boolean;\r\n enableAutoSummarization?: boolean;\r\n}\r\n\r\n/**\r\n * Extracted fact structure\r\n */\r\nexport interface ExtractedFact {\r\n content: string;\r\n importance?: number;\r\n category?: MemoryType;\r\n metadata?: Record<string, any>;\r\n}\r\n","// @ts-nocheck\r\n/**\r\n * Simple Memory Class\r\n *\r\n * Core memory management functionality with:\r\n * - Message deduplication\r\n * - Automatic summarization\r\n * - Vector-based relevance search\r\n * - Caching with TTL\r\n * - Batch processing\r\n * - Conflict resolution\r\n */\r\n\r\nimport { writeLanguageResponse } from \"write-language\";\r\nimport type { IMemoryStorage } from \"./storage-interface\";\r\nimport type {\r\n MemoryRecord,\r\n Message,\r\n MemorySearchOptions,\r\n MemoryMetrics,\r\n MemoryOptions,\r\n MemoryContextOptions,\r\n ExtractedFact,\r\n MemoryType,\r\n} from \"../types\";\r\nimport { MEMORY_CONFIG, MEMORY_TYPES } from \"../types\";\r\n\r\nexport class SimpleMemory {\r\n private userId: string;\r\n private storage: IMemoryStorage;\r\n private maxMemories: number;\r\n private summaryThreshold: number;\r\n private cacheExpiry: number;\r\n private batchSize: number;\r\n private relevanceThreshold: number;\r\n private enableVectorSearch: boolean;\r\n private enableAutoSummarization: boolean;\r\n private recentMessages: Message[];\r\n private memoryCache: Map<string, { data: any; timestamp: number }>;\r\n private isProcessing: boolean;\r\n private processingQueue: any[];\r\n private summarizeTimeout?: NodeJS.Timeout;\r\n private metrics: {\r\n cacheHits: number;\r\n cacheMisses: number;\r\n vectorSearches: number;\r\n summarizations: number;\r\n errors: number;\r\n };\r\n\r\n /**\r\n * Initialize memory system for a user\r\n */\r\n constructor(\r\n userId: string,\r\n storage: IMemoryStorage,\r\n options: MemoryOptions = {},\r\n ) {\r\n if (!userId || !storage) {\r\n throw new Error(\"userId and storage are required parameters\");\r\n }\r\n\r\n this.userId = userId;\r\n this.storage = storage;\r\n this.maxMemories =\r\n options.maxMemories || MEMORY_CONFIG.DEFAULT_MAX_MEMORIES;\r\n this.summaryThreshold =\r\n options.summaryThreshold || MEMORY_CONFIG.DEFAULT_SUMMARY_THRESHOLD;\r\n this.cacheExpiry =\r\n options.cacheExpiry || MEMORY_CONFIG.DEFAULT_CACHE_EXPIRY;\r\n this.batchSize = options.batchSize || MEMORY_CONFIG.DEFAULT_BATCH_SIZE;\r\n this.relevanceThreshold =\r\n options.relevanceThreshold || MEMORY_CONFIG.DEFAULT_RELEVANCE_THRESHOLD;\r\n\r\n // Feature flags\r\n this.enableVectorSearch =\r\n options.enableVectorSearch !== false &&\r\n MEMORY_CONFIG.VECTOR_SEARCH_ENABLED;\r\n this.enableAutoSummarization =\r\n options.enableAutoSummarization !== false &&\r\n MEMORY_CONFIG.AUTO_SUMMARIZATION_ENABLED;\r\n\r\n // State management\r\n this.recentMessages = [];\r\n this.memoryCache = new Map();\r\n this.isProcessing = false;\r\n this.processingQueue = [];\r\n\r\n // Performance metrics\r\n this.metrics = {\r\n cacheHits: 0,\r\n cacheMisses: 0,\r\n vectorSearches: 0,\r\n summarizations: 0,\r\n errors: 0,\r\n };\r\n }\r\n\r\n /**\r\n * Add a message to current session with intelligent deduplication\r\n */\r\n addMessage(\r\n role: \"user\" | \"assistant\",\r\n content: string,\r\n metadata: Record<string, any> = {},\r\n ): boolean {\r\n if (!role || !content || typeof content !== \"string\") {\r\n console.warn(\"Invalid message parameters:\", { role, content });\r\n return false;\r\n }\r\n\r\n // Intelligent deduplication - check last few messages\r\n const lastMessages = this.recentMessages.slice(-3);\r\n const isDuplicate = lastMessages.some(\r\n (msg) =>\r\n msg.role === role &&\r\n msg.content === content &&\r\n Date.now() - msg.timestamp < 60000, // Within 1 minute\r\n );\r\n\r\n if (isDuplicate) {\r\n console.log(\"Duplicate message detected, skipping\");\r\n return false;\r\n }\r\n\r\n // Add message with metadata\r\n const message: Message = {\r\n role,\r\n content: content.trim(),\r\n timestamp: metadata.timestamp || Date.now(),\r\n metadata: { ...metadata },\r\n };\r\n\r\n this.recentMessages.push(message);\r\n\r\n // Auto-summarization with debouncing\r\n if (\r\n this.enableAutoSummarization &&\r\n this.recentMessages.length >= this.summaryThreshold &&\r\n !this.isProcessing\r\n ) {\r\n this.debouncedSummarize();\r\n }\r\n\r\n return true;\r\n }\r\n\r\n /**\r\n * Debounced summarization to prevent excessive processing\r\n */\r\n private debouncedSummarize(): void {\r\n if (this.summarizeTimeout) {\r\n clearTimeout(this.summarizeTimeout);\r\n }\r\n\r\n this.summarizeTimeout = setTimeout(() => {\r\n this.summarizeAndStore().catch((error) => {\r\n console.error(\"Auto-summarization failed:\", error);\r\n this.metrics.errors++;\r\n });\r\n }, 1000); // 1 second debounce\r\n }\r\n\r\n /**\r\n * Store important facts with validation and conflict resolution\r\n */\r\n async storeFact(\r\n content: string,\r\n importance: number = 1,\r\n category: MemoryType = MEMORY_TYPES.FACT,\r\n metadata: Record<string, any> = {},\r\n ): Promise<string> {\r\n // Input validation\r\n if (\r\n !content ||\r\n typeof content !== \"string\" ||\r\n content.trim().length === 0\r\n ) {\r\n throw new Error(\"Content cannot be empty\");\r\n }\r\n\r\n if (\r\n importance < MEMORY_CONFIG.DEFAULT_IMPORTANCE_RANGE.min ||\r\n importance > MEMORY_CONFIG.DEFAULT_IMPORTANCE_RANGE.max\r\n ) {\r\n throw new Error(\r\n `Importance must be between ${MEMORY_CONFIG.DEFAULT_IMPORTANCE_RANGE.min} and ${MEMORY_CONFIG.DEFAULT_IMPORTANCE_RANGE.max}`,\r\n );\r\n }\r\n\r\n const normalizedContent = content.trim();\r\n const normalizedCategory = Object.values(MEMORY_TYPES).includes(category)\r\n ? category\r\n : MEMORY_TYPES.FACT;\r\n\r\n try {\r\n // Check for existing similar facts using fuzzy matching\r\n const existingFacts = await this.findSimilarFacts(normalizedContent);\r\n\r\n if (existingFacts.length > 0) {\r\n // Update existing fact if importance is higher\r\n const bestMatch = existingFacts[0];\r\n if (importance > bestMatch.importance) {\r\n await this.storage.updateMemory(bestMatch.id, {\r\n importance,\r\n updated_at: new Date(),\r\n access_count: { increment: 1 },\r\n metadata: { ...bestMatch.metadata, ...metadata },\r\n });\r\n }\r\n return bestMatch.id;\r\n }\r\n\r\n // Insert new fact\r\n const id = await this.storage.insertMemory(\r\n this.userId,\r\n normalizedCategory,\r\n normalizedContent,\r\n Math.max(0, Math.min(10, importance)),\r\n metadata,\r\n );\r\n\r\n // Clear cache after new insertion\r\n this.clearCache();\r\n\r\n return id;\r\n } catch (error) {\r\n console.error(\"Error storing fact:\", error);\r\n this.metrics.errors++;\r\n throw error;\r\n }\r\n }\r\n\r\n /**\r\n * Find similar facts using content similarity\r\n */\r\n private async findSimilarFacts(content: string): Promise<MemoryRecord[]> {\r\n try {\r\n return await this.storage.findSimilarMemories(this.userId, content, 5);\r\n } catch (error) {\r\n console.error(\"Error finding similar facts:\", error);\r\n return [];\r\n }\r\n }\r\n\r\n /**\r\n * Enhanced memory recall with caching and vector search\r\n */\r\n async recallRelevantMemories(\r\n query: string = \"\",\r\n limit: number = 10,\r\n options: MemorySearchOptions = {},\r\n ): Promise<MemoryRecord[]> {\r\n const cacheKey = `${query}-${limit}-${JSON.stringify(options)}`;\r\n\r\n // Check cache first\r\n if (this.memoryCache.has(cacheKey)) {\r\n const cached = this.memoryCache.get(cacheKey)!;\r\n if (Date.now() - cached.timestamp < this.cacheExpiry) {\r\n this.metrics.cacheHits++;\r\n return cached.data;\r\n }\r\n this.memoryCache.delete(cacheKey);\r\n }\r\n\r\n this.metrics.cacheMisses++;\r\n\r\n try {\r\n let memories = await this.storage.findMemories(\r\n this.userId,\r\n query,\r\n limit,\r\n options,\r\n );\r\n\r\n if (memories.length === 0) {\r\n return [];\r\n }\r\n\r\n // Apply vector search if enabled and query provided\r\n if (this.enableVectorSearch && query.trim() && memories.length > 0) {\r\n memories = await this.applyVectorSearch(query, memories, options);\r\n }\r\n\r\n // Apply relevance filtering\r\n if (options.minImportance) {\r\n memories = memories.filter(\r\n (m) => m.importance >= options.minImportance!,\r\n );\r\n }\r\n\r\n // Format results\r\n const result = memories.map((m) => ({\r\n ...m,\r\n relevance_score: m.relevance_score || 0,\r\n metadata: options.includeMetadata ? m.metadata : undefined,\r\n }));\r\n\r\n // Cache the result\r\n this.memoryCache.set(cacheKey, {\r\n data: result,\r\n timestamp: Date.now(),\r\n });\r\n\r\n return result;\r\n } catch (error) {\r\n console.error(\"Error retrieving memories:\", error);\r\n this.metrics.errors++;\r\n return [];\r\n }\r\n }\r\n\r\n /**\r\n * Apply vector search to memories\r\n */\r\n private async applyVectorSearch(\r\n query: string,\r\n memories: MemoryRecord[],\r\n options: MemorySearchOptions,\r\n ): Promise<MemoryRecord[]> {\r\n // Placeholder for vector search implementation\r\n // In production, integrate with your vector similarity API\r\n // try {\r\n // this.metrics.vectorSearches++;\r\n // const sentencesByRelevance = await weighRelevanceConceptVectorAPI(\r\n // query,\r\n // memories.map(m => m.content)\r\n // );\r\n // await this.updateRelevanceScores(memories, sentencesByRelevance);\r\n // return memories\r\n // .map(memory => {\r\n // const relevanceData = sentencesByRelevance.find(s => s.sentence === memory.content);\r\n // return {\r\n // ...memory,\r\n // relevance_score: relevanceData?.relevance || 0\r\n // };\r\n // })\r\n // .sort((a, b) => b.relevance_score - a.relevance_score);\r\n // } catch (vectorError) {\r\n // console.warn('Vector search failed, falling back to basic search:', vectorError);\r\n // return memories;\r\n // }\r\n return memories;\r\n }\r\n\r\n /**\r\n * Update relevance scores for memories\r\n */\r\n private async updateRelevanceScores(\r\n memories: MemoryRecord[],\r\n sentencesByRelevance: Array<{ sentence: string; relevance: number }>,\r\n ): Promise<void> {\r\n const updates = sentencesByRelevance\r\n .filter((m) => m.relevance > this.relevanceThreshold)\r\n .map((m) => {\r\n const memory = memories.find((mem) => mem.content === m.sentence);\r\n if (memory) {\r\n return {\r\n id: memory.id,\r\n updates: {\r\n importance: Math.min(10, memory.importance + m.relevance * 0.5),\r\n access_count: { increment: 1 },\r\n updated_at: new Date(),\r\n },\r\n };\r\n }\r\n return null;\r\n })\r\n .filter(Boolean) as Array<{ id: string; updates: any }>;\r\n\r\n if (updates.length > 0) {\r\n await this.storage.batchUpdateMemories(updates);\r\n }\r\n }\r\n\r\n /**\r\n * Improved summarization with error handling and batch processing\r\n */\r\n async summarizeAndStore(): Promise<boolean> {\r\n if (this.recentMessages.length === 0 || this.isProcessing) {\r\n return false;\r\n }\r\n\r\n this.isProcessing = true;\r\n this.metrics.summarizations++;\r\n\r\n try {\r\n // Create conversation summary\r\n const conversationText = this.recentMessages\r\n .map((msg) => `${msg.role}: ${msg.content}`)\r\n .join(\"\\n\");\r\n\r\n // Extract facts using LLM\r\n const factsResponse =\r\n await this.extractFactsFromConversation(conversationText);\r\n\r\n if (!Array.isArray(factsResponse) || factsResponse.length === 0) {\r\n console.warn(\"No facts extracted from conversation\");\r\n return false;\r\n }\r\n\r\n // Process facts in batches\r\n await this.processFactsInBatches(factsResponse);\r\n\r\n // Clear processed messages\r\n this.recentMessages = [];\r\n\r\n return true;\r\n } catch (error) {\r\n console.error(\"Error in summarizeAndStore:\", error);\r\n this.metrics.errors++;\r\n return false;\r\n } finally {\r\n this.isProcessing = false;\r\n }\r\n }\r\n\r\n /**\r\n * Extract facts from conversation using LLM\r\n */\r\n private async extractFactsFromConversation(\r\n conversationText: string,\r\n ): Promise<ExtractedFact[]> {\r\n try {\r\n const { extract: factsResponse } = await writeLanguageResponse({\r\n agent: \"remember-facts\",\r\n chat_history: conversationText,\r\n provider: \"groq\",\r\n model: \"mixtral-8x7b-32768\",\r\n timeout: MEMORY_CONFIG.DEFAULT_TIMEOUT,\r\n });\r\n\r\n return Array.isArray(factsResponse) ? factsResponse : [];\r\n } catch (error) {\r\n console.error(\"Error extracting facts:\", error);\r\n return [];\r\n }\r\n }\r\n\r\n /**\r\n * Process facts in batches to avoid overwhelming the database\r\n */\r\n private async processFactsInBatches(\r\n factsResponse: ExtractedFact[],\r\n ): Promise<void> {\r\n for (let i = 0; i < factsResponse.length; i += this.batchSize) {\r\n const batch = factsResponse.slice(i, i + this.batchSize);\r\n\r\n const storePromises = batch.map(async (fact) => {\r\n try {\r\n if (fact && typeof fact === \"object\" && fact.content) {\r\n return await this.storeFact(\r\n fact.content,\r\n fact.importance || 1,\r\n fact.category || MEMORY_TYPES.CONVERSATION,\r\n fact.metadata || {},\r\n );\r\n } else if (typeof fact === \"string\" && fact.trim()) {\r\n return await this.storeFact(\r\n fact.trim(),\r\n 1,\r\n MEMORY_TYPES.CONVERSATION,\r\n );\r\n }\r\n } catch (error) {\r\n console.error(\"Error storing individual fact:\", error);\r\n return null;\r\n }\r\n });\r\n\r\n await Promise.allSettled(storePromises);\r\n\r\n // Small delay between batches\r\n if (i + this.batchSize < factsResponse.length) {\r\n await new Promise((resolve) => setTimeout(resolve, 100));\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Clear cache utility\r\n */\r\n clearCache(): void {\r\n this.memoryCache.clear();\r\n }\r\n\r\n /**\r\n * Get memory context with better formatting and relevance\r\n */\r\n async getMemoryContext(\r\n query: string = \"\",\r\n includeRecent: boolean = true,\r\n options: MemoryContextOptions = {},\r\n ): Promise<string> {\r\n const memories = await this.recallRelevantMemories(\r\n query,\r\n options.maxMemories || 8,\r\n { minImportance: options.minImportance || 0.5 },\r\n );\r\n\r\n if (memories.length === 0 && this.recentMessages.length === 0) {\r\n return \"\";\r\n }\r\n\r\n let context = \"\";\r\n\r\n // Add relevant memories\r\n if (memories.length > 0) {\r\n context += \"What I remember about you:\\n\";\r\n memories\r\n .filter((memory) => memory.importance > (options.minImportance || 0.5))\r\n .forEach((memory) => {\r\n const importanceIndicator =\r\n memory.importance >= 8\r\n ? \"\\u2b50\"\r\n : memory.importance >= 5\r\n ? \"\\u2022\"\r\n : \"-\";\r\n context += `${importanceIndicator} ${memory.content}\\n`;\r\n });\r\n }\r\n\r\n // Add recent conversation if requested\r\n if (includeRecent && this.recentMessages.length > 0) {\r\n context += context\r\n ? \"\\nRecent conversation:\\n\"\r\n : \"Recent conversation:\\n\";\r\n this.recentMessages.slice(-3).forEach((msg) => {\r\n const truncatedContent =\r\n msg.content.length > 100\r\n ? msg.content.substring(0, 100) + \"...\"\r\n : msg.content;\r\n context += `${msg.role}: ${truncatedContent}\\n`;\r\n });\r\n }\r\n\r\n return context;\r\n }\r\n\r\n /**\r\n * Get performance metrics\r\n */\r\n getMetrics(): MemoryMetrics {\r\n return {\r\n ...this.metrics,\r\n cacheSize: this.memoryCache.size,\r\n recentMessagesCount: this.recentMessages.length,\r\n isProcessing: this.isProcessing,\r\n };\r\n }\r\n}\r\n","// @ts-nocheck\r\n/**\r\n * Memory Agent\r\n *\r\n * Enhanced Memory Agent with:\r\n * - Rate limiting\r\n * - Multiple LLM provider support\r\n * - Health monitoring\r\n * - Conversation management\r\n * - Memory analytics\r\n */\r\n\r\nimport { SimpleMemory } from \"./storage/in-memory-storage\";\r\nimport type { IMemoryStorage } from \"./storage/storage-interface\";\r\nimport type { MemoryType, MemorySearchOptions } from \"./types\";\r\nimport { MEMORY_CONFIG, MEMORY_TYPES } from \"./types\";\r\n\r\n/**\r\n * LLM provider interface\r\n */\r\ninterface LLMProvider {\r\n invoke: (prompt: string) => Promise<{ content: string; tokensUsed: number }>;\r\n}\r\n\r\n/**\r\n * Chat options\r\n */\r\ninterface ChatOptions {\r\n provider?: string;\r\n apiKey?: string;\r\n model?: string;\r\n temperature?: number;\r\n systemPrompt?: string;\r\n includeHistory?: boolean;\r\n maxMemories?: number;\r\n minImportance?: number;\r\n}\r\n\r\n/**\r\n * Chat response\r\n */\r\ninterface ChatResponse {\r\n content?: string;\r\n memoryContext?: string;\r\n success: boolean;\r\n tokensUsed?: number;\r\n responseTime?: number;\r\n sessionId?: string;\r\n timestamp: string;\r\n error?: string;\r\n}\r\n\r\n/**\r\n * Agent analytics\r\n */\r\ninterface AgentAnalytics {\r\n totalMessages: number;\r\n totalTokens: number;\r\n averageResponseTime: number;\r\n errorCount: number;\r\n sessionStartTime: number;\r\n}\r\n\r\n/**\r\n * Rate limit configuration\r\n */\r\ninterface RateLimitConfig {\r\n requests: number;\r\n windowMs: number;\r\n}\r\n\r\n/**\r\n * Agent options\r\n */\r\nexport interface MemoryAgentOptions {\r\n memoryOptions?: any;\r\n defaultProvider?: string;\r\n defaultApiKey?: string;\r\n defaultModel?: string;\r\n rateLimit?: RateLimitConfig;\r\n providers?: Record<string, (apiKey: string, model: string, temperature: number) => LLMProvider>;\r\n}\r\n\r\nexport class MemoryAgent {\r\n private memory: SimpleMemory;\r\n private defaultProvider: string;\r\n private defaultApiKey?: string;\r\n private defaultModel?: string;\r\n private rateLimiter: Map<string, number[]>;\r\n private rateLimitConfig: RateLimitConfig;\r\n private providers: Record<string, (apiKey: string, model: string, temperature: number) => LLMProvider>;\r\n private sessionId: string;\r\n private conversationHistory: Array<{ role: string; content: string }>;\r\n private analytics: AgentAnalytics;\r\n private userId: string;\r\n\r\n /**\r\n * Initialize memory agent\r\n */\r\n constructor(userId: string, storage: IMemoryStorage, options: MemoryAgentOptions = {}) {\r\n if (!userId || !storage) {\r\n throw new Error(\"userId and storage are required parameters\");\r\n }\r\n\r\n this.userId = userId;\r\n this.memory = new SimpleMemory(userId, storage, options.memoryOptions || {});\r\n this.defaultProvider = options.defaultProvider || \"groq\";\r\n this.defaultApiKey = options.defaultApiKey;\r\n this.defaultModel = options.defaultModel;\r\n\r\n // Rate limiting\r\n this.rateLimiter = new Map();\r\n this.rateLimitConfig = {\r\n ...MEMORY_CONFIG.DEFAULT_RATE_LIMIT,\r\n ...options.rateLimit,\r\n };\r\n\r\n // LLM providers\r\n this.providers = options.providers || this.getDefaultProviders();\r\n\r\n // Session management\r\n this.sessionId = this.generateSessionId();\r\n this.conversationHistory = [];\r\n\r\n // Analytics\r\n this.analytics = {\r\n totalMessages: 0,\r\n totalTokens: 0,\r\n averageResponseTime: 0,\r\n errorCount: 0,\r\n sessionStartTime: Date.now(),\r\n };\r\n }\r\n\r\n /**\r\n * Get default LLM providers\r\n */\r\n private getDefaultProviders(): Record<string, (apiKey: string, model: string, temperature: number) => LLMProvider> {\r\n return {\r\n groq: (apiKey, model, temperature) => ({\r\n invoke: async (prompt) => {\r\n // Implementation would go here\r\n return { content: \"Default response\", tokensUsed: 0 };\r\n },\r\n }),\r\n openai: (apiKey, model, temperature) => ({\r\n invoke: async (prompt) => {\r\n // Implementation would go here\r\n return { content: \"Default response\", tokensUsed: 0 };\r\n },\r\n }),\r\n };\r\n }\r\n\r\n /**\r\n * Generate unique session ID\r\n */\r\n private generateSessionId(): string {\r\n return `${this.userId}-${Date.now()}-${Math.random().toString(36).substr(2, 9)}`;\r\n }\r\n\r\n /**\r\n * Rate limiting check with sliding window\r\n */\r\n private checkRateLimit(key: string, maxRequests?: number, windowMs?: number): boolean {\r\n const config = {\r\n maxRequests: maxRequests || this.rateLimitConfig.requests,\r\n windowMs: windowMs || this.rateLimitConfig.windowMs,\r\n };\r\n\r\n const now = Date.now();\r\n const requests = this.rateLimiter.get(key) || [];\r\n\r\n // Remove old requests outside the window\r\n const validRequests = requests.filter(\r\n (time) => now - time < config.windowMs,\r\n );\r\n\r\n if (validRequests.length >= config.maxRequests) {\r\n return false;\r\n }\r\n\r\n validRequests.push(now);\r\n this.rateLimiter.set(key, validRequests);\r\n return true;\r\n }\r\n\r\n /**\r\n * Main chat method with comprehensive error handling\r\n */\r\n async chat(message: string, options: ChatOptions = {}): Promise<ChatResponse> {\r\n const startTime = Date.now();\r\n\r\n // Input validation\r\n if (!message || typeof message !== \"string\" || message.trim().length === 0) {\r\n return {\r\n error: \"Message cannot be empty\",\r\n success: false,\r\n timestamp: new Date().toISOString(),\r\n };\r\n }\r\n\r\n // Rate limiting\r\n const rateLimitKey = `chat-${this.userId}`;\r\n if (!this.checkRateLimit(rateLimitKey)) {\r\n return {\r\n error: \"Rate limit exceeded. Please try again later.\",\r\n success: false,\r\n timestamp: new Date().toISOString(),\r\n };\r\n }\r\n\r\n try {\r\n // Add user message to memory\r\n this.memory.addMessage(\"user\", message, {\r\n sessionId: this.sessionId,\r\n timestamp: Date.now(),\r\n });\r\n\r\n // Get memory context\r\n const memoryContext = await this.memory.getMemoryContext(message, true, {\r\n maxMemories: options.maxMemories || 8,\r\n minImportance: options.minImportance || 0.5,\r\n });\r\n\r\n // Build enhanced prompt\r\n const prompt = this.buildPrompt(message, memoryContext, options);\r\n\r\n // Generate response\r\n const response = await this.generateResponse(prompt, options);\r\n\r\n if (!response || !response.content) {\r\n throw new Error(\"Invalid response from LLM\");\r\n }\r\n\r\n // Add response to memory\r\n this.memory.addMessage(\"assistant\", response.content, {\r\n sessionId: this.sessionId,\r\n tokensUsed: response.tokensUsed,\r\n timestamp: Date.now(),\r\n });\r\n\r\n // Update analytics\r\n this.updateAnalytics(response.tokensUsed, Date.now() - startTime);\r\n\r\n return {\r\n content: response.content,\r\n memoryContext: memoryContext,\r\n success: true,\r\n tokensUsed: response.tokensUsed || 0,\r\n responseTime: Date.now() - startTime,\r\n sessionId: this.sessionId,\r\n timestamp: new Date().toISOString(),\r\n };\r\n } catch (error) {\r\n console.error(\"Chat error:\", error);\r\n this.analytics.errorCount++;\r\n\r\n return {\r\n error: error.message || \"An unexpected error occurred\",\r\n success: false,\r\n timestamp: new Date().toISOString(),\r\n };\r\n }\r\n }\r\n\r\n /**\r\n * Generate LLM response with timeout and error handling\r\n */\r\n private async generateResponse(prompt: string, options: ChatOptions): Promise<{ content: string; tokensUsed: number }> {\r\n const provider = options.provider || this.defaultProvider;\r\n const apiKey = options.apiKey || this.defaultApiKey;\r\n const model = options.model || this.defaultModel;\r\n const temperature = options.temperature || 0.7;\r\n\r\n if (!this.providers || !this.providers[provider]) {\r\n throw new Error(`Provider ${provider} not available`);\r\n }\r\n\r\n const llm = this.providers[provider](apiKey || \"\", model || \"\", temperature);\r\n\r\n // Add timeout to LLM call\r\n const timeoutPromise = new Promise<never>((_, reject) =>\r\n setTimeout(\r\n () => reject(new Error(\"LLM request timeout\")),\r\n MEMORY_CONFIG.DEFAULT_TIMEOUT,\r\n ),\r\n );\r\n\r\n return await Promise.race([llm.invoke(prompt), timeoutPromise]);\r\n }\r\n\r\n /**\r\n * Build enhanced prompt with context\r\n */\r\n private buildPrompt(message: string, memoryContext: string, options: ChatOptions): string {\r\n let prompt = \"\";\r\n\r\n // Add system context if provided\r\n if (options.systemPrompt) {\r\n prompt += `${options.systemPrompt}\\n\\n`;\r\n }\r\n\r\n // Add memory context\r\n if (memoryContext) {\r\n prompt += `${memoryContext}\\n\\n`;\r\n }\r\n\r\n // Add conversation history if requested\r\n if (options.includeHistory && this.conversationHistory.length > 0) {\r\n prompt += \"Recent conversation history:\\n\";\r\n this.conversationHistory.slice(-5).forEach((msg) => {\r\n prompt += `${msg.role}: ${msg.content}\\n`;\r\n });\r\n prompt += \"\\n\";\r\n }\r\n\r\n prompt += `User: ${message}\\n\\nAssistant:`;\r\n\r\n return prompt;\r\n }\r\n\r\n /**\r\n * Update analytics\r\n */\r\n private updateAnalytics(tokensUsed: number, responseTime: number): void {\r\n this.analytics.totalMessages++;\r\n this.analytics.totalTokens += tokensUsed || 0;\r\n this.analytics.averageResponseTime =\r\n (this.analytics.averageResponseTime * (this.analytics.totalMessages - 1) +\r\n responseTime) /\r\n this.analytics.totalMessages;\r\n }\r\n\r\n /**\r\n * Remember a fact manually\r\n */\r\n async remember(\r\n fact: string,\r\n importance: number = 1,\r\n category: MemoryType = MEMORY_TYPES.MANUAL,\r\n metadata: Record<string, any> = {},\r\n ): Promise<string> {\r\n try {\r\n return await this.memory.storeFact(fact, importance, category, {\r\n ...metadata,\r\n source: \"manual\",\r\n timestamp: Date.now(),\r\n });\r\n } catch (error) {\r\n console.error(\"Error remembering fact:\", error);\r\n throw error;\r\n }\r\n }\r\n\r\n /**\r\n * Get memories with filtering\r\n */\r\n async getMemories(query: string = \"\", limit: number = 10, options: MemorySearchOptions = {}): Promise<any[]> {\r\n return await this.memory.recallRelevantMemories(query, limit, options);\r\n }\r\n\r\n /**\r\n * Force store summary of current conversation\r\n */\r\n async forceStoreSummary(): Promise<boolean> {\r\n return await this.memory.summarizeAndStore();\r\n }\r\n\r\n /**\r\n * Health check for the agent\r\n */\r\n async healthCheck(): Promise<any> {\r\n try {\r\n const memoryMetrics = this.memory.getMetrics();\r\n const rateLimitStatus = this.checkRateLimit(\"health-check\", 1, 1000);\r\n\r\n return {\r\n status: \"healthy\",\r\n memory: memoryMetrics,\r\n rateLimit: rateLimitStatus,\r\n analytics: this.analytics,\r\n sessionId: this.sessionId,\r\n uptime: Date.now() - this.analytics.sessionStartTime,\r\n timestamp: new Date().toISOString(),\r\n };\r\n } catch (error) {\r\n return {\r\n status: \"unhealthy\",\r\n error: error.message,\r\n timestamp: new Date().toISOString(),\r\n };\r\n }\r\n }\r\n\r\n /**\r\n * Get analytics and performance metrics\r\n */\r\n getAnalytics(): any {\r\n return {\r\n ...this.analytics,\r\n memory: this.memory.getMetrics(),\r\n sessionId: this.sessionId,\r\n uptime: Date.now() - this.analytics.sessionStartTime,\r\n };\r\n }\r\n\r\n /**\r\n * Reset session and clear conversation history\r\n */\r\n resetSession(): void {\r\n this.sessionId = this.generateSessionId();\r\n this.conversationHistory = [];\r\n this.analytics.sessionStartTime = Date.now();\r\n }\r\n}\r\n","/**\r\n * Drizzle Storage Adapter\r\n *\r\n * Implementation of IMemoryStorage using Drizzle ORM\r\n */\r\n\r\nimport { sql, eq, and, desc, or, like } from \"drizzle-orm\";\r\nimport type { IMemoryStorage } from \"./storage-interface\";\r\nimport type {\r\n MemoryRecord,\r\n MemoryType,\r\n MemorySearchOptions,\r\n MemoryUpdate,\r\n} from \"../types\";\r\n\r\n/**\r\n * The Drizzle table passed to {@link DrizzleMemoryStorage} must expose these\r\n * columns (see {@link createMemorySchema} for the expected shape).\r\n */\r\nexport interface MemoryTable {\r\n id: any;\r\n user_id: any;\r\n memory_type: any;\r\n content: any;\r\n importance: any;\r\n access_count: any;\r\n metadata: any;\r\n created_at: any;\r\n updated_at: any;\r\n}\r\n\r\n/**\r\n * Drizzle-based storage adapter.\r\n *\r\n * Pass the Drizzle database instance and the memory table object defined in\r\n * your schema (not a table-name string) so queries reference real columns:\r\n *\r\n * ```ts\r\n * import { sqliteTable, text, integer, real } from \"drizzle-orm/sqlite-core\";\r\n * const userMemories = sqliteTable(\"user_memories\", { ... });\r\n * const storage = new DrizzleMemoryStorage(db, userMemories);\r\n * ```\r\n */\r\nexport class DrizzleMemoryStorage implements IMemoryStorage {\r\n private db: any;\r\n private table: MemoryTable & Record<string, any>;\r\n\r\n constructor(db: any, table: MemoryTable & Record<string, any>) {\r\n this.db = db;\r\n this.table = table;\r\n }\r\n\r\n /**\r\n * Insert a new memory record\r\n */\r\n async insertMemory(\r\n userId: string,\r\n memoryType: MemoryType,\r\n content: string,\r\n importance: number,\r\n metadata?: Record<string, any>,\r\n ): Promise<string> {\r\n const result = await this.db\r\n .insert(this.table)\r\n .values({\r\n user_id: userId,\r\n memory_type: memoryType,\r\n content: content,\r\n importance: importance,\r\n access_count: 0,\r\n metadata: metadata || {},\r\n created_at: new Date(),\r\n updated_at: new Date(),\r\n })\r\n .returning({ id: this.table.id });\r\n\r\n return result[0]?.id;\r\n }\r\n\r\n /**\r\n * Find memories by user ID and optional filters\r\n */\r\n async findMemories(\r\n userId: string,\r\n query?: string,\r\n limit: number = 10,\r\n options: MemorySearchOptions = {},\r\n ): Promise<MemoryRecord[]> {\r\n const conditions = [eq(this.table.user_id, userId)];\r\n\r\n if (query && query.trim()) {\r\n conditions.push(like(this.table.content, `%${query}%`));\r\n }\r\n\r\n if (options.memoryType) {\r\n conditions.push(eq(this.table.memory_type, options.memoryType));\r\n }\r\n\r\n const results = await this.db\r\n .select({\r\n id: this.table.id,\r\n user_id: this.table.user_id,\r\n memory_type: this.table.memory_type,\r\n content: this.table.content,\r\n importance: this.table.importance,\r\n access_count: this.table.access_count,\r\n metadata: this.table.metadata,\r\n created_at: this.table.created_at,\r\n updated_at: this.table.updated_at,\r\n })\r\n .from(this.table)\r\n .where(and(...conditions))\r\n .orderBy(\r\n desc(this.table.importance),\r\n desc(this.table.access_count),\r\n desc(this.table.updated_at),\r\n )\r\n .limit(Math.min(limit, 50)); // Cap at 50 for performance\r\n\r\n return results as MemoryRecord[];\r\n }\r\n\r\n /**\r\n * Find similar memories based on content\r\n */\r\n async findSimilarMemories(\r\n userId: string,\r\n content: string,\r\n limit: number = 5,\r\n ): Promise<MemoryRecord[]> {\r\n // Simple similarity check using keywords\r\n const words = content\r\n .toLowerCase()\r\n .split(/\\s+/)\r\n .filter((w) => w.length > 2);\r\n const searchTerms = words.slice(0, 3); // Use first 3 words\r\n\r\n if (searchTerms.length === 0) {\r\n return [];\r\n }\r\n\r\n const conditions = searchTerms.map((term) =>\r\n like(this.table.content, `%${term}%`),\r\n );\r\n\r\n const results = await this.db\r\n .select()\r\n .from(this.table)\r\n .where(and(eq(this.table.user_id, userId), or(...conditions)))\r\n .orderBy(desc(this.table.importance), desc(this.table.updated_at))\r\n .limit(limit);\r\n\r\n return results as MemoryRecord[];\r\n }\r\n\r\n /**\r\n * Update a memory record\r\n */\r\n async updateMemory(id: string, updates: MemoryUpdate): Promise<void> {\r\n const updateData: any = {};\r\n\r\n if (updates.importance !== undefined) {\r\n updateData.importance = updates.importance;\r\n }\r\n\r\n if (updates.access_count !== undefined) {\r\n if (typeof updates.access_count === \"object\" && updates.access_count.increment) {\r\n updateData.access_count = sql`${this.table.access_count} + ${updates.access_count.increment}`;\r\n } else {\r\n updateData.access_count = updates.access_count;\r\n }\r\n }\r\n\r\n if (updates.updated_at !== undefined) {\r\n updateData.updated_at = updates.updated_at;\r\n }\r\n\r\n if (updates.metadata !== undefined) {\r\n updateData.metadata = updates.metadata;\r\n }\r\n\r\n await this.db.update(this.table).set(updateData).where(eq(this.table.id, id));\r\n }\r\n\r\n /**\r\n * Delete a memory record\r\n */\r\n async deleteMemory(id: string): Promise<void> {\r\n await this.db.delete(this.table).where(eq(this.table.id, id));\r\n }\r\n\r\n /**\r\n * Get memory by ID\r\n */\r\n async getMemoryById(id: string): Promise<MemoryRecord | null> {\r\n const results = await this.db\r\n .select()\r\n .from(this.table)\r\n .where(eq(this.table.id, id))\r\n .limit(1);\r\n\r\n return (results[0] as MemoryRecord) || null;\r\n }\r\n\r\n /**\r\n * Batch update memories\r\n */\r\n async batchUpdateMemories(\r\n updates: Array<{ id: string; updates: MemoryUpdate }>,\r\n ): Promise<void> {\r\n const promises = updates.map(({ id, updates: updateData }) =>\r\n this.updateMemory(id, updateData),\r\n );\r\n await Promise.allSettled(promises);\r\n }\r\n}\r\n\r\n/**\r\n * Database schema for memory system\r\n * This is kept here for reference but should be managed by your migration system\r\n */\r\nexport function createMemorySchema(db: any) {\r\n return {\r\n user_memories: {\r\n id: \"uuid\",\r\n user_id: \"string\",\r\n memory_type: \"string\",\r\n content: \"text\",\r\n importance: \"number\",\r\n access_count: \"number\",\r\n metadata: \"jsonb\",\r\n created_at: \"timestamp\",\r\n updated_at: \"timestamp\",\r\n },\r\n };\r\n}\r\n","/**\r\n * @fileoverview Mastra Memory Integration for Cloudflare Workers\r\n *\r\n * Integrates Mastra's memory system with Cloudflare Workers environment.\r\n * Provides persistent conversation memory using D1, KV, or Durable Objects.\r\n *\r\n * Features:\r\n * - Multi-storage backend support (D1, KV, Durable Objects)\r\n * - Thread-based conversation management\r\n * - Resource scoping for multi-user scenarios\r\n * - Cloudflare Workers optimized (edge-ready)\r\n * - Compatible with existing MemoryAgent architecture\r\n *\r\n * @see https://docs.mastra.ai/core/memory\r\n */\r\n\r\nimport { Mastra } from '@mastra/core';\r\nimport { Agent } from '@mastra/core/agent';\r\nimport type { D1Database, KVNamespace } from '@cloudflare/workers-types';\r\nimport type { IMemoryStorage } from './storage/storage-interface';\r\nimport type { MemoryRecord, MemoryType, MemorySearchOptions, MemoryUpdate } from './types';\r\n\r\n/**\r\n * Cloudflare Workers environment bindings\r\n */\r\nexport interface CloudflareEnv {\r\n DB?: D1Database;\r\n KV?: KVNamespace;\r\n OPENAI_API_KEY?: string;\r\n ANTHROPIC_API_KEY?: string;\r\n GROQ_API_KEY?: string;\r\n}\r\n\r\n/**\r\n * Storage backend types for Mastra memory\r\n */\r\nexport type MastraStorageBackend = 'memory' | 'd1' | 'kv';\r\n\r\n/**\r\n * Configuration for Mastra memory integration\r\n */\r\nexport interface MastraMemoryConfig {\r\n /** Storage backend (memory, d1, or kv) */\r\n storage: MastraStorageBackend;\r\n /** Cloudflare environment bindings */\r\n env?: CloudflareEnv;\r\n /** D1 table name (for d1 storage) */\r\n tableName?: string;\r\n /** KV key prefix (for kv storage) */\r\n kvPrefix?: string;\r\n /** Enable debug logging */\r\n debug?: boolean;\r\n}\r\n\r\n/**\r\n * D1-based storage adapter for Mastra Memory\r\n * Implements IMemoryStorage using Cloudflare D1\r\n */\r\nexport class MastraD1MemoryStorage implements IMemoryStorage {\r\n private db: D1Database;\r\n private tableName: string;\r\n\r\n constructor(db: D1Database, tableName: string = 'mastra_memories') {\r\n this.db = db;\r\n this.tableName = tableName;\r\n }\r\n\r\n /**\r\n * Initialize D1 schema for Mastra memory\r\n */\r\n async initSchema(): Promise<void> {\r\n await this.db.exec(`\r\n CREATE TABLE IF NOT EXISTS ${this.tableName} (\r\n id TEXT PRIMARY KEY,\r\n user_id TEXT NOT NULL,\r\n thread_id TEXT NOT NULL,\r\n resource_id TEXT,\r\n memory_type TEXT NOT NULL,\r\n content TEXT NOT NULL,\r\n importance REAL DEFAULT 1.0,\r\n access_count INTEGER DEFAULT 0,\r\n metadata TEXT,\r\n created_at INTEGER NOT NULL,\r\n updated_at INTEGER NOT NULL\r\n );\r\n\r\n CREATE INDEX IF NOT EXISTS idx_user_thread ON ${this.tableName}(user_id, thread_id);\r\n CREATE INDEX IF NOT EXISTS idx_resource ON ${this.tableName}(resource_id);\r\n CREATE INDEX IF NOT EXISTS idx_importance ON ${this.tableName}(importance DESC);\r\n `);\r\n }\r\n\r\n async insertMemory(\r\n userId: string,\r\n memoryType: MemoryType,\r\n content: string,\r\n importance: number,\r\n metadata?: Record<string, any>\r\n ): Promise<string> {\r\n const id = crypto.randomUUID();\r\n const now = Date.now();\r\n\r\n await this.db\r\n .prepare(\r\n `INSERT INTO ${this.tableName}\r\n (id, user_id, thread_id, resource_id, memory_type, content, importance, metadata, created_at, updated_at)\r\n VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`\r\n )\r\n .bind(\r\n id,\r\n userId,\r\n metadata?.thread_id || 'default',\r\n metadata?.resource_id || null,\r\n memoryType,\r\n content,\r\n importance,\r\n JSON.stringify(metadata || {}),\r\n now,\r\n now\r\n )\r\n .run();\r\n\r\n return id;\r\n }\r\n\r\n async findMemories(\r\n userId: string,\r\n query?: string,\r\n limit: number = 10,\r\n options: MemorySearchOptions = {}\r\n ): Promise<MemoryRecord[]> {\r\n let sql = `SELECT * FROM ${this.tableName} WHERE user_id = ?`;\r\n const params: any[] = [userId];\r\n\r\n if (options.memoryType) {\r\n sql += ' AND memory_type = ?';\r\n params.push(options.memoryType);\r\n }\r\n\r\n if (query) {\r\n sql += ' AND content LIKE ?';\r\n params.push(`%${query}%`);\r\n }\r\n\r\n if (options.minImportance !== undefined) {\r\n sql += ' AND importance >= ?';\r\n params.push(options.minImportance);\r\n }\r\n\r\n sql += ' ORDER BY importance DESC, updated_at DESC LIMIT ?';\r\n params.push(limit);\r\n\r\n const result = await this.db.prepare(sql).bind(...params).all();\r\n\r\n return (result.results || []).map((row: any) => ({\r\n id: row.id,\r\n user_id: row.user_id,\r\n memory_type: row.memory_type,\r\n content: row.content,\r\n importance: row.importance,\r\n access_count: row.access_count,\r\n metadata: JSON.parse(row.metadata || '{}'),\r\n created_at: new Date(row.created_at),\r\n updated_at: new Date(row.updated_at),\r\n }));\r\n }\r\n\r\n async findSimilarMemories(\r\n userId: string,\r\n content: string,\r\n limit: number = 5\r\n ): Promise<MemoryRecord[]> {\r\n // Simple keyword-based similarity for D1 (no vector search)\r\n const words = content.toLowerCase().split(/\\s+/).filter(w => w.length > 2);\r\n const searchTerms = words.slice(0, 3);\r\n\r\n if (searchTerms.length === 0) return [];\r\n\r\n const likeConditions = searchTerms.map(() => 'content LIKE ?').join(' OR ');\r\n const params = [userId, ...searchTerms.map(term => `%${term}%`), limit];\r\n\r\n const result = await this.db\r\n .prepare(\r\n `SELECT * FROM ${this.tableName}\r\n WHERE user_id = ? AND (${likeConditions})\r\n ORDER BY importance DESC, updated_at DESC\r\n LIMIT ?`\r\n )\r\n .bind(...params)\r\n .all();\r\n\r\n return (result.results || []).map((row: any) => ({\r\n id: row.id,\r\n user_id: row.user_id,\r\n memory_type: row.memory_type,\r\n content: row.content,\r\n importance: row.importance,\r\n access_count: row.access_count,\r\n metadata: JSON.parse(row.metadata || '{}'),\r\n created_at: new Date(row.created_at),\r\n updated_at: new Date(row.updated_at),\r\n }));\r\n }\r\n\r\n async updateMemory(id: string, updates: MemoryUpdate): Promise<void> {\r\n const fields: string[] = [];\r\n const params: any[] = [];\r\n\r\n if (updates.importance !== undefined) {\r\n fields.push('importance = ?');\r\n params.push(updates.importance);\r\n }\r\n\r\n if (updates.access_count !== undefined) {\r\n if (typeof updates.access_count === 'object' && updates.access_count.increment) {\r\n fields.push('access_count = access_count + ?');\r\n params.push(updates.access_count.increment);\r\n } else {\r\n fields.push('access_count = ?');\r\n params.push(updates.access_count);\r\n }\r\n }\r\n\r\n if (updates.metadata !== undefined) {\r\n fields.push('metadata = ?');\r\n params.push(JSON.stringify(updates.metadata));\r\n }\r\n\r\n fields.push('updated_at = ?');\r\n params.push(Date.now());\r\n params.push(id);\r\n\r\n if (fields.length > 0) {\r\n await this.db\r\n .prepare(`UPDATE ${this.tableName} SET ${fields.join(', ')} WHERE id = ?`)\r\n .bind(...params)\r\n .run();\r\n }\r\n }\r\n\r\n async deleteMemory(id: string): Promise<void> {\r\n await this.db.prepare(`DELETE FROM ${this.tableName} WHERE id = ?`).bind(id).run();\r\n }\r\n\r\n async getMemoryById(id: string): Promise<MemoryRecord | null> {\r\n const result = await this.db\r\n .prepare(`SELECT * FROM ${this.tableName} WHERE id = ?`)\r\n .bind(id)\r\n .first();\r\n\r\n if (!result) return null;\r\n\r\n return {\r\n id: result.id as string,\r\n user_id: result.user_id as string,\r\n memory_type: result.memory_type as MemoryType,\r\n content: result.content as string,\r\n importance: result.importance as number,\r\n access_count: result.access_count as number,\r\n metadata: JSON.parse((result.metadata as string) || '{}'),\r\n created_at: new Date(result.created_at as number),\r\n updated_at: new Date(result.updated_at as number),\r\n };\r\n }\r\n\r\n async batchUpdateMemories(updates: Array<{ id: string; updates: MemoryUpdate }>): Promise<void> {\r\n for (const { id, updates: updateData } of updates) {\r\n await this.updateMemory(id, updateData);\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * KV-based storage adapter for Mastra Memory\r\n * Uses Cloudflare KV for simple key-value storage\r\n */\r\nexport class MastraKVMemoryStorage implements IMemoryStorage {\r\n private kv: KVNamespace;\r\n private prefix: string;\r\n\r\n constructor(kv: KVNamespace, prefix: string = 'mastra:memory:') {\r\n this.kv = kv;\r\n this.prefix = prefix;\r\n }\r\n\r\n private getUserKey(userId: string): string {\r\n return `${this.prefix}user:${userId}`;\r\n }\r\n\r\n private getMemoryKey(id: string): string {\r\n return `${this.prefix}memory:${id}`;\r\n }\r\n\r\n async insertMemory(\r\n userId: string,\r\n memoryType: MemoryType,\r\n content: string,\r\n importance: number,\r\n metadata?: Record<string, any>\r\n ): Promise<string> {\r\n const id = crypto.randomUUID();\r\n const now = Date.now();\r\n\r\n const memory: MemoryRecord = {\r\n id,\r\n user_id: userId,\r\n memory_type: memoryType,\r\n content,\r\n importance,\r\n access_count: 0,\r\n metadata: metadata || {},\r\n created_at: new Date(now),\r\n updated_at: new Date(now),\r\n };\r\n\r\n // Store memory\r\n await this.kv.put(this.getMemoryKey(id), JSON.stringify(memory));\r\n\r\n // Update user's memory list\r\n const userKey = this.getUserKey(userId);\r\n const userMemories = await this.kv.get(userKey, 'json') as string[] || [];\r\n userMemories.push(id);\r\n await this.kv.put(userKey, JSON.stringify(userMemories));\r\n\r\n return id;\r\n }\r\n\r\n async findMemories(\r\n userId: string,\r\n query?: string,\r\n limit: number = 10,\r\n options: MemorySearchOptions = {}\r\n ): Promise<MemoryRecord[]> {\r\n const userKey = this.getUserKey(userId);\r\n const memoryIds = await this.kv.get(userKey, 'json') as string[] || [];\r\n\r\n const memories = await Promise.all(\r\n memoryIds.map(id => this.getMemoryById(id))\r\n );\r\n\r\n let filtered = memories.filter((m): m is MemoryRecord => m !== null);\r\n\r\n if (query) {\r\n filtered = filtered.filter(m =>\r\n m.content.toLowerCase().includes(query.toLowerCase())\r\n );\r\n }\r\n\r\n if (options.memoryType) {\r\n filtered = filtered.filter(m => m.memory_type === options.memoryType);\r\n }\r\n\r\n if (options.minImportance !== undefined) {\r\n filtered = filtered.filter(m => m.importance >= options.minImportance!);\r\n }\r\n\r\n return filtered\r\n .sort((a, b) => b.importance - a.importance || b.updated_at.getTime() - a.updated_at.getTime())\r\n .slice(0, limit);\r\n }\r\n\r\n async findSimilarMemories(\r\n userId: string,\r\n content: string,\r\n limit: number = 5\r\n ): Promise<MemoryRecord[]> {\r\n const words = content.toLowerCase().split(/\\s+/).filter(w => w.length > 2);\r\n const searchTerms = words.slice(0, 3);\r\n\r\n if (searchTerms.length === 0) return [];\r\n\r\n const memories = await this.findMemories(userId, '', 50);\r\n\r\n return memories\r\n .filter(m =>\r\n searchTerms.some(term => m.content.toLowerCase().includes(term))\r\n )\r\n .slice(0, limit);\r\n }\r\n\r\n async updateMemory(id: string, updates: MemoryUpdate): Promise<void> {\r\n const memory = await this.getMemoryById(id);\r\n if (!memory) return;\r\n\r\n if (updates.importance !== undefined) {\r\n memory.importance = updates.importance;\r\n }\r\n\r\n if (updates.access_count !== undefined) {\r\n if (typeof updates.access_count === 'object') {\r\n memory.access_count += updates.access_count.increment ?? 0;\r\n } else {\r\n memory.access_count = updates.access_count;\r\n }\r\n }\r\n\r\n if (updates.metadata !== undefined) {\r\n memory.metadata = { ...memory.metadata, ...updates.metadata };\r\n }\r\n\r\n memory.updated_at = new Date();\r\n\r\n await this.kv.put(this.getMemoryKey(id), JSON.stringify(memory));\r\n }\r\n\r\n async deleteMemory(id: string): Promise<void> {\r\n const memory = await this.getMemoryById(id);\r\n if (!memory) return;\r\n\r\n await this.kv.delete(this.getMemoryKey(id));\r\n\r\n // Remove from user's list\r\n const userKey = this.getUserKey(memory.user_id);\r\n const userMemories = await this.kv.get(userKey, 'json') as string[] || [];\r\n const filtered = userMemories.filter(mId => mId !== id);\r\n await this.kv.put(userKey, JSON.stringify(filtered));\r\n }\r\n\r\n async getMemoryById(id: string): Promise<MemoryRecord | null> {\r\n const data = await this.kv.get(this.getMemoryKey(id), 'json') as any;\r\n if (!data) return null;\r\n\r\n return {\r\n ...data,\r\n created_at: new Date(data.created_at),\r\n updated_at: new Date(data.updated_at),\r\n };\r\n }\r\n\r\n async batchUpdateMemories(updates: Array<{ id: string; updates: MemoryUpdate }>): Promise<void> {\r\n await Promise.all(\r\n updates.map(({ id, updates: updateData }) => this.updateMemory(id, updateData))\r\n );\r\n }\r\n}\r\n\r\n/**\r\n * Mastra Memory Manager for Cloudflare Workers\r\n * Wraps Mastra's memory system with Cloudflare-compatible storage\r\n */\r\nexport class MastraMemoryManager {\r\n private mastra: Mastra | null = null;\r\n private storage: IMemoryStorage;\r\n private config: MastraMemoryConfig;\r\n\r\n constructor(config: MastraMemoryConfig) {\r\n this.config = config;\r\n\r\n // Initialize storage backend\r\n if (config.storage === 'd1' && config.env?.DB) {\r\n this.storage = new MastraD1MemoryStorage(config.env.DB, config.tableName);\r\n } else if (config.storage === 'kv' && config.env?.KV) {\r\n this.storage = new MastraKVMemoryStorage(config.env.KV, config.kvPrefix);\r\n } else {\r\n throw new Error(`Invalid storage configuration: ${config.storage}`);\r\n }\r\n }\r\n\r\n /**\r\n * Initialize Mastra instance with memory\r\n */\r\n async initialize(): Promise<Mastra> {\r\n if (this.mastra) return this.mastra;\r\n\r\n // Memory persistence is handled by this manager's own D1/KV storage\r\n // adapters rather than a Mastra memory backend.\r\n this.mastra = new Mastra({});\r\n\r\n // Initialize D1 schema if needed\r\n if (this.config.storage === 'd1' && this.storage instanceof MastraD1MemoryStorage) {\r\n await this.storage.initSchema();\r\n }\r\n\r\n return this.mastra;\r\n }\r\n\r\n /**\r\n * Get storage instance (for direct access)\r\n */\r\n getStorage(): IMemoryStorage {\r\n return this.storage;\r\n }\r\n\r\n /**\r\n * Create an agent with memory\r\n */\r\n async createAgent(config: {\r\n id: string;\r\n name: string;\r\n instructions: string;\r\n model: any;\r\n tools?: Record<string, any>;\r\n userId: string;\r\n threadId?: string;\r\n resourceId?: string;\r\n }): Promise<Agent> {\r\n const mastra = await this.initialize();\r\n\r\n // Get or create agent with memory\r\n const agent = new Agent({\r\n id: config.id,\r\n name: config.name,\r\n instructions: config.instructions,\r\n model: config.model,\r\n tools: config.tools || {},\r\n });\r\n\r\n // Attach memory context\r\n (agent as any).memoryContext = {\r\n userId: config.userId,\r\n threadId: config.threadId || 'default',\r\n resourceId: config.resourceId,\r\n };\r\n\r\n return agent;\r\n }\r\n\r\n /**\r\n * Store a message in memory\r\n */\r\n async storeMessage(\r\n userId: string,\r\n threadId: string,\r\n role: 'user' | 'assistant',\r\n content: string,\r\n metadata?: Record<string, any>\r\n ): Promise<string> {\r\n return await this.storage.insertMemory(\r\n userId,\r\n 'conversation',\r\n content,\r\n 1.0,\r\n {\r\n thread_id: threadId,\r\n role,\r\n ...metadata,\r\n }\r\n );\r\n }\r\n\r\n /**\r\n * Recall conversation history\r\n */\r\n async recallConversation(\r\n userId: string,\r\n threadId: string,\r\n limit: number = 20\r\n ): Promise<Array<{ role: 'user' | 'assistant'; content: string; timestamp: Date }>> {\r\n const memories = await this.storage.findMemories(\r\n userId,\r\n undefined,\r\n limit,\r\n { memoryType: 'conversation' }\r\n );\r\n\r\n return memories\r\n .filter(m => m.metadata?.thread_id === threadId)\r\n .map(m => ({\r\n role: m.metadata?.role || 'user',\r\n content: m.content,\r\n timestamp: m.created_at,\r\n }))\r\n .sort((a, b) => a.timestamp.getTime() - b.timestamp.getTime());\r\n }\r\n\r\n /**\r\n * Get relevant context for a query\r\n */\r\n async getRelevantContext(\r\n userId: string,\r\n query: string,\r\n limit: number = 5\r\n ): Promise<string> {\r\n const memories = await this.storage.findSimilarMemories(userId, query, limit);\r\n\r\n if (memories.length === 0) return '';\r\n\r\n return memories.map(m => m.content).join('\\n\\n');\r\n }\r\n}\r\n\r\n/**\r\n * Quick helper to create Mastra memory manager for Cloudflare Workers\r\n *\r\n * @example\r\n * ```ts\r\n * const memoryManager = createMastraMemory({\r\n * storage: 'd1',\r\n * env: env, // Cloudflare env bindings\r\n * });\r\n *\r\n * const agent = await memoryManager.createAgent({\r\n * id: 'assistant',\r\n * name: 'AI Assistant',\r\n * instructions: 'Help users with their questions',\r\n * model: openai('gpt-4o'),\r\n * userId: 'user-123',\r\n * threadId: 'conversation-1',\r\n * });\r\n * ```\r\n */\r\nexport function createMastraMemory(config: MastraMemoryConfig): MastraMemoryManager {\r\n return new MastraMemoryManager(config);\r\n}\r\n","/**\r\n * @fileoverview Specialized tools for AI agents to interact with the QwkSearch API.\r\n * Provides web search, content extraction, and AI response generation.\r\n */\r\n\r\n// @ts-nocheck\r\nimport { z } from \"zod\";\r\nimport * as QwkSearch from 'qwksearch-api-client'; // Update this path to match your QwkSearch module location\r\n\r\n// Configuration for QwkSearch API\r\nconst QWKSEARCH_CONFIG = {\r\n baseURL: typeof process !== \"undefined\" && process?.env.QWKSEARCH_URL || 'https://qwksearch.com/api',\r\n apiKey: typeof process !== \"undefined\" && process?.env.QWKSEARCH_API_KEY || null,\r\n};\r\n\r\n/**\r\n * List of tools available for agent usage, including their schemas and implementation.\r\n */\r\nexport const AGENT_TOOLS = [\r\n\r\n {\r\n name: \"web_search\",\r\n description:\r\n \"Search the web for information on any topic using QwkSearch API. Input: search query string and optional category. Returns relevant search results with titles, descriptions, and URLs from 100+ sources via SearXNG metasearch engine.\",\r\n schema: z.object({\r\n query: z.string(),\r\n category: z.enum([\"general\", \"news\", \"videos\", \"images\", \"science\", \"files\", \"it\"]).optional().default(\"general\"),\r\n recency: z.enum([\"none\", \"day\", \"week\", \"month\", \"year\"]).optional().default(\"none\"),\r\n page: z.number().optional().default(1),\r\n language: z.string().optional().default(\"en-US\"),\r\n public: z.boolean().optional().default(false),\r\n timeout: z.number().optional().default(10),\r\n baseURL: z.string().optional(),\r\n apiKey: z.string().optional()\r\n }),\r\n func: async ({ query, category = \"general\", recency = \"none\", page = 1, language = \"en-US\", public: isPublic = false, timeout = 10, baseURL, apiKey }) => {\r\n try {\r\n // Use provided config or fall back to environment/defaults\r\n const baseUrl = baseURL || QWKSEARCH_CONFIG.baseURL;\r\n const headers = apiKey || QWKSEARCH_CONFIG.apiKey ? { 'x-api-key': apiKey || QWKSEARCH_CONFIG.apiKey } : undefined;\r\n\r\n const result = await QwkSearch.searchWeb({\r\n query: {\r\n q: query,\r\n cat: category,\r\n recency: recency,\r\n page: page,\r\n lang: language,\r\n public: isPublic,\r\n timeout: timeout\r\n },\r\n baseUrl: baseUrl,\r\n ...(headers && { headers })\r\n });\r\n\r\n if (!result.data || !result.data.results || result.data.results.length === 0) {\r\n return `No search results found for \"${query}\". Please try a different search term.`;\r\n }\r\n\r\n let resultText = `Web search results for \"${query}\" (${category} category):\\n\\n`;\r\n\r\n result.data.results.forEach((searchResult, index) => {\r\n resultText += `${index + 1}. ${searchResult.title}\\n`;\r\n resultText += ` URL: ${searchResult.url}\\n`;\r\n if (searchResult.domain) {\r\n resultText += ` Domain: ${searchResult.domain}\\n`;\r\n }\r\n if (searchResult.snippet) {\r\n resultText += ` Description: ${searchResult.snippet}\\n`;\r\n }\r\n if (searchResult.engines && searchResult.engines.length > 0) {\r\n resultText += ` Sources: ${searchResult.engines.join(\", \")}\\n`;\r\n }\r\n resultText += `\\n`;\r\n });\r\n\r\n resultText += `Found ${result.data.results.length} results from multiple search engines. This is the complete search information.`;\r\n\r\n return resultText;\r\n } catch (error) {\r\n return `Unable to perform web search for \"${query}\". Error: ${error.message}`;\r\n }\r\n },\r\n },\r\n {\r\n name: \"extract_page\",\r\n description:\r\n \"Extract and summarize content from a web page using QwkSearch API. Supports articles, PDFs, and YouTube videos. Uses Mozilla Readability and Postlight Mercury algorithms with 100+ custom adapters for major sites. Input: URL of the page to extract. Returns structured content with citation information.\",\r\n schema: z.object({\r\n url: z.string().url(),\r\n images: z.boolean().optional().default(true),\r\n links: z.boolean().optional().default(true),\r\n formatting: z.boolean().optional().default(true),\r\n absoluteURLs: z.boolean().optional().default(true),\r\n timeout: z.number().min(1).max(30).optional().default(10),\r\n baseURL: z.string().optional(),\r\n apiKey: z.string().optional()\r\n }),\r\n func: async ({ url, images = true, links = true, formatting = true, absoluteURLs = true, timeout = 10, baseURL, apiKey }) => {\r\n try {\r\n // Use provided config or fall back to environment/defaults\r\n const baseUrl = baseURL || QWKSEARCH_CONFIG.baseURL;\r\n const headers = apiKey || QWKSEARCH_CONFIG.apiKey ? { 'x-api-key': apiKey || QWKSEARCH_CONFIG.apiKey } : undefined;\r\n\r\n const result = await QwkSearch.extractContent({\r\n query: {\r\n url: url,\r\n images: images,\r\n links: links,\r\n formatting: formatting,\r\n absoluteURLs: absoluteURLs,\r\n timeout: timeout\r\n },\r\n baseUrl: baseUrl,\r\n ...(headers && { headers })\r\n });\r\n\r\n if (!result.data) {\r\n return `No content could be extracted from \"${url}\". Please check the URL and try again.`;\r\n }\r\n\r\n const data = result.data;\r\n\r\n let resultText = `Content extracted from: ${data.url || url}\\n\\n`;\r\n\r\n if (data.title) {\r\n resultText += `Title: ${data.title}\\n\\n`;\r\n }\r\n\r\n if (data.author) {\r\n resultText += `Author: ${data.author}\\n`;\r\n if (data.author_cite) {\r\n resultText += `Author (Citation Format): ${data.author_cite}\\n`;\r\n }\r\n if (data.author_type) {\r\n resultText += `Author Type: ${data.author_type}\\n`;\r\n }\r\n }\r\n\r\n if (data.date) {\r\n resultText += `Publication Date: ${data.date}\\n`;\r\n }\r\n\r\n if (data.source) {\r\n resultText += `Source: ${data.source}\\n`;\r\n }\r\n\r\n if (data.word_count) {\r\n resultText += `Word Count: ${data.word_count}\\n`;\r\n }\r\n\r\n if (data.cite) {\r\n resultText += `\\nCitation (APA Format): ${data.cite}\\n`;\r\n }\r\n\r\n if (data.html) {\r\n resultText += `\\nContent:\\n${data.html}\\n\\n`;\r\n }\r\n\r\n resultText += `This is the complete page extraction information.`;\r\n\r\n return resultText;\r\n } catch (error) {\r\n return `Unable to extract content from \"${url}\". Error: ${error.message}`;\r\n }\r\n },\r\n },\r\n {\r\n name: \"generate_ai_response\",\r\n description:\r\n \"Generate AI language model responses using QwkSearch API with various agent templates. Supports multiple providers (Groq, OpenAI, Anthropic, etc.) and agent types for different tasks like summarization, question answering, and content generation.\",\r\n schema: z.object({\r\n provider: z.enum([\"groq\", \"openai\", \"anthropic\", \"together\", \"xai\", \"google\", \"perplexity\", \"cloudflare\"]),\r\n key: z.string().optional(),\r\n agent: z.enum([\r\n \"question\",\r\n \"summarize-bullets\",\r\n \"summarize\",\r\n \"suggest-followups\",\r\n \"answer-cite-sources\",\r\n \"query-resolution\",\r\n \"knowledge-graph-nodes\",\r\n \"summary-longtext\"\r\n ]).optional().default(\"question\"),\r\n model: z.string().optional().default(\"meta-llama/llama-4-maverick-17b-128e-instruct\"),\r\n temperature: z.number().min(0).max(2).optional().default(0.7),\r\n html: z.boolean().optional().default(true),\r\n query: z.string().optional(),\r\n chat_history: z.string().optional(),\r\n article: z.string().optional(),\r\n baseURL: z.string().optional(),\r\n apiKey: z.string().optional()\r\n }),\r\n func: async ({ provider, key, agent = \"question\", model = \"meta-llama/llama-4-maverick-17b-128e-instruct\", temperature = 0.7, html = true, query, chat_history, article, baseURL, apiKey }) => {\r\n try {\r\n // Use provided config or fall back to environment/defaults\r\n const baseUrl = baseURL || QWKSEARCH_CONFIG.baseURL;\r\n const headers = apiKey || QWKSEARCH_CONFIG.apiKey ? { 'x-api-key': apiKey || QWKSEARCH_CONFIG.apiKey } : undefined;\r\n\r\n const requestBody = {\r\n agent,\r\n provider,\r\n model,\r\n html,\r\n temperature\r\n };\r\n\r\n if (key) {\r\n requestBody.key = key;\r\n }\r\n\r\n if (query) {\r\n requestBody.query = query;\r\n }\r\n\r\n if (chat_history) {\r\n requestBody.chat_history = chat_history;\r\n }\r\n\r\n if (article) {\r\n requestBody.article = article;\r\n }\r\n\r\n const result = await QwkSearch.writeLanguage({\r\n body: requestBody,\r\n baseUrl: baseUrl,\r\n ...(headers && { headers })\r\n });\r\n\r\n if (!result.data) {\r\n return `No response generated. Please check your input parameters and try again.`;\r\n }\r\n\r\n let resultText = `AI Response (${agent} agent, ${provider} provider):\\n\\n`;\r\n\r\n if (result.data.content) {\r\n resultText += result.data.content;\r\n }\r\n\r\n if (result.data.extract) {\r\n resultText += `\\n\\nStructured Extract:\\n${JSON.stringify(result.data.extract, null, 2)}`;\r\n }\r\n\r\n resultText += `\\n\\nThis is the complete AI-generated response.`;\r\n\r\n return resultText;\r\n } catch (error) {\r\n return `Unable to generate AI response. Error: ${error.message}`;\r\n }\r\n },\r\n },\r\n {\r\n name: \"render_page_with_javascript\",\r\n description:\r\n \"Render a web page with JavaScript execution using Cloudflare Browser Rendering. Use this for JavaScript-heavy sites (SPAs, React apps), pages behind bot protection (Cloudflare, reCAPTCHA), or when extract_page fails. Returns fully rendered HTML with JavaScript executed. Slower but more complete than extract_page.\",\r\n schema: z.object({\r\n url: z.string().url(),\r\n blockImages: z.boolean().optional().default(true),\r\n wait: z.number().min(0).max(10000).optional().default(0),\r\n timeout: z.number().min(1000).max(60000).optional().default(30000),\r\n waitUntil: z.enum([\"domcontentloaded\", \"load\", \"networkidle0\", \"networkidle2\"]).optional().default(\"networkidle2\"),\r\n bypassCaptcha: z.boolean().optional().default(true),\r\n sessionId: z.string().optional().default(\"default\"),\r\n format: z.enum([\"html\", \"json\"]).optional().default(\"html\"),\r\n scraperUrl: z.string().optional(),\r\n scraperApiKey: z.string().optional()\r\n }),\r\n func: async ({ url, blockImages = true, wait = 0, timeout = 30000, waitUntil = \"networkidle2\", bypassCaptcha = true, sessionId = \"default\", format = \"html\", scraperUrl, scraperApiKey }) => {\r\n try {\r\n const scraperEndpoint = scraperUrl || (typeof process !== \"undefined\" && process?.env?.SCRAPER_URL) || 'https://scraper.qwksearch.workers.dev';\r\n const apiKey = scraperApiKey || (typeof process !== \"undefined\" && process?.env?.SCRAPER_API_KEY);\r\n\r\n const requestUrl = new URL('/api/render', scraperEndpoint);\r\n\r\n const body = {\r\n url,\r\n blockImages,\r\n wait,\r\n timeout,\r\n waitUntil,\r\n bypassCaptcha,\r\n sessionId,\r\n format\r\n };\r\n\r\n const headers: Record<string, string> = {\r\n 'Content-Type': 'application/json',\r\n };\r\n\r\n if (apiKey) {\r\n headers['Authorization'] = `Bearer ${apiKey}`;\r\n }\r\n\r\n const response = await fetch(requestUrl.toString(), {\r\n method: 'POST',\r\n headers,\r\n body: JSON.stringify(body),\r\n });\r\n\r\n if (!response.ok) {\r\n const errorText = await response.text();\r\n return `Failed to render page: ${errorText}`;\r\n }\r\n\r\n if (format === 'json') {\r\n const data = await response.json();\r\n let resultText = `Page rendered successfully: ${data.url}\\n\\n`;\r\n if (data.title) {\r\n resultText += `Title: ${data.title}\\n`;\r\n }\r\n resultText += `Load Time: ${data.loadTime}ms\\n`;\r\n if (data.challengeBypassed) {\r\n resultText += `Challenge Bypassed: Yes (${data.retryCount} retries)\\n`;\r\n }\r\n resultText += `\\nRendered HTML Content:\\n${data.html}\\n\\n`;\r\n resultText += `This is the complete rendered page content.`;\r\n return resultText;\r\n }\r\n\r\n const html = await response.text();\r\n return `Page rendered successfully.\\n\\nHTML Content:\\n${html}`;\r\n } catch (error) {\r\n return `Unable to render page \"${url}\". Error: ${error.message}`;\r\n }\r\n },\r\n },\r\n];","/**\r\n * @module agent-toolkit/utils/outputParser\r\n * @description Parsers that extract values from XML-tagged sections of LLM\r\n * output (e.g. `<links>...</links>`, `<question>...</question>`).\r\n */\r\n\r\nconst LIST_MARKER_REGEX = /^(\\s*(-|\\*|\\d+\\.\\s|\\d+\\)\\s|•)\\s*)+/;\r\n\r\ninterface LineListOutputParserArgs {\r\n key?: string;\r\n}\r\n\r\nexport class LineListOutputParser {\r\n private key = \"questions\";\r\n\r\n constructor(args?: LineListOutputParserArgs) {\r\n this.key = args?.key ?? this.key;\r\n }\r\n\r\n async parse(text: string): Promise<string[]> {\r\n text = text.trim() || \"\";\r\n\r\n const startKeyIndex = text.indexOf(`<${this.key}>`);\r\n const endKeyIndex = text.indexOf(`</${this.key}>`);\r\n\r\n if (startKeyIndex === -1 || endKeyIndex === -1) {\r\n return [];\r\n }\r\n\r\n const questionsStartIndex = startKeyIndex + `<${this.key}>`.length;\r\n const lines = text\r\n .slice(questionsStartIndex, endKeyIndex)\r\n .trim()\r\n .split(\"\\n\")\r\n .filter((line) => line.trim() !== \"\")\r\n .map((line) => line.replace(LIST_MARKER_REGEX, \"\"));\r\n\r\n return lines;\r\n }\r\n}\r\n\r\ninterface LineOutputParserArgs {\r\n key?: string;\r\n}\r\n\r\nexport class LineOutputParser {\r\n private key = \"questions\";\r\n\r\n constructor(args?: LineOutputParserArgs) {\r\n this.key = args?.key ?? this.key;\r\n }\r\n\r\n async parse(text: string): Promise<string | undefined> {\r\n text = text.trim() || \"\";\r\n\r\n const startKeyIndex = text.indexOf(`<${this.key}>`);\r\n const endKeyIndex = text.indexOf(`</${this.key}>`);\r\n\r\n if (startKeyIndex === -1 || endKeyIndex === -1) {\r\n return undefined;\r\n }\r\n\r\n const questionsStartIndex = startKeyIndex + `<${this.key}>`.length;\r\n const line = text\r\n .slice(questionsStartIndex, endKeyIndex)\r\n .trim()\r\n .replace(LIST_MARKER_REGEX, \"\");\r\n\r\n return line;\r\n }\r\n}\r\n\r\nexport default LineOutputParser;\r\n","/**\n * Chat history formatting utilities\n */\n\ntype ChatHistoryMessage = {\n content?: unknown;\n role?: string;\n type?: string;\n};\n\nexport const formatChatHistoryAsString = (history: ChatHistoryMessage[]) => {\n return history\n .map(\n (message) =>\n `${message.role === 'assistant' || message.type === 'ai' ? 'AI' : 'User'}: ${String(message.content ?? '')}`,\n )\n .join('\\n');\n};\n","/**\r\n * @module research/search/doc-utils\r\n * @description Document utilities: fallback docs, reranking, and formatting.\r\n */\r\nimport type { Document } from \"./document\";\r\n\r\nexport interface R2CredentialsInput {\r\n accountId: string;\r\n accessKeyId: string;\r\n secretAccessKey: string;\r\n bucket: string;\r\n}\r\n\r\nexport function buildFallbackDocs(query: string): Document[] {\r\n const trimmedQuery = (query || \"\").trim();\r\n const searchQuery = trimmedQuery.length > 0 ? trimmedQuery : \"web search\";\r\n const fallbackUrl = `https://www.google.com/search?q=${encodeURIComponent(searchQuery)}`;\r\n\r\n return [\r\n {\r\n pageContent:\r\n \"No indexed sources were returned by the configured search providers for this query.\",\r\n metadata: {\r\n title: `Search results for: ${searchQuery}`,\r\n url: fallbackUrl,\r\n source: \"Google Search\",\r\n },\r\n },\r\n ];\r\n}\r\n\r\nexport function normalizeSourcesOutput(output: unknown, query: string): Document[] {\r\n if (Array.isArray(output) && output.length > 0) {\r\n return output as Document[];\r\n }\r\n return buildFallbackDocs(query);\r\n}\r\n\r\n/**\r\n * Resolves an uploaded fileId to its extracted `{ title, content }` payload.\r\n * Hosts register a loader (e.g. reading the native R2 binding) so the search\r\n * pipeline does not depend on filesystem or credential-based access.\r\n */\r\nexport type UploadFileLoader = (\r\n fileId: string,\r\n) => Promise<{ title: string; content: string } | null>;\r\n\r\nlet uploadFileLoader: UploadFileLoader | null = null;\r\n\r\n/**\r\n * Registers the loader used by {@link rerankDocs} to resolve uploaded\r\n * fileIds to extracted content. The registered loader takes precedence over\r\n * the S3-credentials fallback.\r\n */\r\nexport function registerUploadFileLoader(loader: UploadFileLoader): void {\r\n uploadFileLoader = loader;\r\n}\r\n\r\nasync function downloadExtractedContent(fileId: string, r2Credentials: R2CredentialsInput): Promise<{ title: string; content: string } | null> {\r\n try {\r\n const { manageStorage } = await import(\"manage-storage\");\r\n const config = {\r\n provider: \"cloudflare\" as const,\r\n BUCKET_NAME: r2Credentials.bucket,\r\n ACCESS_KEY_ID: r2Credentials.accessKeyId,\r\n SECRET_ACCESS_KEY: r2Credentials.secretAccessKey,\r\n BUCKET_URL: `https://${r2Credentials.accountId}.r2.cloudflarestorage.com`,\r\n };\r\n const extractedKey = `${fileId}-extracted.json`;\r\n const data = await manageStorage(\"download\", { ...config, key: extractedKey });\r\n const parsed = JSON.parse(data);\r\n return { title: parsed.title || \"Uploaded Document\", content: parsed.content || \"\" };\r\n } catch (error) {\r\n console.error(`[rerankDocs] Failed to download extracted content for fileId ${fileId}:`, error);\r\n return null;\r\n }\r\n}\r\n\r\nexport async function rerankDocs(\r\n query: string,\r\n docs: Document[],\r\n fileIds: string[],\r\n optimizationMode: \"speed\" | \"balanced\" | \"quality\",\r\n r2Credentials?: R2CredentialsInput,\r\n): Promise<Document[]> {\r\n if (docs.length === 0 && fileIds.length === 0) {\r\n return docs;\r\n }\r\n\r\n let filesData: { title: string; content: string }[] = [];\r\n\r\n if (fileIds.length > 0) {\r\n const results = await Promise.all(\r\n fileIds.map(async (fileId) => {\r\n if (uploadFileLoader) {\r\n try {\r\n const loaded = await uploadFileLoader(fileId);\r\n if (loaded) return loaded;\r\n } catch (error) {\r\n console.error(\r\n `[rerankDocs] Registered upload loader failed for fileId ${fileId}:`,\r\n error,\r\n );\r\n }\r\n }\r\n if (r2Credentials) {\r\n return downloadExtractedContent(fileId, r2Credentials);\r\n }\r\n return null;\r\n }),\r\n );\r\n filesData = results.filter((r) => r !== null);\r\n }\r\n\r\n if (query.toLocaleLowerCase() === \"summarize\") {\r\n return docs.slice(0, 15);\r\n }\r\n\r\n const docsWithContent = docs.filter(\r\n (doc) => doc.pageContent && doc.pageContent.length > 0,\r\n );\r\n\r\n const fileDocs: Document[] = filesData.map((fileData) => ({\r\n pageContent: fileData.content,\r\n metadata: { title: fileData.title, url: \"File\" },\r\n }));\r\n\r\n // Combine file docs with web results, cap at 15\r\n return [...fileDocs, ...docsWithContent].slice(0, 15);\r\n}\r\n\r\nexport function processDocs(docs: Document[]): string {\r\n return docs\r\n .map(\r\n (_, index) =>\r\n `${index + 1}. ${docs[index].metadata.title} ${docs[index].pageContent}`,\r\n )\r\n .join(\"\\n\");\r\n}\r\n","/**\r\n * @module research/search/link-summarizer\r\n * @description Groups link documents by URL then summarizes each group with an LLM.\r\n */\r\nimport { generateText, type LanguageModel } from \"ai\";\r\nimport type { Document } from \"./document\";\r\nimport { buildFallbackDocs } from \"./doc-utils\";\r\n\r\nconst SUMMARIZER_PROMPT = `You are a web search summarizer, tasked with summarizing a piece of text retrieved from a web search. Your job is to summarize the\r\ntext into a detailed, 2-4 paragraph explanation that captures the main ideas and provides a comprehensive answer to the query.\r\nIf the query is \"summarize\", you should provide a detailed summary of the text. If the query is a specific question, you should answer it in the summary.\r\n\r\n- **Journalistic tone**: The summary should sound professional and journalistic, not too casual or vague.\r\n- **Thorough and detailed**: Ensure that every key point from the text is captured and that the summary directly answers the query.\r\n- **Not too lengthy, but detailed**: The summary should be informative but not excessively long. Focus on providing detailed information in a concise format.\r\n\r\nThe text will be shared inside the \\`text\\` XML tag, and the query inside the \\`query\\` XML tag.\r\n\r\n<example>\r\n1. \\`<text>\r\nDocker is a set of platform-as-a-service products that use OS-level virtualization to deliver software in packages called containers.\r\nIt was first released in 2013 and is developed by Docker, Inc. Docker is designed to make it easier to create, deploy, and run applications\r\nby using containers.\r\n</text>\r\n\r\n<query>\r\nWhat is Docker and how does it work?\r\n</query>\r\n\r\nResponse:\r\nDocker is a revolutionary platform-as-a-service product developed by Docker, Inc., that uses container technology to make application\r\ndeployment more efficient. It allows developers to package their software with all necessary dependencies, making it easier to run in\r\nany environment. Released in 2013, Docker has transformed the way applications are built, deployed, and managed.\r\n\\`\r\n2. \\`<text>\r\nThe theory of relativity, or simply relativity, encompasses two interrelated theories of Albert Einstein: special relativity and general\r\nrelativity. However, the word \"relativity\" is sometimes used in reference to Galilean invariance. The term \"theory of relativity\" was based\r\non the expression \"relative theory\" used by Max Planck in 1906. The theory of relativity usually encompasses two interrelated theories by\r\nAlbert Einstein: special relativity and general relativity. Special relativity applies to all physical phenomena in the absence of gravity.\r\nGeneral relativity explains the law of gravitation and its relation to other forces of nature. It applies to the cosmological and astrophysical\r\nrealm, including astronomy.\r\n</text>\r\n\r\n<query>\r\nsummarize\r\n</query>\r\n\r\nResponse:\r\nThe theory of relativity, developed by Albert Einstein, encompasses two main theories: special relativity and general relativity. Special\r\nrelativity applies to all physical phenomena in the absence of gravity, while general relativity explains the law of gravitation and its\r\nrelation to other forces of nature. The theory of relativity is based on the concept of \"relative theory,\" as introduced by Max Planck in\r\n1906. It is a fundamental theory in physics that has revolutionized our understanding of the universe.\r\n\\`\r\n</example>\r\n\r\nEverything below is the actual data you will be working with. Good luck!\r\n\r\n<query>\r\n{question}\r\n</query>\r\n\r\n<text>\r\n{content}\r\n</text>\r\n\r\nMake sure to answer the query in the summary.`;\r\n\r\n/**\r\n * Groups fetched link documents by URL (max 10 chunks per URL), then\r\n * summarizes each group with the LLM in parallel.\r\n */\r\nexport async function groupAndSummarizeDocs(\r\n llm: LanguageModel,\r\n linkDocs: Document[],\r\n question: string,\r\n): Promise<Document[]> {\r\n // Group chunks by URL, capping at 10 chunks each\r\n const docGroups: Document[] = [];\r\n\r\n for (const doc of linkDocs) {\r\n const existing = docGroups.find(\r\n (d) => d.metadata.url === doc.metadata.url && d.metadata.totalDocs < 10,\r\n );\r\n\r\n if (!existing) {\r\n docGroups.push({ ...doc, metadata: { ...doc.metadata, totalDocs: 1 } });\r\n } else {\r\n existing.pageContent += `\\n\\n${doc.pageContent}`;\r\n existing.metadata.totalDocs += 1;\r\n }\r\n }\r\n\r\n // Summarize each group in parallel\r\n const docs: Document[] = [];\r\n\r\n await Promise.all(\r\n docGroups.map(async (doc) => {\r\n const prompt = SUMMARIZER_PROMPT.replace(\"{question}\", question).replace(\r\n \"{content}\",\r\n doc.pageContent,\r\n );\r\n const { text } = await generateText({ model: llm, prompt });\r\n\r\n docs.push({\r\n pageContent: text,\r\n metadata: { title: doc.metadata.title, url: doc.metadata.url },\r\n });\r\n }),\r\n );\r\n\r\n return docs.length > 0 ? docs : buildFallbackDocs(question);\r\n}\r\n","/**\r\n * @fileoverview Orchestrator for complex research queries.\r\n * Manages query expansion, web search execution, and result synthesis using\r\n * LLMs through the Vercel AI SDK (generateText/streamText).\r\n */\r\nimport { generateText, streamText, type LanguageModel } from \"ai\";\r\nimport { LineOutputParser, LineListOutputParser } from \"../../utils/outputParser\";\r\nimport type { Document } from \"./document\";\r\n\r\n/** Strip HTML tags and decode entities — works in Cloudflare edge runtime */\r\nfunction htmlToText(html: string): string {\r\n return html\r\n .replace(/<(script|style)[^>]*>[\\s\\S]*?<\\/(script|style)>/gi, ' ')\r\n .replace(/<[^>]+>/g, ' ')\r\n .replace(/ /g, ' ')\r\n .replace(/&/g, '&')\r\n .replace(/</g, '<')\r\n .replace(/>/g, '>')\r\n .replace(/"/g, '\"')\r\n .replace(/'/g, \"'\")\r\n .replace(/&[a-z#][a-z0-9]+;/gi, ' ')\r\n .replace(/\\s+/g, ' ')\r\n .trim();\r\n}\r\nimport { formatChatHistoryAsString } from \"../../utils\";\r\nimport EventEmitter from \"events\";\r\nimport type {\r\n Config,\r\n ChatTurnMessage,\r\n MetaSearchAgentType,\r\n SearchingEvent,\r\n} from \"./meta-search-types\";\r\nimport {\r\n buildFallbackDocs,\r\n rerankDocs,\r\n processDocs,\r\n normalizeSourcesOutput,\r\n type R2CredentialsInput,\r\n} from \"./doc-utils\";\r\nimport { groupAndSummarizeDocs } from \"./link-summarizer\";\r\n\r\nexport type { MetaSearchAgentType, Config } from \"./meta-search-types\";\r\n\r\nconst waitWithTimeout = async <T>(\r\n promise: Promise<T>,\r\n timeoutMs: number,\r\n): Promise<T | undefined> => {\r\n return Promise.race([\r\n promise,\r\n new Promise<undefined>((resolve) => {\r\n setTimeout(() => resolve(undefined), timeoutMs);\r\n }),\r\n ]);\r\n};\r\n\r\n/**\r\n * Substitutes `{key}` placeholders in a prompt template with the provided\r\n * values, leaving unknown placeholders untouched.\r\n */\r\nconst interpolatePrompt = (\r\n template: string,\r\n vars: Record<string, string>,\r\n): string => {\r\n return Object.entries(vars).reduce(\r\n (result, [key, value]) => result.split(`{${key}}`).join(value),\r\n template,\r\n );\r\n};\r\n\r\nclass MetaSearchAgent implements MetaSearchAgentType {\r\n private config: Config;\r\n\r\n constructor(config: Config) {\r\n this.config = config;\r\n }\r\n\r\n /**\r\n * Rephrases the user's query into a standalone search question (and any\r\n * URLs to summarize), runs the web search, and returns the documents to\r\n * use as answer context.\r\n */\r\n private async retrieveSearchDocs(\r\n llm: LanguageModel,\r\n chatHistory: string,\r\n query: string,\r\n category: string = \"general\",\r\n sourceExtractionEnabled = false,\r\n thinkingTimeLimit = 0,\r\n emitter?: EventEmitter,\r\n ): Promise<{ query: string; docs: Document[] }> {\r\n const { text: retrieverOutput } = await generateText({\r\n model: llm,\r\n temperature: 0,\r\n system: this.config.queryGeneratorPrompt,\r\n messages: [\r\n ...this.config.queryGeneratorFewShots.map(([role, content]) => ({\r\n role,\r\n content,\r\n })),\r\n {\r\n role: \"user\",\r\n content: `\r\n <conversation>\r\n ${chatHistory}\r\n </conversation>\r\n\r\n <query>\r\n ${query}\r\n </query>\r\n `,\r\n },\r\n ],\r\n });\r\n\r\n const linksOutputParser = new LineListOutputParser({ key: \"links\" });\r\n const questionOutputParser = new LineOutputParser({ key: \"question\" });\r\n\r\n const links = await linksOutputParser.parse(retrieverOutput);\r\n let question =\r\n (await questionOutputParser.parse(retrieverOutput)) ?? retrieverOutput;\r\n\r\n if (question === \"not_needed\") {\r\n question = \"latest information\";\r\n }\r\n\r\n if (links.length > 0 && this.config.getDocumentsFromLinks) {\r\n if (question.length === 0) question = \"summarize\";\r\n\r\n const linkDocs = await this.config.getDocumentsFromLinks({ links });\r\n const docs = await groupAndSummarizeDocs(llm, linkDocs, question);\r\n\r\n return { query: question, docs };\r\n }\r\n\r\n question = question.replace(/<think>.*?<\\/think>/g, \"\");\r\n if (!question || question.trim().length === 0) {\r\n question = \"latest information\";\r\n }\r\n\r\n // Validate and sanitize the query before sending to search APIs\r\n // If the LLM returned a long response instead of a concise query, extract the first sentence\r\n // or use the original user query as fallback\r\n question = question.trim();\r\n if (question.length > 500 || question.split(/[.!?]\\s+/).length > 5) {\r\n // Query is too long or contains too many sentences - likely the LLM returned a full response\r\n console.warn(`[MetaSearchAgent] Query is too long (${question.length} chars), truncating or using fallback`);\r\n\r\n // Try to extract first sentence as the query\r\n const firstSentence = question.split(/[.!?]\\s+/)[0].trim();\r\n if (firstSentence.length > 0 && firstSentence.length < 200) {\r\n question = firstSentence;\r\n } else {\r\n // Fallback to original user query\r\n question = query.slice(0, 200);\r\n }\r\n }\r\n\r\n // Emit \"searching\" progress event so the client can show live status\r\n const categoryLabel = this.config.activeEngines.length > 0\r\n ? this.config.activeEngines.slice(0, 2).join(\", \")\r\n : \"Web\";\r\n const emitSearching = (status: SearchingEvent[\"status\"], query: string, cat?: string) => {\r\n emitter?.emit(\"data\", JSON.stringify({\r\n type: \"searching\",\r\n data: { query, category: cat ?? categoryLabel, status } satisfies SearchingEvent,\r\n }));\r\n };\r\n\r\n emitSearching(\"running\", question);\r\n\r\n let res: { results: any[]; suggestions: string[] } = { results: [], suggestions: [] };\r\n\r\n // If no search functions provided, return empty results\r\n if (!this.config.searchSearxng && !this.config.searchTavily) {\r\n res = { results: [], suggestions: [] };\r\n } else {\r\n const runSearxng = async () => {\r\n try {\r\n const result = await this.config.searchSearxng!(question, {\r\n language: \"en\",\r\n engines: this.config.activeEngines,\r\n categories: [category],\r\n });\r\n // Ensure result has the expected structure\r\n return result && typeof result === 'object' && 'results' in result\r\n ? result\r\n : { results: [], suggestions: [] };\r\n } catch (error) {\r\n console.error(\"[MetaSearchAgent] SearXNG search failed:\", error);\r\n return { results: [], suggestions: [] };\r\n }\r\n };\r\n\r\n const isTavilyConfigured = this.config.isTavilyConfigured?.() ?? false;\r\n\r\n if (\r\n isTavilyConfigured &&\r\n this.config.activeEngines.length === 0 &&\r\n category === \"general\"\r\n ) {\r\n try {\r\n const tavilyResult = await this.config.searchTavily!(question, { searchDepth: \"basic\", maxResults: 10 });\r\n res = tavilyResult && typeof tavilyResult === 'object' && 'results' in tavilyResult\r\n ? tavilyResult\r\n : { results: [], suggestions: [] };\r\n } catch (error) {\r\n console.error(\"Tavily search failed, falling back to SearXNG:\", error);\r\n res = this.config.searchSearxng ? await runSearxng() : { results: [], suggestions: [] };\r\n }\r\n } else {\r\n if (isTavilyConfigured && this.config.searchTavily) {\r\n try {\r\n res = await Promise.race([\r\n runSearxng(),\r\n new Promise<{ results: any[]; suggestions: string[] }>((_, reject) =>\r\n setTimeout(() => reject(new Error(\"Timeout\")), 10000)\r\n )\r\n ]);\r\n } catch (err: any) {\r\n if (err.message === \"Timeout\") {\r\n console.warn(\"[MetaSearchAgent] SearXNG search did not respond in 10 seconds, falling back to Tavily.\");\r\n try {\r\n const tavilyResult = await this.config.searchTavily(question, { searchDepth: \"basic\", maxResults: 10 });\r\n res = tavilyResult && typeof tavilyResult === 'object' && 'results' in tavilyResult\r\n ? tavilyResult\r\n : { results: [], suggestions: [] };\r\n } catch (tavilyErr) {\r\n console.error(\"[MetaSearchAgent] Tavily fallback also failed, awaiting SearXNG directly:\", tavilyErr);\r\n res = this.config.searchSearxng ? await runSearxng() : { results: [], suggestions: [] };\r\n }\r\n } else {\r\n console.error(\"[MetaSearchAgent] SearXNG search failed, falling back to Tavily:\", err);\r\n try {\r\n const tavilyResult = await this.config.searchTavily(question, { searchDepth: \"basic\", maxResults: 10 });\r\n res = tavilyResult && typeof tavilyResult === 'object' && 'results' in tavilyResult\r\n ? tavilyResult\r\n : { results: [], suggestions: [] };\r\n } catch (tavilyErr) {\r\n console.error(\"[MetaSearchAgent] Tavily fallback also failed:\", tavilyErr);\r\n res = { results: [], suggestions: [] };\r\n }\r\n }\r\n }\r\n } else {\r\n res = this.config.searchSearxng ? await runSearxng() : { results: [], suggestions: [] };\r\n }\r\n }\r\n }\r\n\r\n let documents: Document[] = (res?.results ?? []).map((result) => ({\r\n pageContent:\r\n result.content ||\r\n (this.config.activeEngines.includes(\"youtube\") ? result.title : \"\"),\r\n metadata: {\r\n title: result.title,\r\n url: result.url,\r\n source: result.source,\r\n ...(result.img_src && { img_src: result.img_src }),\r\n },\r\n }));\r\n\r\n if (documents.length === 0) {\r\n documents = buildFallbackDocs(question);\r\n }\r\n\r\n emitSearching(\"done\", question);\r\n\r\n // Determine extraction budget from thinkingTimeLimit (seconds).\r\n // thinkingTimeLimit === 0 means unlimited; use server config.\r\n let scrapeCount: number;\r\n let perSourceTimeout: number;\r\n\r\n if (thinkingTimeLimit > 0) {\r\n // Spread the time budget across 3 sources\r\n scrapeCount = 3;\r\n perSourceTimeout = Math.max(2, Math.floor(thinkingTimeLimit / scrapeCount));\r\n } else if (sourceExtractionEnabled) {\r\n scrapeCount = 3;\r\n // Default to 5 seconds if no config function available\r\n perSourceTimeout = 5;\r\n } else {\r\n scrapeCount = 0;\r\n perSourceTimeout = 0;\r\n }\r\n\r\n if (scrapeCount > 0) {\r\n const docsToScrape = documents.slice(0, scrapeCount);\r\n emitSearching(\"running\", `Extracting top ${docsToScrape.length} sources`, \"extract\");\r\n\r\n const extractionTasks = this.config.scrapeURL ? docsToScrape.map(async (doc, idx) => {\r\n const url = doc.metadata?.url;\r\n if (!url || !this.config.scrapeURL) return;\r\n try {\r\n const result = await waitWithTimeout(\r\n this.config.scrapeURL(url, { timeout: perSourceTimeout }),\r\n perSourceTimeout * 1000 + 1500,\r\n );\r\n if (typeof result === \"string\" && result.length > 100) {\r\n const text = htmlToText(result)\r\n .replace(/(\\r\\n|\\n|\\r)/gm, \" \")\r\n .replace(/\\s+/g, \" \")\r\n .trim()\r\n .slice(0, 5000);\r\n if (text.length > 100) {\r\n documents[idx].pageContent = text;\r\n }\r\n }\r\n } catch {\r\n // Keep original snippet on scraping failure or timeout\r\n }\r\n }) : [];\r\n\r\n await Promise.allSettled(extractionTasks);\r\n emitSearching(\"done\", `Extracting top ${docsToScrape.length} sources`, \"extract\");\r\n }\r\n\r\n return { query: question, docs: documents };\r\n }\r\n\r\n /**\r\n * Runs the full search-and-answer pipeline, emitting \"sources\",\r\n * \"response\", \"searching\", \"end\", and \"error\" events on the emitter.\r\n */\r\n private async runPipeline(\r\n emitter: EventEmitter,\r\n message: string,\r\n history: ChatTurnMessage[],\r\n llm: LanguageModel,\r\n optimizationMode: \"speed\" | \"balanced\" | \"quality\",\r\n fileIds: string[],\r\n systemInstructions: string,\r\n category: string,\r\n sourceExtractionEnabled: boolean,\r\n thinkingTimeLimit: number,\r\n ): Promise<void> {\r\n try {\r\n let docs: Document[] | null = null;\r\n let query = message;\r\n\r\n if (this.config.searchWeb) {\r\n const result = await this.retrieveSearchDocs(\r\n llm,\r\n formatChatHistoryAsString(history),\r\n message,\r\n category,\r\n sourceExtractionEnabled,\r\n thinkingTimeLimit,\r\n emitter,\r\n );\r\n query = result.query;\r\n docs = result.docs;\r\n }\r\n\r\n const r2Credentials: R2CredentialsInput | undefined = process.env.R2_ACCOUNT_ID\r\n ? {\r\n accountId: process.env.R2_ACCOUNT_ID,\r\n accessKeyId: process.env.R2_ACCESS_KEY_ID || \"\",\r\n secretAccessKey: process.env.R2_SECRET_ACCESS_KEY || \"\",\r\n bucket: process.env.R2_UPLOADS_BUCKET || \"qwksearch-uploads\",\r\n }\r\n : undefined;\r\n\r\n const sortedDocs = await rerankDocs(\r\n query,\r\n docs ?? [],\r\n fileIds,\r\n optimizationMode,\r\n r2Credentials,\r\n );\r\n\r\n const sources = normalizeSourcesOutput(sortedDocs, message);\r\n console.log(\"[MetaSearchAgent] emitting sources:\", sources.length);\r\n emitter.emit(\"data\", JSON.stringify({ type: \"sources\", data: sources }));\r\n\r\n const systemPrompt = interpolatePrompt(this.config.responsePrompt, {\r\n systemInstructions,\r\n context: processDocs(sortedDocs),\r\n date: new Date().toISOString(),\r\n });\r\n\r\n const result = streamText({\r\n model: llm,\r\n temperature: 0.7,\r\n system: systemPrompt,\r\n messages: [...history, { role: \"user\", content: message }],\r\n });\r\n\r\n let responseChunkCount = 0;\r\n for await (const chunk of result.textStream) {\r\n responseChunkCount += 1;\r\n emitter.emit(\"data\", JSON.stringify({ type: \"response\", data: chunk }));\r\n }\r\n console.log(\"[MetaSearchAgent] response stream ended, chunks:\", responseChunkCount);\r\n\r\n if (responseChunkCount === 0) {\r\n const fallbackUrls = sources\r\n .map((doc) => doc.metadata?.url)\r\n .filter((url): url is string => typeof url === \"string\")\r\n .slice(0, 5);\r\n\r\n const fallbackMessage = [\r\n \"I couldn't generate a full answer, but I ran a web search and found these source URLs:\",\r\n ...fallbackUrls.map((url) => `- ${url}`),\r\n ].join(\"\\n\");\r\n\r\n emitter.emit(\"data\", JSON.stringify({ type: \"response\", data: fallbackMessage }));\r\n }\r\n\r\n emitter.emit(\"end\");\r\n } catch (err) {\r\n const errMessage = err instanceof Error ? err.message : String(err);\r\n console.error(\"[MetaSearchAgent] caught error from AI SDK stream:\", errMessage, err);\r\n let userMessage = errMessage;\r\n if (errMessage.includes(\"404\") || errMessage.toLowerCase().includes(\"not found\")) {\r\n userMessage =\r\n \"The selected AI model was not found at the provider. Please go to Settings → Model Providers and select a different model.\";\r\n } else if (errMessage.includes(\"410\")) {\r\n userMessage =\r\n \"The selected AI model is no longer available (deprecated by the provider). Please go to Settings → Model Providers and select a different model.\";\r\n } else if (errMessage.includes(\"401\") || errMessage.includes(\"authentication\")) {\r\n userMessage =\r\n \"Authentication failed with the AI provider. Please check your API key in Settings.\";\r\n } else if (errMessage.includes(\"429\") || errMessage.includes(\"rate limit\")) {\r\n userMessage =\r\n \"Rate limit reached for the AI provider. Please wait a moment and try again.\";\r\n }\r\n emitter.emit(\"error\", JSON.stringify({ data: userMessage }));\r\n }\r\n }\r\n\r\n async searchAndAnswer(\r\n message: string,\r\n history: ChatTurnMessage[],\r\n llm: LanguageModel,\r\n optimizationMode: \"speed\" | \"balanced\" | \"quality\",\r\n fileIds: string[],\r\n systemInstructions: string,\r\n category: string = \"general\",\r\n sourceExtractionEnabled = false,\r\n thinkingTimeLimit = 0,\r\n ) {\r\n const emitter = new EventEmitter();\r\n\r\n // Start on the next macrotask so callers can attach their event\r\n // listeners before the first \"sources\"/\"response\" event can fire.\r\n setTimeout(() => {\r\n this.runPipeline(\r\n emitter,\r\n message,\r\n history,\r\n llm,\r\n optimizationMode,\r\n fileIds,\r\n systemInstructions,\r\n category,\r\n sourceExtractionEnabled,\r\n thinkingTimeLimit,\r\n );\r\n }, 0);\r\n\r\n return emitter;\r\n }\r\n}\r\n\r\nexport default MetaSearchAgent;\r\n","/**\r\n * @module research/search/index\r\n * @description Research library module.\r\n *\r\n * Note: To use these search handlers, you need to provide search functions\r\n * (searchSearxng, searchTavily, etc.) from search-web-api package.\r\n */\r\nimport MetaSearchAgent from \"./metaSearchAgent\";\r\nimport {\r\n webSearchRetrieverPrompt,\r\n webSearchResponsePrompt,\r\n webSearchRetrieverFewShots,\r\n writingAssistantPrompt,\r\n} from \"../../prompts\";\r\nimport type { Config } from \"./meta-search-types\";\r\n\r\nconst prompts = {\r\n webSearchRetrieverPrompt,\r\n webSearchResponsePrompt,\r\n webSearchRetrieverFewShots,\r\n writingAssistantPrompt,\r\n};\r\n\r\n/**\r\n * Creates search handler instances with provided search functions.\r\n * Pass in search functions from extract-webpage to enable web search.\r\n */\r\nexport const createSearchHandlers = (searchFunctions?: Partial<Config>) => ({\r\n webSearch: new MetaSearchAgent({\r\n activeEngines: [],\r\n queryGeneratorPrompt: prompts.webSearchRetrieverPrompt,\r\n responsePrompt: prompts.webSearchResponsePrompt,\r\n queryGeneratorFewShots: prompts.webSearchRetrieverFewShots,\r\n rerank: true,\r\n rerankThreshold: 0.3,\r\n searchWeb: true,\r\n ...searchFunctions,\r\n }),\r\n academicSearch: new MetaSearchAgent({\r\n activeEngines: [\"arxiv\", \"google scholar\", \"pubmed\"],\r\n queryGeneratorPrompt: prompts.webSearchRetrieverPrompt,\r\n responsePrompt: prompts.webSearchResponsePrompt,\r\n queryGeneratorFewShots: prompts.webSearchRetrieverFewShots,\r\n rerank: true,\r\n rerankThreshold: 0,\r\n searchWeb: true,\r\n ...searchFunctions,\r\n }),\r\n writingAssistant: new MetaSearchAgent({\r\n activeEngines: [],\r\n queryGeneratorPrompt: \"\",\r\n queryGeneratorFewShots: [],\r\n responsePrompt: prompts.writingAssistantPrompt,\r\n rerank: true,\r\n rerankThreshold: 0,\r\n searchWeb: true,\r\n ...searchFunctions,\r\n }),\r\n wolframAlphaSearch: new MetaSearchAgent({\r\n activeEngines: [\"wolframalpha\"],\r\n queryGeneratorPrompt: prompts.webSearchRetrieverPrompt,\r\n responsePrompt: prompts.webSearchResponsePrompt,\r\n queryGeneratorFewShots: prompts.webSearchRetrieverFewShots,\r\n rerank: false,\r\n rerankThreshold: 0,\r\n searchWeb: true,\r\n ...searchFunctions,\r\n }),\r\n youtubeSearch: new MetaSearchAgent({\r\n activeEngines: [\"youtube\"],\r\n queryGeneratorPrompt: prompts.webSearchRetrieverPrompt,\r\n responsePrompt: prompts.webSearchResponsePrompt,\r\n queryGeneratorFewShots: prompts.webSearchRetrieverFewShots,\r\n rerank: true,\r\n rerankThreshold: 0.3,\r\n searchWeb: true,\r\n ...searchFunctions,\r\n }),\r\n redditSearch: new MetaSearchAgent({\r\n activeEngines: [\"reddit\"],\r\n queryGeneratorPrompt: prompts.webSearchRetrieverPrompt,\r\n responsePrompt: prompts.webSearchResponsePrompt,\r\n queryGeneratorFewShots: prompts.webSearchRetrieverFewShots,\r\n rerank: true,\r\n rerankThreshold: 0.3,\r\n searchWeb: true,\r\n ...searchFunctions,\r\n }),\r\n});\r\n\r\n/**\r\n * Default search handlers without search functions.\r\n * These will not perform actual web searches unless search functions are added to the Config.\r\n * @deprecated Use createSearchHandlers() with search functions instead\r\n */\r\nexport const searchHandlers = createSearchHandlers();\r\n","/**\r\n * @module research/chains/suggestionGeneratorAgent\r\n * @description Generates follow-up question suggestions from a conversation\r\n * using the Vercel AI SDK.\r\n */\r\nimport { generateText, type LanguageModel } from \"ai\";\r\nimport { LineListOutputParser } from \"../../utils/outputParser\";\r\nimport { formatChatHistoryAsString } from \"../../utils\";\r\nimport type { ChatTurnMessage } from \"./meta-search-types\";\r\n\r\nconst createSuggestionGeneratorPrompt = (maxQuestions: number = 4) => `\r\nYou are an AI suggestion generator for an AI powered search engine. You will be given a conversation below. You need to generate ${maxQuestions} suggestions based on the conversation. The suggestion should be relevant to the conversation that can be used by the user to ask the chat model for more information.\r\nYou need to make sure the suggestions are relevant to the conversation and are helpful to the user. Keep a note that the user might use these suggestions to ask a chat model for more information.\r\nMake sure the suggestions are medium in length and are informative and relevant to the conversation.\r\n\r\nProvide these suggestions separated by newlines between the XML tags <suggestions> and </suggestions>. For example:\r\n\r\n<suggestions>\r\nTell me more about SpaceX and their recent projects\r\nWhat is the latest news on SpaceX?\r\nWho is the CEO of SpaceX?\r\n</suggestions>\r\n\r\nConversation:\r\n{chat_history}\r\n`;\r\n\r\ntype SuggestionGeneratorInput = {\r\n chat_history: ChatTurnMessage[];\r\n maxQuestions?: number;\r\n};\r\n\r\nconst outputParser = new LineListOutputParser({\r\n key: \"suggestions\",\r\n});\r\n\r\nconst generateSuggestions = async (\r\n input: SuggestionGeneratorInput,\r\n llm: LanguageModel,\r\n): Promise<string[]> => {\r\n const maxQuestions = input.maxQuestions ?? 4;\r\n const prompt = createSuggestionGeneratorPrompt(maxQuestions).replace(\r\n \"{chat_history}\",\r\n formatChatHistoryAsString(input.chat_history),\r\n );\r\n\r\n const { text } = await generateText({\r\n model: llm,\r\n temperature: 0,\r\n prompt,\r\n });\r\n\r\n return outputParser.parse(text);\r\n};\r\n\r\nexport default generateSuggestions;\r\n","/**\r\n * @module research/search/document\r\n * @description Minimal document shape shared across the search pipeline.\r\n * A document is a chunk of page content plus citation metadata (title, url, source, etc.).\r\n */\r\n\r\nexport interface Document<\r\n Metadata extends Record<string, any> = Record<string, any>,\r\n> {\r\n pageContent: string;\r\n metadata: Metadata;\r\n}\r\n\r\n/**\r\n * Splits text into overlapping chunks on whitespace boundaries.\r\n * Default chunkSize 1000, chunkOverlap 200.\r\n */\r\nexport function splitTextIntoChunks(\r\n text: string,\r\n chunkSize = 1000,\r\n chunkOverlap = 200,\r\n): string[] {\r\n const trimmed = (text || \"\").trim();\r\n if (trimmed.length <= chunkSize) {\r\n return trimmed.length > 0 ? [trimmed] : [];\r\n }\r\n\r\n const chunks: string[] = [];\r\n let start = 0;\r\n\r\n while (start < trimmed.length) {\r\n let end = Math.min(start + chunkSize, trimmed.length);\r\n\r\n // Break on the last whitespace inside the window so words stay intact\r\n if (end < trimmed.length) {\r\n const lastSpace = trimmed.lastIndexOf(\" \", end);\r\n if (lastSpace > start) end = lastSpace;\r\n }\r\n\r\n chunks.push(trimmed.slice(start, end).trim());\r\n\r\n if (end >= trimmed.length) break;\r\n start = Math.max(end - chunkOverlap, start + 1);\r\n }\r\n\r\n return chunks.filter((chunk) => chunk.length > 0);\r\n}\r\n","/**\n * @fileoverview Mastra Agent Factory\n *\n * Creates typed Mastra agents with tool-calling, model selection,\n * and optional memory integration.\n */\n\nimport { Agent } from \"@mastra/core/agent\";\nimport { createTool } from \"@mastra/core/tools\";\nimport { z } from \"zod\";\n\nexport interface MastraAgentConfig {\n id: string;\n name: string;\n instructions: string;\n model: any;\n tools?: Record<string, any>;\n maxSteps?: number;\n memory?: {\n enabled: boolean;\n threadId?: string;\n userId?: string;\n };\n}\n\n/**\n * Create a Mastra agent with full configuration.\n * Supports tool-calling, multi-step reasoning, and memory.\n *\n * @example\n * ```ts\n * import { createMastraAgent } from \"chat-agent-toolkit/mastra\";\n * import { openai } from \"@ai-sdk/openai\";\n *\n * const agent = createMastraAgent({\n * id: \"research-assistant\",\n * name: \"Research Assistant\",\n * instructions: \"Help users research topics thoroughly.\",\n * model: openai(\"gpt-4o\"),\n * tools: { webSearch, extractPage },\n * });\n *\n * const result = await agent.generate(\"What is RAG?\");\n * ```\n */\nexport function createMastraAgent(config: MastraAgentConfig): Agent {\n return new Agent({\n id: config.id,\n name: config.name,\n instructions: config.instructions,\n model: config.model,\n tools: config.tools || {},\n });\n}\n\n/**\n * Create a Mastra agent with inline tool definitions using Zod schemas.\n * Convenience wrapper for quick prototyping.\n *\n * @example\n * ```ts\n * const agent = createToolAgent({\n * id: \"calculator\",\n * name: \"Calculator\",\n * instructions: \"Perform math operations.\",\n * model: openai(\"gpt-4o\"),\n * toolDefs: [{\n * id: \"add\",\n * description: \"Add two numbers\",\n * inputSchema: z.object({ a: z.number(), b: z.number() }),\n * outputSchema: z.object({ result: z.number() }),\n * execute: async ({ context }) => ({ result: context.a + context.b }),\n * }],\n * });\n * ```\n */\nexport function createToolAgent(config: {\n id: string;\n name: string;\n instructions: string;\n model: any;\n toolDefs: Array<{\n id: string;\n description: string;\n inputSchema: z.ZodType;\n outputSchema: z.ZodType;\n execute: (params: { context: any }) => Promise<any>;\n }>;\n}): Agent {\n const tools: Record<string, any> = {};\n\n for (const def of config.toolDefs) {\n tools[def.id] = createTool({\n id: def.id,\n description: def.description,\n inputSchema: def.inputSchema,\n outputSchema: def.outputSchema,\n execute: def.execute,\n });\n }\n\n return new Agent({\n id: config.id,\n name: config.name,\n instructions: config.instructions,\n model: config.model,\n tools,\n });\n}\n","/**\n * @fileoverview Mastra Workflow Builder\n *\n * Graph-based deterministic workflows with typed steps, chaining,\n * branching, and parallel execution support.\n */\n\nimport { createWorkflow, createStep } from \"@mastra/core/workflows\";\nimport { z } from \"zod\";\n\nexport interface WorkflowStepConfig<TInput = any, TOutput = any> {\n id: string;\n inputSchema: z.ZodType<TInput>;\n outputSchema: z.ZodType<TOutput>;\n execute: (params: { inputData: TInput }) => Promise<TOutput>;\n}\n\n/**\n * Create a typed workflow step.\n *\n * @example\n * ```ts\n * const fetchStep = createWorkflowStep({\n * id: \"fetch-sources\",\n * inputSchema: z.object({ query: z.string() }),\n * outputSchema: z.object({ sources: z.array(z.string()) }),\n * execute: async ({ inputData }) => {\n * const sources = await searchWeb(inputData.query);\n * return { sources };\n * },\n * });\n * ```\n */\nexport function createWorkflowStep<TInput, TOutput>(\n config: WorkflowStepConfig<TInput, TOutput>\n) {\n return createStep({\n id: config.id,\n inputSchema: config.inputSchema,\n outputSchema: config.outputSchema,\n execute: config.execute,\n });\n}\n\n/**\n * Create a research workflow: fetch → analyze → summarize.\n * Pre-built pipeline for common research tasks.\n *\n * @example\n * ```ts\n * const workflow = createResearchWorkflow({\n * fetchFn: async (topic) => fetchSources(topic),\n * analyzeFn: async (sources) => analyzeContent(sources),\n * summarizeFn: async (analysis) => generateSummary(analysis),\n * });\n *\n * const run = await workflow.createRunAsync();\n * const result = await run.start({ inputData: { topic: \"quantum computing\" } });\n * ```\n */\nexport function createResearchWorkflow(handlers: {\n fetchFn: (topic: string) => Promise<string[]>;\n analyzeFn: (sources: string[]) => Promise<string>;\n summarizeFn: (analysis: string) => Promise<string>;\n}) {\n const fetchStep = createStep({\n id: \"fetch-sources\",\n inputSchema: z.object({ topic: z.string() }),\n outputSchema: z.object({ sources: z.array(z.string()) }),\n execute: async ({ inputData }) => {\n const sources = await handlers.fetchFn(inputData.topic);\n return { sources };\n },\n });\n\n const analyzeStep = createStep({\n id: \"analyze-content\",\n inputSchema: z.object({ sources: z.array(z.string()) }),\n outputSchema: z.object({ analysis: z.string() }),\n execute: async ({ inputData }) => {\n const analysis = await handlers.analyzeFn(inputData.sources);\n return { analysis };\n },\n });\n\n const summarizeStep = createStep({\n id: \"summarize\",\n inputSchema: z.object({ analysis: z.string() }),\n outputSchema: z.object({ summary: z.string() }),\n execute: async ({ inputData }) => {\n const summary = await handlers.summarizeFn(inputData.analysis);\n return { summary };\n },\n });\n\n return createWorkflow({\n id: \"research-workflow\",\n inputSchema: z.object({ topic: z.string() }),\n outputSchema: z.object({ summary: z.string() }),\n })\n .then(fetchStep)\n .then(analyzeStep)\n .then(summarizeStep)\n .commit();\n}\n\n/**\n * Create a RAG workflow: chunk → embed → retrieve → generate.\n * End-to-end retrieval-augmented generation pipeline.\n *\n * @example\n * ```ts\n * const workflow = createRAGWorkflow({\n * chunkFn: async (doc) => splitIntoChunks(doc),\n * embedFn: async (chunks) => embedChunks(chunks),\n * retrieveFn: async (query) => findRelevant(query),\n * generateFn: async (context, query) => llmGenerate(context, query),\n * });\n * ```\n */\nexport function createRAGWorkflow(handlers: {\n chunkFn: (document: string) => Promise<string[]>;\n embedFn: (chunks: string[]) => Promise<number[][]>;\n retrieveFn: (query: string) => Promise<string[]>;\n generateFn: (context: string[], query: string) => Promise<string>;\n}) {\n const retrieveStep = createStep({\n id: \"retrieve\",\n inputSchema: z.object({ query: z.string() }),\n outputSchema: z.object({ context: z.array(z.string()), query: z.string() }),\n execute: async ({ inputData }) => {\n const context = await handlers.retrieveFn(inputData.query);\n return { context, query: inputData.query };\n },\n });\n\n const generateStep = createStep({\n id: \"generate\",\n inputSchema: z.object({ context: z.array(z.string()), query: z.string() }),\n outputSchema: z.object({ answer: z.string() }),\n execute: async ({ inputData }) => {\n const answer = await handlers.generateFn(inputData.context, inputData.query);\n return { answer };\n },\n });\n\n return createWorkflow({\n id: \"rag-workflow\",\n inputSchema: z.object({ query: z.string() }),\n outputSchema: z.object({ answer: z.string() }),\n })\n .then(retrieveStep)\n .then(generateStep)\n .commit();\n}\n","/**\n * @fileoverview Mastra RAG (Retrieval-Augmented Generation)\n *\n * Document processing, chunking, embedding, and vector-store retrieval.\n * Uses Vercel AI SDK embeddings with pluggable vector backends.\n */\n\nimport { embed, embedMany } from \"ai\";\n\nexport interface RAGConfig {\n embeddingModel: any;\n chunkSize?: number;\n chunkOverlap?: number;\n topK?: number;\n}\n\nexport interface RAGDocument {\n id: string;\n content: string;\n metadata?: Record<string, any>;\n}\n\nexport interface RAGChunk {\n id: string;\n documentId: string;\n text: string;\n embedding: number[];\n metadata?: Record<string, any>;\n}\n\nexport interface RAGRetrievalResult {\n chunk: RAGChunk;\n score: number;\n}\n\n/**\n * In-memory RAG pipeline with document chunking, embedding, and retrieval.\n * For production, swap the vector store with Pinecone, Qdrant, or pgvector.\n *\n * @example\n * ```ts\n * import { MastraRAG } from \"chat-agent-toolkit/mastra\";\n * import { openai } from \"@ai-sdk/openai\";\n *\n * const rag = new MastraRAG({\n * embeddingModel: openai.embedding(\"text-embedding-3-small\"),\n * chunkSize: 512,\n * topK: 5,\n * });\n *\n * await rag.ingest([\n * { id: \"doc1\", content: \"Long document text...\" },\n * ]);\n *\n * const results = await rag.retrieve(\"What is the main topic?\");\n * ```\n */\nexport class MastraRAG {\n private config: Required<RAGConfig>;\n private chunks: RAGChunk[] = [];\n\n constructor(config: RAGConfig) {\n this.config = {\n embeddingModel: config.embeddingModel,\n chunkSize: config.chunkSize ?? 512,\n chunkOverlap: config.chunkOverlap ?? 64,\n topK: config.topK ?? 5,\n };\n }\n\n /**\n * Split text into overlapping chunks of configured size.\n */\n private splitIntoChunks(text: string): string[] {\n const chunks: string[] = [];\n const words = text.split(/\\s+/);\n const { chunkSize, chunkOverlap } = this.config;\n\n let start = 0;\n while (start < words.length) {\n const end = Math.min(start + chunkSize, words.length);\n chunks.push(words.slice(start, end).join(\" \"));\n start += chunkSize - chunkOverlap;\n }\n\n return chunks;\n }\n\n /**\n * Ingest documents: chunk, embed, and store.\n */\n async ingest(documents: RAGDocument[]): Promise<number> {\n let totalChunks = 0;\n\n for (const doc of documents) {\n const textChunks = this.splitIntoChunks(doc.content);\n\n const { embeddings } = await embedMany({\n model: this.config.embeddingModel,\n values: textChunks,\n });\n\n for (let i = 0; i < textChunks.length; i++) {\n this.chunks.push({\n id: `${doc.id}_chunk_${i}`,\n documentId: doc.id,\n text: textChunks[i],\n embedding: embeddings[i],\n metadata: doc.metadata,\n });\n }\n\n totalChunks += textChunks.length;\n }\n\n return totalChunks;\n }\n\n /**\n * Retrieve relevant chunks for a query using cosine similarity.\n */\n async retrieve(query: string): Promise<RAGRetrievalResult[]> {\n if (this.chunks.length === 0) return [];\n\n const { embedding } = await embed({\n model: this.config.embeddingModel,\n value: query,\n });\n\n const scored = this.chunks.map((chunk) => ({\n chunk,\n score: cosineSimilarity(embedding, chunk.embedding),\n }));\n\n scored.sort((a, b) => b.score - a.score);\n\n return scored.slice(0, this.config.topK);\n }\n\n /**\n * Retrieve and format context string for LLM consumption.\n */\n async getContext(query: string): Promise<string> {\n const results = await this.retrieve(query);\n if (results.length === 0) return \"\";\n\n return results\n .map((r, i) => `[${i + 1}] (score: ${r.score.toFixed(3)}) ${r.chunk.text}`)\n .join(\"\\n\\n\");\n }\n\n /**\n * Get total chunk count in the store.\n */\n get size(): number {\n return this.chunks.length;\n }\n\n /**\n * Clear all stored chunks.\n */\n clear(): void {\n this.chunks = [];\n }\n}\n\n/**\n * Factory for creating a configured RAG pipeline.\n */\nexport function createRAGPipeline(config: RAGConfig): MastraRAG {\n return new MastraRAG(config);\n}\n\nfunction cosineSimilarity(a: number[], b: number[]): number {\n let dotProduct = 0;\n let normA = 0;\n let normB = 0;\n\n for (let i = 0; i < a.length; i++) {\n dotProduct += a[i] * b[i];\n normA += a[i] * a[i];\n normB += b[i] * b[i];\n }\n\n const denominator = Math.sqrt(normA) * Math.sqrt(normB);\n if (denominator === 0) return 0;\n return dotProduct / denominator;\n}\n","/**\n * @fileoverview Mastra Evals\n *\n * Scorer-based evaluation functions for LLM outputs.\n * Assess factuality, relevance, coherence, and safety.\n */\n\nexport interface EvalResult {\n score: number;\n reason: string;\n}\n\nexport interface EvalSuiteResult {\n overall: number;\n results: Record<string, EvalResult>;\n}\n\n/**\n * Evaluate factuality/groundedness of a response.\n * Checks whether the output references sources or evidence.\n *\n * @example\n * ```ts\n * const result = await factualityEval(\n * \"The earth orbits the sun (source: NASA).\",\n * \"What does the earth orbit?\"\n * );\n * // { score: 0.9, reason: \"Response includes source attribution.\" }\n * ```\n */\nexport async function factualityEval(\n output: string,\n _query?: string,\n sources?: string[]\n): Promise<EvalResult> {\n const hasSourceRef = /\\b(source|according to|reference|cited?|per)\\b/i.test(output);\n const hasUrl = /https?:\\/\\/\\S+/.test(output);\n const matchesSources = sources?.some((s) =>\n output.toLowerCase().includes(s.toLowerCase().slice(0, 30))\n );\n\n let score = 0.3;\n const reasons: string[] = [];\n\n if (hasSourceRef) {\n score += 0.25;\n reasons.push(\"includes source attribution\");\n }\n if (hasUrl) {\n score += 0.15;\n reasons.push(\"contains URL reference\");\n }\n if (matchesSources) {\n score += 0.3;\n reasons.push(\"matches provided source material\");\n }\n if (!hasSourceRef && !hasUrl && !matchesSources) {\n reasons.push(\"no grounding evidence found\");\n }\n\n return {\n score: Math.min(score, 1.0),\n reason: reasons.join(\"; \") + \".\",\n };\n}\n\n/**\n * Evaluate relevance of a response to the query.\n * Uses keyword overlap and length heuristics.\n */\nexport async function relevanceEval(\n output: string,\n query: string\n): Promise<EvalResult> {\n const queryWords = new Set(\n query.toLowerCase().split(/\\s+/).filter((w) => w.length > 2)\n );\n const outputWords = output.toLowerCase().split(/\\s+/);\n const matchCount = outputWords.filter((w) => queryWords.has(w)).length;\n const overlapRatio = queryWords.size > 0 ? matchCount / queryWords.size : 0;\n\n const isTooShort = output.length < 20;\n const isTooLong = output.length > query.length * 50;\n\n let score = Math.min(overlapRatio * 1.5, 0.7);\n const reasons: string[] = [];\n\n if (overlapRatio > 0.5) {\n score += 0.2;\n reasons.push(\"high keyword overlap with query\");\n } else if (overlapRatio > 0.2) {\n reasons.push(\"moderate keyword overlap\");\n } else {\n reasons.push(\"low keyword overlap with query\");\n }\n\n if (isTooShort) {\n score -= 0.2;\n reasons.push(\"response too short\");\n }\n if (isTooLong) {\n score -= 0.1;\n reasons.push(\"response excessively long\");\n }\n\n if (!isTooShort && !isTooLong && overlapRatio > 0.3) {\n score += 0.1;\n }\n\n return {\n score: Math.max(0, Math.min(score, 1.0)),\n reason: reasons.join(\"; \") + \".\",\n };\n}\n\n/**\n * Evaluate coherence and structure of a response.\n * Checks sentence structure, paragraph flow, and logical markers.\n */\nexport async function coherenceEval(output: string): Promise<EvalResult> {\n const sentences = output.split(/[.!?]+/).filter((s) => s.trim().length > 5);\n const hasLogicalMarkers = /\\b(therefore|because|however|furthermore|additionally|first|second|finally)\\b/i.test(output);\n const hasParagraphs = output.includes(\"\\n\\n\") || output.includes(\"\\n\");\n const avgSentenceLength =\n sentences.length > 0\n ? sentences.reduce((sum, s) => sum + s.trim().split(/\\s+/).length, 0) / sentences.length\n : 0;\n\n let score = 0.4;\n const reasons: string[] = [];\n\n if (sentences.length >= 2) {\n score += 0.15;\n reasons.push(\"multiple sentences\");\n }\n if (hasLogicalMarkers) {\n score += 0.2;\n reasons.push(\"uses logical connectors\");\n }\n if (hasParagraphs && output.length > 200) {\n score += 0.1;\n reasons.push(\"structured with paragraphs\");\n }\n if (avgSentenceLength > 5 && avgSentenceLength < 40) {\n score += 0.15;\n reasons.push(\"appropriate sentence length\");\n }\n if (sentences.length < 2 && output.length > 100) {\n score -= 0.2;\n reasons.push(\"run-on text without sentence breaks\");\n }\n\n return {\n score: Math.max(0, Math.min(score, 1.0)),\n reason: reasons.join(\"; \") + \".\",\n };\n}\n\n/**\n * Evaluate output for toxic or harmful content.\n * Basic keyword/pattern-based detection.\n */\nexport async function toxicityEval(output: string): Promise<EvalResult> {\n const toxicPatterns = [\n /\\b(hate|kill|destroy|attack)\\s+(all|every|them)\\b/i,\n /\\b(stupid|idiot|moron|dumb)\\s+(people|person|users?)\\b/i,\n /\\b(should\\s+die|deserve\\s+to\\s+die)\\b/i,\n ];\n\n const matches = toxicPatterns.filter((p) => p.test(output));\n const score = matches.length === 0 ? 1.0 : Math.max(0, 1.0 - matches.length * 0.4);\n\n return {\n score,\n reason:\n matches.length === 0\n ? \"No toxic patterns detected.\"\n : `Detected ${matches.length} potentially harmful pattern(s).`,\n };\n}\n\n/**\n * Run a full evaluation suite against a response.\n *\n * @example\n * ```ts\n * const results = await runEvalSuite({\n * output: agentResponse,\n * query: \"What is photosynthesis?\",\n * sources: [\"Biology textbook chapter 3\"],\n * });\n *\n * console.log(results.overall); // 0.78\n * console.log(results.results.factuality.score); // 0.85\n * ```\n */\nexport async function runEvalSuite(params: {\n output: string;\n query?: string;\n sources?: string[];\n}): Promise<EvalSuiteResult> {\n const { output, query = \"\", sources } = params;\n\n const [factuality, relevance, coherence, toxicity] = await Promise.all([\n factualityEval(output, query, sources),\n relevanceEval(output, query),\n coherenceEval(output),\n toxicityEval(output),\n ]);\n\n const results: Record<string, EvalResult> = {\n factuality,\n relevance,\n coherence,\n toxicity,\n };\n\n const scores = Object.values(results).map((r) => r.score);\n const overall = scores.reduce((sum, s) => sum + s, 0) / scores.length;\n\n return { overall, results };\n}\n","/**\n * @fileoverview Mastra Telemetry & Instance Factory\n *\n * Creates configured Mastra instances with OpenTelemetry-compatible\n * tracing, logging, and agent registration.\n */\n\nimport { Mastra } from \"@mastra/core\";\n\nexport interface TelemetryConfig {\n serviceName: string;\n enabled?: boolean;\n sampling?: number;\n exporterUrl?: string;\n}\n\nexport interface MastraInstanceConfig {\n agents?: Record<string, any>;\n workflows?: Record<string, any>;\n telemetry?: TelemetryConfig;\n storage?: any;\n}\n\n/**\n * Create a fully configured Mastra instance with agents, workflows,\n * and telemetry. Central entry point for Mastra framework setup.\n *\n * @example\n * ```ts\n * import { createMastraInstance } from \"chat-agent-toolkit/mastra\";\n *\n * const mastra = createMastraInstance({\n * agents: { assistant, researcher },\n * workflows: { researchWorkflow },\n * telemetry: {\n * serviceName: \"my-app\",\n * enabled: true,\n * },\n * });\n *\n * const agent = mastra.getAgent(\"assistant\");\n * const result = await agent.generate(\"Hello\");\n * ```\n */\nexport function createMastraInstance(config: MastraInstanceConfig): Mastra {\n const mastraConfig: any = {};\n\n if (config.agents) {\n mastraConfig.agents = config.agents;\n }\n\n if (config.workflows) {\n mastraConfig.workflows = config.workflows;\n }\n\n if (config.telemetry) {\n mastraConfig.telemetry = {\n serviceName: config.telemetry.serviceName,\n enabled: config.telemetry.enabled ?? true,\n sampling: {\n default: config.telemetry.sampling ?? 1.0,\n },\n };\n }\n\n if (config.storage) {\n mastraConfig.storage = config.storage;\n }\n\n return new Mastra(mastraConfig);\n}\n","/**\n * @fileoverview Mastra Model Routing\n *\n * Multi-provider model routing with strategy selection:\n * cost-optimized, latency-optimized, capability-based, or round-robin.\n */\n\nimport { Agent } from \"@mastra/core/agent\";\n\nexport type RoutingStrategy = \"cost\" | \"latency\" | \"capability\" | \"round-robin\";\n\nexport interface ModelRouterConfig {\n providers: Array<{\n id: string;\n model: any;\n costPer1kTokens?: number;\n avgLatencyMs?: number;\n capabilities?: string[];\n priority?: number;\n }>;\n strategy: RoutingStrategy;\n fallbackProviderId?: string;\n}\n\n/**\n * Model router that selects providers based on configurable strategies.\n *\n * @example\n * ```ts\n * import { createModelRouter } from \"chat-agent-toolkit/mastra\";\n * import { openai } from \"@ai-sdk/openai\";\n * import { anthropic } from \"@ai-sdk/anthropic\";\n *\n * const router = createModelRouter({\n * providers: [\n * { id: \"openai\", model: openai(\"gpt-4o\"), costPer1kTokens: 0.005 },\n * { id: \"anthropic\", model: anthropic(\"claude-sonnet-4-20250514\"), costPer1kTokens: 0.003 },\n * { id: \"fast\", model: openai(\"gpt-4o-mini\"), costPer1kTokens: 0.0002, avgLatencyMs: 200 },\n * ],\n * strategy: \"cost\",\n * });\n *\n * const model = router.select(); // cheapest provider\n * const model2 = router.select({ capabilities: [\"vision\"] }); // capability match\n * ```\n */\nexport function createModelRouter(config: ModelRouterConfig) {\n let roundRobinIndex = 0;\n\n return {\n select(options?: {\n capabilities?: string[];\n maxCost?: number;\n maxLatency?: number;\n }): any {\n let candidates = [...config.providers];\n\n if (options?.capabilities) {\n candidates = candidates.filter((p) =>\n options.capabilities!.every(\n (cap) => p.capabilities?.includes(cap)\n )\n );\n }\n\n if (options?.maxCost) {\n candidates = candidates.filter(\n (p) => (p.costPer1kTokens ?? Infinity) <= options.maxCost!\n );\n }\n\n if (options?.maxLatency) {\n candidates = candidates.filter(\n (p) => (p.avgLatencyMs ?? Infinity) <= options.maxLatency!\n );\n }\n\n if (candidates.length === 0) {\n const fallback = config.providers.find(\n (p) => p.id === config.fallbackProviderId\n );\n if (fallback) return fallback.model;\n return config.providers[0]?.model;\n }\n\n switch (config.strategy) {\n case \"cost\":\n candidates.sort(\n (a, b) => (a.costPer1kTokens ?? 0) - (b.costPer1kTokens ?? 0)\n );\n return candidates[0].model;\n\n case \"latency\":\n candidates.sort(\n (a, b) => (a.avgLatencyMs ?? 0) - (b.avgLatencyMs ?? 0)\n );\n return candidates[0].model;\n\n case \"capability\":\n candidates.sort(\n (a, b) => (b.capabilities?.length ?? 0) - (a.capabilities?.length ?? 0)\n );\n return candidates[0].model;\n\n case \"round-robin\":\n const selected = candidates[roundRobinIndex % candidates.length];\n roundRobinIndex++;\n return selected.model;\n\n default:\n return candidates[0].model;\n }\n },\n\n createAgent(\n agentConfig: { id: string; name: string; instructions: string; tools?: Record<string, any> },\n routingOptions?: { capabilities?: string[]; maxCost?: number; maxLatency?: number }\n ): Agent {\n const model = this.select(routingOptions);\n return new Agent({\n id: agentConfig.id,\n name: agentConfig.name,\n instructions: agentConfig.instructions,\n model,\n tools: agentConfig.tools || {},\n });\n },\n };\n}\n\n/**\n * Load a Mastra-compatible model from a provider string.\n * Convenience wrapper around Vercel AI SDK provider imports.\n *\n * @example\n * ```ts\n * const model = await loadMastraModel(\"openai\", \"gpt-4o\");\n * const model2 = await loadMastraModel(\"anthropic\", \"claude-sonnet-4-20250514\");\n * const model3 = await loadMastraModel(\"groq\", \"llama-3.3-70b-versatile\");\n * ```\n */\nexport async function loadMastraModel(\n provider: \"openai\" | \"anthropic\" | \"groq\" | \"google\",\n modelId: string\n): Promise<any> {\n switch (provider) {\n case \"openai\": {\n const { openai } = await import(\"@ai-sdk/openai\");\n return openai(modelId);\n }\n case \"anthropic\": {\n const { anthropic } = await import(\"@ai-sdk/anthropic\");\n return anthropic(modelId);\n }\n case \"groq\": {\n const { createGroq } = await import(\"@ai-sdk/groq\");\n return createGroq({})(modelId);\n }\n case \"google\": {\n const { google } = await import(\"@ai-sdk/google\");\n return google(modelId);\n }\n default:\n throw new Error(`Unsupported provider: ${provider}`);\n }\n}\n","/**\r\n * @module research/models/providers/index\r\n * @description Research library module.\r\n *\r\n * This file provides metadata about providers without importing them directly,\r\n * to avoid circular dependency issues with the config system.\r\n */\r\nimport { ModelProviderUISection } from \"../types\";\r\n\r\n/**\r\n * Gets provider UI configuration without triggering circular dependencies.\r\n * This function uses static metadata instead of importing provider classes.\r\n */\r\nexport const getModelProvidersUIConfigSection =\r\n (): ModelProviderUISection[] => {\r\n // Import statically defined metadata instead of loading the providers\r\n // This breaks the circular dependency\r\n return [\r\n {\r\n key: \"openai\",\r\n name: \"OpenAI\",\r\n fields: getOpenAIConfigFields(),\r\n },\r\n {\r\n key: \"anthropic\",\r\n name: \"Anthropic\",\r\n fields: getAnthropicConfigFields(),\r\n },\r\n {\r\n key: \"gemini\",\r\n name: \"Google Gemini\",\r\n fields: getGeminiConfigFields(),\r\n },\r\n {\r\n key: \"groq\",\r\n name: \"Groq\",\r\n fields: getGroqConfigFields(),\r\n },\r\n {\r\n key: \"deepseek\",\r\n name: \"DeepSeek\",\r\n fields: getDeepSeekConfigFields(),\r\n },\r\n {\r\n key: \"nvidia\",\r\n name: \"NVIDIA\",\r\n fields: getNvidiaConfigFields(),\r\n },\r\n {\r\n key: \"openrouter\",\r\n name: \"OpenRouter\",\r\n fields: getOpenRouterConfigFields(),\r\n },\r\n {\r\n key: \"perplexity\",\r\n name: \"Perplexity\",\r\n fields: getPerplexityConfigFields(),\r\n },\r\n ];\r\n };\r\n\r\n// Static config field definitions to avoid loading provider classes\r\n// These match the providerConfigFields in each provider file\r\nfunction getOpenAIConfigFields() {\r\n return [\r\n {\r\n type: \"password\" as const,\r\n name: \"API Key\",\r\n key: \"apiKey\",\r\n description: \"Your OpenAI API key\",\r\n required: true,\r\n placeholder: \"OpenAI API Key\",\r\n env: \"OPENAI_API_KEY\",\r\n scope: \"server\" as const,\r\n },\r\n {\r\n type: \"string\" as const,\r\n name: \"Base URL\",\r\n key: \"baseURL\",\r\n description: \"The base URL for the OpenAI API\",\r\n required: true,\r\n placeholder: \"OpenAI Base URL\",\r\n default: \"https://api.openai.com/v1\",\r\n env: \"OPENAI_BASE_URL\",\r\n scope: \"server\" as const,\r\n },\r\n ];\r\n}\r\n\r\n\r\nfunction getAnthropicConfigFields() {\r\n return [\r\n {\r\n type: \"password\" as const,\r\n name: \"API Key\",\r\n key: \"apiKey\",\r\n description: \"Your Anthropic API key\",\r\n required: true,\r\n placeholder: \"Anthropic API Key\",\r\n env: \"ANTHROPIC_API_KEY\",\r\n scope: \"server\" as const,\r\n },\r\n ];\r\n}\r\n\r\nfunction getGeminiConfigFields() {\r\n return [\r\n {\r\n type: \"password\" as const,\r\n name: \"API Key\",\r\n key: \"apiKey\",\r\n description: \"Your Google Gemini API key\",\r\n required: true,\r\n placeholder: \"Google Gemini API Key\",\r\n env: \"GEMINI_API_KEY\",\r\n scope: \"server\" as const,\r\n },\r\n ];\r\n}\r\n\r\nfunction getGroqConfigFields() {\r\n return [\r\n {\r\n type: \"password\" as const,\r\n name: \"API Key\",\r\n key: \"apiKey\",\r\n description: \"Your Groq API key. Free tier includes fast inference on Llama and Mixtral models - get yours at console.groq.com\",\r\n required: true,\r\n placeholder: \"gsk_...\",\r\n env: \"GROQ_API_KEY\",\r\n scope: \"server\" as const,\r\n },\r\n ];\r\n}\r\n\r\nfunction getDeepSeekConfigFields() {\r\n return [\r\n {\r\n type: \"password\" as const,\r\n name: \"API Key\",\r\n key: \"apiKey\",\r\n description: \"Your DeepSeek API key\",\r\n required: true,\r\n placeholder: \"DeepSeek API Key\",\r\n env: \"DEEPSEEK_API_KEY\",\r\n scope: \"server\" as const,\r\n },\r\n ];\r\n}\r\n\r\nfunction getNvidiaConfigFields() {\r\n return [\r\n {\r\n type: \"password\" as const,\r\n name: \"API Key\",\r\n key: \"apiKey\",\r\n description: \"Your NVIDIA API key. Free tier includes access to Nemotron, Llama, and other models - get yours at build.nvidia.com\",\r\n required: true,\r\n placeholder: \"nvapi-...\",\r\n env: \"NVIDIA_API_KEY\",\r\n scope: \"server\" as const,\r\n },\r\n {\r\n type: \"string\" as const,\r\n name: \"Base URL\",\r\n key: \"baseURL\",\r\n description: \"The base URL for NVIDIA's OpenAI-compatible API\",\r\n required: true,\r\n placeholder: \"https://integrate.api.nvidia.com/v1\",\r\n default: \"https://integrate.api.nvidia.com/v1\",\r\n env: \"NVIDIA_BASE_URL\",\r\n scope: \"server\" as const,\r\n },\r\n ];\r\n}\r\n\r\nfunction getOpenRouterConfigFields() {\r\n return [\r\n {\r\n type: \"password\" as const,\r\n name: \"API Key\",\r\n key: \"apiKey\",\r\n description: \"Your OpenRouter API key. Get one free at openrouter.ai - includes free access to Llama 3.3 70B, Nemotron, and other models.\",\r\n required: true,\r\n placeholder: \"sk-or-v1-...\",\r\n env: \"OPENROUTER_API_KEY\",\r\n scope: \"server\" as const,\r\n },\r\n {\r\n type: \"string\" as const,\r\n name: \"Base URL\",\r\n key: \"baseURL\",\r\n description: \"The base URL for OpenRouter's OpenAI-compatible API\",\r\n required: true,\r\n placeholder: \"https://openrouter.ai/api/v1\",\r\n default: \"https://openrouter.ai/api/v1\",\r\n env: \"OPENROUTER_BASE_URL\",\r\n scope: \"server\" as const,\r\n },\r\n ];\r\n}\r\n\r\nfunction getPerplexityConfigFields() {\r\n return [\r\n {\r\n type: \"password\" as const,\r\n name: \"API Key\",\r\n key: \"apiKey\",\r\n description: \"Your Perplexity API key\",\r\n required: true,\r\n placeholder: \"pplx-...\",\r\n env: \"PERPLEXITY_API_KEY\",\r\n scope: \"server\" as const,\r\n links: [\r\n {\r\n name: \"Get API Key\",\r\n url: \"https://www.perplexity.ai/settings/api\",\r\n },\r\n ],\r\n },\r\n ];\r\n}\r\n","/**\r\n * Runtime env-var accessor.\r\n * Supports both local development (process.env) and Cloudflare Workers\r\n * (cloudflare:workers virtual module) via dynamic import.\r\n */\r\nexport function getEnv(key: string): string | undefined {\r\n // Try Cloudflare Workers context first (production)\r\n try {\r\n // @ts-ignore - cloudflare:workers is a virtual module provided by @cloudflare/vite-plugin\r\n const cfWorkers = require(\"cloudflare:workers\");\r\n return cfWorkers.env?.[key];\r\n } catch {\r\n // Fallback to process.env for local development\r\n return process.env[key];\r\n }\r\n}\r\n","/**\r\n * List of default models for the chat providers and a list of models\r\n * @property {string} provider - The provider name\r\n * @property {string} docs - The documentation URL for the model\r\n * @property {string} api_key - The API key url for the model\r\n * @property {string} default - The default model for the chat provider\r\n * @property {Object[]} models - The list of models available for the chat provider\r\n * @category Generate\r\n */\r\nexport const LANGUAGE_MODELS = [\r\n {\r\n \"provider\": \"NVIDIA\",\r\n \"docs\": \"https://docs.api.nvidia.com/nim/reference/llm-apis\",\r\n \"api_key\": \"https://build.nvidia.com/settings/api-keys\",\r\n \"default\": \"nvidia/llama-3.1-nemotron-70b-instruct\",\r\n \"models\": [\r\n {\r\n \"name\": \"Llama 3.1 Nemotron 70B Instruct\",\r\n \"id\": \"nvidia/llama-3.1-nemotron-70b-instruct\",\r\n \"contextLength\": 131_072,\r\n \"free\": true,\r\n \"type\": \"text\"\r\n },\r\n {\r\n \"name\": \"Nemotron 3 Super 120B\",\r\n \"id\": \"nvidia/nemotron-3-super-120b-a12b\",\r\n \"contextLength\": 1_000_000,\r\n \"free\": true,\r\n \"type\": \"text\"\r\n },\r\n {\r\n \"name\": \"Nemotron-4 340B\",\r\n \"id\": \"nvidia/nemotron-4-340b\",\r\n \"contextLength\": 131_072,\r\n \"free\": false,\r\n \"type\": \"text\"\r\n },\r\n {\r\n \"name\": \"Llama 3.3 70B Instruct\",\r\n \"id\": \"meta/llama-3.3-70b-instruct\",\r\n \"contextLength\": 131_072,\r\n \"free\": true,\r\n \"type\": \"text\"\r\n },\r\n {\r\n \"name\": \"Llama 3.1 405B Instruct\",\r\n \"id\": \"meta/llama-3.1-405b-instruct\",\r\n \"contextLength\": 131_072,\r\n \"free\": false,\r\n \"type\": \"text\"\r\n },\r\n {\r\n \"name\": \"Llama 3.1 8B Instruct\",\r\n \"id\": \"meta/llama-3.1-8b-instruct\",\r\n \"contextLength\": 131_072,\r\n \"free\": true,\r\n \"type\": \"text\"\r\n },\r\n {\r\n \"name\": \"Gemma 4 31B IT\",\r\n \"id\": \"google/gemma-4-31b-it\",\r\n \"contextLength\": 131_072,\r\n \"free\": true,\r\n \"type\": \"text\"\r\n },\r\n {\r\n \"name\": \"Mistral Large 2\",\r\n \"id\": \"mistralai/mistral-large-2\",\r\n \"contextLength\": 131_072,\r\n \"free\": false,\r\n \"type\": \"text\"\r\n }\r\n ]\r\n},\r\n {\r\n provider: \"Cloudflare\",\r\n docs: \"https://developers.cloudflare.com/workers-ai/\",\r\n api_key: \"https://dash.cloudflare.com/profile/api-tokens\",\r\n default: \"llama-4-scout-17b-16e-instruct\",\r\n models: [\r\n {\r\n name: \"Llama 4 Scout 17B 16E Instruct\",\r\n id: \"llama-4-scout-17b-16e-instruct\",\r\n contextLength: 128000,\r\n },\r\n {\r\n name: \"Llama 3.3 70B Instruct FP8 Fast\",\r\n id: \"llama-3.3-70b-instruct-fp8-fast\",\r\n contextLength: 128000,\r\n },\r\n {\r\n name: \"Llama 3.1 8B Instruct Fast\",\r\n id: \"llama-3.1-8b-instruct-fast\",\r\n contextLength: 128000,\r\n },\r\n {\r\n name: \"Gemma 3 12B IT\",\r\n id: \"gemma-3-12b-it\",\r\n contextLength: 128000,\r\n },\r\n {\r\n name: \"Mistral Small 3.1 24B Instruct\",\r\n id: \"mistral-small-3.1-24b-instruct\",\r\n contextLength: 128000,\r\n },\r\n {\r\n name: \"QwQ 32B\",\r\n id: \"qwq-32b\",\r\n contextLength: 32768,\r\n },\r\n {\r\n name: \"Qwen2.5 Coder 32B Instruct\",\r\n id: \"qwen2.5-coder-32b-instruct\",\r\n contextLength: 32768,\r\n },\r\n {\r\n name: \"Llama Guard 3 8B\",\r\n id: \"llama-guard-3-8b\",\r\n contextLength: 8192,\r\n },\r\n {\r\n name: \"DeepSeek R1 Distill Qwen 32B\",\r\n id: \"deepseek-r1-distill-qwen-32b\",\r\n contextLength: 32768,\r\n },\r\n {\r\n name: \"Llama 3.2 1B Instruct\",\r\n id: \"llama-3.2-1b-instruct\",\r\n contextLength: 131072,\r\n },\r\n {\r\n name: \"Llama 3.2 3B Instruct\",\r\n id: \"llama-3.2-3b-instruct\",\r\n contextLength: 131072,\r\n },\r\n {\r\n name: \"Llama 3.2 11B Vision Instruct\",\r\n id: \"llama-3.2-11b-vision-instruct\",\r\n contextLength: 131072,\r\n },\r\n {\r\n name: \"Llama 3.1 8B Instruct AWQ\",\r\n id: \"llama-3.1-8b-instruct-awq\",\r\n contextLength: 128000,\r\n },\r\n {\r\n name: \"Llama 3.1 8B Instruct FP8\",\r\n id: \"llama-3.1-8b-instruct-fp8\",\r\n contextLength: 128000,\r\n },\r\n {\r\n name: \"MeloTTS\",\r\n id: \"melotts\",\r\n contextLength: 1024,\r\n },\r\n {\r\n name: \"Llama 3.1 8B Instruct\",\r\n id: \"llama-3.1-8b-instruct\",\r\n contextLength: 128000,\r\n },\r\n {\r\n name: \"Meta Llama 3 8B Instruct\",\r\n id: \"meta-llama-3-8b-instruct\",\r\n contextLength: 8192,\r\n },\r\n {\r\n name: \"Whisper Large V3 Turbo\",\r\n id: \"whisper-large-v3-turbo\",\r\n contextLength: 448000,\r\n },\r\n {\r\n name: \"Llama 3 8B Instruct AWQ\",\r\n id: \"llama-3-8b-instruct-awq\",\r\n contextLength: 8192,\r\n },\r\n {\r\n name: \"LLaVA 1.5 7B HF\",\r\n id: \"llava-1.5-7b-hf\",\r\n contextLength: 4096,\r\n },\r\n {\r\n name: \"Una Cybertron 7B V2 BF16\",\r\n id: \"una-cybertron-7b-v2-bf16\",\r\n contextLength: 32768,\r\n },\r\n {\r\n name: \"Whisper Tiny EN\",\r\n id: \"whisper-tiny-en\",\r\n contextLength: 448000,\r\n },\r\n {\r\n name: \"Llama 3 8B Instruct\",\r\n id: \"llama-3-8b-instruct\",\r\n contextLength: 8192,\r\n },\r\n {\r\n name: \"Mistral 7B Instruct v0.2\",\r\n id: \"mistral-7b-instruct-v0.2\",\r\n contextLength: 32768,\r\n },\r\n {\r\n name: \"Gemma 7B IT LoRA\",\r\n id: \"gemma-7b-it-lora\",\r\n contextLength: 8192,\r\n },\r\n {\r\n name: \"Gemma 2B IT LoRA\",\r\n id: \"gemma-2b-it-lora\",\r\n contextLength: 8192,\r\n },\r\n {\r\n name: \"Llama 2 7B Chat HF LoRA\",\r\n id: \"llama-2-7b-chat-hf-lora\",\r\n contextLength: 4096,\r\n },\r\n {\r\n name: \"Gemma 7B IT\",\r\n id: \"gemma-7b-it\",\r\n contextLength: 8192,\r\n },\r\n {\r\n name: \"Starling LM 7B Beta\",\r\n id: \"starling-lm-7b-beta\",\r\n contextLength: 8192,\r\n },\r\n {\r\n name: \"Hermes 2 Pro Mistral 7B\",\r\n id: \"hermes-2-pro-mistral-7b\",\r\n contextLength: 32768,\r\n },\r\n {\r\n name: \"Mistral 7B Instruct v0.2 LoRA\",\r\n id: \"mistral-7b-instruct-v0.2-lora\",\r\n contextLength: 32768,\r\n },\r\n {\r\n name: \"Qwen1.5 1.8B Chat\",\r\n id: \"qwen1.5-1.8b-chat\",\r\n contextLength: 32768,\r\n },\r\n {\r\n name: \"UForm Gen2 Qwen 500M\",\r\n id: \"uform-gen2-qwen-500m\",\r\n contextLength: 2048,\r\n },\r\n {\r\n name: \"BART Large CNN\",\r\n id: \"bart-large-cnn\",\r\n contextLength: 1024,\r\n },\r\n {\r\n name: \"Phi-2\",\r\n id: \"phi-2\",\r\n contextLength: 2048,\r\n },\r\n {\r\n name: \"TinyLlama 1.1B Chat v1.0\",\r\n id: \"tinyllama-1.1b-chat-v1.0\",\r\n contextLength: 2048,\r\n },\r\n {\r\n name: \"Qwen1.5 14B Chat AWQ\",\r\n id: \"qwen1.5-14b-chat-awq\",\r\n contextLength: 32768,\r\n },\r\n {\r\n name: \"Qwen1.5 7B Chat AWQ\",\r\n id: \"qwen1.5-7b-chat-awq\",\r\n contextLength: 32768,\r\n },\r\n {\r\n name: \"Qwen1.5 0.5B Chat\",\r\n id: \"qwen1.5-0.5b-chat\",\r\n contextLength: 32768,\r\n },\r\n {\r\n name: \"DiscoLM German 7B v1 AWQ\",\r\n id: \"discolm-german-7b-v1-awq\",\r\n contextLength: 32768,\r\n },\r\n {\r\n name: \"Falcon 7B Instruct\",\r\n id: \"falcon-7b-instruct\",\r\n contextLength: 2048,\r\n },\r\n {\r\n name: \"OpenChat 3.5 0106\",\r\n id: \"openchat-3.5-0106\",\r\n contextLength: 8192,\r\n },\r\n {\r\n name: \"SQLCoder 7B 2\",\r\n id: \"sqlcoder-7b-2\",\r\n contextLength: 16384,\r\n },\r\n {\r\n name: \"DeepSeek Math 7B Instruct\",\r\n id: \"deepseek-math-7b-instruct\",\r\n contextLength: 4096,\r\n },\r\n {\r\n name: \"DETR ResNet-50\",\r\n id: \"detr-resnet-50\",\r\n contextLength: 1024,\r\n },\r\n {\r\n name: \"Stable Diffusion XL Lightning\",\r\n id: \"stable-diffusion-xl-lightning\",\r\n contextLength: 77,\r\n },\r\n {\r\n name: \"DreamShaper 8 LCM\",\r\n id: \"dreamshaper-8-lcm\",\r\n contextLength: 77,\r\n },\r\n {\r\n name: \"Stable Diffusion v1.5 Img2Img\",\r\n id: \"stable-diffusion-v1-5-img2img\",\r\n contextLength: 77,\r\n },\r\n {\r\n name: \"Stable Diffusion v1.5 Inpainting\",\r\n id: \"stable-diffusion-v1-5-inpainting\",\r\n contextLength: 77,\r\n },\r\n {\r\n name: \"DeepSeek Coder 6.7B Instruct AWQ\",\r\n id: \"deepseek-coder-6.7b-instruct-awq\",\r\n contextLength: 16384,\r\n },\r\n {\r\n name: \"DeepSeek Coder 6.7B Base AWQ\",\r\n id: \"deepseek-coder-6.7b-base-awq\",\r\n contextLength: 16384,\r\n },\r\n {\r\n name: \"LlamaGuard 7B AWQ\",\r\n id: \"llamaguard-7b-awq\",\r\n contextLength: 4096,\r\n },\r\n {\r\n name: \"Neural Chat 7B v3.1 AWQ\",\r\n id: \"neural-chat-7b-v3-1-awq\",\r\n contextLength: 8192,\r\n },\r\n {\r\n name: \"OpenHermes 2.5 Mistral 7B AWQ\",\r\n id: \"openhermes-2.5-mistral-7b-awq\",\r\n contextLength: 8192,\r\n },\r\n {\r\n name: \"Llama 2 13B Chat AWQ\",\r\n id: \"llama-2-13b-chat-awq\",\r\n contextLength: 4096,\r\n },\r\n {\r\n name: \"Mistral 7B Instruct v0.1 AWQ\",\r\n id: \"mistral-7b-instruct-v0.1-awq\",\r\n contextLength: 8192,\r\n },\r\n {\r\n name: \"Zephyr 7B Beta AWQ\",\r\n id: \"zephyr-7b-beta-awq\",\r\n contextLength: 8192,\r\n },\r\n {\r\n name: \"Stable Diffusion XL Base 1.0\",\r\n id: \"stable-diffusion-xl-base-1.0\",\r\n contextLength: 77,\r\n },\r\n {\r\n name: \"BGE Large EN v1.5\",\r\n id: \"bge-large-en-v1.5\",\r\n contextLength: 512,\r\n },\r\n {\r\n name: \"BGE Small EN v1.5\",\r\n id: \"bge-small-en-v1.5\",\r\n contextLength: 512,\r\n },\r\n {\r\n name: \"Llama 2 7B Chat FP16\",\r\n id: \"llama-2-7b-chat-fp16\",\r\n contextLength: 4096,\r\n },\r\n {\r\n name: \"Mistral 7B Instruct v0.1\",\r\n id: \"mistral-7b-instruct-v0.1\",\r\n contextLength: 8192,\r\n },\r\n {\r\n name: \"BGE Base EN v1.5\",\r\n id: \"bge-base-en-v1.5\",\r\n contextLength: 512,\r\n },\r\n {\r\n name: \"DistilBERT SST-2 Int8\",\r\n id: \"distilbert-sst-2-int8\",\r\n contextLength: 512,\r\n },\r\n {\r\n name: \"Llama 2 7B Chat Int8\",\r\n id: \"llama-2-7b-chat-int8\",\r\n contextLength: 4096,\r\n },\r\n {\r\n name: \"M2M100 1.2B\",\r\n id: \"m2m100-1.2b\",\r\n contextLength: 1024,\r\n },\r\n {\r\n name: \"ResNet-50\",\r\n id: \"resnet-50\",\r\n contextLength: 224,\r\n },\r\n {\r\n name: \"Whisper\",\r\n id: \"whisper\",\r\n contextLength: 448000,\r\n },\r\n {\r\n name: \"Llama 3.1 70B Instruct\",\r\n id: \"llama-3.1-70b-instruct\",\r\n contextLength: 128000,\r\n },\r\n ],\r\n },\r\n {\r\n provider: \"Perplexity\",\r\n docs: \"https://docs.perplexity.ai/models/model-cards\",\r\n api_key: \"https://www.perplexity.ai/account/api/keys\",\r\n default: \"sonar\",\r\n models: [\r\n {\r\n name: \"Sonar Pro\",\r\n id: \"sonar-pro\",\r\n contextLength: 200000,\r\n },\r\n {\r\n name: \"Sonar\",\r\n id: \"sonar\",\r\n contextLength: 128000,\r\n },\r\n {\r\n name: \"Sonar Reasoning Pro\",\r\n id: \"sonar-reasoning-pro\",\r\n contextLength: 128000,\r\n },\r\n {\r\n name: \"Sonar Reasoning\",\r\n id: \"sonar-reasoning\",\r\n contextLength: 128000,\r\n },\r\n {\r\n name: \"Sonar Deep Research\",\r\n id: \"sonar-deep-research\",\r\n contextLength: 128000,\r\n },\r\n {\r\n name: \"Llama 3.1 Sonar Small 128k Online\",\r\n id: \"llama-3.1-sonar-small-128k-online\",\r\n contextLength: 127072,\r\n },\r\n {\r\n name: \"Llama 3.1 Sonar Large 128k Online\",\r\n id: \"llama-3.1-sonar-large-128k-online\",\r\n contextLength: 127072,\r\n },\r\n {\r\n name: \"Llama 3.1 Sonar Huge 128k Online\",\r\n id: \"llama-3.1-sonar-huge-128k-online\",\r\n contextLength: 127072,\r\n },\r\n ],\r\n },\r\n {\r\n provider: \"Groq\",\r\n docs: \"https://console.groq.com/docs/overview\",\r\n api_key: \"https://console.groq.com/keys\",\r\n default: \"llama-3.3-70b-versatile\",\r\n models: [\r\n {\r\n name: \"Llama 3.3 70B Versatile (Free)\",\r\n id: \"llama-3.3-70b-versatile\",\r\n contextLength: 131072,\r\n free: true,\r\n type: \"text-generation\",\r\n rateLimit: \"300K TPM / 1K RPM = ~432M tokens/day\",\r\n },\r\n {\r\n name: \"Llama 3.1 8B Instant (Free)\",\r\n id: \"llama-3.1-8b-instant\",\r\n contextLength: 8192,\r\n free: true,\r\n type: \"text-generation\",\r\n rateLimit: \"250K TPM / 1K RPM = ~360M tokens/day\",\r\n },\r\n {\r\n name: \"Llama 4 Scout 17B (Free)\",\r\n id: \"meta-llama/llama-4-scout-17b-16e-instruct\",\r\n contextLength: 131072,\r\n free: true,\r\n type: \"text-generation\",\r\n rateLimit: \"300K TPM / 1K RPM = ~432M tokens/day\",\r\n },\r\n {\r\n name: \"Qwen 3 32B (Free)\",\r\n id: \"qwen/qwen3-32b\",\r\n contextLength: 128000,\r\n free: true,\r\n type: \"text-generation\",\r\n rateLimit: \"300K TPM / 1K RPM = ~432M tokens/day\",\r\n },\r\n {\r\n name: \"GPT-OSS 120B (Free)\",\r\n id: \"openai/gpt-oss-120b\",\r\n contextLength: 32768,\r\n free: true,\r\n type: \"text-generation\",\r\n rateLimit: \"250K TPM / 1K RPM = ~360M tokens/day\",\r\n },\r\n {\r\n name: \"GPT-OSS 20B (Free)\",\r\n id: \"openai/gpt-oss-20b\",\r\n contextLength: 32768,\r\n free: true,\r\n type: \"text-generation\",\r\n rateLimit: \"250K TPM / 1K RPM = ~360M tokens/day\",\r\n },\r\n {\r\n name: \"Groq Compound (Free)\",\r\n id: \"groq/compound\",\r\n contextLength: 32768,\r\n free: true,\r\n type: \"text-generation\",\r\n rateLimit: \"200K TPM / 200 RPM = ~288M tokens/day\",\r\n },\r\n {\r\n name: \"Groq Compound Mini (Free)\",\r\n id: \"groq/compound-mini\",\r\n contextLength: 32768,\r\n free: true,\r\n type: \"text-generation\",\r\n rateLimit: \"200K TPM / 200 RPM = ~288M tokens/day\",\r\n },\r\n {\r\n name: \"GPT-OSS Safeguard 20B (Free)\",\r\n id: \"openai/gpt-oss-safeguard-20b\",\r\n contextLength: 32768,\r\n free: true,\r\n type: \"text-generation\",\r\n rateLimit: \"150K TPM / 1K RPM = ~216M tokens/day\",\r\n },\r\n ],\r\n },\r\n {\r\n provider: \"OpenAI\",\r\n docs: \"https://platform.openai.com/docs/overview\",\r\n api_key: \"https://platform.openai.com/api-keys\",\r\n default: \"gpt-4o\",\r\n models: [\r\n {\r\n name: \"GPT-4 Omni\",\r\n id: \"gpt-4o\",\r\n contextLength: 128000,\r\n },\r\n {\r\n name: \"GPT-4 Omni Mini\",\r\n id: \"gpt-4o-mini\",\r\n contextLength: 128000,\r\n },\r\n {\r\n name: \"GPT-4 Turbo\",\r\n id: \"gpt-4-turbo\",\r\n contextLength: 128000,\r\n },\r\n {\r\n name: \"GPT-4\",\r\n id: \"gpt-4\",\r\n contextLength: 8192,\r\n },\r\n {\r\n name: \"GPT-3.5 Turbo\",\r\n id: \"gpt-3.5-turbo\",\r\n contextLength: 16385,\r\n },\r\n ],\r\n },\r\n {\r\n provider: \"Anthropic\",\r\n docs: \"https://docs.anthropic.com/en/docs/welcome\",\r\n api_key: \"https://console.anthropic.com/settings/keys\",\r\n default: \"claude-3-7-sonnet-20250219\",\r\n models: [\r\n {\r\n name: \"Claude 3.7 Sonnet\",\r\n id: \"claude-3-7-sonnet-20250219\",\r\n contextLength: 200000,\r\n },\r\n {\r\n name: \"Claude 3.5 Sonnet\",\r\n id: \"claude-3-5-sonnet-20241022\",\r\n contextLength: 200000,\r\n },\r\n {\r\n name: \"Claude 3 Opus\",\r\n id: \"claude-3-opus-20240229\",\r\n contextLength: 200000,\r\n },\r\n {\r\n name: \"Claude 3 Sonnet\",\r\n id: \"claude-3-sonnet-20240229\",\r\n contextLength: 200000,\r\n },\r\n {\r\n name: \"Claude 3 Haiku\",\r\n id: \"claude-3-haiku-20240307\",\r\n contextLength: 200000,\r\n },\r\n ],\r\n },\r\n {\r\n provider: \"TogetherAI\",\r\n docs: \"https://docs.together.ai/docs/quickstart\",\r\n api_key: \"https://api.together.xyz/settings/api-keys\",\r\n default: \"meta-llama/Meta-Llama-3.1-8B-Instruct-Turbo\",\r\n models: [\r\n {\r\n name: \"Llama 3.1 8B Instruct Turbo\",\r\n id: \"meta-llama/Meta-Llama-3.1-8B-Instruct-Turbo\",\r\n contextLength: 131072,\r\n },\r\n {\r\n name: \"Llama 3.1 70B Instruct Turbo\",\r\n id: \"meta-llama/Meta-Llama-3.1-70B-Instruct-Turbo\",\r\n contextLength: 131072,\r\n },\r\n {\r\n name: \"Llama 3.1 405B Instruct Turbo\",\r\n id: \"meta-llama/Meta-Llama-3.1-405B-Instruct-Turbo\",\r\n contextLength: 130815,\r\n },\r\n {\r\n name: \"Llama 3 8B Instruct Turbo\",\r\n id: \"meta-llama/Meta-Llama-3-8B-Instruct-Turbo\",\r\n contextLength: 8192,\r\n },\r\n {\r\n name: \"Llama 3 70B Instruct Turbo\",\r\n id: \"meta-llama/Meta-Llama-3-70B-Instruct-Turbo\",\r\n contextLength: 8192,\r\n },\r\n {\r\n name: \"Llama 3.2 3B Instruct Turbo\",\r\n id: \"meta-llama/Llama-3.2-3B-Instruct-Turbo\",\r\n contextLength: 131072,\r\n },\r\n {\r\n name: \"Llama 3 8B Instruct Lite\",\r\n id: \"meta-llama/Meta-Llama-3-8B-Instruct-Lite\",\r\n contextLength: 8192,\r\n },\r\n {\r\n name: \"Llama 3 70B Instruct Lite\",\r\n id: \"meta-llama/Meta-Llama-3-70B-Instruct-Lite\",\r\n contextLength: 8192,\r\n },\r\n {\r\n name: \"Llama 3 8B Instruct Reference\",\r\n id: \"meta-llama/Llama-3-8b-chat-hf\",\r\n contextLength: 8192,\r\n },\r\n {\r\n name: \"Llama 3 70B Instruct Reference\",\r\n id: \"meta-llama/Llama-3-70b-chat-hf\",\r\n contextLength: 8192,\r\n },\r\n {\r\n name: \"Llama 3.1 Nemotron 70B\",\r\n id: \"nvidia/Llama-3.1-Nemotron-70B-Instruct-HF\",\r\n contextLength: 32768,\r\n },\r\n {\r\n name: \"Qwen 2.5 Coder 32B Instruct\",\r\n id: \"Qwen/Qwen2.5-Coder-32B-Instruct\",\r\n contextLength: 32769,\r\n },\r\n {\r\n name: \"WizardLM-2 8x22B\",\r\n id: \"microsoft/WizardLM-2-8x22B\",\r\n contextLength: 65536,\r\n },\r\n {\r\n name: \"Gemma 2 27B\",\r\n id: \"google/gemma-2-27b-it\",\r\n contextLength: 8192,\r\n },\r\n {\r\n name: \"Gemma 2 9B\",\r\n id: \"google/gemma-2-9b-it\",\r\n contextLength: 8192,\r\n },\r\n {\r\n name: \"DBRX Instruct\",\r\n id: \"databricks/dbrx-instruct\",\r\n contextLength: 32768,\r\n },\r\n {\r\n name: \"DeepSeek LLM Chat (67B)\",\r\n id: \"deepseek-ai/deepseek-llm-67b-chat\",\r\n contextLength: 4096,\r\n },\r\n {\r\n name: \"Gemma Instruct (2B)\",\r\n id: \"google/gemma-2b-it\",\r\n contextLength: 8192,\r\n },\r\n {\r\n name: \"MythoMax-L2 (13B)\",\r\n id: \"Gryphe/MythoMax-L2-13b\",\r\n contextLength: 4096,\r\n },\r\n {\r\n name: \"LLaMA-2 Chat (13B)\",\r\n id: \"meta-llama/Llama-2-13b-chat-hf\",\r\n contextLength: 4096,\r\n },\r\n {\r\n name: \"Mistral (7B) Instruct\",\r\n id: \"mistralai/Mistral-7B-Instruct-v0.1\",\r\n contextLength: 8192,\r\n },\r\n {\r\n name: \"Mistral (7B) Instruct v0.2\",\r\n id: \"mistralai/Mistral-7B-Instruct-v0.2\",\r\n contextLength: 32768,\r\n },\r\n {\r\n name: \"Mistral (7B) Instruct v0.3\",\r\n id: \"mistralai/Mistral-7B-Instruct-v0.3\",\r\n contextLength: 32768,\r\n },\r\n {\r\n name: \"Mixtral-8x7B Instruct (46.7B)\",\r\n id: \"mistralai/Mixtral-8x7B-Instruct-v0.1\",\r\n contextLength: 32768,\r\n },\r\n {\r\n name: \"Mixtral-8x22B Instruct (141B)\",\r\n id: \"mistralai/Mixtral-8x22B-Instruct-v0.1\",\r\n contextLength: 65536,\r\n },\r\n {\r\n name: \"Nous Hermes 2 - Mixtral 8x7B-DPO (46.7B)\",\r\n id: \"NousResearch/Nous-Hermes-2-Mixtral-8x7B-DPO\",\r\n contextLength: 32768,\r\n },\r\n {\r\n name: \"Qwen 2.5 7B Instruct Turbo\",\r\n id: \"Qwen/Qwen2.5-7B-Instruct-Turbo\",\r\n contextLength: 32768,\r\n },\r\n {\r\n name: \"Qwen 2.5 72B Instruct Turbo\",\r\n id: \"Qwen/Qwen2.5-72B-Instruct-Turbo\",\r\n contextLength: 32768,\r\n },\r\n {\r\n name: \"Qwen 2 Instruct (72B)\",\r\n id: \"Qwen/Qwen2-72B-Instruct\",\r\n contextLength: 32768,\r\n },\r\n {\r\n name: \"StripedHyena Nous (7B)\",\r\n id: \"togethercomputer/StripedHyena-Nous-7B\",\r\n contextLength: 32768,\r\n },\r\n {\r\n name: \"Upstage SOLAR Instruct v1 (11B)\",\r\n id: \"upstage/SOLAR-10.7B-Instruct-v1.0\",\r\n contextLength: 4096,\r\n },\r\n {\r\n name: \"Llama 3.2 11B Vision Instruct Turbo (Free)\",\r\n id: \"meta-llama/Llama-Vision-Free\",\r\n contextLength: 131072,\r\n },\r\n {\r\n name: \"Llama 3.2 11B Vision Instruct Turbo\",\r\n id: \"meta-llama/Llama-3.2-11B-Vision-Instruct-Turbo\",\r\n contextLength: 131072,\r\n },\r\n {\r\n name: \"Llama 3.2 90B Vision Instruct Turbo\",\r\n id: \"meta-llama/Llama-3.2-90B-Vision-Instruct-Turbo\",\r\n contextLength: 131072,\r\n },\r\n ],\r\n },\r\n {\r\n provider: \"XAI\",\r\n docs: \"https://docs.x.ai/docs#models\",\r\n api_key: \"https://console.x.ai/\",\r\n default: \"grok-beta\",\r\n models: [\r\n {\r\n name: \"Grok\",\r\n id: \"grok-beta\",\r\n contextLength: 131072,\r\n },\r\n {\r\n name: \"Grok Vision\",\r\n id: \"grok-vision-beta\",\r\n contextLength: 8192,\r\n },\r\n ],\r\n },\r\n {\r\n provider: \"Google\",\r\n docs: \"https://cloud.google.com/vertex-ai/generative-ai/docs/learn/models\",\r\n api_key:\r\n \"https://cloud.google.com/vertex-ai/generative-ai/docs/start/express-mode/overview#api-keys\",\r\n models: [\r\n {\r\n name: \"Gemini 2.5 Pro Preview\",\r\n id: \"gemini-2.5-pro-preview-05-06\",\r\n contextLength: 1048576,\r\n },\r\n {\r\n name: \"Gemini 2.5 Flash Preview\",\r\n id: \"gemini-2.5-flash-preview-04-17\",\r\n contextLength: 1048576,\r\n },\r\n {\r\n name: \"Gemini 2.0 Flash\",\r\n id: \"gemini-2.0-flash-001\",\r\n contextLength: 1048576,\r\n },\r\n {\r\n name: \"Gemini 2.0 Flash-Lite\",\r\n id: \"gemini-2.0-flash-lite-001\",\r\n contextLength: 1048576,\r\n },\r\n {\r\n name: \"Gemini 2.0 Flash-Live\",\r\n id: \"gemini-2.0-flash-live-preview-04-09\",\r\n contextLength: 32768,\r\n },\r\n {\r\n name: \"Imagen 3\",\r\n id: \"imagen-3.0-generate-002\",\r\n contextLength: 480,\r\n },\r\n {\r\n name: \"Imagen 3 Fast\",\r\n id: \"imagen-3.0-fast-generate-001\",\r\n contextLength: 480,\r\n },\r\n {\r\n name: \"Llama 3.2 90B Vision Instruct Turbo\",\r\n id: \"meta-llama/Llama-3.2-90B-Vision-Instruct-Turbo\",\r\n contextLength: 131072,\r\n },\r\n {\r\n name: \"Llama 3.3 70B\",\r\n id: \"meta-llama/Llama-3.3-70B\",\r\n contextLength: 131072,\r\n },\r\n {\r\n name: \"Gemma 3\",\r\n id: \"gemma-3\",\r\n contextLength: 131072,\r\n },\r\n {\r\n name: \"Gemma 2\",\r\n id: \"gemma-2\",\r\n contextLength: 131072,\r\n },\r\n {\r\n name: \"Gemma\",\r\n id: \"gemma\",\r\n contextLength: 131072,\r\n },\r\n ],\r\n },\r\n {\r\n provider: \"Amazon\",\r\n docs: \"https://docs.aws.amazon.com/bedrock/\",\r\n api_key: \"https://console.aws.amazon.com/iam/home#/security_credentials\",\r\n default: \"anthropic.claude-3-5-sonnet-20241022-v2:0\",\r\n models: [\r\n {\r\n name: \"AI21 Jamba 1.5 Mini\",\r\n id: \"ai21.jamba-1-5-mini-v1:0\",\r\n contextLength: 256000,\r\n provider: \"AI21 Labs\",\r\n },\r\n {\r\n name: \"AI21 Jamba 1.5 Large\",\r\n id: \"ai21.jamba-1-5-large-v1:0\",\r\n contextLength: 256000,\r\n provider: \"AI21 Labs\",\r\n },\r\n {\r\n name: \"Amazon Nova Canvas\",\r\n id: \"amazon.nova-canvas-v1:0\",\r\n contextLength: 77,\r\n provider: \"Amazon\",\r\n type: \"image\",\r\n },\r\n {\r\n name: \"Amazon Nova Lite\",\r\n id: \"amazon.nova-lite-v1:0\",\r\n contextLength: 300000,\r\n provider: \"Amazon\",\r\n },\r\n {\r\n name: \"Amazon Nova Micro\",\r\n id: \"amazon.nova-micro-v1:0\",\r\n contextLength: 128000,\r\n provider: \"Amazon\",\r\n },\r\n {\r\n name: \"Amazon Nova Pro\",\r\n id: \"amazon.nova-pro-v1:0\",\r\n contextLength: 300000,\r\n provider: \"Amazon\",\r\n },\r\n {\r\n name: \"Amazon Nova Reel\",\r\n id: \"amazon.nova-reel-v1:0\",\r\n contextLength: 10000,\r\n provider: \"Amazon\",\r\n type: \"video\",\r\n },\r\n {\r\n name: \"Amazon Nova Reel V2 Lite\",\r\n id: \"amazon.nova-reel-v2-lite-v1:0\",\r\n contextLength: 10000,\r\n provider: \"Amazon\",\r\n type: \"video\",\r\n },\r\n {\r\n name: \"Amazon Nova Reel V2 Standard\",\r\n id: \"amazon.nova-reel-v2-standard-v1:0\",\r\n contextLength: 10000,\r\n provider: \"Amazon\",\r\n type: \"video\",\r\n },\r\n {\r\n name: \"Amazon Rerank\",\r\n id: \"amazon.rerank-v1:0\",\r\n contextLength: 8192,\r\n provider: \"Amazon\",\r\n type: \"reranker\",\r\n },\r\n {\r\n name: \"Amazon Titan Embeddings G1 - Text\",\r\n id: \"amazon.titan-embed-text-v1\",\r\n contextLength: 8192,\r\n provider: \"Amazon\",\r\n type: \"embedding\",\r\n },\r\n {\r\n name: \"Amazon Titan Embeddings G1 - Text v2\",\r\n id: \"amazon.titan-embed-text-v2:0\",\r\n contextLength: 8192,\r\n provider: \"Amazon\",\r\n type: \"embedding\",\r\n },\r\n {\r\n name: \"Amazon Titan Image Generator G1\",\r\n id: \"amazon.titan-image-generator-v1\",\r\n contextLength: 128,\r\n provider: \"Amazon\",\r\n type: \"image\",\r\n },\r\n {\r\n name: \"Amazon Titan Image Generator G2\",\r\n id: \"amazon.titan-image-generator-v2:0\",\r\n contextLength: 128,\r\n provider: \"Amazon\",\r\n type: \"image\",\r\n },\r\n {\r\n name: \"Amazon Titan Multimodal Embeddings G1\",\r\n id: \"amazon.titan-embed-image-v1\",\r\n contextLength: 8192,\r\n provider: \"Amazon\",\r\n type: \"embedding\",\r\n },\r\n {\r\n name: \"Amazon Titan Text G1 - Express\",\r\n id: \"amazon.titan-text-express-v1\",\r\n contextLength: 8192,\r\n provider: \"Amazon\",\r\n },\r\n {\r\n name: \"Amazon Titan Text G1 - Lite\",\r\n id: \"amazon.titan-text-lite-v1\",\r\n contextLength: 4096,\r\n provider: \"Amazon\",\r\n },\r\n {\r\n name: \"Amazon Titan Text G1 - Premier\",\r\n id: \"amazon.titan-text-premier-v1:0\",\r\n contextLength: 32000,\r\n provider: \"Amazon\",\r\n },\r\n {\r\n name: \"Claude 3.5 Sonnet v2\",\r\n id: \"anthropic.claude-3-5-sonnet-20241022-v2:0\",\r\n contextLength: 200000,\r\n provider: \"Anthropic\",\r\n },\r\n {\r\n name: \"Claude 3.5 Sonnet v1\",\r\n id: \"anthropic.claude-3-5-sonnet-20240620-v1:0\",\r\n contextLength: 200000,\r\n provider: \"Anthropic\",\r\n },\r\n {\r\n name: \"Claude 3.5 Haiku\",\r\n id: \"anthropic.claude-3-5-haiku-20241022-v1:0\",\r\n contextLength: 200000,\r\n provider: \"Anthropic\",\r\n },\r\n {\r\n name: \"Claude 3 Opus\",\r\n id: \"anthropic.claude-3-opus-20240229-v1:0\",\r\n contextLength: 200000,\r\n provider: \"Anthropic\",\r\n },\r\n {\r\n name: \"Claude 3 Sonnet\",\r\n id: \"anthropic.claude-3-sonnet-20240229-v1:0\",\r\n contextLength: 200000,\r\n provider: \"Anthropic\",\r\n },\r\n {\r\n name: \"Claude 3 Haiku\",\r\n id: \"anthropic.claude-3-haiku-20240307-v1:0\",\r\n contextLength: 200000,\r\n provider: \"Anthropic\",\r\n },\r\n {\r\n name: \"Claude Instant\",\r\n id: \"anthropic.claude-instant-v1\",\r\n contextLength: 100000,\r\n provider: \"Anthropic\",\r\n },\r\n {\r\n name: \"Cohere Command\",\r\n id: \"cohere.command-text-v14\",\r\n contextLength: 4096,\r\n provider: \"Cohere\",\r\n },\r\n {\r\n name: \"Cohere Command Light\",\r\n id: \"cohere.command-light-text-v14\",\r\n contextLength: 4096,\r\n provider: \"Cohere\",\r\n },\r\n {\r\n name: \"Cohere Command R\",\r\n id: \"cohere.command-r-v1:0\",\r\n contextLength: 128000,\r\n provider: \"Cohere\",\r\n },\r\n {\r\n name: \"Cohere Command R+\",\r\n id: \"cohere.command-r-plus-v1:0\",\r\n contextLength: 128000,\r\n provider: \"Cohere\",\r\n },\r\n {\r\n name: \"Cohere Embed English\",\r\n id: \"cohere.embed-english-v3\",\r\n contextLength: 512,\r\n provider: \"Cohere\",\r\n type: \"embedding\",\r\n },\r\n {\r\n name: \"Cohere Embed Multilingual\",\r\n id: \"cohere.embed-multilingual-v3\",\r\n contextLength: 512,\r\n provider: \"Cohere\",\r\n type: \"embedding\",\r\n },\r\n {\r\n name: \"Cohere Rerank English\",\r\n id: \"cohere.rerank-english-v3:0\",\r\n contextLength: 4096,\r\n provider: \"Cohere\",\r\n type: \"reranker\",\r\n },\r\n {\r\n name: \"Cohere Rerank Multilingual\",\r\n id: \"cohere.rerank-multilingual-v3:0\",\r\n contextLength: 4096,\r\n provider: \"Cohere\",\r\n type: \"reranker\",\r\n },\r\n {\r\n name: \"DeepSeek R1\",\r\n id: \"deepseek.deepseek-r1-distill-qwen-32b-v1:0\",\r\n contextLength: 32768,\r\n provider: \"DeepSeek\",\r\n },\r\n {\r\n name: \"Luma Dream Machine\",\r\n id: \"luma.dream-machine-v1:0\",\r\n contextLength: 512,\r\n provider: \"Luma AI\",\r\n type: \"video\",\r\n },\r\n\r\n {\r\n name: \"Llama 3.2 11B Vision Instruct\",\r\n id: \"meta.llama3-2-11b-instruct-v1:0\",\r\n contextLength: 128000,\r\n provider: \"Meta\",\r\n },\r\n {\r\n name: \"Llama 3.2 90B Vision Instruct\",\r\n id: \"meta.llama3-2-90b-instruct-v1:0\",\r\n contextLength: 128000,\r\n provider: \"Meta\",\r\n },\r\n {\r\n name: \"Mistral 7B Instruct\",\r\n id: \"mistral.mistral-7b-instruct-v0:2\",\r\n contextLength: 32768,\r\n provider: \"Mistral AI\",\r\n },\r\n {\r\n name: \"Mixtral 8x7B Instruct\",\r\n id: \"mistral.mixtral-8x7b-instruct-v0:1\",\r\n contextLength: 32768,\r\n provider: \"Mistral AI\",\r\n },\r\n {\r\n name: \"Mistral Small\",\r\n id: \"mistral.mistral-small-2402-v1:0\",\r\n contextLength: 32768,\r\n provider: \"Mistral AI\",\r\n },\r\n {\r\n name: \"Mistral Large\",\r\n id: \"mistral.mistral-large-2402-v1:0\",\r\n contextLength: 32768,\r\n provider: \"Mistral AI\",\r\n },\r\n {\r\n name: \"Mistral Large 2\",\r\n id: \"mistral.mistral-large-2407-v1:0\",\r\n contextLength: 128000,\r\n provider: \"Mistral AI\",\r\n },\r\n {\r\n name: \"Mistral Large 2411\",\r\n id: \"mistral.mistral-large-2411-v1:0\",\r\n contextLength: 128000,\r\n provider: \"Mistral AI\",\r\n },\r\n {\r\n name: \"Stable Diffusion XL\",\r\n id: \"stability.stable-diffusion-xl-v1\",\r\n contextLength: 77,\r\n provider: \"Stability AI\",\r\n type: \"image\",\r\n },\r\n {\r\n name: \"SDXL 1.0\",\r\n id: \"stability.stable-diffusion-xl-v0\",\r\n contextLength: 77,\r\n provider: \"Stability AI\",\r\n type: \"image\",\r\n },\r\n {\r\n name: \"Stable Image Ultra\",\r\n id: \"stability.stable-image-ultra-v1:0\",\r\n contextLength: 77,\r\n provider: \"Stability AI\",\r\n type: \"image\",\r\n },\r\n {\r\n name: \"Stable Image Core\",\r\n id: \"stability.stable-image-core-v1:0\",\r\n contextLength: 77,\r\n provider: \"Stability AI\",\r\n type: \"image\",\r\n },\r\n ],\r\n },\r\n {\r\n \"provider\": \"OpenRouter\",\r\n \"docs\": \"https://openrouter.ai/docs\",\r\n \"api_key\": \"https://openrouter.ai/settings/keys\",\r\n \"default\": \"openrouter/free\",\r\n \"models\": [\r\n {\r\n \"name\": \"OpenRouter Free (rotating)\",\r\n \"id\": \"openrouter/free\",\r\n \"contextLength\": 200_000,\r\n \"free\": true,\r\n \"type\": \"text\"\r\n },\r\n {\r\n \"name\": \"Nemotron 3 Super 120B\",\r\n \"id\": \"nvidia/nemotron-3-super-120b-a12b:free\",\r\n \"contextLength\": 1_000_000,\r\n \"free\": true,\r\n \"type\": \"text\"\r\n },\r\n {\r\n \"name\": \"Nemotron 3 Ultra 550B\",\r\n \"id\": \"nvidia/nemotron-3-ultra-550b-a55b:free\",\r\n \"contextLength\": 1_000_000,\r\n \"free\": true,\r\n \"type\": \"text\"\r\n },\r\n {\r\n \"name\": \"Nemotron 3 Nano 30B A3B\",\r\n \"id\": \"nvidia/nemotron-3-nano-30b-a3b:free\",\r\n \"contextLength\": 256_000,\r\n \"free\": true,\r\n \"type\": \"text\"\r\n },\r\n {\r\n \"name\": \"Nemotron 3 Nano Omni 30B A3B Reasoning\",\r\n \"id\": \"nvidia/nemotron-3-nano-omni-30b-a3b-reasoning:free\",\r\n \"contextLength\": 256_000,\r\n \"free\": true,\r\n \"type\": \"text\"\r\n },\r\n {\r\n \"name\": \"Nemotron Nano 12B v2 VL\",\r\n \"id\": \"nvidia/nemotron-nano-12b-v2-vl:free\",\r\n \"contextLength\": 128_000,\r\n \"free\": true,\r\n \"type\": \"text\"\r\n },\r\n {\r\n \"name\": \"Nemotron Nano 9B v2\",\r\n \"id\": \"nvidia/nemotron-nano-9b-v2:free\",\r\n \"contextLength\": 128_000,\r\n \"free\": true,\r\n \"type\": \"text\"\r\n },\r\n {\r\n \"name\": \"Nemotron 3.5 Content Safety\",\r\n \"id\": \"nvidia/nemotron-3.5-content-safety:free\",\r\n \"contextLength\": 128_000,\r\n \"free\": true,\r\n \"type\": \"text\"\r\n },\r\n {\r\n \"name\": \"Gemma 4 31B IT\",\r\n \"id\": \"google/gemma-4-31b-it:free\",\r\n \"contextLength\": 262_000,\r\n \"free\": true,\r\n \"type\": \"text\"\r\n },\r\n {\r\n \"name\": \"Gemma 4 26B A4B IT\",\r\n \"id\": \"google/gemma-4-26b-a4b-it:free\",\r\n \"contextLength\": 262_000,\r\n \"free\": true,\r\n \"type\": \"text\"\r\n },\r\n {\r\n \"name\": \"GPT-OSS 120B\",\r\n \"id\": \"openai/gpt-oss-120b:free\",\r\n \"contextLength\": 131_072,\r\n \"free\": true,\r\n \"type\": \"text\"\r\n },\r\n {\r\n \"name\": \"GPT-OSS 20B\",\r\n \"id\": \"openai/gpt-oss-20b:free\",\r\n \"contextLength\": 131_072,\r\n \"free\": true,\r\n \"type\": \"text\"\r\n },\r\n {\r\n \"name\": \"Qwen3 Coder\",\r\n \"id\": \"qwen/qwen3-coder:free\",\r\n \"contextLength\": 1_000_000,\r\n \"free\": true,\r\n \"type\": \"text\"\r\n },\r\n {\r\n \"name\": \"Qwen3 Next 80B A3B Instruct\",\r\n \"id\": \"qwen/qwen3-next-80b-a3b-instruct:free\",\r\n \"contextLength\": 262_000,\r\n \"free\": true,\r\n \"type\": \"text\"\r\n },\r\n {\r\n \"name\": \"Llama 3.3 70B Instruct\",\r\n \"id\": \"meta-llama/llama-3.3-70b-instruct:free\",\r\n \"contextLength\": 131_072,\r\n \"free\": true,\r\n \"type\": \"text\"\r\n },\r\n {\r\n \"name\": \"Llama 3.2 3B Instruct\",\r\n \"id\": \"meta-llama/llama-3.2-3b-instruct:free\",\r\n \"contextLength\": 131_072,\r\n \"free\": true,\r\n \"type\": \"text\"\r\n },\r\n {\r\n \"name\": \"Hermes 3 Llama 3.1 405B\",\r\n \"id\": \"nousresearch/hermes-3-llama-3.1-405b:free\",\r\n \"contextLength\": 131_072,\r\n \"free\": true,\r\n \"type\": \"text\"\r\n },\r\n {\r\n \"name\": \"Laguna XS 2.1\",\r\n \"id\": \"poolside/laguna-xs-2.1:free\",\r\n \"contextLength\": 262_000,\r\n \"free\": true,\r\n \"type\": \"text\"\r\n },\r\n {\r\n \"name\": \"Laguna XS 2\",\r\n \"id\": \"poolside/laguna-xs.2:free\",\r\n \"contextLength\": 262_000,\r\n \"free\": true,\r\n \"type\": \"text\"\r\n },\r\n {\r\n \"name\": \"Laguna M 1\",\r\n \"id\": \"poolside/laguna-m.1:free\",\r\n \"contextLength\": 262_000,\r\n \"free\": true,\r\n \"type\": \"text\"\r\n },\r\n {\r\n \"name\": \"North Mini Code\",\r\n \"id\": \"cohere/north-mini-code:free\",\r\n \"contextLength\": 256_000,\r\n \"free\": true,\r\n \"type\": \"text\"\r\n },\r\n {\r\n \"name\": \"LFM 2.5 1.2B Thinking\",\r\n \"id\": \"liquid/lfm-2.5-1.2b-thinking:free\",\r\n \"contextLength\": 33_000,\r\n \"free\": true,\r\n \"type\": \"text\"\r\n },\r\n {\r\n \"name\": \"LFM 2.5 1.2B Instruct\",\r\n \"id\": \"liquid/lfm-2.5-1.2b-instruct:free\",\r\n \"contextLength\": 33_000,\r\n \"free\": true,\r\n \"type\": \"text\"\r\n },\r\n {\r\n \"name\": \"OpenRouter Free (rotating)\",\r\n \"id\": \"openrouter/free\",\r\n \"contextLength\": 200_000,\r\n \"free\": true,\r\n \"type\": \"text\"\r\n }\r\n ]\r\n}\r\n];\r\n\r\n/** List of available LLM provider services */\r\nexport const LANGUAGE_PROVIDERS = LANGUAGE_MODELS.map((p) =>\r\n p.provider.toLocaleLowerCase(),\r\n);\r\n\r\n/**\r\n * Guest-safe models that are known to work reliably.\r\n * Based on test results: only models with HTTP 200 status.\r\n */\r\nexport const GUEST_SAFE_MODELS = {\r\n openrouter: [\r\n \"openrouter/free\",\r\n \"nvidia/nemotron-3-super-120b-a12b:free\",\r\n \"nvidia/nemotron-3-ultra-550b-a55b:free\",\r\n \"nvidia/nemotron-3-nano-30b-a3b:free\",\r\n \"nvidia/nemotron-3-nano-omni-30b-a3b-reasoning:free\",\r\n \"nvidia/nemotron-nano-9b-v2:free\",\r\n \"nvidia/nemotron-3.5-content-safety:free\",\r\n \"google/gemma-4-31b-it:free\",\r\n \"google/gemma-4-26b-a4b-it:free\",\r\n \"openai/gpt-oss-20b:free\",\r\n \"poolside/laguna-xs-2.1:free\",\r\n \"poolside/laguna-m.1:free\",\r\n \"cohere/north-mini-code:free\",\r\n ],\r\n nvidia: [\r\n \"nvidia/nemotron-3-super-120b-a12b\",\r\n \"meta/llama-3.1-8b-instruct\",\r\n ],\r\n};\r\n\r\n/**\r\n * Filter models to only those in the guest-safe list.\r\n * Returns models with `free: true` property.\r\n */\r\nexport function filterModelsForGuests(models: any[]): any[] {\r\n return models.filter((m) => m.free === true);\r\n}\r\n\r\n/**\r\n * Get guest-safe provider list (only tested working models).\r\n * Uses GUEST_SAFE_MODELS whitelist to ensure reliability.\r\n */\r\nexport function getGuestSafeProviders(): typeof LANGUAGE_MODELS {\r\n return LANGUAGE_MODELS.map((provider) => ({\r\n ...provider,\r\n models: provider.models.filter(\r\n (model: any) =>\r\n GUEST_SAFE_MODELS[provider.provider.toLowerCase() as keyof typeof GUEST_SAFE_MODELS]?.includes(\r\n model.id,\r\n ) || false,\r\n ),\r\n })).filter((p) => p.models.length > 0);\r\n}\r\n","/**\r\n * @fileoverview Configuration Manager\r\n *\r\n * Manages model providers, MCP servers, and search configuration in memory.\r\n * Handles environment variable loading, provider hashing, and config updates.\r\n */\r\nimport type { ConfigModelProvider, MCPServerConfig, Config, UIConfigSections, Model } from \"./config-types\";\r\nimport { getModelProvidersUIConfigSection } from \"./provider-ui-config\";\r\nimport { getEnv } from \"./environment-variables\";\r\nimport { LANGUAGE_MODELS } from \"./language-models-database\";\r\n\r\n// Maps a provider UI key (from provider-ui-config) to the matching\r\n// `provider` name in the LANGUAGE_MODELS database. Names differ in a few\r\n// cases (e.g. the \"gemini\" UI key corresponds to the \"Google\" model list).\r\nconst PROVIDER_KEY_TO_DB_NAME: Record<string, string> = {\r\n openai: \"openai\",\r\n anthropic: \"anthropic\",\r\n gemini: \"google\",\r\n groq: \"groq\",\r\n deepseek: \"deepseek\",\r\n nvidia: \"nvidia\",\r\n openrouter: \"openrouter\",\r\n};\r\n\r\n/**\r\n * Returns the default chat models for a provider from the LANGUAGE_MODELS\r\n * database so that env-based providers expose a usable model list instead of\r\n * an empty one. Returns [] when no matching provider list exists.\r\n */\r\nconst getDefaultChatModels = (providerKey: string): Model[] => {\r\n const dbName = PROVIDER_KEY_TO_DB_NAME[providerKey] ?? providerKey;\r\n const entry = LANGUAGE_MODELS.find(\r\n (p) => p.provider.toLowerCase() === dbName.toLowerCase(),\r\n );\r\n if (!entry?.models) return [];\r\n\r\n return entry.models.map((m: any) => ({\r\n name: m.name,\r\n key: m.id,\r\n }));\r\n};\r\n\r\nconst hashObj = (obj: { [key: string]: any }) => {\r\n const str = JSON.stringify(obj, Object.keys(obj).sort());\r\n let hash = 0;\r\n for (let i = 0; i < str.length; i++) {\r\n hash = (hash << 5) - hash + str.charCodeAt(i);\r\n hash |= 0;\r\n }\r\n return String(Math.abs(hash).toString(36));\r\n};\r\n\r\nclass ConfigManager {\r\n configVersion = 1;\r\n currentConfig: Config = {\r\n version: this.configVersion,\r\n setupComplete: getEnv(\"SETUP_COMPLETE\") === \"true\" || false,\r\n preferences: {},\r\n personalization: {},\r\n modelProviders: [],\r\n mcpServers: [],\r\n search: {\r\n searxngURL: \"\",\r\n tavilyApiKey: \"\",\r\n sourceScrapeCount: 3,\r\n sourceScrapeTimeout: 5,\r\n },\r\n };\r\n uiConfigSections: UIConfigSections = {\r\n preferences: [],\r\n personalization: [],\r\n modelProviders: [],\r\n mcpServers: [],\r\n search: [\r\n {\r\n name: \"SearXNG URL\",\r\n key: \"searxngURL\",\r\n type: \"string\",\r\n required: false,\r\n description: \"The URL of your SearXNG instance\",\r\n placeholder: \"http://localhost:4000\",\r\n default: \"\",\r\n scope: \"server\",\r\n env: \"SEARXNG_API_URL\",\r\n },\r\n {\r\n name: \"Tavily API Key\",\r\n key: \"tavilyApiKey\",\r\n type: \"string\",\r\n required: false,\r\n description: \"Your Tavily API key for enhanced search capabilities.\",\r\n placeholder: \"tvly-...\",\r\n default: \"\",\r\n scope: \"server\",\r\n env: \"TAVILY_API_KEY\",\r\n },\r\n {\r\n name: \"Scrape timeout (seconds)\",\r\n key: \"sourceScrapeTimeout\",\r\n type: \"select\",\r\n options: [\r\n { name: \"3 seconds\", value: \"3\" },\r\n { name: \"5 seconds (default)\", value: \"5\" },\r\n { name: \"10 seconds\", value: \"10\" },\r\n { name: \"15 seconds\", value: \"15\" },\r\n { name: \"20 seconds\", value: \"20\" },\r\n ],\r\n required: false,\r\n description: \"Maximum time to wait when scraping each source URL.\",\r\n default: \"5\",\r\n scope: \"server\",\r\n },\r\n ],\r\n };\r\n\r\n private initialized = false;\r\n\r\n constructor() {\r\n // Don't initialize in constructor to avoid circular dependency\r\n // Initialize lazily when config is first accessed\r\n }\r\n\r\n private ensureInitialized() {\r\n if (this.initialized) return;\r\n this.initialize();\r\n this.initialized = true;\r\n }\r\n\r\n private initialize() {\r\n const providerConfigSections = getModelProvidersUIConfigSection();\r\n this.uiConfigSections.modelProviders = providerConfigSections;\r\n\r\n const newProviders: ConfigModelProvider[] = [];\r\n\r\n providerConfigSections.forEach((provider) => {\r\n\r\n const tempConfig: Record<string, any> = {};\r\n const required: string[] = [];\r\n\r\n provider.fields.forEach((field) => {\r\n tempConfig[field.key] =\r\n getEnv(field.env!) || field.default || \"\";\r\n if (field.required) required.push(field.key);\r\n });\r\n\r\n let configured = true;\r\n required.forEach((r) => {\r\n if (!tempConfig[r]) configured = false;\r\n });\r\n\r\n if (configured) {\r\n const hash = hashObj(tempConfig);\r\n const exists = this.currentConfig.modelProviders.find(\r\n (p) => p.hash === hash,\r\n );\r\n\r\n if (!exists) {\r\n newProviders.push({\r\n id: hash,\r\n name: `${provider.name}`,\r\n type: provider.key,\r\n chatModels: getDefaultChatModels(provider.key),\r\n config: tempConfig,\r\n hash: hash,\r\n isEnvBased: true,\r\n });\r\n }\r\n }\r\n });\r\n\r\n if (newProviders.length > 0) {\r\n this.currentConfig.modelProviders.push(...newProviders);\r\n }\r\n\r\n // Search config from env\r\n this.uiConfigSections.search.forEach((f) => {\r\n if (f.env && !this.currentConfig.search[f.key]) {\r\n this.currentConfig.search[f.key] =\r\n getEnv(f.env) ?? f.default ?? \"\";\r\n }\r\n });\r\n }\r\n\r\n public getConfig(key: string, defaultValue?: any): any {\r\n this.ensureInitialized();\r\n const nested = key.split(\".\");\r\n let obj: any = this.currentConfig;\r\n\r\n for (let i = 0; i < nested.length; i++) {\r\n const part = nested[i];\r\n if (obj == null) return defaultValue;\r\n obj = obj[part];\r\n }\r\n\r\n return obj === undefined ? defaultValue : obj;\r\n }\r\n\r\n public updateConfig(key: string, val: any) {\r\n const parts = key.split(\".\");\r\n if (parts.length === 0) return;\r\n\r\n let target: any = this.currentConfig;\r\n for (let i = 0; i < parts.length - 1; i++) {\r\n const part = parts[i];\r\n if (target[part] === null || typeof target[part] !== \"object\") {\r\n target[part] = {};\r\n }\r\n target = target[part];\r\n }\r\n\r\n const finalKey = parts[parts.length - 1];\r\n target[finalKey] = val;\r\n }\r\n\r\n public addModelProvider(type: string, name: string, config: any) {\r\n this.ensureInitialized();\r\n const hash = hashObj(config);\r\n\r\n const newModelProvider: ConfigModelProvider = {\r\n id: hash,\r\n name,\r\n type,\r\n config,\r\n chatModels: [],\r\n hash: hash,\r\n };\r\n\r\n this.currentConfig.modelProviders.push(newModelProvider);\r\n return newModelProvider;\r\n }\r\n\r\n public removeModelProvider(id: string) {\r\n this.currentConfig.modelProviders =\r\n this.currentConfig.modelProviders.filter((p) => p.id !== id);\r\n }\r\n\r\n public async updateModelProvider(id: string, name: string, config: any) {\r\n const provider = this.currentConfig.modelProviders.find(\r\n (p) => p.id === id,\r\n );\r\n if (!provider) throw new Error(\"Provider not found\");\r\n\r\n provider.name = name;\r\n provider.config = config;\r\n return provider;\r\n }\r\n\r\n public addProviderModel(providerId: string, type: \"chat\", model: any) {\r\n const provider = this.currentConfig.modelProviders.find(\r\n (p) => p.id === providerId,\r\n );\r\n if (!provider) throw new Error(\"Invalid provider id\");\r\n\r\n delete model.type;\r\n provider.chatModels.push(model);\r\n return model;\r\n }\r\n\r\n public removeProviderModel(\r\n providerId: string,\r\n type: \"chat\",\r\n modelKey: string,\r\n ) {\r\n const provider = this.currentConfig.modelProviders.find(\r\n (p) => p.id === providerId,\r\n );\r\n if (!provider) throw new Error(\"Invalid provider id\");\r\n\r\n provider.chatModels = provider.chatModels.filter((m) => m.key !== modelKey);\r\n }\r\n\r\n public isSetupComplete() {\r\n return this.currentConfig.setupComplete;\r\n }\r\n\r\n public markSetupComplete() {\r\n if (!this.currentConfig.setupComplete) {\r\n this.currentConfig.setupComplete = true;\r\n }\r\n }\r\n\r\n public getUIConfigSections(): UIConfigSections {\r\n this.ensureInitialized();\r\n return this.uiConfigSections;\r\n }\r\n\r\n public getCurrentConfig(): Config {\r\n this.ensureInitialized();\r\n return JSON.parse(JSON.stringify(this.currentConfig));\r\n }\r\n}\r\n\r\nconst configManager = new ConfigManager();\r\n\r\nexport default configManager;\r\n","/**\r\n * @fileoverview Registry for managing and loading Vercel AI SDK model providers.\r\n *\r\n * Exposes the full API expected by the app's API routes and chat handler:\r\n * - `activeProviders` (sync getter) / `getActiveProviders()`\r\n * - `isProviderEnvBased(providerId)`\r\n * - `loadChatModel(providerId, modelKey)` — returns an AI SDK `LanguageModel`\r\n * - provider/model CRUD passthroughs to {@link configManager}\r\n */\r\nimport configManager from \"./config-manager\";\r\nimport { LANGUAGE_MODELS, getGuestSafeProviders } from \"./language-models-database\";\r\nimport { getModelProvidersUIConfigSection } from \"./provider-ui-config\";\r\nimport type { ConfigModelProvider, Model } from \"./config-types\";\r\n\r\n// Maps a provider UI key to the matching `provider` name in the\r\n// LANGUAGE_MODELS database (e.g. the \"gemini\" UI key ↔ \"Google\" model list).\r\nconst PROVIDER_KEY_TO_DB_NAME: Record<string, string> = {\r\n openai: \"openai\",\r\n anthropic: \"anthropic\",\r\n gemini: \"google\",\r\n groq: \"groq\",\r\n deepseek: \"deepseek\",\r\n nvidia: \"nvidia\",\r\n openrouter: \"openrouter\",\r\n};\r\n\r\n/** Default chat models for a provider type from the LANGUAGE_MODELS database. */\r\nconst getDefaultChatModels = (providerType: string): Model[] => {\r\n const dbName = PROVIDER_KEY_TO_DB_NAME[providerType] ?? providerType;\r\n const entry = LANGUAGE_MODELS.find(\r\n (p) => p.provider.toLowerCase() === dbName.toLowerCase(),\r\n );\r\n if (!entry?.models) return [];\r\n return entry.models.map((m: any) => ({ name: m.name, key: m.id }));\r\n};\r\n\r\n/** Merges default and user-added models, deduplicated by model key. */\r\nconst mergeChatModels = (provider: ConfigModelProvider): Model[] => {\r\n const merged = new Map<string, Model>();\r\n for (const m of getDefaultChatModels(provider.type)) {\r\n merged.set(m.key, m);\r\n }\r\n for (const m of provider.chatModels || []) {\r\n merged.set(m.key, { key: m.key, name: m.name });\r\n }\r\n return [...merged.values()];\r\n};\r\n\r\nexport default class ModelRegistry {\r\n /**\r\n * Currently configured providers (env-based + user-added).\r\n * Sync getter used by the chat handler for logging and lookups.\r\n */\r\n get activeProviders(): ConfigModelProvider[] {\r\n return configManager.getCurrentConfig().modelProviders;\r\n }\r\n\r\n /**\r\n * Providers with their full chat model lists (defaults merged with\r\n * user-added models), shaped for the settings/providers UI.\r\n */\r\n async getActiveProviders(guestMode: boolean = false) {\r\n const providers = this.activeProviders;\r\n const dbModels = guestMode ? getGuestSafeProviders() : LANGUAGE_MODELS;\r\n\r\n return providers.map((p) => ({\r\n id: p.id,\r\n name: p.name,\r\n type: p.type,\r\n chatModels: guestMode ? this.getGuestChatModels(p, dbModels) : mergeChatModels(p),\r\n })).filter((p) => p.chatModels.length > 0);\r\n }\r\n\r\n /**\r\n * Get guest-safe chat models for a provider (only tested working models).\r\n */\r\n private getGuestChatModels(provider: ConfigModelProvider, guestProviders: typeof LANGUAGE_MODELS): Model[] {\r\n const dbName = PROVIDER_KEY_TO_DB_NAME[provider.type.toLowerCase()];\r\n const dbEntry = guestProviders.find(\r\n (p) => p.provider.toLowerCase() === (dbName?.toLowerCase() || provider.type.toLowerCase()),\r\n );\r\n if (!dbEntry?.models) return [];\r\n return dbEntry.models.map((m: any) => ({ name: m.name, key: m.id }));\r\n }\r\n\r\n /**\r\n * Finds a provider by id, falling back to free providers in order:\r\n * OpenRouter (no daily limits, best for guests), Groq (fastest, daily limits),\r\n * then NVIDIA, then the first configured provider.\r\n * Client-side provider ids are config hashes that go stale whenever\r\n * server env config changes, so a graceful fallback keeps existing\r\n * chat sessions working after a redeploy.\r\n */\r\n private findProvider(providerId?: string): ConfigModelProvider | undefined {\r\n const providers = this.activeProviders;\r\n let provider = providers.find((p) => p.id === providerId);\r\n\r\n if (!provider && providers.length > 0) {\r\n // Prioritize OpenRouter (no daily limits) over Groq (has daily limits)\r\n provider =\r\n providers.find((p) => p.name.toLowerCase().includes(\"openrouter\")) ??\r\n providers.find((p) => p.name.toLowerCase().includes(\"groq\")) ??\r\n providers.find((p) => p.name.toLowerCase().includes(\"nvidia\")) ??\r\n providers[0];\r\n }\r\n\r\n return provider;\r\n }\r\n\r\n /** Whether the resolved provider was configured from environment variables. */\r\n isProviderEnvBased(providerId?: string): boolean {\r\n return this.findProvider(providerId)?.isEnvBased === true;\r\n }\r\n\r\n /**\r\n * Instantiates a Vercel AI SDK language model for the given provider and\r\n * model key. Falls back to the provider's first/default model when no key\r\n * is given. Temperature is a per-call setting in the AI SDK, so callers\r\n * pass it to generateText/streamText rather than the model instance.\r\n */\r\n async loadChatModel(providerId?: string, modelKey?: string): Promise<any> {\r\n const provider = this.findProvider(providerId);\r\n\r\n if (!provider) {\r\n throw new Error(\r\n \"No model providers configured. Please add a provider in settings.\",\r\n );\r\n }\r\n\r\n const type = provider.type.toLowerCase();\r\n const config = provider.config || {};\r\n const apiKey = config.apiKey || \"\";\r\n const availableModels = mergeChatModels(provider);\r\n const modelName =\r\n modelKey || availableModels[0]?.key || \"\";\r\n\r\n console.log(\r\n `[ModelRegistry] loadChatModel: providerId=${providerId} provider=${provider.name} type=${type} requestedModel=${modelKey ?? \"(default)\"} resolvedModel=${modelName}`,\r\n );\r\n\r\n if (!modelName) {\r\n throw new Error(`No chat models available for provider \"${provider.name}\"`);\r\n }\r\n\r\n // Validate that the requested model exists in the provider's model list\r\n if (modelKey && !availableModels.some((m) => m.key === modelKey)) {\r\n console.warn(\r\n `[ModelRegistry] Requested model \"${modelKey}\" not found in provider \"${provider.name}\". Available models: ${availableModels.map((m) => m.key).join(\", \")}`,\r\n );\r\n throw new Error(\r\n `Model \"${modelKey}\" is not available for provider \"${provider.name}\". Please select a different model in Settings.`,\r\n );\r\n }\r\n\r\n // Validate API key is present\r\n if (!apiKey) {\r\n throw new Error(\r\n `No API key configured for provider \"${provider.name}\". Please add your API key in Settings → Model Providers.`,\r\n );\r\n }\r\n\r\n // OpenAI-compatible providers differ only by base URL.\r\n const openAICompatibleBaseURLs: Record<string, string> = {\r\n openai: \"https://api.openai.com/v1\",\r\n togetherai: \"https://api.together.xyz/v1\",\r\n perplexity: \"https://api.perplexity.ai\",\r\n nvidia: \"https://integrate.api.nvidia.com/v1\",\r\n openrouter: \"https://openrouter.ai/api/v1\",\r\n deepseek: \"https://api.deepseek.com\",\r\n xai: \"https://api.x.ai/v1\",\r\n };\r\n\r\n if (type in openAICompatibleBaseURLs) {\r\n const { createOpenAI } = await import(\"@ai-sdk/openai\");\r\n return createOpenAI({\r\n apiKey,\r\n baseURL: config.baseURL || openAICompatibleBaseURLs[type],\r\n }).chat(modelName);\r\n }\r\n\r\n switch (type) {\r\n case \"cloudflare\": {\r\n const { createOpenAI } = await import(\"@ai-sdk/openai\");\r\n const [cfApiToken, accountId] = apiKey.split(\":\");\r\n return createOpenAI({\r\n apiKey: cfApiToken,\r\n baseURL: `https://api.cloudflare.com/client/v4/accounts/${accountId}/ai/v1`,\r\n }).chat(modelName);\r\n }\r\n case \"groq\": {\r\n const { createGroq } = await import(\"@ai-sdk/groq\");\r\n return createGroq({ apiKey })(modelName);\r\n }\r\n case \"anthropic\": {\r\n const { createAnthropic } = await import(\"@ai-sdk/anthropic\");\r\n return createAnthropic({ apiKey })(modelName);\r\n }\r\n case \"gemini\":\r\n case \"google\": {\r\n const { createGoogleGenerativeAI } = await import(\"@ai-sdk/google\");\r\n return createGoogleGenerativeAI({ apiKey })(modelName);\r\n }\r\n default:\r\n throw new Error(`Unsupported provider type: ${type}`);\r\n }\r\n }\r\n\r\n /**\r\n * Registers a new provider. Accepts both `(type, config)` — used by the\r\n * providers API route — and `(type, name, config)`.\r\n */\r\n async addProvider(type: string, nameOrConfig: any, config?: Record<string, any>) {\r\n let name: string;\r\n let finalConfig: Record<string, any>;\r\n if (typeof nameOrConfig === \"object\" && nameOrConfig !== null && !config) {\r\n finalConfig = nameOrConfig;\r\n const section = getModelProvidersUIConfigSection().find(\r\n (s) => s.key === type,\r\n );\r\n name = section?.name || type.toUpperCase();\r\n } else {\r\n name = String(nameOrConfig);\r\n finalConfig = config || {};\r\n }\r\n\r\n const newProvider = configManager.addModelProvider(type, name, finalConfig);\r\n return {\r\n ...newProvider,\r\n chatModels: getDefaultChatModels(type),\r\n };\r\n }\r\n\r\n async removeProvider(providerId: string) {\r\n configManager.removeModelProvider(providerId);\r\n }\r\n\r\n /**\r\n * Updates a provider's config. Accepts both `(id, config)` — used by the\r\n * providers API route — and `(id, name, config)`.\r\n */\r\n async updateProvider(providerId: string, nameOrConfig: any, config?: Record<string, any>) {\r\n let name: string;\r\n let finalConfig: Record<string, any>;\r\n if (typeof nameOrConfig === \"object\" && nameOrConfig !== null && !config) {\r\n finalConfig = nameOrConfig;\r\n const existing = this.activeProviders.find((p) => p.id === providerId);\r\n name = existing?.name || providerId;\r\n } else {\r\n name = String(nameOrConfig);\r\n finalConfig = config || {};\r\n }\r\n\r\n const updated = await configManager.updateModelProvider(\r\n providerId,\r\n name,\r\n finalConfig,\r\n );\r\n return {\r\n ...updated,\r\n chatModels: mergeChatModels(updated),\r\n };\r\n }\r\n\r\n async addProviderModel(providerId: string, type: \"chat\", model: any) {\r\n return configManager.addProviderModel(providerId, type, model);\r\n }\r\n\r\n async removeProviderModel(providerId: string, type: \"chat\", modelKey: string) {\r\n configManager.removeProviderModel(providerId, type, modelKey);\r\n }\r\n}\r\n","const PROVIDERS = {\n openrouter: { row: 0, col: 0 },\n tongyi: { row: 0, col: 1 },\n ollama: { row: 0, col: 2 },\n huggingface: { row: 0, col: 3 },\n localai: { row: 0, col: 4 },\n openllm: { row: 0, col: 5 },\n zhipu: { row: 1, col: 0 },\n replicate: { row: 1, col: 1 },\n azure: { row: 1, col: 2 },\n anthropic: { row: 1, col: 3 },\n groq: { row: 1, col: 4 },\n sagemaker: { row: 1, col: 5 },\n \"01ai\": { row: 2, col: 0 },\n bedrock: { row: 2, col: 1 },\n openai: { row: 2, col: 2 },\n cohere: { row: 2, col: 3 },\n together: { row: 2, col: 4 },\n xorbits: { row: 2, col: 5 },\n wenxin: { row: 3, col: 0 },\n moonshot: { row: 3, col: 1 },\n gemini: { row: 3, col: 2 },\n mistral: { row: 3, col: 3 },\n jina: { row: 3, col: 4 },\n chatglm: { row: 3, col: 5 },\n} as const;\n\nexport type Provider = keyof typeof PROVIDERS;\n\nconst COLS = 6;\nconst ROWS = 4;\n\n/**\n * Returns a cropped canvas containing just the provider box.\n */\nexport async function cropProvider(\n image: HTMLImageElement | ImageBitmap,\n provider: Provider\n): Promise<HTMLCanvasElement> {\n if (!(provider in PROVIDERS)) {\n throw new Error(`Unknown provider: ${provider}`);\n }\n\n const { row, col } = PROVIDERS[provider];\n\n const tileWidth = image.width / COLS;\n const tileHeight = image.height / ROWS;\n\n const canvas = document.createElement(\"canvas\");\n canvas.width = tileWidth;\n canvas.height = tileHeight;\n\n const ctx = canvas.getContext(\"2d\");\n if (!ctx) {\n throw new Error(\"Failed to get 2D context\");\n }\n\n ctx.drawImage(\n image,\n col * tileWidth,\n row * tileHeight,\n tileWidth,\n tileHeight,\n 0,\n 0,\n tileWidth,\n tileHeight\n );\n\n return canvas;\n}\n\n/**\n * Returns the provider image as a Blob.\n */\nexport async function cropProviderAsBlob(\n image: HTMLImageElement | ImageBitmap,\n provider: Provider,\n type: \"image/png\" | \"image/jpeg\" | \"image/webp\" = \"image/png\",\n quality?: number\n): Promise<Blob> {\n const canvas = await cropProvider(image, provider);\n\n return new Promise<Blob>((resolve, reject) => {\n canvas.toBlob(\n (blob) => {\n if (blob) {\n resolve(blob);\n } else {\n reject(new Error(\"Failed to create blob\"));\n }\n },\n type,\n quality\n );\n });\n}\n\n/**\n * Returns the provider image as a data URL.\n */\nexport async function cropProviderAsDataURL(\n image: HTMLImageElement | ImageBitmap,\n provider: Provider,\n type: \"image/png\" | \"image/jpeg\" | \"image/webp\" = \"image/png\",\n quality?: number\n): Promise<string> {\n const canvas = await cropProvider(image, provider);\n return canvas.toDataURL(type, quality);\n}\n\n/**\n * Helper to load and crop in one call.\n */\nexport async function getProviderImage(\n spriteSheetUrl: string,\n provider: Provider\n): Promise<HTMLCanvasElement> {\n const img = new Image();\n img.src = spriteSheetUrl;\n await img.decode();\n return cropProvider(img, provider);\n}\n\n/**\n * Get all available provider names.\n */\nexport function getProviderNames(): Provider[] {\n return Object.keys(PROVIDERS) as Provider[];\n}\n","[{\"service\": \"7_shifts\", \"displayName\": \"7shifts\", \"categories\": [\"Productivity\"], \"authTypes\": [\"api_key\"], \"actionCount\": 7}, {\"service\": \"a_leads\", \"displayName\": \"A-Leads\", \"categories\": [\"Marketing\", \"Data\"], \"authTypes\": [\"api_key\"], \"actionCount\": 4}, {\"service\": \"ably\", \"displayName\": \"Ably\", \"categories\": [\"Developer Tools\"], \"authTypes\": [\"api_key\"], \"actionCount\": 11}, {\"service\": \"ably_control\", \"displayName\": \"Ably Control\", \"categories\": [\"Developer Tools\"], \"authTypes\": [\"api_key\"], \"actionCount\": 14}, {\"service\": \"abstract\", \"displayName\": \"Abstract\", \"categories\": [\"Developer Tools\", \"Data\"], \"authTypes\": [\"api_key\"], \"actionCount\": 1}, {\"service\": \"abuseipdb\", \"displayName\": \"AbuseIPDB\", \"categories\": [\"Security\", \"Data\"], \"authTypes\": [\"api_key\"], \"actionCount\": 4}, {\"service\": \"abyssale\", \"displayName\": \"Abyssale\", \"categories\": [\"Design\", \"Marketing\"], \"authTypes\": [\"api_key\"], \"actionCount\": 9}, {\"service\": \"accredible_certificates\", \"displayName\": \"Accredible Certificates\", \"categories\": [\"Productivity\", \"Data\"], \"authTypes\": [\"api_key\"], \"actionCount\": 8}, {\"service\": \"acculynx\", \"displayName\": \"AccuLynx\", \"categories\": [\"Productivity\", \"Marketing\"], \"authTypes\": [\"api_key\"], \"actionCount\": 12}, {\"service\": \"accuweather\", \"displayName\": \"AccuWeather\", \"categories\": [\"Location\", \"Data\"], \"authTypes\": [\"api_key\"], \"actionCount\": 5}, {\"service\": \"active_trail\", \"displayName\": \"ActiveTrail\", \"categories\": [\"Marketing\", \"Communication\"], \"authTypes\": [\"api_key\"], \"actionCount\": 14}, {\"service\": \"activecampaign\", \"displayName\": \"ActiveCampaign\", \"categories\": [\"Marketing\", \"Productivity\"], \"authTypes\": [\"api_key\"], \"actionCount\": 6}, {\"service\": \"adafruit_io\", \"displayName\": \"Adafruit IO\", \"categories\": [\"Data\", \"Developer Tools\"], \"authTypes\": [\"api_key\"], \"actionCount\": 5}, {\"service\": \"addressfinder\", \"displayName\": \"Addressfinder\", \"categories\": [\"Location\", \"Data\"], \"authTypes\": [\"api_key\"], \"actionCount\": 6}, {\"service\": \"addresszen\", \"displayName\": \"AddressZen\", \"categories\": [\"Location\", \"Data\"], \"authTypes\": [\"api_key\"], \"actionCount\": 3}, {\"service\": \"adobe_commerce\", \"displayName\": \"Adobe Commerce\", \"categories\": [\"Productivity\", \"Marketing\"], \"authTypes\": [\"api_key\"], \"actionCount\": 4}, {\"service\": \"adyen\", \"displayName\": \"Adyen\", \"categories\": [\"Finance\"], \"authTypes\": [\"api_key\"], \"actionCount\": 6}, {\"service\": \"adyntel\", \"displayName\": \"Adyntel\", \"categories\": [\"Marketing\", \"Data\"], \"authTypes\": [\"api_key\"], \"actionCount\": 6}, {\"service\": \"aeroleads\", \"displayName\": \"AeroLeads\", \"categories\": [\"Marketing\", \"Data\"], \"authTypes\": [\"api_key\"], \"actionCount\": 1}, {\"service\": \"affinda\", \"displayName\": \"Affinda\", \"categories\": [\"AI\", \"Data\"], \"authTypes\": [\"api_key\"], \"actionCount\": 6}, {\"service\": \"affinity\", \"displayName\": \"Affinity\", \"categories\": [\"Productivity\", \"Data\"], \"authTypes\": [\"api_key\"], \"actionCount\": 20}, {\"service\": \"aftership\", \"displayName\": \"AfterShip\", \"categories\": [\"Productivity\", \"Location\"], \"authTypes\": [\"api_key\"], \"actionCount\": 9}, {\"service\": \"agent_mail\", \"displayName\": \"AgentMail\", \"categories\": [\"Communication\", \"Productivity\"], \"authTypes\": [\"api_key\"], \"actionCount\": 102}, {\"service\": \"agentql\", \"displayName\": \"AgentQL\", \"categories\": [\"AI\", \"Developer Tools\", \"Data\"], \"authTypes\": [\"api_key\"], \"actionCount\": 4}, {\"service\": \"agenty\", \"displayName\": \"Agenty\", \"categories\": [\"Developer Tools\", \"Data\"], \"authTypes\": [\"api_key\"], \"actionCount\": 31}, {\"service\": \"agiled\", \"displayName\": \"Agiled\", \"categories\": [\"Productivity\", \"Data\"], \"authTypes\": [\"api_key\"], \"actionCount\": 15}, {\"service\": \"agility\", \"displayName\": \"Agility CMS\", \"categories\": [\"Developer Tools\", \"Productivity\"], \"authTypes\": [\"api_key\"], \"actionCount\": 6}, {\"service\": \"agora\", \"displayName\": \"Agora\", \"categories\": [\"Communication\", \"Developer Tools\"], \"authTypes\": [\"api_key\"], \"actionCount\": 7}, {\"service\": \"ahrefs\", \"displayName\": \"Ahrefs\", \"categories\": [\"Marketing\", \"Data\"], \"authTypes\": [\"api_key\"], \"actionCount\": 4}, {\"service\": \"aimfox\", \"displayName\": \"Aimfox\", \"categories\": [\"Marketing\", \"Communication\"], \"authTypes\": [\"api_key\"], \"actionCount\": 11}, {\"service\": \"airbrake\", \"displayName\": \"Airbrake\", \"categories\": [\"Developer Tools\", \"Data\"], \"authTypes\": [\"api_key\"], \"actionCount\": 8}, {\"service\": \"aircall\", \"displayName\": \"Aircall\", \"categories\": [\"Communication\", \"Productivity\"], \"authTypes\": [\"api_key\"], \"actionCount\": 10}, {\"service\": \"airtable\", \"displayName\": \"Airtable\", \"categories\": [\"Productivity\", \"Data\"], \"authTypes\": [\"api_key\"], \"actionCount\": 14}, {\"service\": \"aivoov\", \"displayName\": \"AiVOOV\", \"categories\": [\"AI\", \"Design & Media\"], \"authTypes\": [\"api_key\"], \"actionCount\": 2}, {\"service\": \"alchemy\", \"displayName\": \"Alchemy\", \"categories\": [\"Developer Tools\", \"Data\", \"Finance\"], \"authTypes\": [\"api_key\"], \"actionCount\": 5}, {\"service\": \"algo_docs\", \"displayName\": \"AlgoDocs\", \"categories\": [\"Productivity\", \"Data\"], \"authTypes\": [\"api_key\"], \"actionCount\": 6}, {\"service\": \"algolia\", \"displayName\": \"Algolia\", \"categories\": [\"Developer Tools\", \"Data\"], \"authTypes\": [\"api_key\"], \"actionCount\": 9}, {\"service\": \"aliyun_oss\", \"displayName\": \"Alibaba Cloud OSS\", \"categories\": [\"Storage\", \"Developer Tools\"], \"authTypes\": [\"custom_credential\"], \"actionCount\": 6}, {\"service\": \"aliyun_sls\", \"displayName\": \"Alibaba Cloud SLS\", \"categories\": [\"Data\", \"Developer Tools\"], \"authTypes\": [\"custom_credential\"], \"actionCount\": 5}, {\"service\": \"aliyun_sts\", \"displayName\": \"Alibaba Cloud STS\", \"categories\": [\"Security\", \"Developer Tools\"], \"authTypes\": [\"custom_credential\"], \"actionCount\": 1}, {\"service\": \"alpaca\", \"displayName\": \"Alpaca\", \"categories\": [\"Finance\", \"Data\"], \"authTypes\": [\"api_key\"], \"actionCount\": 22}, {\"service\": \"alpha_vantage\", \"displayName\": \"Alpha Vantage\", \"categories\": [\"Finance\", \"Data\"], \"authTypes\": [\"api_key\"], \"actionCount\": 44}, {\"service\": \"alt_text_ai\", \"displayName\": \"AltText.ai\", \"categories\": [\"AI\", \"Design & Media\"], \"authTypes\": [\"api_key\"], \"actionCount\": 7}, {\"service\": \"amap\", \"displayName\": \"AMap\", \"categories\": [\"Location\"], \"authTypes\": [\"api_key\"], \"actionCount\": 15}, {\"service\": \"amara\", \"displayName\": \"Amara\", \"categories\": [\"Design & Media\", \"Productivity\"], \"authTypes\": [\"api_key\"], \"actionCount\": 33}, {\"service\": \"ambee\", \"displayName\": \"Ambee\", \"categories\": [\"Location\", \"Data\"], \"authTypes\": [\"api_key\"], \"actionCount\": 5}, {\"service\": \"ambient_weather\", \"displayName\": \"Ambient Weather\", \"categories\": [\"Location\", \"Data\"], \"authTypes\": [\"api_key\"], \"actionCount\": 3}, {\"service\": \"amplemarket\", \"displayName\": \"Amplemarket\", \"categories\": [\"Marketing\", \"Data\"], \"authTypes\": [\"api_key\"], \"actionCount\": 11}, {\"service\": \"amplitude\", \"displayName\": \"Amplitude\", \"categories\": [\"Data\"], \"authTypes\": [\"api_key\"], \"actionCount\": 4}, {\"service\": \"anchor_browser\", \"displayName\": \"Anchor Browser\", \"categories\": [\"Developer Tools\", \"AI\"], \"authTypes\": [\"api_key\"], \"actionCount\": 3}, {\"service\": \"anrok\", \"displayName\": \"Anrok\", \"categories\": [\"Finance\", \"Data\"], \"authTypes\": [\"api_key\"], \"actionCount\": 7}, {\"service\": \"anthropic\", \"displayName\": \"Anthropic\", \"categories\": [\"AI\"], \"authTypes\": [\"api_key\"], \"actionCount\": 4}, {\"service\": \"anthropic_admin\", \"displayName\": \"Anthropic Admin\", \"categories\": [\"AI\"], \"authTypes\": [\"api_key\"], \"actionCount\": 6}, {\"service\": \"anysearch\", \"displayName\": \"AnySearch\", \"categories\": [\"AI\", \"Data\"], \"authTypes\": [\"api_key\"], \"actionCount\": 4}, {\"service\": \"apaleo\", \"displayName\": \"apaleo\", \"categories\": [\"Productivity\", \"Finance\"], \"authTypes\": [\"oauth2\"], \"actionCount\": 29}, {\"service\": \"api2pdf\", \"displayName\": \"API2PDF\", \"categories\": [\"Productivity\", \"Developer Tools\"], \"authTypes\": [\"api_key\"], \"actionCount\": 1}, {\"service\": \"api_bible\", \"displayName\": \"API.Bible\", \"categories\": [\"Data\"], \"authTypes\": [\"api_key\"], \"actionCount\": 8}, {\"service\": \"api_ninjas\", \"displayName\": \"API Ninjas\", \"categories\": [\"Developer Tools\", \"Data\"], \"authTypes\": [\"api_key\"], \"actionCount\": 6}, {\"service\": \"api_sports\", \"displayName\": \"API-SPORTS\", \"categories\": [\"Data\"], \"authTypes\": [\"api_key\"], \"actionCount\": 14}, {\"service\": \"api_void\", \"displayName\": \"APIVoid\", \"categories\": [\"Security\", \"Data\"], \"authTypes\": [\"api_key\"], \"actionCount\": 5}, {\"service\": \"apiflash\", \"displayName\": \"ApiFlash\", \"categories\": [\"Developer Tools\", \"Design & Media\"], \"authTypes\": [\"api_key\"], \"actionCount\": 3}, {\"service\": \"apify\", \"displayName\": \"Apify\", \"categories\": [\"Developer Tools\", \"Data\"], \"authTypes\": [\"api_key\"], \"actionCount\": 5}, {\"service\": \"apipie_ai\", \"displayName\": \"APIpie AI\", \"categories\": [\"AI\", \"Developer Tools\"], \"authTypes\": [\"api_key\"], \"actionCount\": 4}, {\"service\": \"apiverve\", \"displayName\": \"APIVerve\", \"categories\": [\"Developer Tools\", \"Data\"], \"authTypes\": [\"api_key\"], \"actionCount\": 9}, {\"service\": \"apollo\", \"displayName\": \"Apollo\", \"categories\": [\"Marketing\", \"Data\"], \"authTypes\": [\"api_key\"], \"actionCount\": 5}, {\"service\": \"appdrag\", \"displayName\": \"AppDrag\", \"categories\": [\"Developer Tools\", \"Data\"], \"authTypes\": [\"api_key\"], \"actionCount\": 1}, {\"service\": \"appstle_subscriptions\", \"displayName\": \"Appstle Subscriptions\", \"categories\": [\"Productivity\", \"Marketing\"], \"authTypes\": [\"api_key\"], \"actionCount\": 4}, {\"service\": \"appveyor\", \"displayName\": \"AppVeyor\", \"categories\": [\"Developer Tools\"], \"authTypes\": [\"api_key\"], \"actionCount\": 6}, {\"service\": \"arxiv\", \"displayName\": \"arXiv\", \"categories\": [\"Data\"], \"authTypes\": [\"no_auth\"], \"actionCount\": 8}, {\"service\": \"asana\", \"displayName\": \"Asana\", \"categories\": [\"Productivity\"], \"authTypes\": [\"api_key\"], \"actionCount\": 10}, {\"service\": \"ashby\", \"displayName\": \"Ashby\", \"categories\": [\"Productivity\", \"Data\"], \"authTypes\": [\"api_key\"], \"actionCount\": 4}, {\"service\": \"asin_data_api\", \"displayName\": \"ASIN Data API\", \"categories\": [\"Data\", \"Marketing\"], \"authTypes\": [\"api_key\"], \"actionCount\": 6}, {\"service\": \"assemblyai\", \"displayName\": \"AssemblyAI\", \"categories\": [\"AI\", \"Developer Tools\"], \"authTypes\": [\"api_key\"], \"actionCount\": 6}, {\"service\": \"atlas_so\", \"displayName\": \"Atlas.so\", \"categories\": [\"Communication\", \"Productivity\"], \"authTypes\": [\"api_key\"], \"actionCount\": 10}, {\"service\": \"attention\", \"displayName\": \"Attention\", \"categories\": [\"AI\", \"Communication\"], \"authTypes\": [\"api_key\"], \"actionCount\": 5}, {\"service\": \"attio\", \"displayName\": \"Attio\", \"categories\": [\"Productivity\", \"Data\"], \"authTypes\": [\"api_key\"], \"actionCount\": 10}, {\"service\": \"auth0_management\", \"displayName\": \"Auth0 Management\", \"categories\": [\"Security\"], \"authTypes\": [\"api_key\"], \"actionCount\": 15}, {\"service\": \"autobound\", \"displayName\": \"Autobound\", \"categories\": [\"Data\", \"Marketing\"], \"authTypes\": [\"api_key\"], \"actionCount\": 6}, {\"service\": \"autom\", \"displayName\": \"Autom\", \"categories\": [\"Data\", \"Developer Tools\", \"Marketing\"], \"authTypes\": [\"api_key\"], \"actionCount\": 4}, {\"service\": \"autotask\", \"displayName\": \"Autotask\", \"categories\": [\"Productivity\", \"Data\"], \"authTypes\": [\"api_key\"], \"actionCount\": 4}, {\"service\": \"aviationstack\", \"displayName\": \"Aviationstack\", \"categories\": [\"Data\", \"Developer Tools\"], \"authTypes\": [\"api_key\"], \"actionCount\": 9}, {\"service\": \"avoma\", \"displayName\": \"Avoma\", \"categories\": [\"AI\", \"Communication\", \"Data\"], \"authTypes\": [\"api_key\"], \"actionCount\": 9}, {\"service\": \"aws_s3\", \"displayName\": \"AWS S3\", \"categories\": [\"Storage\", \"Developer Tools\"], \"authTypes\": [\"custom_credential\"], \"actionCount\": 6}, {\"service\": \"aws_sts\", \"displayName\": \"AWS STS\", \"categories\": [\"Security\", \"Developer Tools\"], \"authTypes\": [\"custom_credential\"], \"actionCount\": 1}, {\"service\": \"axiom\", \"displayName\": \"Axiom\", \"categories\": [\"Data\", \"Developer Tools\"], \"authTypes\": [\"api_key\"], \"actionCount\": 5}, {\"service\": \"ayrshare\", \"displayName\": \"Ayrshare\", \"categories\": [\"Social\", \"Marketing\"], \"authTypes\": [\"api_key\"], \"actionCount\": 11}, {\"service\": \"baidu_maps\", \"displayName\": \"Baidu Maps\", \"categories\": [\"Location\"], \"authTypes\": [\"api_key\"], \"actionCount\": 14}, {\"service\": \"balldontlie_worldcup\", \"displayName\": \"BALLDONTLIE World Cup\", \"categories\": [\"Data\"], \"authTypes\": [\"api_key\"], \"actionCount\": 20}, {\"service\": \"bamboohr\", \"displayName\": \"BambooHR\", \"categories\": [\"Productivity\", \"Data\"], \"authTypes\": [\"api_key\"], \"actionCount\": 4}, {\"service\": \"bannerbear\", \"displayName\": \"Bannerbear\", \"categories\": [\"Design & Media\", \"Marketing\"], \"authTypes\": [\"api_key\"], \"actionCount\": 5}, {\"service\": \"baremetrics\", \"displayName\": \"Baremetrics\", \"categories\": [\"Finance\", \"Data\"], \"authTypes\": [\"api_key\"], \"actionCount\": 12}, {\"service\": \"bark\", \"displayName\": \"Bark\", \"categories\": [\"Communication\"], \"authTypes\": [\"api_key\"], \"actionCount\": 4}, {\"service\": \"baselinker\", \"displayName\": \"BaseLinker\", \"categories\": [\"Productivity\", \"Data\"], \"authTypes\": [\"api_key\"], \"actionCount\": 6}, {\"service\": \"baserow\", \"displayName\": \"Baserow\", \"categories\": [\"Productivity\", \"Data\"], \"authTypes\": [\"api_key\"], \"actionCount\": 7}, {\"service\": \"basin\", \"displayName\": \"Basin\", \"categories\": [\"Productivity\", \"Marketing\"], \"authTypes\": [\"api_key\"], \"actionCount\": 18}, {\"service\": \"beaconchain\", \"displayName\": \"Beaconcha.in\", \"categories\": [\"Finance\", \"Data\"], \"authTypes\": [\"api_key\"], \"actionCount\": 5}, {\"service\": \"beamer\", \"displayName\": \"Beamer\", \"categories\": [\"Communication\", \"Productivity\"], \"authTypes\": [\"api_key\"], \"actionCount\": 4}, {\"service\": \"beehiiv\", \"displayName\": \"Beehiiv\", \"categories\": [\"Marketing\", \"Productivity\"], \"authTypes\": [\"api_key\"], \"actionCount\": 6}, {\"service\": \"beeminder\", \"displayName\": \"Beeminder\", \"categories\": [\"Productivity\", \"Finance\"], \"authTypes\": [\"api_key\"], \"actionCount\": 8}, {\"service\": \"benchmark_email\", \"displayName\": \"Benchmark Email\", \"categories\": [\"Marketing\", \"Communication\"], \"authTypes\": [\"api_key\"], \"actionCount\": 4}, {\"service\": \"benzinga\", \"displayName\": \"Benzinga\", \"categories\": [\"Finance\", \"Data\"], \"authTypes\": [\"api_key\"], \"actionCount\": 4}, {\"service\": \"bestbuy\", \"displayName\": \"Best Buy\", \"categories\": [\"Data\"], \"authTypes\": [\"api_key\"], \"actionCount\": 8}, {\"service\": \"better_proposals\", \"displayName\": \"Better Proposals\", \"categories\": [\"Productivity\", \"Communication\"], \"authTypes\": [\"api_key\"], \"actionCount\": 20}, {\"service\": \"better_stack\", \"displayName\": \"Better Stack\", \"categories\": [\"Developer Tools\"], \"authTypes\": [\"api_key\"], \"actionCount\": 7}, {\"service\": \"bettercontact\", \"displayName\": \"BetterContact\", \"categories\": [\"Marketing\", \"Data\"], \"authTypes\": [\"api_key\"], \"actionCount\": 3}, {\"service\": \"bidsketch\", \"displayName\": \"BidSketch\", \"categories\": [\"Productivity\", \"Marketing\"], \"authTypes\": [\"api_key\"], \"actionCount\": 6}, {\"service\": \"big_commerce\", \"displayName\": \"BigCommerce\", \"categories\": [\"Marketing\", \"Data\"], \"authTypes\": [\"api_key\"], \"actionCount\": 5}, {\"service\": \"big_data_cloud\", \"displayName\": \"BigDataCloud\", \"categories\": [\"Location\", \"Security\", \"Data\"], \"authTypes\": [\"api_key\"], \"actionCount\": 4}, {\"service\": \"bigmailer\", \"displayName\": \"BigMailer\", \"categories\": [\"Marketing\", \"Communication\"], \"authTypes\": [\"api_key\"], \"actionCount\": 13}, {\"service\": \"bigpicture_io\", \"displayName\": \"BigPicture.io\", \"categories\": [\"Data\", \"Marketing\"], \"authTypes\": [\"api_key\"], \"actionCount\": 2}, {\"service\": \"bird\", \"displayName\": \"Bird\", \"categories\": [\"Communication\", \"Marketing\"], \"authTypes\": [\"api_key\"], \"actionCount\": 12}, {\"service\": \"bitly\", \"displayName\": \"Bitly\", \"categories\": [\"Marketing\", \"Data\"], \"authTypes\": [\"api_key\"], \"actionCount\": 6}, {\"service\": \"bitquery\", \"displayName\": \"Bitquery\", \"categories\": [\"Data\", \"Developer Tools\"], \"authTypes\": [\"api_key\"], \"actionCount\": 1}, {\"service\": \"bitrise\", \"displayName\": \"Bitrise\", \"categories\": [\"Developer Tools\"], \"authTypes\": [\"api_key\"], \"actionCount\": 4}, {\"service\": \"bland_ai\", \"displayName\": \"Bland AI\", \"categories\": [\"AI\", \"Communication\"], \"authTypes\": [\"api_key\"], \"actionCount\": 5}, {\"service\": \"blaze_meter_functional\", \"displayName\": \"BlazeMeter Functional\", \"categories\": [\"Developer Tools\"], \"authTypes\": [\"api_key\"], \"actionCount\": 3}, {\"service\": \"blaze_meter_performance\", \"displayName\": \"BlazeMeter Performance\", \"categories\": [\"Developer Tools\"], \"authTypes\": [\"api_key\"], \"actionCount\": 6}, {\"service\": \"blaze_meter_service_virtualization\", \"displayName\": \"BlazeMeter Service Virtualization\", \"categories\": [\"Developer Tools\"], \"authTypes\": [\"api_key\"], \"actionCount\": 3}, {\"service\": \"blocknative\", \"displayName\": \"Blocknative\", \"categories\": [\"Developer Tools\", \"Data\"], \"authTypes\": [\"api_key\"], \"actionCount\": 4}, {\"service\": \"bluesky\", \"displayName\": \"Bluesky\", \"categories\": [\"Social\", \"Communication\"], \"authTypes\": [\"api_key\"], \"actionCount\": 3}, {\"service\": \"bolna\", \"displayName\": \"Bolna\", \"categories\": [\"AI\", \"Communication\"], \"authTypes\": [\"api_key\"], \"actionCount\": 6}, {\"service\": \"boloforms\", \"displayName\": \"BoloForms\", \"categories\": [\"Productivity\"], \"authTypes\": [\"api_key\"], \"actionCount\": 4}, {\"service\": \"bookingmood\", \"displayName\": \"Bookingmood\", \"categories\": [\"Productivity\"], \"authTypes\": [\"api_key\"], \"actionCount\": 3}, {\"service\": \"booqable\", \"displayName\": \"Booqable\", \"categories\": [\"Productivity\", \"Data\"], \"authTypes\": [\"api_key\"], \"actionCount\": 10}, {\"service\": \"bot_star\", \"displayName\": \"BotStar\", \"categories\": [\"Communication\", \"Marketing\"], \"authTypes\": [\"api_key\"], \"actionCount\": 21}, {\"service\": \"botpress\", \"displayName\": \"Botpress\", \"categories\": [\"AI\", \"Developer Tools\"], \"authTypes\": [\"api_key\"], \"actionCount\": 3}, {\"service\": \"botsonic\", \"displayName\": \"Botsonic\", \"categories\": [\"AI\", \"Communication\"], \"authTypes\": [\"api_key\"], \"actionCount\": 4}, {\"service\": \"bouncer\", \"displayName\": \"Bouncer\", \"categories\": [\"Communication\", \"Marketing\"], \"authTypes\": [\"api_key\"], \"actionCount\": 13}, {\"service\": \"boxhero\", \"displayName\": \"BoxHero\", \"categories\": [\"Productivity\", \"Data\"], \"authTypes\": [\"api_key\"], \"actionCount\": 4}, {\"service\": \"brandfetch\", \"displayName\": \"Brandfetch\", \"categories\": [\"Design & Media\", \"Marketing\"], \"authTypes\": [\"api_key\"], \"actionCount\": 2}, {\"service\": \"brave_search\", \"displayName\": \"Brave Search\", \"categories\": [\"Data\"], \"authTypes\": [\"api_key\"], \"actionCount\": 4}, {\"service\": \"braze\", \"displayName\": \"Braze\", \"categories\": [\"Marketing\", \"Data\"], \"authTypes\": [\"api_key\"], \"actionCount\": 4}, {\"service\": \"breathe\", \"displayName\": \"Breathe\", \"categories\": [\"Productivity\"], \"authTypes\": [\"api_key\"], \"actionCount\": 5}, {\"service\": \"breeze\", \"displayName\": \"Breeze\", \"categories\": [\"Productivity\", \"Communication\"], \"authTypes\": [\"api_key\"], \"actionCount\": 5}, {\"service\": \"brevo\", \"displayName\": \"Brevo\", \"categories\": [\"Communication\", \"Marketing\"], \"authTypes\": [\"api_key\"], \"actionCount\": 12}, {\"service\": \"brex\", \"displayName\": \"Brex\", \"categories\": [\"Finance\"], \"authTypes\": [\"api_key\"], \"actionCount\": 9}, {\"service\": \"bright_data\", \"displayName\": \"Bright Data\", \"categories\": [\"Data\", \"Developer Tools\"], \"authTypes\": [\"api_key\"], \"actionCount\": 6}, {\"service\": \"browse_ai\", \"displayName\": \"Browse AI\", \"categories\": [\"Data\", \"Developer Tools\"], \"authTypes\": [\"api_key\"], \"actionCount\": 6}, {\"service\": \"browserbase\", \"displayName\": \"Browserbase\", \"categories\": [\"Developer Tools\"], \"authTypes\": [\"api_key\"], \"actionCount\": 11}, {\"service\": \"browserless\", \"displayName\": \"Browserless\", \"categories\": [\"Developer Tools\", \"Data\"], \"authTypes\": [\"api_key\"], \"actionCount\": 3}, {\"service\": \"btcpay_server\", \"displayName\": \"BTCPay Server\", \"categories\": [\"Finance\"], \"authTypes\": [\"api_key\"], \"actionCount\": 7}, {\"service\": \"bug_herd\", \"displayName\": \"BugHerd\", \"categories\": [\"Developer Tools\", \"Productivity\"], \"authTypes\": [\"api_key\"], \"actionCount\": 14}, {\"service\": \"bugbug\", \"displayName\": \"BugBug\", \"categories\": [\"Developer Tools\"], \"authTypes\": [\"api_key\"], \"actionCount\": 8}, {\"service\": \"bugsnag\", \"displayName\": \"Bugsnag\", \"categories\": [\"Developer Tools\", \"Security\"], \"authTypes\": [\"api_key\"], \"actionCount\": 7}, {\"service\": \"builder_io\", \"displayName\": \"Builder.io\", \"categories\": [\"Design & Media\", \"Marketing\"], \"authTypes\": [\"api_key\"], \"actionCount\": 5}, {\"service\": \"buildium\", \"displayName\": \"Buildium\", \"categories\": [\"Productivity\", \"Data\"], \"authTypes\": [\"api_key\"], \"actionCount\": 7}, {\"service\": \"buildkite\", \"displayName\": \"Buildkite\", \"categories\": [\"Developer Tools\"], \"authTypes\": [\"api_key\"], \"actionCount\": 12}, {\"service\": \"builtwith\", \"displayName\": \"BuiltWith\", \"categories\": [\"Data\", \"Developer Tools\"], \"authTypes\": [\"api_key\"], \"actionCount\": 5}, {\"service\": \"bunnycdn\", \"displayName\": \"BunnyCDN\", \"categories\": [\"Storage\", \"Developer Tools\"], \"authTypes\": [\"api_key\"], \"actionCount\": 3}, {\"service\": \"businessmap\", \"displayName\": \"Businessmap\", \"categories\": [\"Productivity\"], \"authTypes\": [\"api_key\"], \"actionCount\": 10}, {\"service\": \"buttondown\", \"displayName\": \"Buttondown\", \"categories\": [\"Marketing\", \"Communication\"], \"authTypes\": [\"api_key\"], \"actionCount\": 12}, {\"service\": \"byteforms\", \"displayName\": \"ByteForms\", \"categories\": [\"Productivity\", \"Data\"], \"authTypes\": [\"api_key\"], \"actionCount\": 3}, {\"service\": \"cal\", \"displayName\": \"Cal.com\", \"categories\": [\"Productivity\", \"Communication\"], \"authTypes\": [\"oauth2\"], \"actionCount\": 47}, {\"service\": \"calendarific\", \"displayName\": \"Calendarific\", \"categories\": [\"Productivity\", \"Data\"], \"authTypes\": [\"api_key\"], \"actionCount\": 3}, {\"service\": \"calendly\", \"displayName\": \"Calendly\", \"categories\": [\"Productivity\"], \"authTypes\": [\"oauth2\", \"api_key\"], \"actionCount\": 37}, {\"service\": \"callerapi\", \"displayName\": \"CallerAPI\", \"categories\": [\"Communication\", \"Security\"], \"authTypes\": [\"api_key\"], \"actionCount\": 2}, {\"service\": \"callingly\", \"displayName\": \"Callingly\", \"categories\": [\"Communication\", \"Productivity\"], \"authTypes\": [\"api_key\"], \"actionCount\": 12}, {\"service\": \"callpage\", \"displayName\": \"CallPage\", \"categories\": [\"Communication\", \"Productivity\"], \"authTypes\": [\"api_key\"], \"actionCount\": 7}, {\"service\": \"callrail\", \"displayName\": \"CallRail\", \"categories\": [\"Marketing\", \"Data\"], \"authTypes\": [\"api_key\"], \"actionCount\": 6}, {\"service\": \"campaign_cleaner\", \"displayName\": \"Campaign Cleaner\", \"categories\": [\"Communication\", \"Marketing\"], \"authTypes\": [\"api_key\"], \"actionCount\": 7}, {\"service\": \"canny\", \"displayName\": \"Canny\", \"categories\": [\"Productivity\", \"Data\"], \"authTypes\": [\"api_key\"], \"actionCount\": 11}, {\"service\": \"canva\", \"displayName\": \"Canva\", \"categories\": [\"Design & Media\", \"Productivity\"], \"authTypes\": [\"oauth2\"], \"actionCount\": 13}, {\"service\": \"capsule_crm\", \"displayName\": \"Capsule CRM\", \"categories\": [\"Productivity\", \"Marketing\"], \"authTypes\": [\"api_key\"], \"actionCount\": 25}, {\"service\": \"carbone\", \"displayName\": \"Carbone\", \"categories\": [\"Productivity\", \"Developer Tools\"], \"authTypes\": [\"api_key\"], \"actionCount\": 5}, {\"service\": \"cardly\", \"displayName\": \"Cardly\", \"categories\": [\"Marketing\", \"Productivity\"], \"authTypes\": [\"api_key\"], \"actionCount\": 7}, {\"service\": \"cats\", \"displayName\": \"CATS\", \"categories\": [\"Productivity\"], \"authTypes\": [\"api_key\"], \"actionCount\": 10}, {\"service\": \"celigo\", \"displayName\": \"Celigo\", \"categories\": [\"Developer Tools\"], \"authTypes\": [\"api_key\"], \"actionCount\": 8}, {\"service\": \"census_bureau\", \"displayName\": \"Census Bureau\", \"categories\": [\"Data\"], \"authTypes\": [\"api_key\"], \"actionCount\": 5}, {\"service\": \"censys\", \"displayName\": \"Censys\", \"categories\": [\"Security\", \"Data\"], \"authTypes\": [\"api_key\"], \"actionCount\": 3}, {\"service\": \"central_station_crm\", \"displayName\": \"CentralStationCRM\", \"categories\": [\"Marketing\", \"Productivity\"], \"authTypes\": [\"api_key\"], \"actionCount\": 19}, {\"service\": \"certifier\", \"displayName\": \"Certifier\", \"categories\": [\"Productivity\", \"Communication\"], \"authTypes\": [\"api_key\"], \"actionCount\": 6}, {\"service\": \"certn\", \"displayName\": \"Certn\", \"categories\": [\"Security\", \"Productivity\"], \"authTypes\": [\"api_key\"], \"actionCount\": 10}, {\"service\": \"chargebee\", \"displayName\": \"Chargebee\", \"categories\": [\"Finance\"], \"authTypes\": [\"api_key\"], \"actionCount\": 9}, {\"service\": \"chartmogul\", \"displayName\": \"ChartMogul\", \"categories\": [\"Finance\", \"Data\"], \"authTypes\": [\"api_key\"], \"actionCount\": 5}, {\"service\": \"chaserhq\", \"displayName\": \"ChaserHQ\", \"categories\": [\"Finance\"], \"authTypes\": [\"api_key\"], \"actionCount\": 8}, {\"service\": \"chatarmin\", \"displayName\": \"Chatarmin\", \"categories\": [\"Marketing\", \"Communication\"], \"authTypes\": [\"api_key\"], \"actionCount\": 23}, {\"service\": \"chatbotkit\", \"displayName\": \"ChatBotKit\", \"categories\": [\"AI\", \"Developer Tools\"], \"authTypes\": [\"api_key\"], \"actionCount\": 27}, {\"service\": \"chatpdf\", \"displayName\": \"ChatPDF\", \"categories\": [\"AI\", \"Productivity\"], \"authTypes\": [\"api_key\"], \"actionCount\": 3}, {\"service\": \"chattermill\", \"displayName\": \"Chattermill\", \"categories\": [\"Data\", \"Marketing\"], \"authTypes\": [\"api_key\"], \"actionCount\": 22}, {\"service\": \"chatwork\", \"displayName\": \"Chatwork\", \"categories\": [\"Communication\", \"Productivity\"], \"authTypes\": [\"api_key\"], \"actionCount\": 15}, {\"service\": \"check\", \"displayName\": \"Check\", \"categories\": [\"Finance\", \"Data\"], \"authTypes\": [\"api_key\"], \"actionCount\": 3}, {\"service\": \"checkly\", \"displayName\": \"Checkly\", \"categories\": [\"Developer Tools\"], \"authTypes\": [\"api_key\"], \"actionCount\": 7}, {\"service\": \"chorus\", \"displayName\": \"Chorus\", \"categories\": [\"Communication\", \"Data\"], \"authTypes\": [\"api_key\"], \"actionCount\": 6}, {\"service\": \"cin7_core\", \"displayName\": \"Cin7 Core\", \"categories\": [\"Data\", \"Finance\"], \"authTypes\": [\"api_key\"], \"actionCount\": 5}, {\"service\": \"cincopa\", \"displayName\": \"Cincopa\", \"categories\": [\"Design & Media\", \"Storage\"], \"authTypes\": [\"api_key\"], \"actionCount\": 4}, {\"service\": \"circle\", \"displayName\": \"Circle\", \"categories\": [\"Communication\", \"Productivity\"], \"authTypes\": [\"api_key\"], \"actionCount\": 8}, {\"service\": \"circleci\", \"displayName\": \"CircleCI\", \"categories\": [\"Developer Tools\"], \"authTypes\": [\"api_key\"], \"actionCount\": 11}, {\"service\": \"claid_ai\", \"displayName\": \"Claid AI\", \"categories\": [\"AI\", \"Design & Media\"], \"authTypes\": [\"api_key\"], \"actionCount\": 3}, {\"service\": \"clari_copilot\", \"displayName\": \"Clari Copilot\", \"categories\": [\"Data\", \"Productivity\"], \"authTypes\": [\"api_key\"], \"actionCount\": 5}, {\"service\": \"classmarker\", \"displayName\": \"ClassMarker\", \"categories\": [\"Productivity\", \"Data\"], \"authTypes\": [\"api_key\"], \"actionCount\": 5}, {\"service\": \"clearout\", \"displayName\": \"Clearout\", \"categories\": [\"Marketing\", \"Data\"], \"authTypes\": [\"api_key\"], \"actionCount\": 8}, {\"service\": \"clerk\", \"displayName\": \"Clerk\", \"categories\": [\"Security\", \"Developer Tools\"], \"authTypes\": [\"api_key\"], \"actionCount\": 11}, {\"service\": \"clickhouse\", \"displayName\": \"ClickHouse\", \"categories\": [\"Data\", \"Developer Tools\"], \"authTypes\": [\"custom_credential\"], \"actionCount\": 5}, {\"service\": \"clickmeeting\", \"displayName\": \"ClickMeeting\", \"categories\": [\"Communication\", \"Marketing\"], \"authTypes\": [\"api_key\"], \"actionCount\": 19}, {\"service\": \"clicksend\", \"displayName\": \"ClickSend\", \"categories\": [\"Communication\", \"Marketing\"], \"authTypes\": [\"api_key\"], \"actionCount\": 13}, {\"service\": \"clickup\", \"displayName\": \"ClickUp\", \"categories\": [\"Productivity\"], \"authTypes\": [\"oauth2\", \"api_key\"], \"actionCount\": 68}, {\"service\": \"clockify\", \"displayName\": \"Clockify\", \"categories\": [\"Productivity\"], \"authTypes\": [\"api_key\"], \"actionCount\": 12}, {\"service\": \"close\", \"displayName\": \"Close\", \"categories\": [\"Productivity\", \"Marketing\"], \"authTypes\": [\"api_key\"], \"actionCount\": 16}, {\"service\": \"cloudconvert\", \"displayName\": \"CloudConvert\", \"categories\": [\"Productivity\", \"Design & Media\"], \"authTypes\": [\"api_key\"], \"actionCount\": 14}, {\"service\": \"cloudflare_browser_rendering\", \"displayName\": \"Cloudflare Browser Run\", \"categories\": [\"Developer Tools\", \"Data\"], \"authTypes\": [\"api_key\"], \"actionCount\": 6}, {\"service\": \"cloudflare_dns\", \"displayName\": \"Cloudflare DNS\", \"categories\": [\"Developer Tools\", \"Security\"], \"authTypes\": [\"api_key\", \"oauth2\"], \"actionCount\": 8}, {\"service\": \"cloudflare_r2\", \"displayName\": \"Cloudflare R2\", \"categories\": [\"Storage\", \"Developer Tools\"], \"authTypes\": [\"custom_credential\", \"oauth2\"], \"actionCount\": 9}, {\"service\": \"cloudflare_worker\", \"displayName\": \"Cloudflare Worker\", \"categories\": [\"Developer Tools\"], \"authTypes\": [\"custom_credential\", \"oauth2\"], \"actionCount\": 19}, {\"service\": \"cloudinary\", \"displayName\": \"Cloudinary\", \"categories\": [\"Design & Media\", \"Storage\"], \"authTypes\": [\"api_key\"], \"actionCount\": 5}, {\"service\": \"cloudlayer\", \"displayName\": \"cloudlayer.io\", \"categories\": [\"Productivity\", \"Developer Tools\"], \"authTypes\": [\"api_key\"], \"actionCount\": 8}, {\"service\": \"cockroach_labs\", \"displayName\": \"Cockroach Labs\", \"categories\": [\"Developer Tools\", \"Data\"], \"authTypes\": [\"api_key\"], \"actionCount\": 7}, {\"service\": \"coda\", \"displayName\": \"Coda\", \"categories\": [\"Productivity\", \"Data\"], \"authTypes\": [\"api_key\"], \"actionCount\": 11}, {\"service\": \"codacy\", \"displayName\": \"Codacy\", \"categories\": [\"Developer Tools\"], \"authTypes\": [\"api_key\"], \"actionCount\": 8}, {\"service\": \"codegen\", \"displayName\": \"Codegen\", \"categories\": [\"Developer Tools\", \"AI\"], \"authTypes\": [\"api_key\"], \"actionCount\": 6}, {\"service\": \"codemagic\", \"displayName\": \"Codemagic\", \"categories\": [\"Developer Tools\"], \"authTypes\": [\"api_key\"], \"actionCount\": 8}, {\"service\": \"coderabbit\", \"displayName\": \"CodeRabbit\", \"categories\": [\"Developer Tools\"], \"authTypes\": [\"api_key\"], \"actionCount\": 13}, {\"service\": \"cohere\", \"displayName\": \"Cohere\", \"categories\": [\"AI\"], \"authTypes\": [\"api_key\"], \"actionCount\": 3}, {\"service\": \"coinbase\", \"displayName\": \"Coinbase\", \"categories\": [\"Finance\"], \"authTypes\": [\"api_key\"], \"actionCount\": 2}, {\"service\": \"coinmarketcal\", \"displayName\": \"CoinMarketCal\", \"categories\": [\"Finance\", \"Data\"], \"authTypes\": [\"api_key\"], \"actionCount\": 5}, {\"service\": \"coinmarketcap\", \"displayName\": \"CoinMarketCap\", \"categories\": [\"Finance\", \"Data\"], \"authTypes\": [\"api_key\"], \"actionCount\": 6}, {\"service\": \"coinranking\", \"displayName\": \"Coinranking\", \"categories\": [\"Finance\", \"Data\"], \"authTypes\": [\"api_key\"], \"actionCount\": 6}, {\"service\": \"college_football_data\", \"displayName\": \"CollegeFootballData\", \"categories\": [\"Data\"], \"authTypes\": [\"api_key\"], \"actionCount\": 5}, {\"service\": \"collegiate\", \"displayName\": \"Merriam-Webster Collegiate\", \"categories\": [\"Data\"], \"authTypes\": [\"api_key\"], \"actionCount\": 1}, {\"service\": \"companycam\", \"displayName\": \"CompanyCam\", \"categories\": [\"Productivity\"], \"authTypes\": [\"api_key\"], \"actionCount\": 15}, {\"service\": \"companyenrich\", \"displayName\": \"CompanyEnrich\", \"categories\": [\"Marketing\", \"Data\"], \"authTypes\": [\"api_key\"], \"actionCount\": 6}, {\"service\": \"conductor\", \"displayName\": \"Conductor\", \"categories\": [\"Marketing\", \"Data\"], \"authTypes\": [\"api_key\"], \"actionCount\": 7}, {\"service\": \"configcat\", \"displayName\": \"ConfigCat\", \"categories\": [\"Developer Tools\", \"Productivity\"], \"authTypes\": [\"api_key\"], \"actionCount\": 7}, {\"service\": \"confluence\", \"displayName\": \"Confluence\", \"categories\": [\"Productivity\"], \"authTypes\": [\"api_key\"], \"actionCount\": 5}, {\"service\": \"contactout\", \"displayName\": \"ContactOut\", \"categories\": [\"Data\", \"Marketing\"], \"authTypes\": [\"api_key\"], \"actionCount\": 15}, {\"service\": \"contentful\", \"displayName\": \"Contentful\", \"categories\": [\"Productivity\", \"Developer Tools\"], \"authTypes\": [\"api_key\"], \"actionCount\": 8}, {\"service\": \"contentful_graphql\", \"displayName\": \"Contentful GraphQL\", \"categories\": [\"Developer Tools\", \"Productivity\"], \"authTypes\": [\"api_key\"], \"actionCount\": 1}, {\"service\": \"contentstack_content_delivery\", \"displayName\": \"Contentstack Content Delivery\", \"categories\": [\"Data\", \"Productivity\"], \"authTypes\": [\"api_key\"], \"actionCount\": 5}, {\"service\": \"contentstack_content_management\", \"displayName\": \"Contentstack Content Management\", \"categories\": [\"Data\", \"Productivity\"], \"authTypes\": [\"api_key\"], \"actionCount\": 6}, {\"service\": \"context7\", \"displayName\": \"Context7\", \"categories\": [\"Developer Tools\", \"AI\"], \"authTypes\": [\"api_key\"], \"actionCount\": 2}, {\"service\": \"control_d\", \"displayName\": \"Control D\", \"categories\": [\"Security\", \"Developer Tools\"], \"authTypes\": [\"api_key\"], \"actionCount\": 8}, {\"service\": \"convertapi\", \"displayName\": \"ConvertAPI\", \"categories\": [\"Productivity\", \"Design & Media\"], \"authTypes\": [\"api_key\"], \"actionCount\": 1}, {\"service\": \"convex\", \"displayName\": \"Convex\", \"categories\": [\"Developer Tools\"], \"authTypes\": [\"oauth2\", \"api_key\"], \"actionCount\": 23}, {\"service\": \"coresignal\", \"displayName\": \"Coresignal\", \"categories\": [\"Data\"], \"authTypes\": [\"api_key\"], \"actionCount\": 3}, {\"service\": \"countdown_api\", \"displayName\": \"Countdown API\", \"categories\": [\"Data\", \"Marketing\"], \"authTypes\": [\"api_key\"], \"actionCount\": 4}, {\"service\": \"courier\", \"displayName\": \"Courier\", \"categories\": [\"Communication\", \"Marketing\"], \"authTypes\": [\"api_key\"], \"actionCount\": 11}, {\"service\": \"craftmypdf\", \"displayName\": \"CraftMyPDF\", \"categories\": [\"Design & Media\", \"Productivity\"], \"authTypes\": [\"api_key\"], \"actionCount\": 4}, {\"service\": \"crisp\", \"displayName\": \"Crisp\", \"categories\": [\"Communication\", \"Marketing\"], \"authTypes\": [\"api_key\"], \"actionCount\": 5}, {\"service\": \"cronitor\", \"displayName\": \"Cronitor\", \"categories\": [\"Developer Tools\"], \"authTypes\": [\"api_key\"], \"actionCount\": 5}, {\"service\": \"crowdin\", \"displayName\": \"Crowdin\", \"categories\": [\"Productivity\", \"Communication\"], \"authTypes\": [\"oauth2\", \"api_key\"], \"actionCount\": 7}, {\"service\": \"crunchbase\", \"displayName\": \"Crunchbase\", \"categories\": [\"Data\", \"Marketing\"], \"authTypes\": [\"api_key\"], \"actionCount\": 3}, {\"service\": \"crustdata\", \"displayName\": \"Crustdata\", \"categories\": [\"Data\", \"Marketing\"], \"authTypes\": [\"api_key\"], \"actionCount\": 4}, {\"service\": \"currencyapi\", \"displayName\": \"currencyapi\", \"categories\": [\"Finance\", \"Data\"], \"authTypes\": [\"api_key\"], \"actionCount\": 5}, {\"service\": \"currencyscoop\", \"displayName\": \"CurrencyBeacon\", \"categories\": [\"Finance\", \"Data\"], \"authTypes\": [\"api_key\"], \"actionCount\": 5}, {\"service\": \"currents_api\", \"displayName\": \"Currents API\", \"categories\": [\"Data\", \"Social\"], \"authTypes\": [\"api_key\"], \"actionCount\": 5}, {\"service\": \"cursor\", \"displayName\": \"Cursor\", \"categories\": [\"Developer Tools\", \"AI\"], \"authTypes\": [\"api_key\"], \"actionCount\": 4}, {\"service\": \"customerio\", \"displayName\": \"Customer.io\", \"categories\": [\"Marketing\", \"Communication\", \"Data\"], \"authTypes\": [\"custom_credential\"], \"actionCount\": 7}, {\"service\": \"customgpt\", \"displayName\": \"CustomGPT.ai\", \"categories\": [\"AI\", \"Productivity\"], \"authTypes\": [\"api_key\"], \"actionCount\": 7}, {\"service\": \"cutt_ly\", \"displayName\": \"Cuttly\", \"categories\": [\"Marketing\", \"Data\"], \"authTypes\": [\"api_key\"], \"actionCount\": 2}, {\"service\": \"cyberimpact\", \"displayName\": \"Cyberimpact\", \"categories\": [\"Marketing\"], \"authTypes\": [\"api_key\"], \"actionCount\": 15}, {\"service\": \"dadata_ru\", \"displayName\": \"DaData.ru\", \"categories\": [\"Data\", \"Location\"], \"authTypes\": [\"api_key\"], \"actionCount\": 5}, {\"service\": \"daffy\", \"displayName\": \"Daffy\", \"categories\": [\"Finance\"], \"authTypes\": [\"api_key\"], \"actionCount\": 10}, {\"service\": \"dailybot\", \"displayName\": \"Dailybot\", \"categories\": [\"Communication\", \"Productivity\"], \"authTypes\": [\"api_key\"], \"actionCount\": 10}, {\"service\": \"dart\", \"displayName\": \"Dart\", \"categories\": [\"Productivity\", \"AI\"], \"authTypes\": [\"api_key\"], \"actionCount\": 6}, {\"service\": \"data247\", \"displayName\": \"Data247\", \"categories\": [\"Data\", \"Communication\", \"Marketing\"], \"authTypes\": [\"api_key\"], \"actionCount\": 5}, {\"service\": \"databar_ai\", \"displayName\": \"Databar.ai\", \"categories\": [\"Data\", \"Marketing\"], \"authTypes\": [\"api_key\"], \"actionCount\": 11}, {\"service\": \"databox\", \"displayName\": \"Databox\", \"categories\": [\"Data\"], \"authTypes\": [\"api_key\"], \"actionCount\": 7}, {\"service\": \"databricks\", \"displayName\": \"Databricks\", \"categories\": [\"Data\", \"Developer Tools\"], \"authTypes\": [\"api_key\"], \"actionCount\": 36}, {\"service\": \"datadog\", \"displayName\": \"Datadog\", \"categories\": [\"Developer Tools\", \"Data\"], \"authTypes\": [\"api_key\"], \"actionCount\": 7}, {\"service\": \"dataforseo\", \"displayName\": \"DataForSEO\", \"categories\": [\"Data\", \"Marketing\"], \"authTypes\": [\"custom_credential\"], \"actionCount\": 14}, {\"service\": \"datalust\", \"displayName\": \"Datalust Seq\", \"categories\": [\"Data\", \"Developer Tools\"], \"authTypes\": [\"api_key\"], \"actionCount\": 15}, {\"service\": \"datascope\", \"displayName\": \"DataScope\", \"categories\": [\"Productivity\", \"Data\"], \"authTypes\": [\"api_key\"], \"actionCount\": 9}, {\"service\": \"deck_co\", \"displayName\": \"Deck.co\", \"categories\": [\"AI\", \"Developer Tools\"], \"authTypes\": [\"api_key\"], \"actionCount\": 6}, {\"service\": \"deepgram\", \"displayName\": \"Deepgram\", \"categories\": [\"AI\", \"Developer Tools\"], \"authTypes\": [\"api_key\"], \"actionCount\": 8}, {\"service\": \"deepl\", \"displayName\": \"DeepL\", \"categories\": [\"AI\", \"Productivity\"], \"authTypes\": [\"api_key\"], \"actionCount\": 3}, {\"service\": \"deepseek\", \"displayName\": \"DeepSeek\", \"categories\": [\"AI\"], \"authTypes\": [\"api_key\"], \"actionCount\": 4}, {\"service\": \"delighted\", \"displayName\": \"Delighted\", \"categories\": [\"Marketing\", \"Data\"], \"authTypes\": [\"api_key\"], \"actionCount\": 8}, {\"service\": \"demodesk\", \"displayName\": \"Demodesk\", \"categories\": [\"Productivity\", \"AI\"], \"authTypes\": [\"api_key\"], \"actionCount\": 8}, {\"service\": \"desktime\", \"displayName\": \"DeskTime\", \"categories\": [\"Productivity\", \"Data\"], \"authTypes\": [\"api_key\"], \"actionCount\": 5}, {\"service\": \"detect_language\", \"displayName\": \"Detect Language\", \"categories\": [\"AI\", \"Data\"], \"authTypes\": [\"api_key\"], \"actionCount\": 4}, {\"service\": \"devin\", \"displayName\": \"Devin\", \"categories\": [\"AI\", \"Developer Tools\"], \"authTypes\": [\"api_key\"], \"actionCount\": 6}, {\"service\": \"devto\", \"displayName\": \"Dev.to\", \"categories\": [\"Social\"], \"authTypes\": [\"api_key\"], \"actionCount\": 12}, {\"service\": \"dialpad_wfm\", \"displayName\": \"Dialpad WFM\", \"categories\": [\"Productivity\", \"Data\"], \"authTypes\": [\"api_key\"], \"actionCount\": 3}, {\"service\": \"dida365\", \"displayName\": \"Dida365\", \"categories\": [\"Productivity\"], \"authTypes\": [\"oauth2\"], \"actionCount\": 19}, {\"service\": \"diffbot\", \"displayName\": \"Diffbot\", \"categories\": [\"Data\", \"AI\"], \"authTypes\": [\"api_key\"], \"actionCount\": 1}, {\"service\": \"digital_ocean\", \"displayName\": \"DigitalOcean\", \"categories\": [\"Developer Tools\"], \"authTypes\": [\"api_key\"], \"actionCount\": 11}, {\"service\": \"dingtalk_bot\", \"displayName\": \"DingTalk Bot\", \"categories\": [\"Communication\"], \"authTypes\": [\"api_key\"], \"actionCount\": 5}, {\"service\": \"discolike\", \"displayName\": \"DiscoLike\", \"categories\": [\"Marketing\", \"Data\"], \"authTypes\": [\"api_key\"], \"actionCount\": 7}, {\"service\": \"discord\", \"displayName\": \"Discord\", \"categories\": [\"Communication\", \"Social\"], \"authTypes\": [\"oauth2\"], \"actionCount\": 19}, {\"service\": \"discordbot\", \"displayName\": \"Discord Bot\", \"categories\": [\"Communication\", \"Developer Tools\"], \"authTypes\": [\"api_key\"], \"actionCount\": 15}, {\"service\": \"discourse\", \"displayName\": \"Discourse\", \"categories\": [\"Communication\", \"Productivity\"], \"authTypes\": [\"api_key\"], \"actionCount\": 7}, {\"service\": \"dixa\", \"displayName\": \"Dixa\", \"categories\": [\"Communication\", \"Productivity\"], \"authTypes\": [\"api_key\"], \"actionCount\": 7}, {\"service\": \"dns_filter\", \"displayName\": \"DNSFilter\", \"categories\": [\"Security\"], \"authTypes\": [\"api_key\"], \"actionCount\": 9}, {\"service\": \"docker_hub\", \"displayName\": \"Docker Hub\", \"categories\": [\"Developer Tools\"], \"authTypes\": [\"api_key\"], \"actionCount\": 14}, {\"service\": \"docmosis\", \"displayName\": \"Docmosis\", \"categories\": [\"Productivity\", \"Design & Media\"], \"authTypes\": [\"api_key\"], \"actionCount\": 6}, {\"service\": \"docparser\", \"displayName\": \"Docparser\", \"categories\": [\"Productivity\", \"Data\"], \"authTypes\": [\"api_key\"], \"actionCount\": 10}, {\"service\": \"docraptor\", \"displayName\": \"DocRaptor\", \"categories\": [\"Developer Tools\", \"Productivity\"], \"authTypes\": [\"api_key\"], \"actionCount\": 1}, {\"service\": \"docsautomator\", \"displayName\": \"DocsAutomator\", \"categories\": [\"Productivity\", \"Design & Media\"], \"authTypes\": [\"api_key\"], \"actionCount\": 7}, {\"service\": \"docsbot_ai\", \"displayName\": \"DocsBot AI\", \"categories\": [\"AI\", \"Data\"], \"authTypes\": [\"api_key\"], \"actionCount\": 6}, {\"service\": \"docsend_2_pdf\", \"displayName\": \"Docsend2pdf\", \"categories\": [\"Productivity\", \"Design & Media\"], \"authTypes\": [\"no_auth\"], \"actionCount\": 1}, {\"service\": \"docsumo\", \"displayName\": \"Docsumo\", \"categories\": [\"AI\", \"Productivity\", \"Data\"], \"authTypes\": [\"api_key\"], \"actionCount\": 6}, {\"service\": \"docugenerate\", \"displayName\": \"DocuGenerate\", \"categories\": [\"Productivity\", \"Developer Tools\"], \"authTypes\": [\"api_key\"], \"actionCount\": 7}, {\"service\": \"documenso\", \"displayName\": \"Documenso\", \"categories\": [\"Productivity\", \"Communication\"], \"authTypes\": [\"api_key\"], \"actionCount\": 4}, {\"service\": \"document360\", \"displayName\": \"Document360\", \"categories\": [\"Productivity\", \"Developer Tools\"], \"authTypes\": [\"api_key\"], \"actionCount\": 4}, {\"service\": \"docuseal\", \"displayName\": \"DocuSeal\", \"categories\": [\"Productivity\", \"Communication\"], \"authTypes\": [\"api_key\"], \"actionCount\": 3}, {\"service\": \"dokploy\", \"displayName\": \"Dokploy\", \"categories\": [\"Developer Tools\", \"Infrastructure\"], \"authTypes\": [\"api_key\"], \"actionCount\": 524}, {\"service\": \"doppler\", \"displayName\": \"Doppler\", \"categories\": [\"Developer Tools\", \"Security\"], \"authTypes\": [\"api_key\"], \"actionCount\": 44}, {\"service\": \"dovetail\", \"displayName\": \"Dovetail\", \"categories\": [\"Productivity\", \"Data\"], \"authTypes\": [\"api_key\"], \"actionCount\": 7}, {\"service\": \"drata\", \"displayName\": \"Drata\", \"categories\": [\"Security\", \"Productivity\"], \"authTypes\": [\"api_key\"], \"actionCount\": 8}, {\"service\": \"dropbox\", \"displayName\": \"Dropbox\", \"categories\": [\"Storage\", \"Productivity\"], \"authTypes\": [\"oauth2\"], \"actionCount\": 24}, {\"service\": \"dropbox_sign\", \"displayName\": \"Dropbox Sign\", \"categories\": [\"Productivity\"], \"authTypes\": [\"api_key\"], \"actionCount\": 5}, {\"service\": \"dropcontact\", \"displayName\": \"Dropcontact\", \"categories\": [\"Data\", \"Marketing\"], \"authTypes\": [\"api_key\"], \"actionCount\": 2}, {\"service\": \"dub\", \"displayName\": \"Dub\", \"categories\": [\"Marketing\", \"Developer Tools\"], \"authTypes\": [\"api_key\"], \"actionCount\": 15}, {\"service\": \"dune\", \"displayName\": \"Dune\", \"categories\": [\"Data\", \"Developer Tools\"], \"authTypes\": [\"api_key\"], \"actionCount\": 6}, {\"service\": \"dynatrace\", \"displayName\": \"Dynatrace\", \"categories\": [\"Developer Tools\", \"Data\"], \"authTypes\": [\"api_key\"], \"actionCount\": 3}, {\"service\": \"e2b\", \"displayName\": \"E2B\", \"categories\": [\"AI\", \"Developer Tools\"], \"authTypes\": [\"api_key\"], \"actionCount\": 4}, {\"service\": \"eagle_doc\", \"displayName\": \"Eagle Doc\", \"categories\": [\"AI\", \"Finance\", \"Productivity\"], \"authTypes\": [\"api_key\"], \"actionCount\": 5}, {\"service\": \"easypost\", \"displayName\": \"EasyPost\", \"categories\": [\"Productivity\", \"Location\"], \"authTypes\": [\"api_key\"], \"actionCount\": 6}, {\"service\": \"ecologi\", \"displayName\": \"Ecologi\", \"categories\": [\"Finance\", \"Data\"], \"authTypes\": [\"api_key\"], \"actionCount\": 10}, {\"service\": \"elasticsearch\", \"displayName\": \"Elasticsearch\", \"categories\": [\"Data\", \"Developer Tools\"], \"authTypes\": [\"api_key\", \"custom_credential\"], \"actionCount\": 4}, {\"service\": \"elevenlabs\", \"displayName\": \"ElevenLabs\", \"categories\": [\"AI\", \"Design & Media\"], \"authTypes\": [\"api_key\"], \"actionCount\": 14}, {\"service\": \"elevenreader\", \"displayName\": \"ElevenReader\", \"categories\": [\"AI\", \"Design & Media\"], \"authTypes\": [\"api_key\"], \"actionCount\": 5}, {\"service\": \"elevio\", \"displayName\": \"Elevio\", \"categories\": [\"Productivity\", \"Communication\"], \"authTypes\": [\"api_key\"], \"actionCount\": 5}, {\"service\": \"elorus\", \"displayName\": \"Elorus\", \"categories\": [\"Finance\", \"Productivity\"], \"authTypes\": [\"api_key\"], \"actionCount\": 12}, {\"service\": \"emailable\", \"displayName\": \"Emailable\", \"categories\": [\"Communication\", \"Developer Tools\"], \"authTypes\": [\"api_key\"], \"actionCount\": 4}, {\"service\": \"emaillistverify\", \"displayName\": \"EmailListVerify\", \"categories\": [\"Communication\", \"Marketing\"], \"authTypes\": [\"api_key\"], \"actionCount\": 8}, {\"service\": \"emailoctopus\", \"displayName\": \"EmailOctopus\", \"categories\": [\"Communication\", \"Marketing\"], \"authTypes\": [\"api_key\"], \"actionCount\": 9}, {\"service\": \"encharge\", \"displayName\": \"Encharge\", \"categories\": [\"Communication\", \"Marketing\"], \"authTypes\": [\"api_key\"], \"actionCount\": 1}, {\"service\": \"encodian\", \"displayName\": \"Encodian\", \"categories\": [\"Productivity\", \"Design & Media\"], \"authTypes\": [\"api_key\"], \"actionCount\": 5}, {\"service\": \"energy_performance_certificates\", \"displayName\": \"Energy Performance Certificates\", \"categories\": [\"Data\"], \"authTypes\": [\"api_key\"], \"actionCount\": 4}, {\"service\": \"enigma\", \"displayName\": \"Enigma\", \"categories\": [\"Data\"], \"authTypes\": [\"api_key\"], \"actionCount\": 12}, {\"service\": \"envoy\", \"displayName\": \"Envoy\", \"categories\": [\"Productivity\", \"Security\"], \"authTypes\": [\"api_key\"], \"actionCount\": 8}, {\"service\": \"eodhd_apis\", \"displayName\": \"EODHD APIs\", \"categories\": [\"Finance\", \"Data\"], \"authTypes\": [\"api_key\"], \"actionCount\": 8}, {\"service\": \"erpnext\", \"displayName\": \"ERPNext\", \"categories\": [\"Productivity\", \"Finance\"], \"authTypes\": [\"api_key\"], \"actionCount\": 9}, {\"service\": \"esignatures_io\", \"displayName\": \"eSignatures.com\", \"categories\": [\"Productivity\"], \"authTypes\": [\"api_key\"], \"actionCount\": 8}, {\"service\": \"espocrm\", \"displayName\": \"EspoCRM\", \"categories\": [\"Productivity\", \"Marketing\"], \"authTypes\": [\"api_key\"], \"actionCount\": 7}, {\"service\": \"evenium\", \"displayName\": \"Evenium\", \"categories\": [\"Productivity\", \"Communication\"], \"authTypes\": [\"api_key\"], \"actionCount\": 6}, {\"service\": \"eventee\", \"displayName\": \"Eventee\", \"categories\": [\"Productivity\", \"Communication\"], \"authTypes\": [\"api_key\"], \"actionCount\": 5}, {\"service\": \"eventzilla\", \"displayName\": \"Eventzilla\", \"categories\": [\"Productivity\", \"Marketing\"], \"authTypes\": [\"api_key\"], \"actionCount\": 9}, {\"service\": \"everhour\", \"displayName\": \"Everhour\", \"categories\": [\"Productivity\"], \"authTypes\": [\"api_key\"], \"actionCount\": 12}, {\"service\": \"exa\", \"displayName\": \"Exa\", \"categories\": [\"AI\", \"Data\"], \"authTypes\": [\"api_key\"], \"actionCount\": 4}, {\"service\": \"excel\", \"displayName\": \"Excel\", \"categories\": [\"Productivity\", \"Data\"], \"authTypes\": [\"oauth2\"], \"actionCount\": 31}, {\"service\": \"expofp\", \"displayName\": \"ExpoFP\", \"categories\": [\"Productivity\", \"Marketing\"], \"authTypes\": [\"api_key\"], \"actionCount\": 7}, {\"service\": \"fairing\", \"displayName\": \"Fairing\", \"categories\": [\"Marketing\", \"Data\"], \"authTypes\": [\"api_key\"], \"actionCount\": 1}, {\"service\": \"fal_ai\", \"displayName\": \"fal.ai\", \"categories\": [\"AI\", \"Developer Tools\"], \"authTypes\": [\"api_key\"], \"actionCount\": 8}, {\"service\": \"faraday\", \"displayName\": \"Faraday\", \"categories\": [\"AI\", \"Data\"], \"authTypes\": [\"api_key\"], \"actionCount\": 12}, {\"service\": \"fathom\", \"displayName\": \"Fathom Analytics\", \"categories\": [\"Data\"], \"authTypes\": [\"api_key\"], \"actionCount\": 15}, {\"service\": \"feathery\", \"displayName\": \"Feathery\", \"categories\": [\"Productivity\", \"Marketing\"], \"authTypes\": [\"api_key\"], \"actionCount\": 13}, {\"service\": \"featurebase\", \"displayName\": \"Featurebase\", \"categories\": [\"Productivity\", \"Developer Tools\"], \"authTypes\": [\"api_key\"], \"actionCount\": 11}, {\"service\": \"feishu\", \"displayName\": \"Feishu\", \"categories\": [\"Productivity\", \"Storage\"], \"authTypes\": [\"oauth2\"], \"actionCount\": 7}, {\"service\": \"feishu_app_bot\", \"displayName\": \"Feishu App Bot\", \"categories\": [\"Communication\"], \"authTypes\": [\"custom_credential\"], \"actionCount\": 20}, {\"service\": \"feishu_custom_bot\", \"displayName\": \"Feishu Custom Bot\", \"categories\": [\"Communication\"], \"authTypes\": [\"api_key\"], \"actionCount\": 5}, {\"service\": \"fellow\", \"displayName\": \"Fellow\", \"categories\": [\"Productivity\", \"Communication\"], \"authTypes\": [\"api_key\"], \"actionCount\": 7}, {\"service\": \"felt\", \"displayName\": \"Felt\", \"categories\": [\"Developer Tools\", \"Productivity\"], \"authTypes\": [\"api_key\"], \"actionCount\": 12}, {\"service\": \"fern\", \"displayName\": \"Fern\", \"categories\": [\"Finance\"], \"authTypes\": [\"api_key\"], \"actionCount\": 7}, {\"service\": \"ffhub\", \"displayName\": \"FFHub\", \"categories\": [\"Media\", \"Developer Tools\"], \"authTypes\": [\"api_key\"], \"actionCount\": 3}, {\"service\": \"fiber_ai\", \"displayName\": \"Fiber AI\", \"categories\": [\"Data\", \"Marketing\", \"AI\"], \"authTypes\": [\"api_key\"], \"actionCount\": 3}, {\"service\": \"fidel_api\", \"displayName\": \"Fidel API\", \"categories\": [\"Finance\", \"Data\"], \"authTypes\": [\"api_key\"], \"actionCount\": 6}, {\"service\": \"figma\", \"displayName\": \"Figma\", \"categories\": [\"Design\", \"Productivity\"], \"authTypes\": [\"api_key\", \"oauth2\"], \"actionCount\": 26}, {\"service\": \"files_com\", \"displayName\": \"Files.com\", \"categories\": [\"Productivity\", \"Data\"], \"authTypes\": [\"api_key\"], \"actionCount\": 5}, {\"service\": \"fillout\", \"displayName\": \"Fillout\", \"categories\": [\"Productivity\", \"Marketing\"], \"authTypes\": [\"api_key\"], \"actionCount\": 6}, {\"service\": \"finage\", \"displayName\": \"Finage\", \"categories\": [\"Finance\", \"Data\"], \"authTypes\": [\"api_key\"], \"actionCount\": 6}, {\"service\": \"financial_modeling_prep\", \"displayName\": \"Financial Modeling Prep\", \"categories\": [\"Finance\", \"Data\"], \"authTypes\": [\"api_key\"], \"actionCount\": 37}, {\"service\": \"findymail\", \"displayName\": \"Findymail\", \"categories\": [\"Marketing\", \"Data\"], \"authTypes\": [\"api_key\"], \"actionCount\": 5}, {\"service\": \"fireberry\", \"displayName\": \"Fireberry\", \"categories\": [\"Productivity\", \"Marketing\"], \"authTypes\": [\"api_key\"], \"actionCount\": 11}, {\"service\": \"firecrawl\", \"displayName\": \"Firecrawl\", \"categories\": [\"Data\", \"Developer Tools\"], \"authTypes\": [\"api_key\"], \"actionCount\": 30}, {\"service\": \"fireflies\", \"displayName\": \"Fireflies\", \"categories\": [\"AI\", \"Productivity\", \"Communication\"], \"authTypes\": [\"api_key\"], \"actionCount\": 22}, {\"service\": \"firehydrant\", \"displayName\": \"FireHydrant\", \"categories\": [\"Developer Tools\", \"Productivity\"], \"authTypes\": [\"api_key\"], \"actionCount\": 7}, {\"service\": \"firstbase\", \"displayName\": \"Firstbase\", \"categories\": [\"Productivity\"], \"authTypes\": [\"api_key\"], \"actionCount\": 6}, {\"service\": \"fivetran\", \"displayName\": \"Fivetran\", \"categories\": [\"Data\", \"Developer Tools\"], \"authTypes\": [\"custom_credential\"], \"actionCount\": 6}, {\"service\": \"fixer\", \"displayName\": \"Fixer\", \"categories\": [\"Finance\", \"Data\"], \"authTypes\": [\"api_key\"], \"actionCount\": 3}, {\"service\": \"flagsmith\", \"displayName\": \"Flagsmith\", \"categories\": [\"Developer Tools\"], \"authTypes\": [\"api_key\"], \"actionCount\": 4}, {\"service\": \"float\", \"displayName\": \"Float\", \"categories\": [\"Productivity\"], \"authTypes\": [\"api_key\"], \"actionCount\": 5}, {\"service\": \"flomo\", \"displayName\": \"flomo\", \"categories\": [\"Productivity\"], \"authTypes\": [\"api_key\", \"custom_credential\"], \"actionCount\": 13}, {\"service\": \"flowiseai\", \"displayName\": \"FlowiseAI\", \"categories\": [\"AI\", \"Developer Tools\"], \"authTypes\": [\"api_key\"], \"actionCount\": 2}, {\"service\": \"fluxguard\", \"displayName\": \"Fluxguard\", \"categories\": [\"Data\", \"Developer Tools\"], \"authTypes\": [\"api_key\"], \"actionCount\": 12}, {\"service\": \"fly\", \"displayName\": \"Fly.io\", \"categories\": [\"Developer Tools\"], \"authTypes\": [\"api_key\"], \"actionCount\": 9}, {\"service\": \"folk\", \"displayName\": \"folk\", \"categories\": [\"Productivity\", \"Communication\"], \"authTypes\": [\"api_key\"], \"actionCount\": 15}, {\"service\": \"fomo\", \"displayName\": \"Fomo\", \"categories\": [\"Marketing\", \"Social\"], \"authTypes\": [\"api_key\"], \"actionCount\": 5}, {\"service\": \"football_data\", \"displayName\": \"football-data.org\", \"categories\": [\"Data\"], \"authTypes\": [\"api_key\"], \"actionCount\": 6}, {\"service\": \"forem\", \"displayName\": \"Forem\", \"categories\": [\"Social\", \"Developer Tools\"], \"authTypes\": [\"api_key\"], \"actionCount\": 10}, {\"service\": \"formbricks\", \"displayName\": \"Formbricks\", \"categories\": [\"Productivity\", \"Data\"], \"authTypes\": [\"api_key\"], \"actionCount\": 7}, {\"service\": \"formcarry\", \"displayName\": \"Formcarry\", \"categories\": [\"Marketing\", \"Productivity\"], \"authTypes\": [\"api_key\"], \"actionCount\": 3}, {\"service\": \"formsite\", \"displayName\": \"Formsite\", \"categories\": [\"Productivity\", \"Data\"], \"authTypes\": [\"api_key\"], \"actionCount\": 7}, {\"service\": \"formspree\", \"displayName\": \"Formspree\", \"categories\": [\"Developer Tools\", \"Marketing\"], \"authTypes\": [\"api_key\"], \"actionCount\": 1}, {\"service\": \"foursquare\", \"displayName\": \"Foursquare\", \"categories\": [\"Location\", \"Data\"], \"authTypes\": [\"api_key\"], \"actionCount\": 5}, {\"service\": \"fraudlabspro\", \"displayName\": \"FraudLabs Pro\", \"categories\": [\"Security\", \"Data\"], \"authTypes\": [\"api_key\"], \"actionCount\": 3}, {\"service\": \"freepik\", \"displayName\": \"Magnific (Freepik)\", \"categories\": [\"Design & Media\", \"AI\"], \"authTypes\": [\"api_key\"], \"actionCount\": 3}, {\"service\": \"freshdesk\", \"displayName\": \"Freshdesk\", \"categories\": [\"Communication\", \"Productivity\"], \"authTypes\": [\"api_key\"], \"actionCount\": 4}, {\"service\": \"freshsales\", \"displayName\": \"Freshsales\", \"categories\": [\"Marketing\", \"Productivity\"], \"authTypes\": [\"api_key\"], \"actionCount\": 6}, {\"service\": \"freshservice\", \"displayName\": \"Freshservice\", \"categories\": [\"Communication\", \"Productivity\"], \"authTypes\": [\"api_key\"], \"actionCount\": 6}, {\"service\": \"freshteam\", \"displayName\": \"Freshteam\", \"categories\": [\"Productivity\", \"Data\"], \"authTypes\": [\"api_key\"], \"actionCount\": 9}, {\"service\": \"front\", \"displayName\": \"Front\", \"categories\": [\"Communication\", \"Productivity\"], \"authTypes\": [\"api_key\"], \"actionCount\": 5}, {\"service\": \"fullenrich\", \"displayName\": \"FullEnrich\", \"categories\": [\"Data\", \"Marketing\"], \"authTypes\": [\"api_key\"], \"actionCount\": 3}, {\"service\": \"fusion-api\", \"displayName\": \"OOMOL Fusion API\", \"categories\": [\"AI\", \"Developer Tools\"], \"authTypes\": [\"api_key\"], \"actionCount\": 84}, {\"service\": \"fuxin\", \"displayName\": \"Foxit Cloud API\", \"categories\": [\"Productivity\", \"Design & Media\"], \"authTypes\": [\"custom_credential\"], \"actionCount\": 22}, {\"service\": \"gamma\", \"displayName\": \"Gamma\", \"categories\": [\"AI\", \"Design & Media\", \"Productivity\"], \"authTypes\": [\"api_key\"], \"actionCount\": 8}, {\"service\": \"geckoboard\", \"displayName\": \"Geckoboard\", \"categories\": [\"Data\", \"Productivity\"], \"authTypes\": [\"api_key\"], \"actionCount\": 4}, {\"service\": \"gem\", \"displayName\": \"Gem\", \"categories\": [\"Productivity\", \"Data\"], \"authTypes\": [\"api_key\"], \"actionCount\": 9}, {\"service\": \"gemini\", \"displayName\": \"Gemini\", \"categories\": [\"AI\"], \"authTypes\": [\"api_key\"], \"actionCount\": 8}, {\"service\": \"gender_api\", \"displayName\": \"Gender-API.com\", \"categories\": [\"Data\"], \"authTypes\": [\"api_key\"], \"actionCount\": 5}, {\"service\": \"genderapi_io\", \"displayName\": \"GenderAPI.io\", \"categories\": [\"Data\"], \"authTypes\": [\"api_key\"], \"actionCount\": 3}, {\"service\": \"genderize\", \"displayName\": \"Genderize\", \"categories\": [\"Data\"], \"authTypes\": [\"api_key\"], \"actionCount\": 2}, {\"service\": \"geoapify\", \"displayName\": \"Geoapify\", \"categories\": [\"Location\", \"Developer Tools\"], \"authTypes\": [\"api_key\"], \"actionCount\": 5}, {\"service\": \"geocodio\", \"displayName\": \"Geocodio\", \"categories\": [\"Location\", \"Data\"], \"authTypes\": [\"api_key\"], \"actionCount\": 4}, {\"service\": \"geokeo\", \"displayName\": \"Geokeo\", \"categories\": [\"Location\", \"Data\"], \"authTypes\": [\"api_key\"], \"actionCount\": 2}, {\"service\": \"getform\", \"displayName\": \"Getform\", \"categories\": [\"Productivity\", \"Marketing\"], \"authTypes\": [\"api_key\"], \"actionCount\": 2}, {\"service\": \"getnote\", \"displayName\": \"Getnote\", \"categories\": [\"AI\", \"Productivity\"], \"authTypes\": [\"api_key\"], \"actionCount\": 23}, {\"service\": \"getprospect\", \"displayName\": \"GetProspect\", \"categories\": [\"Marketing\", \"Data\"], \"authTypes\": [\"api_key\"], \"actionCount\": 5}, {\"service\": \"ghost\", \"displayName\": \"Ghost\", \"categories\": [\"Productivity\", \"Marketing\"], \"authTypes\": [\"api_key\"], \"actionCount\": 9}, {\"service\": \"gift_up\", \"displayName\": \"Gift Up\", \"categories\": [\"Finance\", \"Marketing\"], \"authTypes\": [\"api_key\"], \"actionCount\": 17}, {\"service\": \"gigasheet\", \"displayName\": \"Gigasheet\", \"categories\": [\"Data\", \"Productivity\"], \"authTypes\": [\"api_key\"], \"actionCount\": 7}, {\"service\": \"giphy\", \"displayName\": \"GIPHY\", \"categories\": [\"Design & Media\", \"Social\"], \"authTypes\": [\"api_key\"], \"actionCount\": 15}, {\"service\": \"gist\", \"displayName\": \"Gist\", \"categories\": [\"Developer Tools\"], \"authTypes\": [\"oauth2\", \"api_key\"], \"actionCount\": 20}, {\"service\": \"gitea\", \"displayName\": \"Gitea\", \"categories\": [\"Developer Tools\"], \"authTypes\": [\"api_key\"], \"actionCount\": 9}, {\"service\": \"gitee\", \"displayName\": \"Gitee\", \"categories\": [\"Developer Tools\"], \"authTypes\": [\"oauth2\", \"api_key\"], \"actionCount\": 3}, {\"service\": \"github\", \"displayName\": \"GitHub\", \"categories\": [\"Developer Tools\"], \"authTypes\": [\"oauth2\", \"api_key\"], \"actionCount\": 145}, {\"service\": \"gitlab\", \"displayName\": \"GitLab\", \"categories\": [\"Developer Tools\"], \"authTypes\": [\"api_key\"], \"actionCount\": 5}, {\"service\": \"givebutter\", \"displayName\": \"Givebutter\", \"categories\": [\"Finance\"], \"authTypes\": [\"api_key\"], \"actionCount\": 12}, {\"service\": \"gladia\", \"displayName\": \"Gladia\", \"categories\": [\"AI\", \"Design & Media\"], \"authTypes\": [\"api_key\"], \"actionCount\": 6}, {\"service\": \"gleap\", \"displayName\": \"Gleap\", \"categories\": [\"Communication\", \"Productivity\"], \"authTypes\": [\"api_key\"], \"actionCount\": 11}, {\"service\": \"globalping\", \"displayName\": \"Globalping\", \"categories\": [\"Developer Tools\", \"Data\"], \"authTypes\": [\"api_key\"], \"actionCount\": 4}, {\"service\": \"glyphic\", \"displayName\": \"Glyphic\", \"categories\": [\"AI\", \"Productivity\"], \"authTypes\": [\"api_key\"], \"actionCount\": 9}, {\"service\": \"gmail\", \"displayName\": \"Gmail\", \"categories\": [\"Productivity\"], \"authTypes\": [\"oauth2\"], \"actionCount\": 46}, {\"service\": \"godial\", \"displayName\": \"GoDial\", \"categories\": [\"Communication\", \"Productivity\"], \"authTypes\": [\"api_key\"], \"actionCount\": 5}, {\"service\": \"gong\", \"displayName\": \"Gong\", \"categories\": [\"Data\", \"Productivity\"], \"authTypes\": [\"custom_credential\"], \"actionCount\": 6}, {\"service\": \"goody\", \"displayName\": \"Goody\", \"categories\": [\"Productivity\"], \"authTypes\": [\"api_key\"], \"actionCount\": 7}, {\"service\": \"google_address_validation\", \"displayName\": \"Google Address Validation\", \"categories\": [\"Location\", \"Data\"], \"authTypes\": [\"api_key\"], \"actionCount\": 2}, {\"service\": \"google_analytics\", \"displayName\": \"Google Analytics\", \"categories\": [\"Data\", \"Marketing\"], \"authTypes\": [\"oauth2\"], \"actionCount\": 28}, {\"service\": \"google_bigquery\", \"displayName\": \"Google BigQuery\", \"categories\": [\"Data\", \"Developer Tools\"], \"authTypes\": [\"oauth2\"], \"actionCount\": 32}, {\"service\": \"google_routes\", \"displayName\": \"Google Routes\", \"categories\": [\"Location\", \"Developer Tools\"], \"authTypes\": [\"api_key\"], \"actionCount\": 2}, {\"service\": \"google_search_console\", \"displayName\": \"Google Search Console\", \"categories\": [\"Data\", \"Marketing\"], \"authTypes\": [\"oauth2\"], \"actionCount\": 10}, {\"service\": \"googleads\", \"displayName\": \"Google Ads\", \"categories\": [\"Marketing\", \"Data\"], \"authTypes\": [\"oauth2\"], \"actionCount\": 9}, {\"service\": \"googlecalendar\", \"displayName\": \"Google Calendar\", \"categories\": [\"Productivity\", \"Communication\"], \"authTypes\": [\"oauth2\"], \"actionCount\": 37}, {\"service\": \"googledocs\", \"displayName\": \"Google Docs\", \"categories\": [\"Productivity\"], \"authTypes\": [\"oauth2\"], \"actionCount\": 32}, {\"service\": \"googledrive\", \"displayName\": \"Google Drive\", \"categories\": [\"Storage\", \"Productivity\"], \"authTypes\": [\"oauth2\"], \"actionCount\": 43}, {\"service\": \"googleforms\", \"displayName\": \"Google Forms\", \"categories\": [\"Productivity\", \"Data\"], \"authTypes\": [\"oauth2\"], \"actionCount\": 7}, {\"service\": \"googlephotos\", \"displayName\": \"Google Photos\", \"categories\": [\"Storage\", \"Design\"], \"authTypes\": [\"oauth2\"], \"actionCount\": 18}, {\"service\": \"googlesheets\", \"displayName\": \"Google Sheets\", \"categories\": [\"Productivity\", \"Data\"], \"authTypes\": [\"oauth2\"], \"actionCount\": 40}, {\"service\": \"googleslides\", \"displayName\": \"Google Slides\", \"categories\": [\"Productivity\", \"Design\"], \"authTypes\": [\"oauth2\"], \"actionCount\": 7}, {\"service\": \"googletasks\", \"displayName\": \"Google Tasks\", \"categories\": [\"Productivity\"], \"authTypes\": [\"oauth2\"], \"actionCount\": 16}, {\"service\": \"gorgias\", \"displayName\": \"Gorgias\", \"categories\": [\"Communication\", \"Productivity\"], \"authTypes\": [\"api_key\"], \"actionCount\": 6}, {\"service\": \"gosquared\", \"displayName\": \"GoSquared\", \"categories\": [\"Data\", \"Marketing\"], \"authTypes\": [\"api_key\"], \"actionCount\": 4}, {\"service\": \"grafana\", \"displayName\": \"Grafana\", \"categories\": [\"Data\", \"Developer Tools\"], \"authTypes\": [\"api_key\"], \"actionCount\": 15}, {\"service\": \"grafana_cloud\", \"displayName\": \"Grafana Cloud\", \"categories\": [\"Developer Tools\", \"Data\"], \"authTypes\": [\"api_key\"], \"actionCount\": 4}, {\"service\": \"granola\", \"displayName\": \"Granola\", \"categories\": [\"AI\", \"Productivity\"], \"authTypes\": [\"api_key\"], \"actionCount\": 3}, {\"service\": \"graphhopper\", \"displayName\": \"GraphHopper\", \"categories\": [\"Location\", \"Developer Tools\"], \"authTypes\": [\"api_key\"], \"actionCount\": 5}, {\"service\": \"greenhouse\", \"displayName\": \"Greenhouse\", \"categories\": [\"Productivity\", \"Data\"], \"authTypes\": [\"api_key\"], \"actionCount\": 7}, {\"service\": \"griptape\", \"displayName\": \"Griptape\", \"categories\": [\"AI\"], \"authTypes\": [\"api_key\"], \"actionCount\": 12}, {\"service\": \"grist\", \"displayName\": \"Grist\", \"categories\": [\"Productivity\", \"Data\"], \"authTypes\": [\"api_key\"], \"actionCount\": 8}, {\"service\": \"groqcloud\", \"displayName\": \"GroqCloud\", \"categories\": [\"AI\", \"Developer Tools\"], \"authTypes\": [\"api_key\"], \"actionCount\": 3}, {\"service\": \"gtmetrix\", \"displayName\": \"GTmetrix\", \"categories\": [\"Developer Tools\", \"Data\"], \"authTypes\": [\"api_key\"], \"actionCount\": 15}, {\"service\": \"gumloop\", \"displayName\": \"Gumloop\", \"categories\": [\"AI\", \"Productivity\"], \"authTypes\": [\"api_key\"], \"actionCount\": 7}, {\"service\": \"gumroad\", \"displayName\": \"Gumroad\", \"categories\": [\"Finance\", \"Marketing\"], \"authTypes\": [\"api_key\"], \"actionCount\": 9}, {\"service\": \"guru\", \"displayName\": \"Guru\", \"categories\": [\"Productivity\", \"Data\"], \"authTypes\": [\"api_key\"], \"actionCount\": 5}, {\"service\": \"habitica\", \"displayName\": \"Habitica\", \"categories\": [\"Productivity\"], \"authTypes\": [\"api_key\"], \"actionCount\": 11}, {\"service\": \"hackernews\", \"displayName\": \"Hacker News\", \"categories\": [\"Social\"], \"authTypes\": [\"no_auth\"], \"actionCount\": 14}, {\"service\": \"hackerrank_work\", \"displayName\": \"HackerRank Work\", \"categories\": [\"Productivity\", \"Developer Tools\"], \"authTypes\": [\"api_key\"], \"actionCount\": 5}, {\"service\": \"harmonic_ai\", \"displayName\": \"Harmonic.ai\", \"categories\": [\"Data\", \"AI\"], \"authTypes\": [\"api_key\"], \"actionCount\": 6}, {\"service\": \"harvest\", \"displayName\": \"Harvest\", \"categories\": [\"Productivity\"], \"authTypes\": [\"oauth2\", \"api_key\"], \"actionCount\": 15}, {\"service\": \"hasdata\", \"displayName\": \"HasData\", \"categories\": [\"Data\", \"Developer Tools\"], \"authTypes\": [\"api_key\"], \"actionCount\": 2}, {\"service\": \"haveibeenpwned\", \"displayName\": \"Have I Been Pwned\", \"categories\": [\"Security\", \"Data\"], \"authTypes\": [\"api_key\"], \"actionCount\": 7}, {\"service\": \"headout\", \"displayName\": \"Headout\", \"categories\": [\"Productivity\", \"Data\"], \"authTypes\": [\"api_key\"], \"actionCount\": 8}, {\"service\": \"healthchecks_io\", \"displayName\": \"Healthchecks.io\", \"categories\": [\"Developer Tools\"], \"authTypes\": [\"api_key\"], \"actionCount\": 11}, {\"service\": \"helloleads\", \"displayName\": \"HelloLeads\", \"categories\": [\"Marketing\", \"Productivity\"], \"authTypes\": [\"api_key\"], \"actionCount\": 2}, {\"service\": \"helpscout_docs\", \"displayName\": \"Help Scout Docs\", \"categories\": [\"Productivity\", \"Communication\"], \"authTypes\": [\"api_key\"], \"actionCount\": 6}, {\"service\": \"here\", \"displayName\": \"HERE\", \"categories\": [\"Location\", \"Data\"], \"authTypes\": [\"api_key\"], \"actionCount\": 6}, {\"service\": \"hex\", \"displayName\": \"Hex\", \"categories\": [\"Data\", \"Developer Tools\"], \"authTypes\": [\"api_key\"], \"actionCount\": 6}, {\"service\": \"heygen\", \"displayName\": \"HeyGen\", \"categories\": [\"AI\", \"Design & Media\"], \"authTypes\": [\"api_key\"], \"actionCount\": 17}, {\"service\": \"heyreach\", \"displayName\": \"HeyReach\", \"categories\": [\"Marketing\"], \"authTypes\": [\"api_key\"], \"actionCount\": 10}, {\"service\": \"heyy\", \"displayName\": \"Heyy\", \"categories\": [\"Communication\", \"Marketing\"], \"authTypes\": [\"api_key\"], \"actionCount\": 9}, {\"service\": \"heyzine\", \"displayName\": \"Heyzine\", \"categories\": [\"Design & Media\", \"Productivity\"], \"authTypes\": [\"api_key\"], \"actionCount\": 9}, {\"service\": \"higgsfield_ai\", \"displayName\": \"Higgsfield AI\", \"categories\": [\"AI\", \"Design & Media\"], \"authTypes\": [\"api_key\"], \"actionCount\": 4}, {\"service\": \"high_level\", \"displayName\": \"HighLevel\", \"categories\": [\"Marketing\", \"Communication\"], \"authTypes\": [\"api_key\"], \"actionCount\": 5}, {\"service\": \"highergov\", \"displayName\": \"HigherGov\", \"categories\": [\"Data\"], \"authTypes\": [\"api_key\"], \"actionCount\": 4}, {\"service\": \"holded\", \"displayName\": \"Holded\", \"categories\": [\"Finance\", \"Productivity\"], \"authTypes\": [\"api_key\"], \"actionCount\": 5}, {\"service\": \"home_assistant\", \"displayName\": \"Home Assistant\", \"categories\": [\"Productivity\"], \"authTypes\": [\"api_key\"], \"actionCount\": 8}, {\"service\": \"honeybadger\", \"displayName\": \"Honeybadger\", \"categories\": [\"Developer Tools\", \"Security\"], \"authTypes\": [\"api_key\"], \"actionCount\": 5}, {\"service\": \"honeycomb\", \"displayName\": \"Honeycomb\", \"categories\": [\"Developer Tools\", \"Data\"], \"authTypes\": [\"api_key\"], \"actionCount\": 7}, {\"service\": \"hookdeck\", \"displayName\": \"Hookdeck\", \"categories\": [\"Developer Tools\"], \"authTypes\": [\"api_key\"], \"actionCount\": 15}, {\"service\": \"hoop\", \"displayName\": \"Hoop\", \"categories\": [\"Security\", \"Developer Tools\"], \"authTypes\": [\"api_key\"], \"actionCount\": 3}, {\"service\": \"hotspotsystem\", \"displayName\": \"HotspotSystem\", \"categories\": [\"Productivity\", \"Communication\"], \"authTypes\": [\"api_key\"], \"actionCount\": 7}, {\"service\": \"html_to_image\", \"displayName\": \"HTML to Image\", \"categories\": [\"Developer Tools\", \"Design & Media\"], \"authTypes\": [\"api_key\"], \"actionCount\": 2}, {\"service\": \"htmlcsstoimage\", \"displayName\": \"HTML/CSS to Image\", \"categories\": [\"Developer Tools\", \"Design & Media\"], \"authTypes\": [\"api_key\"], \"actionCount\": 5}, {\"service\": \"hubspot\", \"displayName\": \"HubSpot\", \"categories\": [\"Marketing\", \"Productivity\"], \"authTypes\": [\"oauth2\"], \"actionCount\": 26}, {\"service\": \"huggingface\", \"displayName\": \"Hugging Face\", \"categories\": [\"AI\", \"Developer Tools\"], \"authTypes\": [\"oauth2\", \"api_key\"], \"actionCount\": 14}, {\"service\": \"humanitix\", \"displayName\": \"Humanitix\", \"categories\": [\"Productivity\", \"Marketing\"], \"authTypes\": [\"api_key\"], \"actionCount\": 3}, {\"service\": \"hunter\", \"displayName\": \"Hunter\", \"categories\": [\"Communication\", \"Marketing\"], \"authTypes\": [\"api_key\"], \"actionCount\": 18}, {\"service\": \"hyperbrowser\", \"displayName\": \"Hyperbrowser\", \"categories\": [\"Developer Tools\", \"Data\"], \"authTypes\": [\"api_key\"], \"actionCount\": 5}, {\"service\": \"icypeas\", \"displayName\": \"Icypeas\", \"categories\": [\"Data\", \"Marketing\"], \"authTypes\": [\"api_key\"], \"actionCount\": 6}, {\"service\": \"ima\", \"displayName\": \"ima\", \"categories\": [\"AI\", \"Productivity\"], \"authTypes\": [\"custom_credential\"], \"actionCount\": 17}, {\"service\": \"imagekit\", \"displayName\": \"ImageKit\", \"categories\": [\"Design & Media\", \"Storage\"], \"authTypes\": [\"api_key\"], \"actionCount\": 7}, {\"service\": \"imgbb\", \"displayName\": \"ImgBB\", \"categories\": [\"Design & Media\", \"Storage\"], \"authTypes\": [\"api_key\"], \"actionCount\": 1}, {\"service\": \"imgix\", \"displayName\": \"Imgix\", \"categories\": [\"Design & Media\", \"Developer Tools\"], \"authTypes\": [\"api_key\"], \"actionCount\": 4}, {\"service\": \"incident_io\", \"displayName\": \"incident.io\", \"categories\": [\"Developer Tools\", \"Productivity\"], \"authTypes\": [\"api_key\"], \"actionCount\": 6}, {\"service\": \"influxdb_cloud\", \"displayName\": \"InfluxDB Cloud\", \"categories\": [\"Data\", \"Developer Tools\"], \"authTypes\": [\"api_key\"], \"actionCount\": 4}, {\"service\": \"instantly_ai\", \"displayName\": \"Instantly.ai\", \"categories\": [\"Marketing\"], \"authTypes\": [\"api_key\"], \"actionCount\": 4}, {\"service\": \"instatus\", \"displayName\": \"Instatus\", \"categories\": [\"Developer Tools\", \"Productivity\"], \"authTypes\": [\"api_key\"], \"actionCount\": 15}, {\"service\": \"intelliprint\", \"displayName\": \"Intelliprint\", \"categories\": [\"Productivity\", \"Communication\"], \"authTypes\": [\"api_key\"], \"actionCount\": 8}, {\"service\": \"intercom\", \"displayName\": \"Intercom\", \"categories\": [\"Communication\", \"Productivity\"], \"authTypes\": [\"oauth2\"], \"actionCount\": 24}, {\"service\": \"interzoid\", \"displayName\": \"Interzoid\", \"categories\": [\"Data\", \"Developer Tools\"], \"authTypes\": [\"api_key\"], \"actionCount\": 7}, {\"service\": \"ip2location\", \"displayName\": \"IP2Location.io\", \"categories\": [\"Location\", \"Security\", \"Data\"], \"authTypes\": [\"api_key\"], \"actionCount\": 3}, {\"service\": \"ip2proxy\", \"displayName\": \"IP2Proxy\", \"categories\": [\"Security\", \"Location\", \"Data\"], \"authTypes\": [\"api_key\"], \"actionCount\": 1}, {\"service\": \"ip2whois\", \"displayName\": \"IP2WHOIS\", \"categories\": [\"Security\", \"Data\"], \"authTypes\": [\"api_key\"], \"actionCount\": 2}, {\"service\": \"ipdata_co\", \"displayName\": \"ipdata.co\", \"categories\": [\"Location\", \"Security\", \"Data\"], \"authTypes\": [\"api_key\"], \"actionCount\": 30}, {\"service\": \"ipgeolocation_io\", \"displayName\": \"IPGeolocation.io\", \"categories\": [\"Location\", \"Data\", \"Developer Tools\"], \"authTypes\": [\"api_key\"], \"actionCount\": 3}, {\"service\": \"ipinfo_io\", \"displayName\": \"IPinfo\", \"categories\": [\"Location\", \"Data\"], \"authTypes\": [\"api_key\"], \"actionCount\": 27}, {\"service\": \"iplocate\", \"displayName\": \"IPLocate\", \"categories\": [\"Location\", \"Security\", \"Data\"], \"authTypes\": [\"api_key\"], \"actionCount\": 3}, {\"service\": \"ipqualityscore\", \"displayName\": \"IPQualityScore\", \"categories\": [\"Security\", \"Data\"], \"authTypes\": [\"api_key\"], \"actionCount\": 4}, {\"service\": \"ipregistry\", \"displayName\": \"Ipregistry\", \"categories\": [\"Location\", \"Security\", \"Data\"], \"authTypes\": [\"api_key\"], \"actionCount\": 5}, {\"service\": \"ipstack\", \"displayName\": \"ipstack\", \"categories\": [\"Location\", \"Data\"], \"authTypes\": [\"api_key\"], \"actionCount\": 3}, {\"service\": \"iqair_airvisual\", \"displayName\": \"IQAir AirVisual\", \"categories\": [\"Location\", \"Data\"], \"authTypes\": [\"api_key\"], \"actionCount\": 5}, {\"service\": \"it_glue\", \"displayName\": \"IT Glue\", \"categories\": [\"Productivity\", \"Developer Tools\"], \"authTypes\": [\"api_key\"], \"actionCount\": 8}, {\"service\": \"jamie\", \"displayName\": \"Jamie\", \"categories\": [\"Productivity\", \"AI\"], \"authTypes\": [\"api_key\"], \"actionCount\": 5}, {\"service\": \"jazzhr\", \"displayName\": \"JazzHR\", \"categories\": [\"Productivity\", \"Data\"], \"authTypes\": [\"api_key\"], \"actionCount\": 6}, {\"service\": \"jigsawstack\", \"displayName\": \"JigsawStack\", \"categories\": [\"AI\", \"Developer Tools\", \"Data\"], \"authTypes\": [\"api_key\"], \"actionCount\": 6}, {\"service\": \"jimeng_ai\", \"displayName\": \"Jimeng AI\", \"categories\": [\"AI\", \"Design & Media\"], \"authTypes\": [\"custom_credential\"], \"actionCount\": 28}, {\"service\": \"jiminny\", \"displayName\": \"Jiminny\", \"categories\": [\"Data\", \"Marketing\"], \"authTypes\": [\"api_key\"], \"actionCount\": 16}, {\"service\": \"jin10\", \"displayName\": \"Jin10\", \"categories\": [\"Finance\", \"Data\"], \"authTypes\": [\"api_key\"], \"actionCount\": 9}, {\"service\": \"jira\", \"displayName\": \"Jira\", \"categories\": [\"Productivity\", \"Developer Tools\"], \"authTypes\": [\"oauth2\"], \"actionCount\": 7}, {\"service\": \"jobnimbus\", \"displayName\": \"JobNimbus\", \"categories\": [\"Productivity\", \"Marketing\"], \"authTypes\": [\"api_key\"], \"actionCount\": 8}, {\"service\": \"jotform\", \"displayName\": \"Jotform\", \"categories\": [\"Productivity\", \"Data\"], \"authTypes\": [\"api_key\"], \"actionCount\": 7}, {\"service\": \"jsonbin\", \"displayName\": \"JSONBin.io\", \"categories\": [\"Storage\", \"Developer Tools\"], \"authTypes\": [\"api_key\"], \"actionCount\": 4}, {\"service\": \"jumpcloud\", \"displayName\": \"JumpCloud\", \"categories\": [\"Security\"], \"authTypes\": [\"api_key\"], \"actionCount\": 4}, {\"service\": \"jumpserver\", \"displayName\": \"JumpServer\", \"categories\": [\"Developer Tools\", \"Infrastructure\", \"Security\"], \"authTypes\": [\"custom_credential\"], \"actionCount\": 6}, {\"service\": \"juniper_mist\", \"displayName\": \"Juniper Mist\", \"categories\": [\"Security\", \"Developer Tools\"], \"authTypes\": [\"api_key\"], \"actionCount\": 3}, {\"service\": \"kaggle\", \"displayName\": \"Kaggle\", \"categories\": [\"Data\", \"AI\"], \"authTypes\": [\"api_key\"], \"actionCount\": 4}, {\"service\": \"kaleido\", \"displayName\": \"Kaleido\", \"categories\": [\"Developer Tools\"], \"authTypes\": [\"api_key\"], \"actionCount\": 12}, {\"service\": \"kandji\", \"displayName\": \"Iru (Kandji)\", \"categories\": [\"Productivity\", \"Security\"], \"authTypes\": [\"api_key\"], \"actionCount\": 4}, {\"service\": \"keen_io\", \"displayName\": \"Keen IO\", \"categories\": [\"Data\", \"Developer Tools\"], \"authTypes\": [\"api_key\"], \"actionCount\": 3}, {\"service\": \"keeper_scim\", \"displayName\": \"Keeper SCIM\", \"categories\": [\"Security\"], \"authTypes\": [\"api_key\"], \"actionCount\": 5}, {\"service\": \"kernel\", \"displayName\": \"Kernel\", \"categories\": [\"Developer Tools\", \"AI\"], \"authTypes\": [\"api_key\"], \"actionCount\": 5}, {\"service\": \"keygen\", \"displayName\": \"Keygen\", \"categories\": [\"Developer Tools\", \"Security\"], \"authTypes\": [\"api_key\"], \"actionCount\": 76}, {\"service\": \"keyword\", \"displayName\": \"Keyword.com\", \"categories\": [\"Marketing\", \"Data\"], \"authTypes\": [\"api_key\"], \"actionCount\": 6}, {\"service\": \"kickbox\", \"displayName\": \"Kickbox\", \"categories\": [\"Communication\", \"Marketing\"], \"authTypes\": [\"api_key\"], \"actionCount\": 2}, {\"service\": \"kie_ai\", \"displayName\": \"KIE.AI\", \"categories\": [\"AI\", \"Design & Media\", \"Developer Tools\"], \"authTypes\": [\"api_key\"], \"actionCount\": 2}, {\"service\": \"kintone\", \"displayName\": \"Kintone\", \"categories\": [\"Productivity\"], \"authTypes\": [\"api_key\"], \"actionCount\": 6}, {\"service\": \"kit\", \"displayName\": \"Kit\", \"categories\": [\"Marketing\", \"Communication\"], \"authTypes\": [\"api_key\"], \"actionCount\": 9}, {\"service\": \"klangio\", \"displayName\": \"Klangio\", \"categories\": [\"AI\", \"Design & Media\"], \"authTypes\": [\"api_key\"], \"actionCount\": 9}, {\"service\": \"klaviyo\", \"displayName\": \"Klaviyo\", \"categories\": [\"Marketing\", \"Data\"], \"authTypes\": [\"api_key\"], \"actionCount\": 7}, {\"service\": \"klazify\", \"displayName\": \"Klazify\", \"categories\": [\"Data\", \"Marketing\"], \"authTypes\": [\"api_key\"], \"actionCount\": 8}, {\"service\": \"klicktipp\", \"displayName\": \"KlickTipp\", \"categories\": [\"Marketing\"], \"authTypes\": [\"api_key\"], \"actionCount\": 3}, {\"service\": \"klipfolio\", \"displayName\": \"Klipfolio\", \"categories\": [\"Data\", \"Productivity\"], \"authTypes\": [\"api_key\"], \"actionCount\": 8}, {\"service\": \"knack\", \"displayName\": \"Knack\", \"categories\": [\"Productivity\", \"Data\"], \"authTypes\": [\"api_key\"], \"actionCount\": 5}, {\"service\": \"knock\", \"displayName\": \"Knock\", \"categories\": [\"Communication\", \"Developer Tools\"], \"authTypes\": [\"api_key\"], \"actionCount\": 5}, {\"service\": \"knowbe4\", \"displayName\": \"KnowBe4\", \"categories\": [\"Security\"], \"authTypes\": [\"api_key\"], \"actionCount\": 5}, {\"service\": \"kommo\", \"displayName\": \"Kommo\", \"categories\": [\"Marketing\", \"Productivity\"], \"authTypes\": [\"api_key\"], \"actionCount\": 13}, {\"service\": \"kontent_ai\", \"displayName\": \"Kontent.ai\", \"categories\": [\"Productivity\", \"Data\"], \"authTypes\": [\"api_key\"], \"actionCount\": 6}, {\"service\": \"kraken_io\", \"displayName\": \"Kraken.io\", \"categories\": [\"Design & Media\"], \"authTypes\": [\"api_key\"], \"actionCount\": 2}, {\"service\": \"kustomer\", \"displayName\": \"Kustomer\", \"categories\": [\"Productivity\", \"Data\"], \"authTypes\": [\"api_key\"], \"actionCount\": 8}, {\"service\": \"l2s\", \"displayName\": \"L2S\", \"categories\": [\"Marketing\", \"Data\"], \"authTypes\": [\"api_key\"], \"actionCount\": 3}, {\"service\": \"la_growth_machine\", \"displayName\": \"La Growth Machine\", \"categories\": [\"Marketing\", \"Data\"], \"authTypes\": [\"api_key\"], \"actionCount\": 7}, {\"service\": \"label_studio\", \"displayName\": \"Label Studio\", \"categories\": [\"AI\", \"Data\"], \"authTypes\": [\"api_key\"], \"actionCount\": 6}, {\"service\": \"landbot\", \"displayName\": \"Landbot\", \"categories\": [\"Communication\", \"Marketing\"], \"authTypes\": [\"api_key\"], \"actionCount\": 5}, {\"service\": \"langbase\", \"displayName\": \"Langbase\", \"categories\": [\"AI\", \"Data\"], \"authTypes\": [\"api_key\"], \"actionCount\": 4}, {\"service\": \"langsmith\", \"displayName\": \"LangSmith\", \"categories\": [\"AI\", \"Developer Tools\"], \"authTypes\": [\"api_key\"], \"actionCount\": 10}, {\"service\": \"laposta\", \"displayName\": \"Laposta\", \"categories\": [\"Marketing\", \"Communication\"], \"authTypes\": [\"api_key\"], \"actionCount\": 8}, {\"service\": \"laravel_cloud\", \"displayName\": \"Laravel Cloud\", \"categories\": [\"Developer Tools\", \"Storage\"], \"authTypes\": [\"api_key\"], \"actionCount\": 8}, {\"service\": \"latchshot\", \"displayName\": \"Latchshot\", \"categories\": [\"Developer Tools\", \"Design & Media\"], \"authTypes\": [\"api_key\"], \"actionCount\": 2}, {\"service\": \"lattice\", \"displayName\": \"Lattice\", \"categories\": [\"Productivity\", \"Data\"], \"authTypes\": [\"api_key\"], \"actionCount\": 8}, {\"service\": \"launch_darkly\", \"displayName\": \"LaunchDarkly\", \"categories\": [\"Developer Tools\"], \"authTypes\": [\"api_key\"], \"actionCount\": 40}, {\"service\": \"leadfeeder\", \"displayName\": \"Leadfeeder\", \"categories\": [\"Marketing\", \"Data\"], \"authTypes\": [\"api_key\"], \"actionCount\": 7}, {\"service\": \"leadmagic\", \"displayName\": \"LeadMagic\", \"categories\": [\"Marketing\", \"Data\"], \"authTypes\": [\"api_key\"], \"actionCount\": 6}, {\"service\": \"leexi\", \"displayName\": \"Leexi\", \"categories\": [\"Productivity\", \"Communication\"], \"authTypes\": [\"api_key\"], \"actionCount\": 6}, {\"service\": \"leiga\", \"displayName\": \"Leiga\", \"categories\": [\"Productivity\", \"Developer Tools\"], \"authTypes\": [\"api_key\"], \"actionCount\": 6}, {\"service\": \"lemlist\", \"displayName\": \"lemlist\", \"categories\": [\"Marketing\"], \"authTypes\": [\"api_key\"], \"actionCount\": 4}, {\"service\": \"lemon_squeezy\", \"displayName\": \"Lemon Squeezy\", \"categories\": [\"Productivity\", \"Finance\"], \"authTypes\": [\"api_key\"], \"actionCount\": 16}, {\"service\": \"lessonspace\", \"displayName\": \"Lessonspace\", \"categories\": [\"Productivity\", \"Communication\"], \"authTypes\": [\"api_key\"], \"actionCount\": 4}, {\"service\": \"lever\", \"displayName\": \"Lever\", \"categories\": [\"Productivity\", \"Communication\"], \"authTypes\": [\"api_key\"], \"actionCount\": 6}, {\"service\": \"lexoffice\", \"displayName\": \"lexoffice\", \"categories\": [\"Finance\", \"Productivity\"], \"authTypes\": [\"api_key\"], \"actionCount\": 10}, {\"service\": \"lifx\", \"displayName\": \"LIFX\", \"categories\": [\"Developer Tools\"], \"authTypes\": [\"api_key\"], \"actionCount\": 7}, {\"service\": \"lightfield\", \"displayName\": \"Lightfield\", \"categories\": [\"Productivity\", \"AI\"], \"authTypes\": [\"api_key\"], \"actionCount\": 10}, {\"service\": \"linear\", \"displayName\": \"Linear\", \"categories\": [\"Productivity\", \"Developer Tools\"], \"authTypes\": [\"oauth2\", \"api_key\"], \"actionCount\": 34}, {\"service\": \"linguapop\", \"displayName\": \"Linguapop\", \"categories\": [\"Productivity\"], \"authTypes\": [\"api_key\"], \"actionCount\": 2}, {\"service\": \"lingvanex_translation_api\", \"displayName\": \"Lingvanex Translation API\", \"categories\": [\"AI\", \"Productivity\"], \"authTypes\": [\"api_key\"], \"actionCount\": 3}, {\"service\": \"linkedin\", \"displayName\": \"LinkedIn\", \"categories\": [\"Social\", \"Marketing\"], \"authTypes\": [\"oauth2\"], \"actionCount\": 5}, {\"service\": \"linkhut\", \"displayName\": \"Linkhut\", \"categories\": [\"Productivity\"], \"authTypes\": [\"oauth2\"], \"actionCount\": 5}, {\"service\": \"linkly\", \"displayName\": \"Linkly\", \"categories\": [\"Marketing\", \"Data\"], \"authTypes\": [\"api_key\"], \"actionCount\": 6}, {\"service\": \"linkup\", \"displayName\": \"Linkup\", \"categories\": [\"AI\", \"Data\"], \"authTypes\": [\"api_key\"], \"actionCount\": 5}, {\"service\": \"linux_do\", \"displayName\": \"Linux DO\", \"categories\": [\"Social\", \"Developer Tools\"], \"authTypes\": [\"no_auth\"], \"actionCount\": 13}, {\"service\": \"listennotes\", \"displayName\": \"Listen Notes\", \"categories\": [\"Data\"], \"authTypes\": [\"api_key\"], \"actionCount\": 9}, {\"service\": \"livesession\", \"displayName\": \"LiveSession\", \"categories\": [\"Data\", \"Marketing\"], \"authTypes\": [\"api_key\"], \"actionCount\": 1}, {\"service\": \"lob\", \"displayName\": \"Lob\", \"categories\": [\"Marketing\", \"Location\"], \"authTypes\": [\"api_key\"], \"actionCount\": 5}, {\"service\": \"lodgify\", \"displayName\": \"Lodgify\", \"categories\": [\"Productivity\"], \"authTypes\": [\"api_key\"], \"actionCount\": 7}, {\"service\": \"logo_dev\", \"displayName\": \"Logo.dev\", \"categories\": [\"Design & Media\", \"Developer Tools\"], \"authTypes\": [\"api_key\"], \"actionCount\": 7}, {\"service\": \"logsnag\", \"displayName\": \"LogSnag\", \"categories\": [\"Developer Tools\", \"Data\"], \"authTypes\": [\"api_key\"], \"actionCount\": 4}, {\"service\": \"lokalise\", \"displayName\": \"Lokalise\", \"categories\": [\"Productivity\", \"Developer Tools\"], \"authTypes\": [\"api_key\"], \"actionCount\": 11}, {\"service\": \"longbridge\", \"displayName\": \"Longbridge\", \"categories\": [\"Finance\", \"Data\"], \"authTypes\": [\"oauth2\"], \"actionCount\": 80}, {\"service\": \"loomio\", \"displayName\": \"Loomio\", \"categories\": [\"Productivity\", \"Communication\"], \"authTypes\": [\"api_key\"], \"actionCount\": 2}, {\"service\": \"loop_returns\", \"displayName\": \"Loop Returns\", \"categories\": [\"Productivity\", \"Data\"], \"authTypes\": [\"api_key\"], \"actionCount\": 4}, {\"service\": \"loops\", \"displayName\": \"Loops\", \"categories\": [\"Marketing\", \"Communication\"], \"authTypes\": [\"api_key\"], \"actionCount\": 8}, {\"service\": \"loyverse\", \"displayName\": \"Loyverse\", \"categories\": [\"Finance\", \"Data\"], \"authTypes\": [\"api_key\"], \"actionCount\": 11}, {\"service\": \"lucid_scim\", \"displayName\": \"Lucid SCIM\", \"categories\": [\"Security\", \"Productivity\"], \"authTypes\": [\"api_key\"], \"actionCount\": 5}, {\"service\": \"luckin_coffee\", \"displayName\": \"Luckin Coffee\", \"categories\": [\"Location\", \"Productivity\"], \"authTypes\": [\"api_key\"], \"actionCount\": 8}, {\"service\": \"luma\", \"displayName\": \"Luma\", \"categories\": [\"Productivity\", \"Social\"], \"authTypes\": [\"api_key\"], \"actionCount\": 6}, {\"service\": \"lumos\", \"displayName\": \"Lumos\", \"categories\": [\"Security\", \"Productivity\"], \"authTypes\": [\"api_key\"], \"actionCount\": 4}, {\"service\": \"lusha\", \"displayName\": \"Lusha\", \"categories\": [\"Data\", \"Marketing\"], \"authTypes\": [\"api_key\"], \"actionCount\": 5}, {\"service\": \"mailbluster\", \"displayName\": \"MailBluster\", \"categories\": [\"Communication\", \"Marketing\"], \"authTypes\": [\"api_key\"], \"actionCount\": 5}, {\"service\": \"mailbox_validator\", \"displayName\": \"MailboxValidator\", \"categories\": [\"Communication\", \"Marketing\"], \"authTypes\": [\"api_key\"], \"actionCount\": 3}, {\"service\": \"mailboxlayer\", \"displayName\": \"Mailboxlayer\", \"categories\": [\"Communication\", \"Marketing\"], \"authTypes\": [\"api_key\"], \"actionCount\": 1}, {\"service\": \"mailcheck\", \"displayName\": \"Mailcheck\", \"categories\": [\"Communication\", \"Security\"], \"authTypes\": [\"api_key\"], \"actionCount\": 3}, {\"service\": \"mailchimp\", \"displayName\": \"Mailchimp\", \"categories\": [\"Communication\", \"Marketing\"], \"authTypes\": [\"api_key\"], \"actionCount\": 11}, {\"service\": \"mailercloud\", \"displayName\": \"Mailercloud\", \"categories\": [\"Communication\", \"Marketing\"], \"authTypes\": [\"api_key\"], \"actionCount\": 6}, {\"service\": \"mailerlite\", \"displayName\": \"MailerLite\", \"categories\": [\"Communication\", \"Marketing\"], \"authTypes\": [\"api_key\"], \"actionCount\": 13}, {\"service\": \"mailersend\", \"displayName\": \"MailerSend\", \"categories\": [\"Communication\", \"Marketing\"], \"authTypes\": [\"api_key\"], \"actionCount\": 12}, {\"service\": \"mailgun\", \"displayName\": \"Mailgun\", \"categories\": [\"Communication\", \"Marketing\"], \"authTypes\": [\"api_key\"], \"actionCount\": 17}, {\"service\": \"mailjet\", \"displayName\": \"Mailjet\", \"categories\": [\"Marketing\"], \"authTypes\": [\"api_key\"], \"actionCount\": 4}, {\"service\": \"mailosaur\", \"displayName\": \"Mailosaur\", \"categories\": [\"Communication\", \"Developer Tools\"], \"authTypes\": [\"api_key\"], \"actionCount\": 12}, {\"service\": \"mails_so\", \"displayName\": \"Mails\", \"categories\": [\"Communication\", \"Marketing\"], \"authTypes\": [\"api_key\"], \"actionCount\": 3}, {\"service\": \"mailtrap\", \"displayName\": \"Mailtrap\", \"categories\": [\"Communication\", \"Developer Tools\"], \"authTypes\": [\"api_key\"], \"actionCount\": 50}, {\"service\": \"maintainx\", \"displayName\": \"MaintainX\", \"categories\": [\"Productivity\", \"Data\"], \"authTypes\": [\"api_key\"], \"actionCount\": 16}, {\"service\": \"make\", \"displayName\": \"Make\", \"categories\": [\"Productivity\", \"Developer Tools\"], \"authTypes\": [\"api_key\"], \"actionCount\": 9}, {\"service\": \"manatal\", \"displayName\": \"Manatal\", \"categories\": [\"Productivity\"], \"authTypes\": [\"api_key\"], \"actionCount\": 16}, {\"service\": \"manus\", \"displayName\": \"Manus\", \"categories\": [\"AI\", \"Productivity\"], \"authTypes\": [\"api_key\"], \"actionCount\": 17}, {\"service\": \"mapbox\", \"displayName\": \"Mapbox\", \"categories\": [\"Location\", \"Developer Tools\"], \"authTypes\": [\"api_key\"], \"actionCount\": 5}, {\"service\": \"maple_billing\", \"displayName\": \"Measure\", \"categories\": [\"Finance\"], \"authTypes\": [\"api_key\"], \"actionCount\": 12}, {\"service\": \"marketstack\", \"displayName\": \"Marketstack\", \"categories\": [\"Finance\", \"Data\"], \"authTypes\": [\"api_key\"], \"actionCount\": 6}, {\"service\": \"mattermost\", \"displayName\": \"Mattermost\", \"categories\": [\"Communication\", \"Productivity\"], \"authTypes\": [\"api_key\"], \"actionCount\": 7}, {\"service\": \"mcdonalds_cn\", \"displayName\": \"McDonald's China\", \"categories\": [\"Location\", \"Data\"], \"authTypes\": [\"custom_credential\"], \"actionCount\": 7}, {\"service\": \"mediastack\", \"displayName\": \"Mediastack\", \"categories\": [\"Data\", \"Social\"], \"authTypes\": [\"api_key\"], \"actionCount\": 2}, {\"service\": \"meet_geek\", \"displayName\": \"MeetGeek\", \"categories\": [\"AI\", \"Productivity\"], \"authTypes\": [\"api_key\"], \"actionCount\": 8}, {\"service\": \"mem0\", \"displayName\": \"Mem0\", \"categories\": [\"AI\", \"Data\"], \"authTypes\": [\"api_key\"], \"actionCount\": 10}, {\"service\": \"memberstack\", \"displayName\": \"Memberstack\", \"categories\": [\"Security\", \"Developer Tools\"], \"authTypes\": [\"api_key\"], \"actionCount\": 8}, {\"service\": \"meta\", \"displayName\": \"Meta\", \"categories\": [\"Marketing\", \"Social\"], \"authTypes\": [\"api_key\"], \"actionCount\": 4}, {\"service\": \"metabase\", \"displayName\": \"Metabase\", \"categories\": [\"Data\", \"Productivity\"], \"authTypes\": [\"api_key\"], \"actionCount\": 10}, {\"service\": \"metaso\", \"displayName\": \"Metaso\", \"categories\": [\"AI\", \"Data\"], \"authTypes\": [\"api_key\"], \"actionCount\": 4}, {\"service\": \"metatextai\", \"displayName\": \"MetatextAI\", \"categories\": [\"AI\", \"Security\"], \"authTypes\": [\"api_key\"], \"actionCount\": 4}, {\"service\": \"metronome\", \"displayName\": \"Metronome\", \"categories\": [\"Finance\", \"Developer Tools\"], \"authTypes\": [\"api_key\"], \"actionCount\": 5}, {\"service\": \"mezmo\", \"displayName\": \"Mezmo\", \"categories\": [\"Data\", \"Developer Tools\"], \"authTypes\": [\"api_key\"], \"actionCount\": 5}, {\"service\": \"microsoft_clarity\", \"displayName\": \"Microsoft Clarity\", \"categories\": [\"Data\"], \"authTypes\": [\"api_key\"], \"actionCount\": 1}, {\"service\": \"mindbody\", \"displayName\": \"Mindbody\", \"categories\": [\"Productivity\"], \"authTypes\": [\"api_key\"], \"actionCount\": 1}, {\"service\": \"mineru\", \"displayName\": \"MinerU\", \"categories\": [\"AI\", \"Productivity\"], \"authTypes\": [\"api_key\"], \"actionCount\": 4}, {\"service\": \"minimax\", \"displayName\": \"MiniMax\", \"categories\": [\"AI\"], \"authTypes\": [\"api_key\"], \"actionCount\": 4}, {\"service\": \"missive\", \"displayName\": \"Missive\", \"categories\": [\"Communication\", \"Productivity\"], \"authTypes\": [\"api_key\"], \"actionCount\": 8}, {\"service\": \"mistral_ai\", \"displayName\": \"Mistral AI\", \"categories\": [\"AI\"], \"authTypes\": [\"api_key\"], \"actionCount\": 54}, {\"service\": \"mixpanel\", \"displayName\": \"Mixpanel\", \"categories\": [\"Data\", \"Marketing\"], \"authTypes\": [\"api_key\"], \"actionCount\": 13}, {\"service\": \"mocean\", \"displayName\": \"Mocean\", \"categories\": [\"Communication\", \"Marketing\"], \"authTypes\": [\"api_key\"], \"actionCount\": 5}, {\"service\": \"moco\", \"displayName\": \"MOCO\", \"categories\": [\"Productivity\", \"Finance\"], \"authTypes\": [\"api_key\"], \"actionCount\": 5}, {\"service\": \"modjo_ai\", \"displayName\": \"Modjo AI\", \"categories\": [\"Communication\", \"AI\", \"Data\"], \"authTypes\": [\"api_key\"], \"actionCount\": 20}, {\"service\": \"moesif\", \"displayName\": \"Moesif\", \"categories\": [\"Developer Tools\", \"Data\"], \"authTypes\": [\"api_key\"], \"actionCount\": 4}, {\"service\": \"momentum_io\", \"displayName\": \"Momentum.io\", \"categories\": [\"AI\", \"Productivity\"], \"authTypes\": [\"api_key\"], \"actionCount\": 6}, {\"service\": \"monday\", \"displayName\": \"Monday\", \"categories\": [\"Productivity\"], \"authTypes\": [\"oauth2\", \"api_key\"], \"actionCount\": 64}, {\"service\": \"mongo_db_atlas_administration\", \"displayName\": \"MongoDB Atlas Administration\", \"categories\": [\"Developer Tools\", \"Data\"], \"authTypes\": [\"api_key\"], \"actionCount\": 4}, {\"service\": \"moonclerk\", \"displayName\": \"MoonClerk\", \"categories\": [\"Finance\", \"Productivity\"], \"authTypes\": [\"api_key\"], \"actionCount\": 6}, {\"service\": \"moorcheh\", \"displayName\": \"Moorcheh\", \"categories\": [\"AI\", \"Data\"], \"authTypes\": [\"api_key\"], \"actionCount\": 7}, {\"service\": \"moosend\", \"displayName\": \"Moosend\", \"categories\": [\"Communication\", \"Marketing\"], \"authTypes\": [\"api_key\"], \"actionCount\": 4}, {\"service\": \"mopinion\", \"displayName\": \"Mopinion\", \"categories\": [\"Data\", \"Marketing\"], \"authTypes\": [\"custom_credential\"], \"actionCount\": 11}, {\"service\": \"mother_duck\", \"displayName\": \"MotherDuck\", \"categories\": [\"Data\", \"Developer Tools\"], \"authTypes\": [\"api_key\"], \"actionCount\": 8}, {\"service\": \"motion\", \"displayName\": \"Motion\", \"categories\": [\"Productivity\"], \"authTypes\": [\"api_key\"], \"actionCount\": 13}, {\"service\": \"msg91\", \"displayName\": \"MSG91\", \"categories\": [\"Communication\", \"Marketing\"], \"authTypes\": [\"api_key\"], \"actionCount\": 4}, {\"service\": \"mx_toolbox\", \"displayName\": \"MxToolbox\", \"categories\": [\"Communication\", \"Developer Tools\"], \"authTypes\": [\"api_key\"], \"actionCount\": 13}, {\"service\": \"n8n\", \"displayName\": \"n8n\", \"categories\": [\"Productivity\"], \"authTypes\": [\"api_key\"], \"actionCount\": 36}, {\"service\": \"namely\", \"displayName\": \"Namely\", \"categories\": [\"Productivity\", \"Data\"], \"authTypes\": [\"api_key\"], \"actionCount\": 4}, {\"service\": \"nango\", \"displayName\": \"Nango\", \"categories\": [\"Developer Tools\", \"Data\"], \"authTypes\": [\"api_key\"], \"actionCount\": 9}, {\"service\": \"nasa\", \"displayName\": \"NASA\", \"categories\": [\"Data\"], \"authTypes\": [\"api_key\"], \"actionCount\": 27}, {\"service\": \"nasdaq\", \"displayName\": \"Nasdaq Data Link\", \"categories\": [\"Finance\", \"Data\"], \"authTypes\": [\"api_key\"], \"actionCount\": 7}, {\"service\": \"needle\", \"displayName\": \"Needle\", \"categories\": [\"AI\", \"Data\"], \"authTypes\": [\"api_key\"], \"actionCount\": 7}, {\"service\": \"neon\", \"displayName\": \"Neon\", \"categories\": [\"Developer Tools\", \"Data\"], \"authTypes\": [\"api_key\"], \"actionCount\": 18}, {\"service\": \"netease_mail\", \"displayName\": \"NetEase Mail\", \"categories\": [\"Communication\", \"Productivity\"], \"authTypes\": [\"custom_credential\"], \"actionCount\": 12}, {\"service\": \"nethunt\", \"displayName\": \"NetHunt\", \"categories\": [\"Productivity\", \"Marketing\"], \"authTypes\": [\"api_key\"], \"actionCount\": 15}, {\"service\": \"netlify\", \"displayName\": \"Netlify\", \"categories\": [\"Developer Tools\"], \"authTypes\": [\"oauth2\", \"api_key\"], \"actionCount\": 19}, {\"service\": \"netsuite\", \"displayName\": \"NetSuite\", \"categories\": [\"Finance\", \"Productivity\"], \"authTypes\": [\"custom_credential\"], \"actionCount\": 5}, {\"service\": \"neutrino\", \"displayName\": \"Neutrino API\", \"categories\": [\"Data\", \"Location\", \"Security\"], \"authTypes\": [\"api_key\"], \"actionCount\": 5}, {\"service\": \"neverbounce\", \"displayName\": \"NeverBounce\", \"categories\": [\"Communication\", \"Marketing\"], \"authTypes\": [\"api_key\"], \"actionCount\": 8}, {\"service\": \"new_relic\", \"displayName\": \"New Relic\", \"categories\": [\"Developer Tools\"], \"authTypes\": [\"api_key\"], \"actionCount\": 28}, {\"service\": \"news_api\", \"displayName\": \"News API\", \"categories\": [\"Data\", \"Social\"], \"authTypes\": [\"api_key\"], \"actionCount\": 4}, {\"service\": \"newsdata_io\", \"displayName\": \"NewsData.io\", \"categories\": [\"Data\", \"Social\"], \"authTypes\": [\"api_key\"], \"actionCount\": 4}, {\"service\": \"next_dns\", \"displayName\": \"NextDNS\", \"categories\": [\"Security\", \"Data\"], \"authTypes\": [\"api_key\"], \"actionCount\": 7}, {\"service\": \"ngrok\", \"displayName\": \"ngrok\", \"categories\": [\"Developer Tools\"], \"authTypes\": [\"api_key\"], \"actionCount\": 6}, {\"service\": \"ninjapear\", \"displayName\": \"NinjaPear\", \"categories\": [\"Data\", \"Marketing\"], \"authTypes\": [\"api_key\"], \"actionCount\": 8}, {\"service\": \"ninox\", \"displayName\": \"Ninox\", \"categories\": [\"Productivity\", \"Data\"], \"authTypes\": [\"api_key\"], \"actionCount\": 12}, {\"service\": \"nocodb\", \"displayName\": \"NocoDB\", \"categories\": [\"Data\", \"Productivity\"], \"authTypes\": [\"api_key\"], \"actionCount\": 24}, {\"service\": \"nocrm_io\", \"displayName\": \"noCRM.io\", \"categories\": [\"Marketing\", \"Productivity\"], \"authTypes\": [\"api_key\"], \"actionCount\": 9}, {\"service\": \"northbeam\", \"displayName\": \"Northbeam\", \"categories\": [\"Data\", \"Marketing\"], \"authTypes\": [\"api_key\"], \"actionCount\": 5}, {\"service\": \"northflank\", \"displayName\": \"Northflank\", \"categories\": [\"Developer Tools\"], \"authTypes\": [\"api_key\"], \"actionCount\": 4}, {\"service\": \"notion\", \"displayName\": \"Notion\", \"categories\": [\"Productivity\"], \"authTypes\": [\"oauth2\", \"api_key\"], \"actionCount\": 25}, {\"service\": \"novu\", \"displayName\": \"Novu\", \"categories\": [\"Communication\", \"Developer Tools\"], \"authTypes\": [\"api_key\"], \"actionCount\": 5}, {\"service\": \"ntfy\", \"displayName\": \"ntfy\", \"categories\": [\"Communication\", \"Developer Tools\"], \"authTypes\": [\"api_key\"], \"actionCount\": 2}, {\"service\": \"nylas\", \"displayName\": \"Nylas\", \"categories\": [\"Communication\", \"Productivity\"], \"authTypes\": [\"api_key\"], \"actionCount\": 4}, {\"service\": \"nyne_ai\", \"displayName\": \"Nyne.ai\", \"categories\": [\"Data\", \"Marketing\"], \"authTypes\": [\"api_key\"], \"actionCount\": 9}, {\"service\": \"ocrspace\", \"displayName\": \"OCR.space\", \"categories\": [\"AI\", \"Productivity\"], \"authTypes\": [\"api_key\"], \"actionCount\": 2}, {\"service\": \"octave\", \"displayName\": \"Octave\", \"categories\": [\"AI\", \"Marketing\"], \"authTypes\": [\"api_key\"], \"actionCount\": 11}, {\"service\": \"oksign\", \"displayName\": \"OKSign\", \"categories\": [\"Productivity\", \"Security\"], \"authTypes\": [\"api_key\"], \"actionCount\": 5}, {\"service\": \"okta\", \"displayName\": \"Okta\", \"categories\": [\"Security\"], \"authTypes\": [\"custom_credential\"], \"actionCount\": 14}, {\"service\": \"omnisend\", \"displayName\": \"Omnisend\", \"categories\": [\"Marketing\", \"Communication\"], \"authTypes\": [\"api_key\"], \"actionCount\": 9}, {\"service\": \"oncehub\", \"displayName\": \"OnceHub\", \"categories\": [\"Productivity\"], \"authTypes\": [\"api_key\"], \"actionCount\": 3}, {\"service\": \"one_drive\", \"displayName\": \"OneDrive\", \"categories\": [\"Storage\", \"Productivity\"], \"authTypes\": [\"oauth2\"], \"actionCount\": 13}, {\"service\": \"one_page_crm\", \"displayName\": \"OnePageCRM\", \"categories\": [\"Marketing\"], \"authTypes\": [\"custom_credential\"], \"actionCount\": 6}, {\"service\": \"one_password\", \"displayName\": \"1Password\", \"categories\": [\"Security\", \"Productivity\"], \"authTypes\": [\"api_key\"], \"actionCount\": 6}, {\"service\": \"one_password_events\", \"displayName\": \"1Password Events API\", \"categories\": [\"Security\"], \"authTypes\": [\"api_key\"], \"actionCount\": 3}, {\"service\": \"onedesk\", \"displayName\": \"OneDesk\", \"categories\": [\"Productivity\"], \"authTypes\": [\"api_key\"], \"actionCount\": 5}, {\"service\": \"onesignal_rest_api\", \"displayName\": \"OneSignal\", \"categories\": [\"Communication\", \"Marketing\"], \"authTypes\": [\"api_key\"], \"actionCount\": 4}, {\"service\": \"ongage\", \"displayName\": \"Ongage\", \"categories\": [\"Marketing\", \"Communication\"], \"authTypes\": [\"api_key\"], \"actionCount\": 7}, {\"service\": \"oomnitza\", \"displayName\": \"Oomnitza\", \"categories\": [\"Productivity\", \"Data\"], \"authTypes\": [\"api_key\"], \"actionCount\": 5}, {\"service\": \"open_exchange_rates\", \"displayName\": \"Open Exchange Rates\", \"categories\": [\"Finance\", \"Data\"], \"authTypes\": [\"api_key\"], \"actionCount\": 5}, {\"service\": \"open_hands\", \"displayName\": \"OpenHands\", \"categories\": [\"AI\", \"Developer Tools\"], \"authTypes\": [\"api_key\"], \"actionCount\": 5}, {\"service\": \"openai\", \"displayName\": \"OpenAI\", \"categories\": [\"AI\", \"Developer Tools\"], \"authTypes\": [\"api_key\"], \"actionCount\": 15}, {\"service\": \"openalex\", \"displayName\": \"OpenAlex\", \"categories\": [\"Data\"], \"authTypes\": [\"api_key\"], \"actionCount\": 5}, {\"service\": \"opencage\", \"displayName\": \"OpenCage\", \"categories\": [\"Location\", \"Data\"], \"authTypes\": [\"api_key\"], \"actionCount\": 3}, {\"service\": \"openfootball_worldcup\", \"displayName\": \"OpenFootball World Cup\", \"categories\": [\"Data\"], \"authTypes\": [\"no_auth\"], \"actionCount\": 6}, {\"service\": \"opengraph_io\", \"displayName\": \"OpenGraph.io\", \"categories\": [\"Data\", \"Developer Tools\"], \"authTypes\": [\"api_key\"], \"actionCount\": 4}, {\"service\": \"openpagerank\", \"displayName\": \"OpenPageRank\", \"categories\": [\"Data\", \"Marketing\"], \"authTypes\": [\"api_key\"], \"actionCount\": 1}, {\"service\": \"openrouter\", \"displayName\": \"OpenRouter\", \"categories\": [\"AI\", \"Developer Tools\"], \"authTypes\": [\"api_key\"], \"actionCount\": 13}, {\"service\": \"opensea\", \"displayName\": \"OpenSea\", \"categories\": [\"Data\", \"Finance\"], \"authTypes\": [\"api_key\"], \"actionCount\": 9}, {\"service\": \"openstatus\", \"displayName\": \"OpenStatus\", \"categories\": [\"Developer Tools\"], \"authTypes\": [\"api_key\"], \"actionCount\": 9}, {\"service\": \"openweather_api\", \"displayName\": \"OpenWeather\", \"categories\": [\"Location\", \"Data\"], \"authTypes\": [\"api_key\"], \"actionCount\": 21}, {\"service\": \"opsgenie\", \"displayName\": \"Opsgenie\", \"categories\": [\"Developer Tools\"], \"authTypes\": [\"api_key\"], \"actionCount\": 7}, {\"service\": \"optimoroute\", \"displayName\": \"OptimoRoute\", \"categories\": [\"Location\", \"Productivity\"], \"authTypes\": [\"api_key\"], \"actionCount\": 3}, {\"service\": \"oracle_cloud\", \"displayName\": \"Oracle Cloud Infrastructure\", \"categories\": [\"Developer Tools\", \"Infrastructure\"], \"authTypes\": [\"custom_credential\"], \"actionCount\": 34}, {\"service\": \"ordinal\", \"displayName\": \"Ordinal\", \"categories\": [\"Social\", \"Marketing\"], \"authTypes\": [\"api_key\"], \"actionCount\": 9}, {\"service\": \"ortto\", \"displayName\": \"Ortto\", \"categories\": [\"Marketing\", \"Data\"], \"authTypes\": [\"api_key\"], \"actionCount\": 3}, {\"service\": \"ossinsight\", \"displayName\": \"OSS Insight\", \"categories\": [\"Developer Tools\", \"Data\"], \"authTypes\": [\"no_auth\"], \"actionCount\": 18}, {\"service\": \"otter_ai\", \"displayName\": \"Otter.ai\", \"categories\": [\"AI\", \"Productivity\"], \"authTypes\": [\"api_key\"], \"actionCount\": 6}, {\"service\": \"outline\", \"displayName\": \"Outline\", \"categories\": [\"Productivity\"], \"authTypes\": [\"api_key\"], \"actionCount\": 6}, {\"service\": \"outlook\", \"displayName\": \"Outlook\", \"categories\": [\"Communication\", \"Productivity\"], \"authTypes\": [\"oauth2\"], \"actionCount\": 11}, {\"service\": \"owl_protocol\", \"displayName\": \"Owl Protocol\", \"categories\": [\"Developer Tools\", \"Finance\"], \"authTypes\": [\"api_key\"], \"actionCount\": 3}, {\"service\": \"paddle\", \"displayName\": \"Paddle\", \"categories\": [\"Finance\"], \"authTypes\": [\"api_key\"], \"actionCount\": 12}, {\"service\": \"pagerduty\", \"displayName\": \"PagerDuty\", \"categories\": [\"Developer Tools\"], \"authTypes\": [\"api_key\"], \"actionCount\": 7}, {\"service\": \"pandadoc\", \"displayName\": \"PandaDoc\", \"categories\": [\"Productivity\", \"Communication\"], \"authTypes\": [\"api_key\"], \"actionCount\": 13}, {\"service\": \"paperform\", \"displayName\": \"Paperform\", \"categories\": [\"Productivity\", \"Marketing\"], \"authTypes\": [\"api_key\"], \"actionCount\": 14}, {\"service\": \"paradym\", \"displayName\": \"Paradym\", \"categories\": [\"Security\", \"Developer Tools\"], \"authTypes\": [\"api_key\"], \"actionCount\": 11}, {\"service\": \"parallel\", \"displayName\": \"Parallel\", \"categories\": [\"AI\", \"Data\"], \"authTypes\": [\"api_key\"], \"actionCount\": 5}, {\"service\": \"parsehub\", \"displayName\": \"ParseHub\", \"categories\": [\"Data\", \"Developer Tools\"], \"authTypes\": [\"api_key\"], \"actionCount\": 2}, {\"service\": \"parsera\", \"displayName\": \"Parsera\", \"categories\": [\"Data\", \"Developer Tools\"], \"authTypes\": [\"api_key\"], \"actionCount\": 5}, {\"service\": \"parseur\", \"displayName\": \"Parseur\", \"categories\": [\"Productivity\", \"Data\"], \"authTypes\": [\"api_key\"], \"actionCount\": 5}, {\"service\": \"partner_stack_partner\", \"displayName\": \"PartnerStack Partner\", \"categories\": [\"Marketing\", \"Finance\"], \"authTypes\": [\"api_key\"], \"actionCount\": 5}, {\"service\": \"partnerstack\", \"displayName\": \"PartnerStack\", \"categories\": [\"Marketing\", \"Finance\"], \"authTypes\": [\"api_key\"], \"actionCount\": 7}, {\"service\": \"payhip\", \"displayName\": \"Payhip\", \"categories\": [\"Finance\"], \"authTypes\": [\"api_key\"], \"actionCount\": 9}, {\"service\": \"paymo\", \"displayName\": \"Paymo\", \"categories\": [\"Productivity\", \"Finance\"], \"authTypes\": [\"api_key\"], \"actionCount\": 16}, {\"service\": \"paystack\", \"displayName\": \"Paystack\", \"categories\": [\"Finance\"], \"authTypes\": [\"api_key\"], \"actionCount\": 8}, {\"service\": \"pdf_api_io\", \"displayName\": \"PDF-API.io\", \"categories\": [\"Productivity\", \"Design & Media\"], \"authTypes\": [\"api_key\"], \"actionCount\": 3}, {\"service\": \"pdf_co\", \"displayName\": \"PDF.co\", \"categories\": [\"Productivity\", \"Design & Media\"], \"authTypes\": [\"api_key\"], \"actionCount\": 8}, {\"service\": \"pdfless\", \"displayName\": \"Pdfless\", \"categories\": [\"Productivity\", \"Data\"], \"authTypes\": [\"api_key\"], \"actionCount\": 2}, {\"service\": \"pdfmonkey\", \"displayName\": \"PDFMonkey\", \"categories\": [\"Productivity\", \"Design & Media\"], \"authTypes\": [\"api_key\"], \"actionCount\": 7}, {\"service\": \"pendo\", \"displayName\": \"Pendo\", \"categories\": [\"Data\", \"Marketing\"], \"authTypes\": [\"api_key\"], \"actionCount\": 5}, {\"service\": \"peopledatalabs\", \"displayName\": \"People Data Labs\", \"categories\": [\"Data\", \"Marketing\"], \"authTypes\": [\"api_key\"], \"actionCount\": 4}, {\"service\": \"perdoo\", \"displayName\": \"Perdoo\", \"categories\": [\"Productivity\", \"Data\"], \"authTypes\": [\"api_key\"], \"actionCount\": 4}, {\"service\": \"perigon\", \"displayName\": \"Perigon\", \"categories\": [\"AI\", \"Data\"], \"authTypes\": [\"api_key\"], \"actionCount\": 12}, {\"service\": \"permit_io\", \"displayName\": \"Permit.io\", \"categories\": [\"Developer Tools\", \"Security\"], \"authTypes\": [\"api_key\"], \"actionCount\": 13}, {\"service\": \"perplexity\", \"displayName\": \"Perplexity\", \"categories\": [\"AI\"], \"authTypes\": [\"api_key\"], \"actionCount\": 4}, {\"service\": \"persona\", \"displayName\": \"Persona\", \"categories\": [\"Security\"], \"authTypes\": [\"api_key\"], \"actionCount\": 4}, {\"service\": \"personal_ai\", \"displayName\": \"Personal AI\", \"categories\": [\"AI\", \"Productivity\"], \"authTypes\": [\"api_key\"], \"actionCount\": 5}, {\"service\": \"pexels\", \"displayName\": \"Pexels\", \"categories\": [\"Design & Media\"], \"authTypes\": [\"api_key\"], \"actionCount\": 9}, {\"service\": \"phantombuster\", \"displayName\": \"PhantomBuster\", \"categories\": [\"Developer Tools\", \"Data\"], \"authTypes\": [\"api_key\"], \"actionCount\": 7}, {\"service\": \"pilvio\", \"displayName\": \"Pilvio\", \"categories\": [\"Developer Tools\", \"Storage\"], \"authTypes\": [\"api_key\"], \"actionCount\": 5}, {\"service\": \"pinata\", \"displayName\": \"Pinata\", \"categories\": [\"Developer Tools\", \"Storage\"], \"authTypes\": [\"api_key\"], \"actionCount\": 12}, {\"service\": \"pinecone\", \"displayName\": \"Pinecone\", \"categories\": [\"AI\", \"Data\"], \"authTypes\": [\"api_key\"], \"actionCount\": 12}, {\"service\": \"pingdom\", \"displayName\": \"Pingdom\", \"categories\": [\"Developer Tools\"], \"authTypes\": [\"api_key\"], \"actionCount\": 4}, {\"service\": \"pipedream\", \"displayName\": \"Pipedream\", \"categories\": [\"Developer Tools\", \"Productivity\"], \"authTypes\": [\"api_key\"], \"actionCount\": 6}, {\"service\": \"pipedrive\", \"displayName\": \"Pipedrive\", \"categories\": [\"Productivity\", \"Marketing\"], \"authTypes\": [\"api_key\"], \"actionCount\": 27}, {\"service\": \"pivotal_tracker\", \"displayName\": \"Pivotal Tracker\", \"categories\": [\"Productivity\"], \"authTypes\": [\"api_key\"], \"actionCount\": 9}, {\"service\": \"pixellab\", \"displayName\": \"PixelLab\", \"categories\": [\"AI\", \"Design & Media\"], \"authTypes\": [\"api_key\"], \"actionCount\": 56}, {\"service\": \"placekey\", \"displayName\": \"Placekey\", \"categories\": [\"Location\", \"Data\"], \"authTypes\": [\"api_key\"], \"actionCount\": 4}, {\"service\": \"placid\", \"displayName\": \"Placid\", \"categories\": [\"Design & Media\", \"Developer Tools\"], \"authTypes\": [\"api_key\"], \"actionCount\": 5}, {\"service\": \"plain\", \"displayName\": \"Plain\", \"categories\": [\"Communication\", \"Productivity\"], \"authTypes\": [\"api_key\"], \"actionCount\": 4}, {\"service\": \"plane\", \"displayName\": \"Plane\", \"categories\": [\"Productivity\", \"Developer Tools\"], \"authTypes\": [\"api_key\"], \"actionCount\": 11}, {\"service\": \"plasmic\", \"displayName\": \"Plasmic\", \"categories\": [\"Design & Media\", \"Developer Tools\"], \"authTypes\": [\"api_key\"], \"actionCount\": 2}, {\"service\": \"platerecognizer\", \"displayName\": \"Plate Recognizer\", \"categories\": [\"AI\", \"Security\"], \"authTypes\": [\"api_key\"], \"actionCount\": 2}, {\"service\": \"plausible_analytics\", \"displayName\": \"Plausible Analytics\", \"categories\": [\"Data\", \"Marketing\"], \"authTypes\": [\"api_key\"], \"actionCount\": 4}, {\"service\": \"plisio\", \"displayName\": \"Plisio\", \"categories\": [\"Finance\"], \"authTypes\": [\"api_key\"], \"actionCount\": 4}, {\"service\": \"plunk\", \"displayName\": \"Plunk\", \"categories\": [\"Communication\", \"Marketing\"], \"authTypes\": [\"api_key\"], \"actionCount\": 8}, {\"service\": \"podscribe\", \"displayName\": \"Podscribe\", \"categories\": [\"Marketing\", \"Data\"], \"authTypes\": [\"api_key\"], \"actionCount\": 3}, {\"service\": \"polar\", \"displayName\": \"Polar\", \"categories\": [\"Finance\", \"Developer Tools\"], \"authTypes\": [\"api_key\"], \"actionCount\": 13}, {\"service\": \"polygon_io\", \"displayName\": \"Massive (Polygon.io)\", \"categories\": [\"Finance\", \"Data\"], \"authTypes\": [\"api_key\"], \"actionCount\": 7}, {\"service\": \"positionstack\", \"displayName\": \"Positionstack\", \"categories\": [\"Location\", \"Data\"], \"authTypes\": [\"api_key\"], \"actionCount\": 2}, {\"service\": \"postgrid\", \"displayName\": \"PostGrid\", \"categories\": [\"Communication\", \"Marketing\"], \"authTypes\": [\"api_key\"], \"actionCount\": 9}, {\"service\": \"postgrid_verify\", \"displayName\": \"PostGrid Verify\", \"categories\": [\"Location\", \"Data\"], \"authTypes\": [\"api_key\"], \"actionCount\": 4}, {\"service\": \"posthog\", \"displayName\": \"PostHog\", \"categories\": [\"Data\", \"Developer Tools\"], \"authTypes\": [\"oauth2\", \"api_key\"], \"actionCount\": 57}, {\"service\": \"postman\", \"displayName\": \"Postman\", \"categories\": [\"Developer Tools\"], \"authTypes\": [\"api_key\"], \"actionCount\": 135}, {\"service\": \"postmark\", \"displayName\": \"Postmark\", \"categories\": [\"Communication\", \"Marketing\"], \"authTypes\": [\"api_key\"], \"actionCount\": 12}, {\"service\": \"precoro\", \"displayName\": \"Precoro\", \"categories\": [\"Finance\", \"Productivity\"], \"authTypes\": [\"api_key\"], \"actionCount\": 8}, {\"service\": \"prerender\", \"displayName\": \"Prerender\", \"categories\": [\"Marketing\", \"Developer Tools\"], \"authTypes\": [\"api_key\"], \"actionCount\": 4}, {\"service\": \"process_street\", \"displayName\": \"Process Street\", \"categories\": [\"Productivity\"], \"authTypes\": [\"api_key\"], \"actionCount\": 10}, {\"service\": \"productboard\", \"displayName\": \"Productboard\", \"categories\": [\"Productivity\", \"Data\"], \"authTypes\": [\"api_key\"], \"actionCount\": 13}, {\"service\": \"productive\", \"displayName\": \"Productive\", \"categories\": [\"Productivity\"], \"authTypes\": [\"api_key\"], \"actionCount\": 8}, {\"service\": \"projectmanager\", \"displayName\": \"ProjectManager\", \"categories\": [\"Productivity\"], \"authTypes\": [\"api_key\"], \"actionCount\": 3}, {\"service\": \"prospeo\", \"displayName\": \"Prospeo\", \"categories\": [\"Marketing\", \"Data\"], \"authTypes\": [\"api_key\"], \"actionCount\": 6}, {\"service\": \"proxiedmail\", \"displayName\": \"ProxiedMail\", \"categories\": [\"Communication\"], \"authTypes\": [\"api_key\"], \"actionCount\": 5}, {\"service\": \"prtg_classic\", \"displayName\": \"PRTG Classic\", \"categories\": [\"Developer Tools\", \"Data\"], \"authTypes\": [\"api_key\"], \"actionCount\": 2}, {\"service\": \"pubmed\", \"displayName\": \"PubMed\", \"categories\": [\"Data\"], \"authTypes\": [\"no_auth\", \"api_key\"], \"actionCount\": 8}, {\"service\": \"push_by_techulus\", \"displayName\": \"Push by Techulus\", \"categories\": [\"Communication\", \"Developer Tools\"], \"authTypes\": [\"api_key\"], \"actionCount\": 2}, {\"service\": \"pushbullet\", \"displayName\": \"Pushbullet\", \"categories\": [\"Communication\", \"Productivity\"], \"authTypes\": [\"api_key\"], \"actionCount\": 14}, {\"service\": \"pushover\", \"displayName\": \"Pushover\", \"categories\": [\"Communication\"], \"authTypes\": [\"api_key\"], \"actionCount\": 29}, {\"service\": \"pylon\", \"displayName\": \"Pylon\", \"categories\": [\"Communication\", \"Productivity\"], \"authTypes\": [\"api_key\"], \"actionCount\": 13}, {\"service\": \"qianfan\", \"displayName\": \"Baidu Qianfan\", \"categories\": [\"AI\"], \"authTypes\": [\"api_key\"], \"actionCount\": 25}, {\"service\": \"qlty\", \"displayName\": \"Qlty\", \"categories\": [\"Developer Tools\", \"Data\"], \"authTypes\": [\"api_key\"], \"actionCount\": 8}, {\"service\": \"qq_mail\", \"displayName\": \"QQ Mail\", \"categories\": [\"Communication\", \"Productivity\"], \"authTypes\": [\"custom_credential\"], \"actionCount\": 12}, {\"service\": \"quaderno\", \"displayName\": \"Quaderno\", \"categories\": [\"Finance\", \"Developer Tools\"], \"authTypes\": [\"api_key\"], \"actionCount\": 12}, {\"service\": \"quentn\", \"displayName\": \"Quentn\", \"categories\": [\"Marketing\", \"Productivity\"], \"authTypes\": [\"api_key\"], \"actionCount\": 15}, {\"service\": \"quickbase\", \"displayName\": \"Quickbase\", \"categories\": [\"Productivity\", \"Data\"], \"authTypes\": [\"api_key\"], \"actionCount\": 6}, {\"service\": \"quickchart\", \"displayName\": \"QuickChart\", \"categories\": [\"Developer Tools\", \"Design & Media\"], \"authTypes\": [\"no_auth\"], \"actionCount\": 3}, {\"service\": \"quipteams\", \"displayName\": \"Quipteams\", \"categories\": [\"Productivity\", \"Data\"], \"authTypes\": [\"api_key\"], \"actionCount\": 11}, {\"service\": \"quo\", \"displayName\": \"Quo (OpenPhone)\", \"categories\": [\"Communication\"], \"authTypes\": [\"api_key\"], \"actionCount\": 12}, {\"service\": \"radar\", \"displayName\": \"Radar\", \"categories\": [\"Location\", \"Data\"], \"authTypes\": [\"api_key\"], \"actionCount\": 5}, {\"service\": \"ragie\", \"displayName\": \"Ragie\", \"categories\": [\"AI\", \"Developer Tools\"], \"authTypes\": [\"api_key\"], \"actionCount\": 19}, {\"service\": \"railway\", \"displayName\": \"Railway\", \"categories\": [\"Developer Tools\", \"Infrastructure\"], \"authTypes\": [\"api_key\"], \"actionCount\": 9}, {\"service\": \"raisely\", \"displayName\": \"Raisely\", \"categories\": [\"Finance\", \"Marketing\"], \"authTypes\": [\"api_key\"], \"actionCount\": 8}, {\"service\": \"rawg\", \"displayName\": \"RAWG\", \"categories\": [\"Data\"], \"authTypes\": [\"api_key\"], \"actionCount\": 21}, {\"service\": \"raygun\", \"displayName\": \"Raygun\", \"categories\": [\"Developer Tools\", \"Data\"], \"authTypes\": [\"api_key\"], \"actionCount\": 10}, {\"service\": \"razorpay\", \"displayName\": \"Razorpay\", \"categories\": [\"Finance\", \"Productivity\"], \"authTypes\": [\"api_key\"], \"actionCount\": 6}, {\"service\": \"readme\", \"displayName\": \"ReadMe\", \"categories\": [\"Developer Tools\", \"Productivity\"], \"authTypes\": [\"api_key\"], \"actionCount\": 33}, {\"service\": \"readwise\", \"displayName\": \"Readwise\", \"categories\": [\"Productivity\"], \"authTypes\": [\"api_key\"], \"actionCount\": 6}, {\"service\": \"realphonevalidation\", \"displayName\": \"RealPhoneValidation\", \"categories\": [\"Communication\", \"Data\"], \"authTypes\": [\"api_key\"], \"actionCount\": 2}, {\"service\": \"rebrandly\", \"displayName\": \"Rebrandly\", \"categories\": [\"Marketing\", \"Data\"], \"authTypes\": [\"api_key\"], \"actionCount\": 7}, {\"service\": \"recallai\", \"displayName\": \"Recall.ai\", \"categories\": [\"Communication\", \"AI\"], \"authTypes\": [\"api_key\"], \"actionCount\": 5}, {\"service\": \"recharge\", \"displayName\": \"Recharge\", \"categories\": [\"Finance\", \"Marketing\"], \"authTypes\": [\"api_key\"], \"actionCount\": 10}, {\"service\": \"recruitcrm\", \"displayName\": \"Recruit CRM\", \"categories\": [\"Productivity\"], \"authTypes\": [\"api_key\"], \"actionCount\": 8}, {\"service\": \"recruitee\", \"displayName\": \"Recruitee\", \"categories\": [\"Productivity\"], \"authTypes\": [\"api_key\"], \"actionCount\": 4}, {\"service\": \"recruiterflow\", \"displayName\": \"Recruiterflow\", \"categories\": [\"Productivity\"], \"authTypes\": [\"api_key\"], \"actionCount\": 6}, {\"service\": \"recurly\", \"displayName\": \"Recurly\", \"categories\": [\"Finance\"], \"authTypes\": [\"api_key\"], \"actionCount\": 10}, {\"service\": \"redfox\", \"displayName\": \"RedFoxHub\", \"categories\": [\"Social\", \"Data\"], \"authTypes\": [\"api_key\"], \"actionCount\": 19}, {\"service\": \"reducto\", \"displayName\": \"Reducto\", \"categories\": [\"AI\", \"Productivity\", \"Data\"], \"authTypes\": [\"api_key\"], \"actionCount\": 3}, {\"service\": \"refiner\", \"displayName\": \"Refiner\", \"categories\": [\"Marketing\", \"Data\"], \"authTypes\": [\"api_key\"], \"actionCount\": 12}, {\"service\": \"remove_bg\", \"displayName\": \"remove.bg\", \"categories\": [\"AI\", \"Design & Media\"], \"authTypes\": [\"api_key\"], \"actionCount\": 3}, {\"service\": \"render\", \"displayName\": \"Render\", \"categories\": [\"Developer Tools\"], \"authTypes\": [\"api_key\"], \"actionCount\": 10}, {\"service\": \"renderform\", \"displayName\": \"RenderForm\", \"categories\": [\"Design & Media\", \"Developer Tools\"], \"authTypes\": [\"api_key\"], \"actionCount\": 6}, {\"service\": \"rentman\", \"displayName\": \"Rentman\", \"categories\": [\"Productivity\"], \"authTypes\": [\"api_key\"], \"actionCount\": 8}, {\"service\": \"repairshopr\", \"displayName\": \"RepairShopr\", \"categories\": [\"Productivity\"], \"authTypes\": [\"api_key\"], \"actionCount\": 5}, {\"service\": \"replicate\", \"displayName\": \"Replicate\", \"categories\": [\"AI\", \"Developer Tools\"], \"authTypes\": [\"api_key\"], \"actionCount\": 11}, {\"service\": \"reply_io\", \"displayName\": \"Reply.io\", \"categories\": [\"Marketing\", \"Communication\"], \"authTypes\": [\"api_key\"], \"actionCount\": 9}, {\"service\": \"resend\", \"displayName\": \"Resend\", \"categories\": [\"Communication\", \"Marketing\"], \"authTypes\": [\"api_key\"], \"actionCount\": 1}, {\"service\": \"retell_ai\", \"displayName\": \"Retell AI\", \"categories\": [\"AI\", \"Communication\"], \"authTypes\": [\"api_key\"], \"actionCount\": 8}, {\"service\": \"retently\", \"displayName\": \"Retently\", \"categories\": [\"Marketing\", \"Data\"], \"authTypes\": [\"api_key\"], \"actionCount\": 9}, {\"service\": \"revenuecat\", \"displayName\": \"RevenueCat\", \"categories\": [\"Finance\", \"Developer Tools\", \"Subscriptions\"], \"authTypes\": [\"api_key\"], \"actionCount\": 12}, {\"service\": \"ringover\", \"displayName\": \"Ringover\", \"categories\": [\"Communication\", \"Productivity\"], \"authTypes\": [\"api_key\"], \"actionCount\": 13}, {\"service\": \"rippling\", \"displayName\": \"Rippling\", \"categories\": [\"Productivity\", \"Security\"], \"authTypes\": [\"api_key\"], \"actionCount\": 4}, {\"service\": \"riveter\", \"displayName\": \"Riveter\", \"categories\": [\"AI\", \"Data\"], \"authTypes\": [\"api_key\"], \"actionCount\": 2}, {\"service\": \"roam\", \"displayName\": \"Roam HQ\", \"categories\": [\"Communication\", \"Productivity\"], \"authTypes\": [\"api_key\"], \"actionCount\": 5}, {\"service\": \"roam_scim\", \"displayName\": \"Roam SCIM\", \"categories\": [\"Security\", \"Productivity\"], \"authTypes\": [\"api_key\"], \"actionCount\": 13}, {\"service\": \"roboflow\", \"displayName\": \"Roboflow\", \"categories\": [\"AI\", \"Developer Tools\"], \"authTypes\": [\"api_key\"], \"actionCount\": 12}, {\"service\": \"rocket_chat\", \"displayName\": \"Rocket.Chat\", \"categories\": [\"Communication\", \"Productivity\"], \"authTypes\": [\"custom_credential\"], \"actionCount\": 8}, {\"service\": \"rocket_reach\", \"displayName\": \"RocketReach\", \"categories\": [\"Communication\", \"Marketing\", \"Data\"], \"authTypes\": [\"api_key\"], \"actionCount\": 10}, {\"service\": \"rocketlane\", \"displayName\": \"Rocketlane\", \"categories\": [\"Productivity\"], \"authTypes\": [\"api_key\"], \"actionCount\": 6}, {\"service\": \"rollbar\", \"displayName\": \"Rollbar\", \"categories\": [\"Developer Tools\", \"Security\"], \"authTypes\": [\"api_key\"], \"actionCount\": 8}, {\"service\": \"rootly\", \"displayName\": \"Rootly\", \"categories\": [\"Developer Tools\", \"Productivity\"], \"authTypes\": [\"api_key\"], \"actionCount\": 5}, {\"service\": \"rosette_text_analytics\", \"displayName\": \"Rosette Text Analytics\", \"categories\": [\"AI\"], \"authTypes\": [\"api_key\"], \"actionCount\": 5}, {\"service\": \"route4me\", \"displayName\": \"Route4Me\", \"categories\": [\"Location\", \"Productivity\"], \"authTypes\": [\"api_key\"], \"actionCount\": 3}, {\"service\": \"runpod\", \"displayName\": \"Runpod\", \"categories\": [\"AI\", \"Developer Tools\"], \"authTypes\": [\"api_key\"], \"actionCount\": 7}, {\"service\": \"runscope\", \"displayName\": \"Runscope\", \"categories\": [\"Developer Tools\"], \"authTypes\": [\"api_key\"], \"actionCount\": 7}, {\"service\": \"saas_custom_domains\", \"displayName\": \"SaaS Custom Domains\", \"categories\": [\"Developer Tools\"], \"authTypes\": [\"api_key\"], \"actionCount\": 11}, {\"service\": \"safetyculture\", \"displayName\": \"SafetyCulture\", \"categories\": [\"Productivity\", \"Data\"], \"authTypes\": [\"api_key\"], \"actionCount\": 5}, {\"service\": \"sage_hr\", \"displayName\": \"Sage HR\", \"categories\": [\"Productivity\"], \"authTypes\": [\"api_key\"], \"actionCount\": 8}, {\"service\": \"sage_sales_management\", \"displayName\": \"Sage Sales Management\", \"categories\": [\"Marketing\"], \"authTypes\": [\"custom_credential\"], \"actionCount\": 18}, {\"service\": \"salesflare\", \"displayName\": \"Salesflare\", \"categories\": [\"Productivity\", \"Marketing\"], \"authTypes\": [\"api_key\"], \"actionCount\": 16}, {\"service\": \"salesmate\", \"displayName\": \"Salesmate\", \"categories\": [\"Marketing\", \"Communication\"], \"authTypes\": [\"api_key\"], \"actionCount\": 6}, {\"service\": \"satismeter\", \"displayName\": \"SatisMeter\", \"categories\": [\"Marketing\", \"Data\"], \"authTypes\": [\"api_key\"], \"actionCount\": 6}, {\"service\": \"scopus\", \"displayName\": \"Scopus\", \"categories\": [\"Data\"], \"authTypes\": [\"api_key\"], \"actionCount\": 7}, {\"service\": \"scrape_do\", \"displayName\": \"Scrape.do\", \"categories\": [\"Developer Tools\", \"Data\"], \"authTypes\": [\"api_key\"], \"actionCount\": 4}, {\"service\": \"scrape_graph_ai\", \"displayName\": \"ScrapeGraphAI\", \"categories\": [\"AI\", \"Data\", \"Developer Tools\"], \"authTypes\": [\"api_key\"], \"actionCount\": 6}, {\"service\": \"scraperapi\", \"displayName\": \"ScraperAPI\", \"categories\": [\"Developer Tools\", \"Data\"], \"authTypes\": [\"api_key\"], \"actionCount\": 3}, {\"service\": \"scrapfly\", \"displayName\": \"Scrapfly\", \"categories\": [\"Developer Tools\", \"Data\"], \"authTypes\": [\"api_key\"], \"actionCount\": 2}, {\"service\": \"scrapingant\", \"displayName\": \"ScrapingAnt\", \"categories\": [\"AI\", \"Data\", \"Developer Tools\"], \"authTypes\": [\"api_key\"], \"actionCount\": 4}, {\"service\": \"scrapingbee\", \"displayName\": \"ScrapingBee\", \"categories\": [\"Developer Tools\", \"Data\"], \"authTypes\": [\"api_key\"], \"actionCount\": 3}, {\"service\": \"scrapingdog\", \"displayName\": \"Scrapingdog\", \"categories\": [\"Developer Tools\", \"Data\"], \"authTypes\": [\"api_key\"], \"actionCount\": 6}, {\"service\": \"screenshot_fyi\", \"displayName\": \"screenshot.fyi\", \"categories\": [\"Developer Tools\", \"Design & Media\"], \"authTypes\": [\"api_key\"], \"actionCount\": 1}, {\"service\": \"screenshotone\", \"displayName\": \"ScreenshotOne\", \"categories\": [\"Developer Tools\", \"Design & Media\"], \"authTypes\": [\"api_key\"], \"actionCount\": 5}, {\"service\": \"search_api\", \"displayName\": \"SearchApi\", \"categories\": [\"Data\", \"Location\"], \"authTypes\": [\"api_key\"], \"actionCount\": 5}, {\"service\": \"securitytrails\", \"displayName\": \"SecurityTrails\", \"categories\": [\"Security\", \"Data\"], \"authTypes\": [\"api_key\"], \"actionCount\": 4}, {\"service\": \"segment\", \"displayName\": \"Segment\", \"categories\": [\"Data\", \"Marketing\"], \"authTypes\": [\"api_key\"], \"actionCount\": 7}, {\"service\": \"semantic_scholar\", \"displayName\": \"Semantic Scholar\", \"categories\": [\"AI\", \"Data\"], \"authTypes\": [\"api_key\"], \"actionCount\": 16}, {\"service\": \"semrush\", \"displayName\": \"Semrush\", \"categories\": [\"Marketing\", \"Data\"], \"authTypes\": [\"api_key\"], \"actionCount\": 3}, {\"service\": \"sendbird\", \"displayName\": \"Sendbird\", \"categories\": [\"Communication\", \"Developer Tools\"], \"authTypes\": [\"api_key\"], \"actionCount\": 28}, {\"service\": \"sender\", \"displayName\": \"Sender\", \"categories\": [\"Marketing\", \"Communication\"], \"authTypes\": [\"api_key\"], \"actionCount\": 14}, {\"service\": \"sendfox\", \"displayName\": \"SendFox\", \"categories\": [\"Communication\", \"Marketing\"], \"authTypes\": [\"api_key\"], \"actionCount\": 14}, {\"service\": \"sendgrid\", \"displayName\": \"SendGrid\", \"categories\": [\"Communication\", \"Marketing\"], \"authTypes\": [\"api_key\"], \"actionCount\": 4}, {\"service\": \"sendmator\", \"displayName\": \"Sendmator\", \"categories\": [\"Communication\", \"Marketing\"], \"authTypes\": [\"api_key\"], \"actionCount\": 5}, {\"service\": \"sendspark\", \"displayName\": \"Sendspark\", \"categories\": [\"Marketing\", \"Design & Media\"], \"authTypes\": [\"api_key\"], \"actionCount\": 5}, {\"service\": \"sensibo\", \"displayName\": \"Sensibo\", \"categories\": [\"Productivity\"], \"authTypes\": [\"api_key\"], \"actionCount\": 4}, {\"service\": \"sentry\", \"displayName\": \"Sentry\", \"categories\": [\"Developer Tools\", \"Security\"], \"authTypes\": [\"oauth2\"], \"actionCount\": 19}, {\"service\": \"seqera\", \"displayName\": \"Seqera\", \"categories\": [\"Data\", \"Developer Tools\"], \"authTypes\": [\"api_key\"], \"actionCount\": 8}, {\"service\": \"serpapi\", \"displayName\": \"SerpApi\", \"categories\": [\"Data\", \"Location\"], \"authTypes\": [\"api_key\"], \"actionCount\": 3}, {\"service\": \"serpdog\", \"displayName\": \"Serpdog\", \"categories\": [\"Data\"], \"authTypes\": [\"api_key\"], \"actionCount\": 5}, {\"service\": \"serphouse\", \"displayName\": \"SERPHouse\", \"categories\": [\"Data\", \"Location\"], \"authTypes\": [\"api_key\"], \"actionCount\": 5}, {\"service\": \"serply\", \"displayName\": \"Serply\", \"categories\": [\"Data\"], \"authTypes\": [\"api_key\"], \"actionCount\": 4}, {\"service\": \"sevdesk\", \"displayName\": \"sevdesk\", \"categories\": [\"Finance\", \"Productivity\"], \"authTypes\": [\"api_key\"], \"actionCount\": 5}, {\"service\": \"sheetdb\", \"displayName\": \"SheetDB\", \"categories\": [\"Data\", \"Productivity\"], \"authTypes\": [\"api_key\"], \"actionCount\": 8}, {\"service\": \"ship_bob\", \"displayName\": \"ShipBob\", \"categories\": [\"Productivity\", \"Data\"], \"authTypes\": [\"api_key\"], \"actionCount\": 5}, {\"service\": \"ship_station\", \"displayName\": \"ShipStation\", \"categories\": [\"Productivity\", \"Location\"], \"authTypes\": [\"api_key\"], \"actionCount\": 4}, {\"service\": \"shipday\", \"displayName\": \"Shipday\", \"categories\": [\"Productivity\", \"Location\"], \"authTypes\": [\"api_key\"], \"actionCount\": 7}, {\"service\": \"shipengine\", \"displayName\": \"ShipEngine\", \"categories\": [\"Productivity\", \"Location\"], \"authTypes\": [\"api_key\"], \"actionCount\": 6}, {\"service\": \"shippo\", \"displayName\": \"Shippo\", \"categories\": [\"Productivity\", \"Data\"], \"authTypes\": [\"api_key\"], \"actionCount\": 8}, {\"service\": \"shodan\", \"displayName\": \"Shodan\", \"categories\": [\"Security\", \"Data\"], \"authTypes\": [\"api_key\"], \"actionCount\": 7}, {\"service\": \"shopify\", \"displayName\": \"Shopify REST Admin\", \"categories\": [\"Marketing\", \"Data\"], \"authTypes\": [\"api_key\"], \"actionCount\": 11}, {\"service\": \"shopify_admin\", \"displayName\": \"Shopify Admin\", \"categories\": [\"Marketing\", \"Data\"], \"authTypes\": [\"api_key\"], \"actionCount\": 15}, {\"service\": \"shopify_partner\", \"displayName\": \"Shopify Partner\", \"categories\": [\"Marketing\", \"Data\"], \"authTypes\": [\"api_key\"], \"actionCount\": 5}, {\"service\": \"shopify_storefront\", \"displayName\": \"Shopify Storefront\", \"categories\": [\"Marketing\", \"Data\"], \"authTypes\": [\"api_key\"], \"actionCount\": 8}, {\"service\": \"short_io\", \"displayName\": \"Short.io\", \"categories\": [\"Marketing\", \"Data\"], \"authTypes\": [\"api_key\"], \"actionCount\": 8}, {\"service\": \"short_menu\", \"displayName\": \"Short Menu\", \"categories\": [\"Marketing\", \"Data\"], \"authTypes\": [\"api_key\"], \"actionCount\": 3}, {\"service\": \"shortcut\", \"displayName\": \"Shortcut\", \"categories\": [\"Productivity\", \"Project Management\"], \"authTypes\": [\"api_key\"], \"actionCount\": 15}, {\"service\": \"shorten_rest\", \"displayName\": \"Shorten.REST\", \"categories\": [\"Marketing\", \"Data\"], \"authTypes\": [\"api_key\"], \"actionCount\": 6}, {\"service\": \"shortpixel\", \"displayName\": \"ShortPixel\", \"categories\": [\"Media\", \"Developer Tools\"], \"authTypes\": [\"api_key\"], \"actionCount\": 6}, {\"service\": \"shotstack\", \"displayName\": \"Shotstack\", \"categories\": [\"Developer Tools\", \"Design & Media\"], \"authTypes\": [\"api_key\"], \"actionCount\": 2}, {\"service\": \"signalbase\", \"displayName\": \"Signalbase\", \"categories\": [\"Data\", \"Marketing\"], \"authTypes\": [\"api_key\"], \"actionCount\": 6}, {\"service\": \"signpath\", \"displayName\": \"SignPath\", \"categories\": [\"Developer Tools\", \"Security\"], \"authTypes\": [\"api_key\"], \"actionCount\": 3}, {\"service\": \"signwell\", \"displayName\": \"SignWell\", \"categories\": [\"Productivity\", \"Communication\"], \"authTypes\": [\"api_key\"], \"actionCount\": 6}, {\"service\": \"similarweb_digitalrank_api\", \"displayName\": \"Similarweb\", \"categories\": [\"Data\", \"Marketing\"], \"authTypes\": [\"api_key\"], \"actionCount\": 3}, {\"service\": \"simla\", \"displayName\": \"Simla.com\", \"categories\": [\"Marketing\", \"Productivity\"], \"authTypes\": [\"api_key\"], \"actionCount\": 9}, {\"service\": \"simple_analytics\", \"displayName\": \"Simple Analytics\", \"categories\": [\"Data\", \"Marketing\"], \"authTypes\": [\"api_key\"], \"actionCount\": 4}, {\"service\": \"simplesat\", \"displayName\": \"Simplesat\", \"categories\": [\"Marketing\", \"Data\"], \"authTypes\": [\"api_key\"], \"actionCount\": 8}, {\"service\": \"sitespeakai\", \"displayName\": \"SiteSpeakAI\", \"categories\": [\"AI\", \"Communication\"], \"authTypes\": [\"api_key\"], \"actionCount\": 11}, {\"service\": \"skio\", \"displayName\": \"Skio\", \"categories\": [\"Data\", \"Marketing\"], \"authTypes\": [\"api_key\"], \"actionCount\": 4}, {\"service\": \"skyfire\", \"displayName\": \"Skyfire\", \"categories\": [\"Finance\", \"AI\"], \"authTypes\": [\"api_key\"], \"actionCount\": 4}, {\"service\": \"slab\", \"displayName\": \"Slab\", \"categories\": [\"Productivity\"], \"authTypes\": [\"api_key\"], \"actionCount\": 17}, {\"service\": \"slack\", \"displayName\": \"Slack\", \"categories\": [\"Communication\", \"Productivity\"], \"authTypes\": [\"oauth2\"], \"actionCount\": 22}, {\"service\": \"sling\", \"displayName\": \"Sling\", \"categories\": [\"Productivity\"], \"authTypes\": [\"api_key\"], \"actionCount\": 14}, {\"service\": \"slite\", \"displayName\": \"Slite\", \"categories\": [\"Productivity\"], \"authTypes\": [\"api_key\"], \"actionCount\": 8}, {\"service\": \"smartlead_ai\", \"displayName\": \"Smartlead\", \"categories\": [\"Marketing\"], \"authTypes\": [\"api_key\"], \"actionCount\": 4}, {\"service\": \"smartrecruiters\", \"displayName\": \"SmartRecruiters\", \"categories\": [\"Productivity\", \"Data\"], \"authTypes\": [\"api_key\"], \"actionCount\": 4}, {\"service\": \"smartsheet\", \"displayName\": \"Smartsheet\", \"categories\": [\"Productivity\"], \"authTypes\": [\"api_key\"], \"actionCount\": 5}, {\"service\": \"sms_alert\", \"displayName\": \"SMS Alert\", \"categories\": [\"Communication\", \"Marketing\"], \"authTypes\": [\"api_key\"], \"actionCount\": 6}, {\"service\": \"smtp2go\", \"displayName\": \"SMTP2GO\", \"categories\": [\"Communication\", \"Marketing\"], \"authTypes\": [\"api_key\"], \"actionCount\": 8}, {\"service\": \"smugmug\", \"displayName\": \"SmugMug\", \"categories\": [\"Design\", \"Storage\"], \"authTypes\": [\"api_key\"], \"actionCount\": 23}, {\"service\": \"snipe_it\", \"displayName\": \"Snipe-IT\", \"categories\": [\"Productivity\", \"Data\"], \"authTypes\": [\"api_key\"], \"actionCount\": 6}, {\"service\": \"solcast\", \"displayName\": \"Solcast\", \"categories\": [\"Location\", \"Data\"], \"authTypes\": [\"api_key\"], \"actionCount\": 3}, {\"service\": \"speechmatics\", \"displayName\": \"Speechmatics\", \"categories\": [\"AI\", \"Developer Tools\"], \"authTypes\": [\"api_key\"], \"actionCount\": 3}, {\"service\": \"spider\", \"displayName\": \"Spider Cloud\", \"categories\": [\"Data\", \"Developer Tools\"], \"authTypes\": [\"api_key\"], \"actionCount\": 4}, {\"service\": \"spotify\", \"displayName\": \"Spotify\", \"categories\": [\"Design\", \"Social\"], \"authTypes\": [\"oauth2\"], \"actionCount\": 88}, {\"service\": \"square\", \"displayName\": \"Square\", \"categories\": [\"Finance\", \"Productivity\"], \"authTypes\": [\"api_key\"], \"actionCount\": 6}, {\"service\": \"sslmate_cert_spotter_api\", \"displayName\": \"Cert Spotter\", \"categories\": [\"Security\", \"Data\"], \"authTypes\": [\"api_key\"], \"actionCount\": 5}, {\"service\": \"stabilityai\", \"displayName\": \"Stability AI\", \"categories\": [\"AI\", \"Design & Media\"], \"authTypes\": [\"api_key\"], \"actionCount\": 1}, {\"service\": \"stack_ai\", \"displayName\": \"StackAI\", \"categories\": [\"AI\", \"Developer Tools\"], \"authTypes\": [\"custom_credential\"], \"actionCount\": 2}, {\"service\": \"stannp\", \"displayName\": \"Stannp\", \"categories\": [\"Marketing\"], \"authTypes\": [\"api_key\"], \"actionCount\": 11}, {\"service\": \"starton\", \"displayName\": \"Starton\", \"categories\": [\"Storage\", \"Developer Tools\"], \"authTypes\": [\"api_key\"], \"actionCount\": 5}, {\"service\": \"statamic\", \"displayName\": \"Statamic\", \"categories\": [\"Developer Tools\", \"Productivity\"], \"authTypes\": [\"api_key\"], \"actionCount\": 4}, {\"service\": \"statista\", \"displayName\": \"Statista\", \"categories\": [\"Data\"], \"authTypes\": [\"api_key\"], \"actionCount\": 4}, {\"service\": \"statsig\", \"displayName\": \"Statsig\", \"categories\": [\"Developer Tools\", \"Data\"], \"authTypes\": [\"api_key\"], \"actionCount\": 7}, {\"service\": \"statuscake\", \"displayName\": \"StatusCake\", \"categories\": [\"Developer Tools\"], \"authTypes\": [\"api_key\"], \"actionCount\": 9}, {\"service\": \"statuspage\", \"displayName\": \"Statuspage\", \"categories\": [\"Developer Tools\", \"Communication\"], \"authTypes\": [\"api_key\"], \"actionCount\": 13}, {\"service\": \"statuspal\", \"displayName\": \"StatusPal\", \"categories\": [\"Developer Tools\", \"Communication\"], \"authTypes\": [\"api_key\"], \"actionCount\": 6}, {\"service\": \"stay_ai\", \"displayName\": \"Stay AI\", \"categories\": [\"Marketing\", \"Productivity\"], \"authTypes\": [\"api_key\"], \"actionCount\": 4}, {\"service\": \"store_leads\", \"displayName\": \"Store Leads\", \"categories\": [\"Data\", \"Marketing\"], \"authTypes\": [\"api_key\"], \"actionCount\": 6}, {\"service\": \"storecensus\", \"displayName\": \"StoreCensus\", \"categories\": [\"Data\", \"Marketing\"], \"authTypes\": [\"api_key\"], \"actionCount\": 4}, {\"service\": \"stormboard\", \"displayName\": \"Stormboard\", \"categories\": [\"Productivity\"], \"authTypes\": [\"api_key\"], \"actionCount\": 10}, {\"service\": \"stormglass_io\", \"displayName\": \"Stormglass\", \"categories\": [\"Location\", \"Data\"], \"authTypes\": [\"api_key\"], \"actionCount\": 3}, {\"service\": \"storyblok\", \"displayName\": \"Storyblok\", \"categories\": [\"Productivity\", \"Developer Tools\"], \"authTypes\": [\"api_key\"], \"actionCount\": 7}, {\"service\": \"strava\", \"displayName\": \"Strava\", \"categories\": [\"Social\"], \"authTypes\": [\"oauth2\"], \"actionCount\": 34}, {\"service\": \"streak\", \"displayName\": \"Streak\", \"categories\": [\"Productivity\", \"Marketing\"], \"authTypes\": [\"api_key\"], \"actionCount\": 4}, {\"service\": \"streamtime\", \"displayName\": \"Streamtime\", \"categories\": [\"Productivity\", \"Finance\"], \"authTypes\": [\"api_key\"], \"actionCount\": 14}, {\"service\": \"stripe\", \"displayName\": \"Stripe\", \"categories\": [\"Finance\", \"Developer Tools\"], \"authTypes\": [\"api_key\"], \"actionCount\": 18}, {\"service\": \"subvisory\", \"displayName\": \"Subvisory\", \"categories\": [\"Finance\"], \"authTypes\": [\"api_key\"], \"actionCount\": 15}, {\"service\": \"sunoapi\", \"displayName\": \"SunoAPI\", \"categories\": [\"AI\", \"Design & Media\"], \"authTypes\": [\"api_key\"], \"actionCount\": 26}, {\"service\": \"supabase\", \"displayName\": \"Supabase\", \"categories\": [\"Developer Tools\", \"Data\", \"Storage\"], \"authTypes\": [\"oauth2\", \"api_key\"], \"actionCount\": 21}, {\"service\": \"supadata\", \"displayName\": \"Supadata\", \"categories\": [\"AI\", \"Data\"], \"authTypes\": [\"api_key\"], \"actionCount\": 10}, {\"service\": \"super_saas\", \"displayName\": \"SuperSaaS\", \"categories\": [\"Productivity\"], \"authTypes\": [\"api_key\"], \"actionCount\": 7}, {\"service\": \"superchat\", \"displayName\": \"Superchat\", \"categories\": [\"Communication\", \"Marketing\"], \"authTypes\": [\"api_key\"], \"actionCount\": 11}, {\"service\": \"supervisely\", \"displayName\": \"Supervisely\", \"categories\": [\"AI\", \"Data\"], \"authTypes\": [\"api_key\"], \"actionCount\": 7}, {\"service\": \"supportbee\", \"displayName\": \"SupportBee\", \"categories\": [\"Communication\", \"Productivity\"], \"authTypes\": [\"api_key\"], \"actionCount\": 17}, {\"service\": \"surecontact\", \"displayName\": \"SureContact\", \"categories\": [\"Marketing\", \"Productivity\"], \"authTypes\": [\"api_key\"], \"actionCount\": 23}, {\"service\": \"svix\", \"displayName\": \"Svix\", \"categories\": [\"Developer Tools\"], \"authTypes\": [\"api_key\"], \"actionCount\": 16}, {\"service\": \"swaggerhub\", \"displayName\": \"SwaggerHub\", \"categories\": [\"Developer Tools\"], \"authTypes\": [\"api_key\"], \"actionCount\": 14}, {\"service\": \"systeme_io\", \"displayName\": \"Systeme.io\", \"categories\": [\"Marketing\", \"Productivity\"], \"authTypes\": [\"api_key\"], \"actionCount\": 24}, {\"service\": \"taggun\", \"displayName\": \"Taggun\", \"categories\": [\"AI\", \"Data\"], \"authTypes\": [\"api_key\"], \"actionCount\": 5}, {\"service\": \"tailscale\", \"displayName\": \"Tailscale\", \"categories\": [\"Security\", \"Developer Tools\"], \"authTypes\": [\"custom_credential\"], \"actionCount\": 82}, {\"service\": \"talenthr\", \"displayName\": \"TalentHR\", \"categories\": [\"Productivity\"], \"authTypes\": [\"api_key\"], \"actionCount\": 1}, {\"service\": \"talentlms\", \"displayName\": \"TalentLMS\", \"categories\": [\"Productivity\"], \"authTypes\": [\"api_key\"], \"actionCount\": 14}, {\"service\": \"tally\", \"displayName\": \"Tally\", \"categories\": [\"Productivity\", \"Marketing\"], \"authTypes\": [\"api_key\"], \"actionCount\": 4}, {\"service\": \"tanium\", \"displayName\": \"Tanium\", \"categories\": [\"Security\", \"Data\"], \"authTypes\": [\"api_key\"], \"actionCount\": 1}, {\"service\": \"tapfiliate\", \"displayName\": \"Tapfiliate\", \"categories\": [\"Marketing\", \"Data\"], \"authTypes\": [\"api_key\"], \"actionCount\": 11}, {\"service\": \"tave\", \"displayName\": \"T\\u00e1ve\", \"categories\": [\"Productivity\", \"Communication\"], \"authTypes\": [\"api_key\"], \"actionCount\": 3}, {\"service\": \"tavily\", \"displayName\": \"Tavily\", \"categories\": [\"AI\", \"Data\"], \"authTypes\": [\"api_key\"], \"actionCount\": 7}, {\"service\": \"taxjar\", \"displayName\": \"TaxJar\", \"categories\": [\"Finance\", \"Data\"], \"authTypes\": [\"api_key\"], \"actionCount\": 21}, {\"service\": \"teamcamp\", \"displayName\": \"Teamcamp\", \"categories\": [\"Productivity\"], \"authTypes\": [\"api_key\"], \"actionCount\": 7}, {\"service\": \"teamtailor\", \"displayName\": \"Teamtailor\", \"categories\": [\"Productivity\"], \"authTypes\": [\"api_key\"], \"actionCount\": 4}, {\"service\": \"telegram\", \"displayName\": \"Telegram Bot\", \"categories\": [\"Communication\", \"Social\"], \"authTypes\": [\"api_key\"], \"actionCount\": 50}, {\"service\": \"telnyx\", \"displayName\": \"Telnyx\", \"categories\": [\"Communication\", \"Developer Tools\"], \"authTypes\": [\"api_key\"], \"actionCount\": 4}, {\"service\": \"teltel\", \"displayName\": \"TelTel\", \"categories\": [\"Communication\"], \"authTypes\": [\"api_key\"], \"actionCount\": 4}, {\"service\": \"templated\", \"displayName\": \"Templated\", \"categories\": [\"Design & Media\", \"Marketing\"], \"authTypes\": [\"api_key\"], \"actionCount\": 7}, {\"service\": \"tencent_docs\", \"displayName\": \"Tencent Docs\", \"categories\": [\"Productivity\", \"Storage\"], \"authTypes\": [\"oauth2\"], \"actionCount\": 16}, {\"service\": \"tencent_maps\", \"displayName\": \"Tencent Maps\", \"categories\": [\"Location\"], \"authTypes\": [\"api_key\"], \"actionCount\": 15}, {\"service\": \"terraform\", \"displayName\": \"Terraform\", \"categories\": [\"Developer Tools\"], \"authTypes\": [\"api_key\"], \"actionCount\": 8}, {\"service\": \"textcortex\", \"displayName\": \"TextCortex\", \"categories\": [\"AI\"], \"authTypes\": [\"api_key\"], \"actionCount\": 3}, {\"service\": \"textit\", \"displayName\": \"TextIt\", \"categories\": [\"Communication\", \"Marketing\"], \"authTypes\": [\"api_key\"], \"actionCount\": 13}, {\"service\": \"textrazor\", \"displayName\": \"TextRazor\", \"categories\": [\"AI\", \"Data\"], \"authTypes\": [\"api_key\"], \"actionCount\": 6}, {\"service\": \"the_cat_api\", \"displayName\": \"The Cat API\", \"categories\": [\"Design & Media\", \"Data\"], \"authTypes\": [\"api_key\"], \"actionCount\": 5}, {\"service\": \"the_colony\", \"displayName\": \"The Colony\", \"categories\": [\"AI\", \"Social\"], \"authTypes\": [\"api_key\"], \"actionCount\": 12}, {\"service\": \"the_dog_api\", \"displayName\": \"The Dog API\", \"categories\": [\"Design & Media\", \"Data\"], \"authTypes\": [\"api_key\"], \"actionCount\": 11}, {\"service\": \"the_odds_api\", \"displayName\": \"The Odds API\", \"categories\": [\"Data\"], \"authTypes\": [\"api_key\"], \"actionCount\": 7}, {\"service\": \"the_swarm\", \"displayName\": \"The Swarm\", \"categories\": [\"Data\", \"Social\"], \"authTypes\": [\"api_key\"], \"actionCount\": 5}, {\"service\": \"theirstack\", \"displayName\": \"TheirStack\", \"categories\": [\"Data\", \"Marketing\"], \"authTypes\": [\"api_key\"], \"actionCount\": 4}, {\"service\": \"ticketmaster\", \"displayName\": \"Ticketmaster\", \"categories\": [\"Social\", \"Data\"], \"authTypes\": [\"api_key\"], \"actionCount\": 15}, {\"service\": \"ticktick\", \"displayName\": \"TickTick\", \"categories\": [\"Productivity\"], \"authTypes\": [\"oauth2\", \"api_key\"], \"actionCount\": 20}, {\"service\": \"tidb\", \"displayName\": \"TiDB Cloud\", \"categories\": [\"Data\", \"Developer Tools\"], \"authTypes\": [\"custom_credential\"], \"actionCount\": 17}, {\"service\": \"tikhub\", \"displayName\": \"TikHub\", \"categories\": [\"Data\", \"Social\"], \"authTypes\": [\"api_key\"], \"actionCount\": 30}, {\"service\": \"tiktok_business\", \"displayName\": \"TikTok Business\", \"categories\": [\"Marketing\", \"Data\"], \"authTypes\": [\"oauth2\", \"api_key\"], \"actionCount\": 15}, {\"service\": \"timecamp\", \"displayName\": \"TimeCamp\", \"categories\": [\"Productivity\"], \"authTypes\": [\"api_key\"], \"actionCount\": 9}, {\"service\": \"timelink\", \"displayName\": \"timelink\", \"categories\": [\"Productivity\"], \"authTypes\": [\"api_key\"], \"actionCount\": 14}, {\"service\": \"tinybird\", \"displayName\": \"Tinybird\", \"categories\": [\"Data\", \"Developer Tools\"], \"authTypes\": [\"api_key\"], \"actionCount\": 4}, {\"service\": \"tinypng\", \"displayName\": \"TinyPNG\", \"categories\": [\"Design & Media\"], \"authTypes\": [\"api_key\"], \"actionCount\": 2}, {\"service\": \"tinyurl\", \"displayName\": \"TinyURL\", \"categories\": [\"Marketing\"], \"authTypes\": [\"api_key\"], \"actionCount\": 2}, {\"service\": \"tisane\", \"displayName\": \"Tisane\", \"categories\": [\"AI\", \"Security\"], \"authTypes\": [\"api_key\"], \"actionCount\": 7}, {\"service\": \"tldv\", \"displayName\": \"tl;dv\", \"categories\": [\"Productivity\", \"Communication\"], \"authTypes\": [\"api_key\"], \"actionCount\": 5}, {\"service\": \"todoist\", \"displayName\": \"Todoist\", \"categories\": [\"Productivity\"], \"authTypes\": [\"oauth2\", \"api_key\"], \"actionCount\": 19}, {\"service\": \"together_ai\", \"displayName\": \"Together AI\", \"categories\": [\"AI\", \"Developer Tools\"], \"authTypes\": [\"api_key\"], \"actionCount\": 3}, {\"service\": \"toggl\", \"displayName\": \"Toggl Track\", \"categories\": [\"Productivity\"], \"authTypes\": [\"api_key\"], \"actionCount\": 24}, {\"service\": \"tomba\", \"displayName\": \"Tomba\", \"categories\": [\"Marketing\", \"Data\"], \"authTypes\": [\"api_key\"], \"actionCount\": 10}, {\"service\": \"tomtom\", \"displayName\": \"TomTom\", \"categories\": [\"Location\", \"Developer Tools\"], \"authTypes\": [\"api_key\"], \"actionCount\": 5}, {\"service\": \"torii\", \"displayName\": \"Torii\", \"categories\": [\"Productivity\", \"Finance\", \"Security\"], \"authTypes\": [\"api_key\"], \"actionCount\": 9}, {\"service\": \"tpscheck\", \"displayName\": \"TPSCheck\", \"categories\": [\"Communication\", \"Marketing\"], \"authTypes\": [\"api_key\"], \"actionCount\": 3}, {\"service\": \"trello\", \"displayName\": \"Trello\", \"categories\": [\"Productivity\"], \"authTypes\": [\"custom_credential\"], \"actionCount\": 28}, {\"service\": \"tremendous\", \"displayName\": \"Tremendous\", \"categories\": [\"Finance\", \"Marketing\"], \"authTypes\": [\"api_key\"], \"actionCount\": 13}, {\"service\": \"trent\", \"displayName\": \"Trent\", \"categories\": [\"AI\", \"Security\"], \"authTypes\": [\"api_key\"], \"actionCount\": 1}, {\"service\": \"trigger_dev\", \"displayName\": \"Trigger.dev\", \"categories\": [\"Developer Tools\"], \"authTypes\": [\"api_key\"], \"actionCount\": 6}, {\"service\": \"tripadvisor\", \"displayName\": \"Tripadvisor\", \"categories\": [\"Location\", \"Data\"], \"authTypes\": [\"api_key\"], \"actionCount\": 4}, {\"service\": \"triple_whale\", \"displayName\": \"Triple Whale\", \"categories\": [\"Data\", \"Marketing\"], \"authTypes\": [\"api_key\"], \"actionCount\": 4}, {\"service\": \"truvera\", \"displayName\": \"Truvera\", \"categories\": [\"Security\", \"Developer Tools\"], \"authTypes\": [\"api_key\"], \"actionCount\": 10}, {\"service\": \"turbot_pipes\", \"displayName\": \"Turbot Pipes\", \"categories\": [\"Data\", \"Developer Tools\"], \"authTypes\": [\"api_key\"], \"actionCount\": 1}, {\"service\": \"turso\", \"displayName\": \"Turso\", \"categories\": [\"Developer Tools\", \"Data\"], \"authTypes\": [\"api_key\"], \"actionCount\": 10}, {\"service\": \"tushare\", \"displayName\": \"Tushare\", \"categories\": [\"Finance\", \"Data\"], \"authTypes\": [\"api_key\"], \"actionCount\": 6}, {\"service\": \"twelve_data\", \"displayName\": \"Twelve Data\", \"categories\": [\"Finance\", \"Data\"], \"authTypes\": [\"api_key\"], \"actionCount\": 12}, {\"service\": \"twenty_crm\", \"displayName\": \"Twenty CRM\", \"categories\": [\"Productivity\", \"Marketing\"], \"authTypes\": [\"api_key\"], \"actionCount\": 6}, {\"service\": \"twilio\", \"displayName\": \"Twilio\", \"categories\": [\"Communication\"], \"authTypes\": [\"custom_credential\"], \"actionCount\": 5}, {\"service\": \"twitter\", \"displayName\": \"X (Twitter)\", \"categories\": [\"Social\", \"Marketing\"], \"authTypes\": [\"oauth2\", \"custom_credential\"], \"actionCount\": 71}, {\"service\": \"twitterapi_io\", \"displayName\": \"TwitterAPI.io\", \"categories\": [\"Social\", \"Data\"], \"authTypes\": [\"api_key\"], \"actionCount\": 39}, {\"service\": \"twochat\", \"displayName\": \"2Chat\", \"categories\": [\"Communication\", \"Developer Tools\"], \"authTypes\": [\"api_key\"], \"actionCount\": 5}, {\"service\": \"typeform\", \"displayName\": \"Typeform\", \"categories\": [\"Productivity\", \"Data\"], \"authTypes\": [\"oauth2\", \"api_key\"], \"actionCount\": 6}, {\"service\": \"typefully\", \"displayName\": \"Typefully\", \"categories\": [\"Social\", \"Marketing\"], \"authTypes\": [\"api_key\"], \"actionCount\": 8}, {\"service\": \"u301\", \"displayName\": \"U301\", \"categories\": [\"Marketing\", \"Productivity\"], \"authTypes\": [\"api_key\"], \"actionCount\": 3}, {\"service\": \"umami\", \"displayName\": \"Umami\", \"categories\": [\"Data\", \"Marketing\"], \"authTypes\": [\"api_key\"], \"actionCount\": 8}, {\"service\": \"unifapi\", \"displayName\": \"UnifAPI\", \"categories\": [\"AI\", \"Data\", \"Location\"], \"authTypes\": [\"api_key\"], \"actionCount\": 220}, {\"service\": \"unione\", \"displayName\": \"UniOne\", \"categories\": [\"Communication\", \"Marketing\"], \"authTypes\": [\"api_key\"], \"actionCount\": 5}, {\"service\": \"unipile\", \"displayName\": \"Unipile\", \"categories\": [\"Communication\", \"Productivity\"], \"authTypes\": [\"api_key\"], \"actionCount\": 6}, {\"service\": \"uniswap_api\", \"displayName\": \"Uniswap API\", \"categories\": [\"Finance\", \"Developer Tools\"], \"authTypes\": [\"api_key\"], \"actionCount\": 3}, {\"service\": \"unsplash\", \"displayName\": \"Unsplash\", \"categories\": [\"Design & Media\"], \"authTypes\": [\"api_key\"], \"actionCount\": 6}, {\"service\": \"updown_io\", \"displayName\": \"updown.io\", \"categories\": [\"Developer Tools\"], \"authTypes\": [\"api_key\"], \"actionCount\": 9}, {\"service\": \"uploadcare\", \"displayName\": \"Uploadcare\", \"categories\": [\"Storage\", \"Design & Media\"], \"authTypes\": [\"api_key\"], \"actionCount\": 7}, {\"service\": \"upsales\", \"displayName\": \"Upsales\", \"categories\": [\"Marketing\", \"Productivity\"], \"authTypes\": [\"api_key\"], \"actionCount\": 13}, {\"service\": \"uptimerobot\", \"displayName\": \"UptimeRobot\", \"categories\": [\"Developer Tools\"], \"authTypes\": [\"api_key\"], \"actionCount\": 7}, {\"service\": \"urlscan\", \"displayName\": \"urlscan.io\", \"categories\": [\"Security\", \"Data\"], \"authTypes\": [\"api_key\"], \"actionCount\": 3}, {\"service\": \"userflow\", \"displayName\": \"Userflow\", \"categories\": [\"Data\", \"Marketing\"], \"authTypes\": [\"api_key\"], \"actionCount\": 8}, {\"service\": \"userlist\", \"displayName\": \"Userlist\", \"categories\": [\"Marketing\", \"Communication\"], \"authTypes\": [\"api_key\"], \"actionCount\": 5}, {\"service\": \"v0\", \"displayName\": \"v0\", \"categories\": [\"AI\", \"Developer Tools\"], \"authTypes\": [\"api_key\"], \"actionCount\": 45}, {\"service\": \"v2ex\", \"displayName\": \"V2EX\", \"categories\": [\"Social\", \"Developer Tools\"], \"authTypes\": [\"api_key\"], \"actionCount\": 13}, {\"service\": \"valyu\", \"displayName\": \"Valyu\", \"categories\": [\"AI\", \"Data\"], \"authTypes\": [\"api_key\"], \"actionCount\": 1}, {\"service\": \"vapi\", \"displayName\": \"Vapi\", \"categories\": [\"AI\", \"Communication\"], \"authTypes\": [\"api_key\"], \"actionCount\": 38}, {\"service\": \"vatlayer\", \"displayName\": \"VATlayer\", \"categories\": [\"Finance\", \"Data\"], \"authTypes\": [\"api_key\"], \"actionCount\": 5}, {\"service\": \"vectorshift\", \"displayName\": \"VectorShift\", \"categories\": [\"AI\", \"Developer Tools\"], \"authTypes\": [\"api_key\"], \"actionCount\": 4}, {\"service\": \"vercel\", \"displayName\": \"Vercel\", \"categories\": [\"Developer Tools\"], \"authTypes\": [\"api_key\"], \"actionCount\": 23}, {\"service\": \"verifiedemail\", \"displayName\": \"VerifiedEmail\", \"categories\": [\"Communication\", \"Marketing\"], \"authTypes\": [\"api_key\"], \"actionCount\": 6}, {\"service\": \"veriphone\", \"displayName\": \"Veriphone\", \"categories\": [\"Communication\", \"Data\"], \"authTypes\": [\"api_key\"], \"actionCount\": 2}, {\"service\": \"vestaboard\", \"displayName\": \"Vestaboard\", \"categories\": [\"Communication\", \"Design & Media\"], \"authTypes\": [\"api_key\"], \"actionCount\": 4}, {\"service\": \"viggle\", \"displayName\": \"Viggle\", \"categories\": [\"AI\", \"Design & Media\"], \"authTypes\": [\"api_key\"], \"actionCount\": 11}, {\"service\": \"vimeo\", \"displayName\": \"Vimeo\", \"categories\": [\"Design & Media\", \"Social\"], \"authTypes\": [\"oauth2\"], \"actionCount\": 25}, {\"service\": \"virustotal\", \"displayName\": \"VirusTotal\", \"categories\": [\"Security\", \"Data\"], \"authTypes\": [\"api_key\"], \"actionCount\": 16}, {\"service\": \"vitally\", \"displayName\": \"Vitally\", \"categories\": [\"Productivity\", \"Data\"], \"authTypes\": [\"api_key\"], \"actionCount\": 5}, {\"service\": \"voiceflow\", \"displayName\": \"Voiceflow\", \"categories\": [\"AI\", \"Productivity\"], \"authTypes\": [\"api_key\"], \"actionCount\": 4}, {\"service\": \"vtex\", \"displayName\": \"VTEX\", \"categories\": [\"Marketing\", \"Data\"], \"authTypes\": [\"api_key\"], \"actionCount\": 5}, {\"service\": \"waboxapp\", \"displayName\": \"waboxapp\", \"categories\": [\"Communication\", \"Developer Tools\"], \"authTypes\": [\"api_key\"], \"actionCount\": 5}, {\"service\": \"wachete\", \"displayName\": \"Wachete\", \"categories\": [\"Developer Tools\", \"Data\"], \"authTypes\": [\"api_key\"], \"actionCount\": 6}, {\"service\": \"wakatime\", \"displayName\": \"WakaTime\", \"categories\": [\"Productivity\", \"Developer Tools\"], \"authTypes\": [\"api_key\"], \"actionCount\": 6}, {\"service\": \"wappalyzer\", \"displayName\": \"Wappalyzer\", \"categories\": [\"Developer Tools\", \"Data\"], \"authTypes\": [\"api_key\"], \"actionCount\": 4}, {\"service\": \"waterfall\", \"displayName\": \"Waterfall\", \"categories\": [\"Data\", \"Marketing\"], \"authTypes\": [\"api_key\"], \"actionCount\": 7}, {\"service\": \"weatherapi\", \"displayName\": \"WeatherAPI\", \"categories\": [\"Location\", \"Data\"], \"authTypes\": [\"api_key\"], \"actionCount\": 5}, {\"service\": \"weatherbit\", \"displayName\": \"Weatherbit\", \"categories\": [\"Location\", \"Data\"], \"authTypes\": [\"api_key\"], \"actionCount\": 3}, {\"service\": \"weaviate\", \"displayName\": \"Weaviate\", \"categories\": [\"Data\", \"Developer Tools\", \"AI\"], \"authTypes\": [\"api_key\"], \"actionCount\": 5}, {\"service\": \"web_of_science\", \"displayName\": \"Web of Science\", \"categories\": [\"Data\"], \"authTypes\": [\"api_key\"], \"actionCount\": 4}, {\"service\": \"web_of_science_expanded\", \"displayName\": \"Web of Science Expanded\", \"categories\": [\"Data\"], \"authTypes\": [\"api_key\"], \"actionCount\": 6}, {\"service\": \"webflow\", \"displayName\": \"Webflow\", \"categories\": [\"Design & Media\", \"Marketing\"], \"authTypes\": [\"api_key\"], \"actionCount\": 11}, {\"service\": \"webinarjam\", \"displayName\": \"WebinarJam\", \"categories\": [\"Communication\", \"Marketing\"], \"authTypes\": [\"api_key\"], \"actionCount\": 4}, {\"service\": \"webscraper_io\", \"displayName\": \"WebScraper.io\", \"categories\": [\"Data\", \"Developer Tools\"], \"authTypes\": [\"api_key\"], \"actionCount\": 11}, {\"service\": \"webscraping_ai\", \"displayName\": \"WebScraping.AI\", \"categories\": [\"Developer Tools\", \"Data\"], \"authTypes\": [\"api_key\"], \"actionCount\": 5}, {\"service\": \"webshare\", \"displayName\": \"Webshare\", \"categories\": [\"Developer Tools\", \"Data\"], \"authTypes\": [\"api_key\"], \"actionCount\": 4}, {\"service\": \"webvizio\", \"displayName\": \"Webvizio\", \"categories\": [\"Productivity\", \"Developer Tools\"], \"authTypes\": [\"api_key\"], \"actionCount\": 2}, {\"service\": \"wecom_bot\", \"displayName\": \"WeCom Bot\", \"categories\": [\"Communication\"], \"authTypes\": [\"api_key\"], \"actionCount\": 5}, {\"service\": \"wejam_ai\", \"displayName\": \"Jam\", \"categories\": [\"AI\", \"Data\"], \"authTypes\": [\"api_key\"], \"actionCount\": 1}, {\"service\": \"what3words\", \"displayName\": \"what3words\", \"categories\": [\"Location\", \"Data\"], \"authTypes\": [\"api_key\"], \"actionCount\": 5}, {\"service\": \"whatsapp\", \"displayName\": \"WhatsApp\", \"categories\": [\"Communication\"], \"authTypes\": [\"api_key\"], \"actionCount\": 17}, {\"service\": \"whoisfreaks\", \"displayName\": \"WhoisFreaks\", \"categories\": [\"Security\", \"Data\"], \"authTypes\": [\"api_key\"], \"actionCount\": 5}, {\"service\": \"whop\", \"displayName\": \"Whop\", \"categories\": [\"Finance\", \"Marketing\"], \"authTypes\": [\"api_key\"], \"actionCount\": 8}, {\"service\": \"winston_ai\", \"displayName\": \"Winston AI\", \"categories\": [\"AI\", \"Data\"], \"authTypes\": [\"api_key\"], \"actionCount\": 4}, {\"service\": \"wise\", \"displayName\": \"Wise\", \"categories\": [\"Finance\", \"Data\"], \"authTypes\": [\"api_key\"], \"actionCount\": 3}, {\"service\": \"wit_ai\", \"displayName\": \"Wit.ai\", \"categories\": [\"AI\", \"Developer Tools\"], \"authTypes\": [\"api_key\"], \"actionCount\": 20}, {\"service\": \"wiza\", \"displayName\": \"Wiza\", \"categories\": [\"Marketing\", \"Data\"], \"authTypes\": [\"api_key\"], \"actionCount\": 5}, {\"service\": \"wolfram_alpha_api\", \"displayName\": \"Wolfram|Alpha\", \"categories\": [\"AI\", \"Data\"], \"authTypes\": [\"api_key\"], \"actionCount\": 3}, {\"service\": \"woocommerce\", \"displayName\": \"WooCommerce\", \"categories\": [\"Marketing\"], \"authTypes\": [\"custom_credential\"], \"actionCount\": 26}, {\"service\": \"woodpecker_co\", \"displayName\": \"Woodpecker.co\", \"categories\": [\"Communication\", \"Marketing\"], \"authTypes\": [\"api_key\"], \"actionCount\": 7}, {\"service\": \"wordpress\", \"displayName\": \"WordPress\", \"categories\": [\"Productivity\", \"Marketing\"], \"authTypes\": [\"api_key\"], \"actionCount\": 18}, {\"service\": \"workable\", \"displayName\": \"Workable\", \"categories\": [\"Productivity\", \"Data\"], \"authTypes\": [\"api_key\"], \"actionCount\": 4}, {\"service\": \"workday\", \"displayName\": \"Workday\", \"categories\": [\"Productivity\", \"Data\"], \"authTypes\": [\"oauth2\"], \"actionCount\": 7}, {\"service\": \"workiom\", \"displayName\": \"Workiom\", \"categories\": [\"Productivity\", \"Data\"], \"authTypes\": [\"api_key\"], \"actionCount\": 5}, {\"service\": \"workos\", \"displayName\": \"WorkOS\", \"categories\": [\"Developer Tools\"], \"authTypes\": [\"api_key\"], \"actionCount\": 14}, {\"service\": \"workpath\", \"displayName\": \"Workpath\", \"categories\": [\"Productivity\"], \"authTypes\": [\"api_key\"], \"actionCount\": 8}, {\"service\": \"worksnaps\", \"displayName\": \"Worksnaps\", \"categories\": [\"Productivity\"], \"authTypes\": [\"api_key\"], \"actionCount\": 10}, {\"service\": \"world_news_api\", \"displayName\": \"World News API\", \"categories\": [\"Data\", \"Social\"], \"authTypes\": [\"api_key\"], \"actionCount\": 5}, {\"service\": \"wrike\", \"displayName\": \"Wrike\", \"categories\": [\"Productivity\"], \"authTypes\": [\"api_key\"], \"actionCount\": 7}, {\"service\": \"writer\", \"displayName\": \"Writer\", \"categories\": [\"AI\", \"Developer Tools\"], \"authTypes\": [\"api_key\"], \"actionCount\": 2}, {\"service\": \"wttr_in\", \"displayName\": \"wttr.in\", \"categories\": [\"Location\", \"Data\"], \"authTypes\": [\"no_auth\"], \"actionCount\": 1}, {\"service\": \"x_ai\", \"displayName\": \"xAI\", \"categories\": [\"AI\", \"Developer Tools\"], \"authTypes\": [\"api_key\"], \"actionCount\": 3}, {\"service\": \"xata\", \"displayName\": \"Xata\", \"categories\": [\"Developer Tools\", \"Data\"], \"authTypes\": [\"api_key\"], \"actionCount\": 7}, {\"service\": \"yelp\", \"displayName\": \"Yelp\", \"categories\": [\"Location\", \"Data\"], \"authTypes\": [\"api_key\"], \"actionCount\": 3}, {\"service\": \"ynab\", \"displayName\": \"YNAB\", \"categories\": [\"Finance\"], \"authTypes\": [\"api_key\"], \"actionCount\": 15}, {\"service\": \"you\", \"displayName\": \"You.com\", \"categories\": [\"AI\", \"Data\"], \"authTypes\": [\"api_key\"], \"actionCount\": 5}, {\"service\": \"youtube\", \"displayName\": \"YouTube\", \"categories\": [\"Design & Media\", \"Social\"], \"authTypes\": [\"oauth2\"], \"actionCount\": 29}, {\"service\": \"yuandian\", \"displayName\": \"Yuan Dian\", \"categories\": [\"AI\", \"Data\"], \"authTypes\": [\"api_key\"], \"actionCount\": 23}, {\"service\": \"zendesk\", \"displayName\": \"Zendesk\", \"categories\": [\"Communication\", \"Productivity\"], \"authTypes\": [\"oauth2\", \"api_key\"], \"actionCount\": 11}, {\"service\": \"zenrows\", \"displayName\": \"ZenRows\", \"categories\": [\"Developer Tools\", \"Data\"], \"authTypes\": [\"api_key\"], \"actionCount\": 4}, {\"service\": \"zenserp\", \"displayName\": \"Zenserp\", \"categories\": [\"Data\", \"Location\"], \"authTypes\": [\"api_key\"], \"actionCount\": 4}, {\"service\": \"zeplin\", \"displayName\": \"Zeplin\", \"categories\": [\"Design & Media\", \"Productivity\"], \"authTypes\": [\"oauth2\"], \"actionCount\": 6}, {\"service\": \"zerobounce\", \"displayName\": \"ZeroBounce\", \"categories\": [\"Communication\", \"Marketing\"], \"authTypes\": [\"api_key\"], \"actionCount\": 6}, {\"service\": \"zhihu\", \"displayName\": \"Zhihu\", \"categories\": [\"AI\", \"Data\"], \"authTypes\": [\"api_key\"], \"actionCount\": 4}, {\"service\": \"zigpoll\", \"displayName\": \"Zigpoll\", \"categories\": [\"Marketing\", \"Productivity\"], \"authTypes\": [\"api_key\"], \"actionCount\": 8}, {\"service\": \"zipcodebase\", \"displayName\": \"Zipcodebase\", \"categories\": [\"Location\", \"Data\"], \"authTypes\": [\"api_key\"], \"actionCount\": 7}, {\"service\": \"zixflow\", \"displayName\": \"Zixflow\", \"categories\": [\"Marketing\", \"Productivity\"], \"authTypes\": [\"api_key\"], \"actionCount\": 16}, {\"service\": \"zoom\", \"displayName\": \"Zoom\", \"categories\": [\"Communication\", \"Productivity\"], \"authTypes\": [\"oauth2\"], \"actionCount\": 4}, {\"service\": \"zorus\", \"displayName\": \"Zorus\", \"categories\": [\"Security\"], \"authTypes\": [\"api_key\"], \"actionCount\": 5}, {\"service\": \"zyte_api\", \"displayName\": \"Zyte API\", \"categories\": [\"Developer Tools\", \"Data\"], \"authTypes\": [\"api_key\"], \"actionCount\": 4}]","[\n {\n \"service\": \"7_shifts\",\n \"displayName\": \"7shifts\",\n \"categories\": [\n \"Productivity\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.7shifts.com/\",\n \"actionCount\": 7,\n \"actions\": [\n \"7_shifts.get_company\",\n \"7_shifts.list_companies\",\n \"7_shifts.list_departments\",\n \"7_shifts.list_locations\",\n \"7_shifts.list_roles\",\n \"7_shifts.list_users\",\n \"7_shifts.retrieve_identity\"\n ]\n },\n {\n \"service\": \"a_leads\",\n \"displayName\": \"A-Leads\",\n \"categories\": [\n \"Marketing\",\n \"Data\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://a-leads.co\",\n \"actionCount\": 4,\n \"actions\": [\n \"a_leads.find_email\",\n \"a_leads.find_personal_email\",\n \"a_leads.find_phone\",\n \"a_leads.verify_email\"\n ]\n },\n {\n \"service\": \"ably\",\n \"displayName\": \"Ably\",\n \"categories\": [\n \"Developer Tools\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://ably.com\",\n \"actionCount\": 11,\n \"actions\": [\n \"ably.batch_presence\",\n \"ably.batch_presence_history\",\n \"ably.create_channel\",\n \"ably.delete_channel_subscription\",\n \"ably.get_channel_details\",\n \"ably.get_channel_history\",\n \"ably.get_presence_history\",\n \"ably.get_service_time\",\n \"ably.get_stats\",\n \"ably.list_push_channel_subscriptions\",\n \"ably.publish_message_to_channel\"\n ]\n },\n {\n \"service\": \"ably_control\",\n \"displayName\": \"Ably Control\",\n \"categories\": [\n \"Developer Tools\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://ably.com\",\n \"actionCount\": 14,\n \"actions\": [\n \"ably_control.create_app\",\n \"ably_control.create_key\",\n \"ably_control.create_queue\",\n \"ably_control.delete_app\",\n \"ably_control.delete_queue\",\n \"ably_control.get_account_stats\",\n \"ably_control.get_app_stats\",\n \"ably_control.get_current_account\",\n \"ably_control.list_apps\",\n \"ably_control.list_keys\",\n \"ably_control.list_queues\",\n \"ably_control.revoke_key\",\n \"ably_control.update_app\",\n \"ably_control.update_key\"\n ]\n },\n {\n \"service\": \"abstract\",\n \"displayName\": \"Abstract\",\n \"categories\": [\n \"Developer Tools\",\n \"Data\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.abstractapi.com/\",\n \"actionCount\": 1,\n \"actions\": [\n \"abstract.validate_email\"\n ]\n },\n {\n \"service\": \"abuseipdb\",\n \"displayName\": \"AbuseIPDB\",\n \"categories\": [\n \"Security\",\n \"Data\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.abuseipdb.com/\",\n \"actionCount\": 4,\n \"actions\": [\n \"abuseipdb.blacklist\",\n \"abuseipdb.check_block\",\n \"abuseipdb.check_ip\",\n \"abuseipdb.get_reports\"\n ]\n },\n {\n \"service\": \"abyssale\",\n \"displayName\": \"Abyssale\",\n \"categories\": [\n \"Design\",\n \"Marketing\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.abyssale.com/\",\n \"actionCount\": 9,\n \"actions\": [\n \"abyssale.create_dynamic_image_url\",\n \"abyssale.create_project\",\n \"abyssale.generate_banner\",\n \"abyssale.get_banner\",\n \"abyssale.get_design\",\n \"abyssale.get_design_format\",\n \"abyssale.list_designs\",\n \"abyssale.list_fonts\",\n \"abyssale.list_projects\"\n ]\n },\n {\n \"service\": \"accredible_certificates\",\n \"displayName\": \"Accredible Certificates\",\n \"categories\": [\n \"Productivity\",\n \"Data\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.accredible.com/\",\n \"actionCount\": 8,\n \"actions\": [\n \"accredible_certificates.create_credential\",\n \"accredible_certificates.delete_credential\",\n \"accredible_certificates.get_credential\",\n \"accredible_certificates.get_group\",\n \"accredible_certificates.list_credentials\",\n \"accredible_certificates.list_groups\",\n \"accredible_certificates.search_credentials\",\n \"accredible_certificates.search_groups\"\n ]\n },\n {\n \"service\": \"acculynx\",\n \"displayName\": \"AccuLynx\",\n \"categories\": [\n \"Productivity\",\n \"Marketing\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://acculynx.com\",\n \"actionCount\": 12,\n \"actions\": [\n \"acculynx.create_contact\",\n \"acculynx.create_job\",\n \"acculynx.get_company_settings\",\n \"acculynx.get_initial_appointment\",\n \"acculynx.list_calendar_appointments\",\n \"acculynx.list_calendars\",\n \"acculynx.list_contact_types\",\n \"acculynx.list_job_categories\",\n \"acculynx.list_lead_sources\",\n \"acculynx.list_trade_types\",\n \"acculynx.list_work_types\",\n \"acculynx.upsert_initial_appointment\"\n ]\n },\n {\n \"service\": \"accuweather\",\n \"displayName\": \"AccuWeather\",\n \"categories\": [\n \"Location\",\n \"Data\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.accuweather.com\",\n \"actionCount\": 5,\n \"actions\": [\n \"accuweather.get_current_conditions\",\n \"accuweather.get_daily_forecast\",\n \"accuweather.get_hourly_forecast\",\n \"accuweather.get_location_by_geoposition\",\n \"accuweather.search_locations\"\n ]\n },\n {\n \"service\": \"active_trail\",\n \"displayName\": \"ActiveTrail\",\n \"categories\": [\n \"Marketing\",\n \"Communication\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.activetrail.com/\",\n \"actionCount\": 14,\n \"actions\": [\n \"active_trail.add_group_member\",\n \"active_trail.create_contact\",\n \"active_trail.create_group\",\n \"active_trail.delete_contact\",\n \"active_trail.delete_group\",\n \"active_trail.get_account_balance\",\n \"active_trail.get_contact\",\n \"active_trail.get_group\",\n \"active_trail.list_contacts\",\n \"active_trail.list_group_members\",\n \"active_trail.list_groups\",\n \"active_trail.remove_group_member\",\n \"active_trail.update_contact\",\n \"active_trail.update_group\"\n ]\n },\n {\n \"service\": \"activecampaign\",\n \"displayName\": \"ActiveCampaign\",\n \"categories\": [\n \"Marketing\",\n \"Productivity\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.activecampaign.com\",\n \"actionCount\": 6,\n \"actions\": [\n \"activecampaign.get_contact\",\n \"activecampaign.get_current_user\",\n \"activecampaign.list_contacts\",\n \"activecampaign.list_fields\",\n \"activecampaign.list_lists\",\n \"activecampaign.upsert_contact\"\n ]\n },\n {\n \"service\": \"adafruit_io\",\n \"displayName\": \"Adafruit IO\",\n \"categories\": [\n \"Data\",\n \"Developer Tools\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://io.adafruit.com/\",\n \"actionCount\": 5,\n \"actions\": [\n \"adafruit_io.create_feed_data\",\n \"adafruit_io.get_current_user\",\n \"adafruit_io.get_feed\",\n \"adafruit_io.list_feed_data\",\n \"adafruit_io.list_feeds\"\n ]\n },\n {\n \"service\": \"addressfinder\",\n \"displayName\": \"Addressfinder\",\n \"categories\": [\n \"Location\",\n \"Data\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://addressfinder.com/au\",\n \"actionCount\": 6,\n \"actions\": [\n \"addressfinder.find_au_addresses\",\n \"addressfinder.find_nz_addresses\",\n \"addressfinder.get_au_address_metadata\",\n \"addressfinder.get_nz_address_metadata\",\n \"addressfinder.verify_au_address\",\n \"addressfinder.verify_nz_address\"\n ]\n },\n {\n \"service\": \"addresszen\",\n \"displayName\": \"AddressZen\",\n \"categories\": [\n \"Location\",\n \"Data\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://addresszen.com\",\n \"actionCount\": 3,\n \"actions\": [\n \"addresszen.find_address\",\n \"addresszen.get_key_availability\",\n \"addresszen.retrieve_address_usa\"\n ]\n },\n {\n \"service\": \"adobe_commerce\",\n \"displayName\": \"Adobe Commerce\",\n \"categories\": [\n \"Productivity\",\n \"Marketing\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://business.adobe.com/products/magento/magento-commerce.html\",\n \"actionCount\": 4,\n \"actions\": [\n \"adobe_commerce.get_category\",\n \"adobe_commerce.get_product\",\n \"adobe_commerce.list_categories\",\n \"adobe_commerce.list_products\"\n ]\n },\n {\n \"service\": \"adyen\",\n \"displayName\": \"Adyen\",\n \"categories\": [\n \"Finance\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.adyen.com\",\n \"actionCount\": 6,\n \"actions\": [\n \"adyen.get_api_credential\",\n \"adyen.get_company\",\n \"adyen.get_merchant\",\n \"adyen.list_companies\",\n \"adyen.list_company_merchants\",\n \"adyen.list_merchants\"\n ]\n },\n {\n \"service\": \"adyntel\",\n \"displayName\": \"Adyntel\",\n \"categories\": [\n \"Marketing\",\n \"Data\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.adyntel.com\",\n \"actionCount\": 6,\n \"actions\": [\n \"adyntel.get_domain_keywords\",\n \"adyntel.get_tiktok_ad_details\",\n \"adyntel.search_google_ads\",\n \"adyntel.search_linkedin_ads\",\n \"adyntel.search_meta_ads\",\n \"adyntel.search_tiktok_ads\"\n ]\n },\n {\n \"service\": \"aeroleads\",\n \"displayName\": \"AeroLeads\",\n \"categories\": [\n \"Marketing\",\n \"Data\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://aeroleads.com\",\n \"actionCount\": 1,\n \"actions\": [\n \"aeroleads.get_details_from_linkedin_url\"\n ]\n },\n {\n \"service\": \"affinda\",\n \"displayName\": \"Affinda\",\n \"categories\": [\n \"AI\",\n \"Data\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.affinda.com\",\n \"actionCount\": 6,\n \"actions\": [\n \"affinda.create_document_from_url\",\n \"affinda.get_document\",\n \"affinda.list_document_types\",\n \"affinda.list_documents\",\n \"affinda.list_organizations\",\n \"affinda.list_workspaces\"\n ]\n },\n {\n \"service\": \"affinity\",\n \"displayName\": \"Affinity\",\n \"categories\": [\n \"Productivity\",\n \"Data\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.affinity.co\",\n \"actionCount\": 20,\n \"actions\": [\n \"affinity.get_company\",\n \"affinity.get_current_user\",\n \"affinity.get_list\",\n \"affinity.get_opportunity\",\n \"affinity.get_person\",\n \"affinity.get_saved_view\",\n \"affinity.list_companies\",\n \"affinity.list_company_fields\",\n \"affinity.list_company_list_entries\",\n \"affinity.list_company_lists\",\n \"affinity.list_list_entries\",\n \"affinity.list_list_fields\",\n \"affinity.list_lists\",\n \"affinity.list_opportunities\",\n \"affinity.list_person_fields\",\n \"affinity.list_person_list_entries\",\n \"affinity.list_person_lists\",\n \"affinity.list_persons\",\n \"affinity.list_saved_view_list_entries\",\n \"affinity.list_saved_views\"\n ]\n },\n {\n \"service\": \"aftership\",\n \"displayName\": \"AfterShip\",\n \"categories\": [\n \"Productivity\",\n \"Location\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.aftership.com/\",\n \"actionCount\": 9,\n \"actions\": [\n \"aftership.create_tracking\",\n \"aftership.delete_tracking\",\n \"aftership.detect_couriers\",\n \"aftership.get_tracking\",\n \"aftership.list_couriers\",\n \"aftership.list_trackings\",\n \"aftership.mark_tracking_completed\",\n \"aftership.retrack_tracking\",\n \"aftership.update_tracking\"\n ]\n },\n {\n \"service\": \"agent_mail\",\n \"displayName\": \"AgentMail\",\n \"categories\": [\n \"Communication\",\n \"Productivity\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://agentmail.to\",\n \"actionCount\": 102,\n \"actions\": [\n \"agent_mail.batch_get_messages\",\n \"agent_mail.create_api_key\",\n \"agent_mail.create_domain\",\n \"agent_mail.create_draft\",\n \"agent_mail.create_inbox\",\n \"agent_mail.create_inbox_api_key\",\n \"agent_mail.create_inbox_list_entry\",\n \"agent_mail.create_list_entry\",\n \"agent_mail.create_pod\",\n \"agent_mail.create_pod_api_key\",\n \"agent_mail.create_pod_domain\",\n \"agent_mail.create_pod_inbox\",\n \"agent_mail.create_pod_list_entry\",\n \"agent_mail.create_webhook\",\n \"agent_mail.delete_api_key\",\n \"agent_mail.delete_domain\",\n \"agent_mail.delete_draft\",\n \"agent_mail.delete_inbox\",\n \"agent_mail.delete_inbox_api_key\",\n \"agent_mail.delete_inbox_list_entry\",\n \"agent_mail.delete_inbox_thread\",\n \"agent_mail.delete_list_entry\",\n \"agent_mail.delete_pod\",\n \"agent_mail.delete_pod_api_key\",\n \"agent_mail.delete_pod_domain\",\n \"agent_mail.delete_pod_inbox\",\n \"agent_mail.delete_pod_list_entry\",\n \"agent_mail.delete_pod_thread\",\n \"agent_mail.delete_thread\",\n \"agent_mail.delete_webhook\",\n \"agent_mail.forward_message\",\n \"agent_mail.get_domain\",\n \"agent_mail.get_domain_zone_file\",\n \"agent_mail.get_draft\",\n \"agent_mail.get_draft_attachment\",\n \"agent_mail.get_global_draft\",\n \"agent_mail.get_global_draft_attachment\",\n \"agent_mail.get_inbox\",\n \"agent_mail.get_inbox_list_entry\",\n \"agent_mail.get_inbox_thread\",\n \"agent_mail.get_inbox_thread_attachment\",\n \"agent_mail.get_list_entry\",\n \"agent_mail.get_message\",\n \"agent_mail.get_message_attachment\",\n \"agent_mail.get_organization\",\n \"agent_mail.get_pod\",\n \"agent_mail.get_pod_domain\",\n \"agent_mail.get_pod_domain_zone_file\",\n \"agent_mail.get_pod_draft\",\n \"agent_mail.get_pod_draft_attachment\",\n \"agent_mail.get_pod_inbox\",\n \"agent_mail.get_pod_list_entry\",\n \"agent_mail.get_pod_thread\",\n \"agent_mail.get_pod_thread_attachment\",\n \"agent_mail.get_raw_message\",\n \"agent_mail.get_thread\",\n \"agent_mail.get_thread_attachment\",\n \"agent_mail.get_webhook\",\n \"agent_mail.list_api_keys\",\n \"agent_mail.list_domains\",\n \"agent_mail.list_drafts\",\n \"agent_mail.list_global_drafts\",\n \"agent_mail.list_inbox_api_keys\",\n \"agent_mail.list_inbox_events\",\n \"agent_mail.list_inbox_list_entries\",\n \"agent_mail.list_inbox_threads\",\n \"agent_mail.list_inboxes\",\n \"agent_mail.list_list_entries\",\n \"agent_mail.list_messages\",\n \"agent_mail.list_pod_api_keys\",\n \"agent_mail.list_pod_domains\",\n \"agent_mail.list_pod_drafts\",\n \"agent_mail.list_pod_inboxes\",\n \"agent_mail.list_pod_list_entries\",\n \"agent_mail.list_pod_threads\",\n \"agent_mail.list_pods\",\n \"agent_mail.list_threads\",\n \"agent_mail.list_webhooks\",\n \"agent_mail.query_inbox_metrics\",\n \"agent_mail.query_metrics\",\n \"agent_mail.query_pod_metrics\",\n \"agent_mail.reply_all_message\",\n \"agent_mail.reply_to_message\",\n \"agent_mail.search_inbox_threads\",\n \"agent_mail.search_messages\",\n \"agent_mail.search_pod_threads\",\n \"agent_mail.search_threads\",\n \"agent_mail.send_draft\",\n \"agent_mail.send_message\",\n \"agent_mail.update_domain\",\n \"agent_mail.update_draft\",\n \"agent_mail.update_inbox\",\n \"agent_mail.update_inbox_thread\",\n \"agent_mail.update_message\",\n \"agent_mail.update_pod_domain\",\n \"agent_mail.update_pod_inbox\",\n \"agent_mail.update_pod_thread\",\n \"agent_mail.update_thread\",\n \"agent_mail.update_webhook\",\n \"agent_mail.verify_domain\",\n \"agent_mail.verify_pod_domain\",\n \"agent_mail.who_am_i\"\n ]\n },\n {\n \"service\": \"agentql\",\n \"displayName\": \"AgentQL\",\n \"categories\": [\n \"AI\",\n \"Developer Tools\",\n \"Data\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.agentql.com\",\n \"actionCount\": 4,\n \"actions\": [\n \"agentql.create_browser_session\",\n \"agentql.get_usage\",\n \"agentql.list_session_usage\",\n \"agentql.query_data\"\n ]\n },\n {\n \"service\": \"agenty\",\n \"displayName\": \"Agenty\",\n \"categories\": [\n \"Developer Tools\",\n \"Data\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://agenty.com\",\n \"actionCount\": 31,\n \"actions\": [\n \"agenty.add_list_rows\",\n \"agenty.capture_screenshot\",\n \"agenty.clear_list_rows\",\n \"agenty.convert_url_to_pdf\",\n \"agenty.copy_agent\",\n \"agenty.create_agent\",\n \"agenty.create_list\",\n \"agenty.delete_agent\",\n \"agenty.delete_list_row\",\n \"agenty.delete_list_rows\",\n \"agenty.download_job_file\",\n \"agenty.download_job_result\",\n \"agenty.download_list_rows\",\n \"agenty.extract_structured_data\",\n \"agenty.get_agent\",\n \"agenty.get_agent_inputs\",\n \"agenty.get_agent_templates\",\n \"agenty.get_job\",\n \"agenty.get_job_logs\",\n \"agenty.get_job_result\",\n \"agenty.get_list\",\n \"agenty.get_list_row\",\n \"agenty.get_page_content\",\n \"agenty.get_redirects\",\n \"agenty.list_agents\",\n \"agenty.list_job_files\",\n \"agenty.list_jobs\",\n \"agenty.start_job\",\n \"agenty.stop_job\",\n \"agenty.update_agent\",\n \"agenty.update_agent_inputs\"\n ]\n },\n {\n \"service\": \"agiled\",\n \"displayName\": \"Agiled\",\n \"categories\": [\n \"Productivity\",\n \"Data\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://agiled.app\",\n \"actionCount\": 15,\n \"actions\": [\n \"agiled.create_contact\",\n \"agiled.create_project\",\n \"agiled.create_task\",\n \"agiled.delete_contact\",\n \"agiled.delete_project\",\n \"agiled.delete_task\",\n \"agiled.get_contact\",\n \"agiled.get_project\",\n \"agiled.get_task\",\n \"agiled.list_contacts\",\n \"agiled.list_projects\",\n \"agiled.list_tasks\",\n \"agiled.update_contact\",\n \"agiled.update_project\",\n \"agiled.update_task\"\n ]\n },\n {\n \"service\": \"agility\",\n \"displayName\": \"Agility CMS\",\n \"categories\": [\n \"Developer Tools\",\n \"Productivity\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://agilitycms.com/\",\n \"actionCount\": 6,\n \"actions\": [\n \"agility.get_content_item\",\n \"agility.get_content_list\",\n \"agility.get_flat_sitemap\",\n \"agility.get_nested_sitemap\",\n \"agility.get_page\",\n \"agility.list_content_models\"\n ]\n },\n {\n \"service\": \"agora\",\n \"displayName\": \"Agora\",\n \"categories\": [\n \"Communication\",\n \"Developer Tools\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.agora.io\",\n \"actionCount\": 7,\n \"actions\": [\n \"agora.create_project\",\n \"agora.get_project\",\n \"agora.get_project_usage\",\n \"agora.list_projects\",\n \"agora.reset_primary_certificate\",\n \"agora.set_primary_certificate\",\n \"agora.update_project_status\"\n ]\n },\n {\n \"service\": \"ahrefs\",\n \"displayName\": \"Ahrefs\",\n \"categories\": [\n \"Marketing\",\n \"Data\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://ahrefs.com/\",\n \"actionCount\": 4,\n \"actions\": [\n \"ahrefs.get_keywords_overview\",\n \"ahrefs.get_limits_and_usage\",\n \"ahrefs.get_site_explorer_metrics\",\n \"ahrefs.get_site_explorer_metrics_by_country\"\n ]\n },\n {\n \"service\": \"aimfox\",\n \"displayName\": \"Aimfox\",\n \"categories\": [\n \"Marketing\",\n \"Communication\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://aimfox.com\",\n \"actionCount\": 11,\n \"actions\": [\n \"aimfox.add_profile_to_campaign\",\n \"aimfox.get_campaign\",\n \"aimfox.get_campaign_metrics\",\n \"aimfox.get_lead\",\n \"aimfox.get_total_leads_count\",\n \"aimfox.list_campaigns\",\n \"aimfox.list_interactions\",\n \"aimfox.list_recent_leads\",\n \"aimfox.list_workspace_labels\",\n \"aimfox.remove_profile_from_campaign\",\n \"aimfox.search_leads\"\n ]\n },\n {\n \"service\": \"airbrake\",\n \"displayName\": \"Airbrake\",\n \"categories\": [\n \"Developer Tools\",\n \"Data\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://airbrake.io\",\n \"actionCount\": 8,\n \"actions\": [\n \"airbrake.get_deploy\",\n \"airbrake.get_group\",\n \"airbrake.get_notice_status\",\n \"airbrake.get_project\",\n \"airbrake.list_deploys\",\n \"airbrake.list_groups\",\n \"airbrake.list_notices\",\n \"airbrake.list_projects\"\n ]\n },\n {\n \"service\": \"aircall\",\n \"displayName\": \"Aircall\",\n \"categories\": [\n \"Communication\",\n \"Productivity\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://aircall.io\",\n \"actionCount\": 10,\n \"actions\": [\n \"aircall.get_call\",\n \"aircall.get_contact\",\n \"aircall.get_number\",\n \"aircall.get_team\",\n \"aircall.get_user\",\n \"aircall.list_calls\",\n \"aircall.list_contacts\",\n \"aircall.list_numbers\",\n \"aircall.list_teams\",\n \"aircall.list_users\"\n ]\n },\n {\n \"service\": \"airtable\",\n \"displayName\": \"Airtable\",\n \"categories\": [\n \"Productivity\",\n \"Data\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://airtable.com\",\n \"actionCount\": 14,\n \"actions\": [\n \"airtable.create_base\",\n \"airtable.create_field\",\n \"airtable.create_records\",\n \"airtable.create_table\",\n \"airtable.delete_base\",\n \"airtable.delete_records\",\n \"airtable.get_base_collaborators\",\n \"airtable.get_base_schema\",\n \"airtable.get_record\",\n \"airtable.list_bases\",\n \"airtable.list_records\",\n \"airtable.update_field\",\n \"airtable.update_records\",\n \"airtable.update_table\"\n ]\n },\n {\n \"service\": \"aivoov\",\n \"displayName\": \"AiVOOV\",\n \"categories\": [\n \"AI\",\n \"Design & Media\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://aivoov.com\",\n \"actionCount\": 2,\n \"actions\": [\n \"aivoov.create_audio\",\n \"aivoov.list_voices\"\n ]\n },\n {\n \"service\": \"alchemy\",\n \"displayName\": \"Alchemy\",\n \"categories\": [\n \"Developer Tools\",\n \"Data\",\n \"Finance\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.alchemy.com\",\n \"actionCount\": 5,\n \"actions\": [\n \"alchemy.get_asset_transfers\",\n \"alchemy.get_nft_metadata\",\n \"alchemy.get_nfts_for_owner\",\n \"alchemy.get_token_balances\",\n \"alchemy.get_token_metadata\"\n ]\n },\n {\n \"service\": \"algo_docs\",\n \"displayName\": \"AlgoDocs\",\n \"categories\": [\n \"Productivity\",\n \"Data\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://algodocs.com\",\n \"actionCount\": 6,\n \"actions\": [\n \"algo_docs.get_extracted_data_by_document\",\n \"algo_docs.get_me\",\n \"algo_docs.list_extracted_data\",\n \"algo_docs.list_extractors\",\n \"algo_docs.list_folders\",\n \"algo_docs.upload_document_from_url\"\n ]\n },\n {\n \"service\": \"algolia\",\n \"displayName\": \"Algolia\",\n \"categories\": [\n \"Developer Tools\",\n \"Data\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.algolia.com\",\n \"actionCount\": 9,\n \"actions\": [\n \"algolia.add_or_replace_record\",\n \"algolia.browse_index\",\n \"algolia.delete_records_by_filter\",\n \"algolia.get_record\",\n \"algolia.list_indices\",\n \"algolia.save_rule\",\n \"algolia.save_synonym\",\n \"algolia.search_index\",\n \"algolia.update_record_partially\"\n ]\n },\n {\n \"service\": \"aliyun_oss\",\n \"displayName\": \"Alibaba Cloud OSS\",\n \"categories\": [\n \"Storage\",\n \"Developer Tools\"\n ],\n \"authTypes\": [\n \"custom_credential\"\n ],\n \"homepageUrl\": \"https://www.alibabacloud.com\",\n \"actionCount\": 6,\n \"actions\": [\n \"aliyun_oss.delete_object\",\n \"aliyun_oss.generate_presigned_url\",\n \"aliyun_oss.head_object\",\n \"aliyun_oss.list_buckets\",\n \"aliyun_oss.list_objects\",\n \"aliyun_oss.put_object\"\n ]\n },\n {\n \"service\": \"aliyun_sls\",\n \"displayName\": \"Alibaba Cloud SLS\",\n \"categories\": [\n \"Data\",\n \"Developer Tools\"\n ],\n \"authTypes\": [\n \"custom_credential\"\n ],\n \"homepageUrl\": \"https://www.alibabacloud.com/product/log-service\",\n \"actionCount\": 5,\n \"actions\": [\n \"aliyun_sls.get_histograms\",\n \"aliyun_sls.list_logstores\",\n \"aliyun_sls.list_projects\",\n \"aliyun_sls.list_projects_across_regions\",\n \"aliyun_sls.query_logs\"\n ]\n },\n {\n \"service\": \"aliyun_sts\",\n \"displayName\": \"Alibaba Cloud STS\",\n \"categories\": [\n \"Security\",\n \"Developer Tools\"\n ],\n \"authTypes\": [\n \"custom_credential\"\n ],\n \"homepageUrl\": \"https://www.alibabacloud.com/product/ram\",\n \"actionCount\": 1,\n \"actions\": [\n \"aliyun_sts.assume_role\"\n ]\n },\n {\n \"service\": \"alpaca\",\n \"displayName\": \"Alpaca\",\n \"categories\": [\n \"Finance\",\n \"Data\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://alpaca.markets/\",\n \"actionCount\": 22,\n \"actions\": [\n \"alpaca.get_account\",\n \"alpaca.get_account_config\",\n \"alpaca.get_account_portfolio_history\",\n \"alpaca.get_asset\",\n \"alpaca.get_crypto_bars\",\n \"alpaca.get_crypto_snapshots\",\n \"alpaca.get_market_calendar\",\n \"alpaca.get_market_clock\",\n \"alpaca.get_option_contract\",\n \"alpaca.get_order\",\n \"alpaca.get_position\",\n \"alpaca.get_stock_bars\",\n \"alpaca.get_stock_snapshots\",\n \"alpaca.get_watchlist\",\n \"alpaca.list_account_activities\",\n \"alpaca.list_assets\",\n \"alpaca.list_corporate_actions\",\n \"alpaca.list_news\",\n \"alpaca.list_option_contracts\",\n \"alpaca.list_orders\",\n \"alpaca.list_positions\",\n \"alpaca.list_watchlists\"\n ]\n },\n {\n \"service\": \"alpha_vantage\",\n \"displayName\": \"Alpha Vantage\",\n \"categories\": [\n \"Finance\",\n \"Data\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.alphavantage.co\",\n \"actionCount\": 44,\n \"actions\": [\n \"alpha_vantage.call_official_function\",\n \"alpha_vantage.get_balance_sheet\",\n \"alpha_vantage.get_cash_flow\",\n \"alpha_vantage.get_commodity_data\",\n \"alpha_vantage.get_company_overview\",\n \"alpha_vantage.get_crypto_intraday\",\n \"alpha_vantage.get_currency_exchange_rate\",\n \"alpha_vantage.get_daily_adjusted_time_series\",\n \"alpha_vantage.get_daily_time_series\",\n \"alpha_vantage.get_digital_currency_daily\",\n \"alpha_vantage.get_digital_currency_monthly\",\n \"alpha_vantage.get_digital_currency_weekly\",\n \"alpha_vantage.get_dividends\",\n \"alpha_vantage.get_earnings\",\n \"alpha_vantage.get_earnings_calendar\",\n \"alpha_vantage.get_earnings_call_transcript\",\n \"alpha_vantage.get_earnings_estimates\",\n \"alpha_vantage.get_etf_profile\",\n \"alpha_vantage.get_fx_daily\",\n \"alpha_vantage.get_fx_intraday\",\n \"alpha_vantage.get_fx_monthly\",\n \"alpha_vantage.get_fx_weekly\",\n \"alpha_vantage.get_global_quote\",\n \"alpha_vantage.get_historical_options\",\n \"alpha_vantage.get_income_statement\",\n \"alpha_vantage.get_insider_transactions\",\n \"alpha_vantage.get_institutional_holdings\",\n \"alpha_vantage.get_intraday_time_series\",\n \"alpha_vantage.get_ipo_calendar\",\n \"alpha_vantage.get_listing_status\",\n \"alpha_vantage.get_macro_indicator\",\n \"alpha_vantage.get_market_status\",\n \"alpha_vantage.get_monthly_adjusted_time_series\",\n \"alpha_vantage.get_monthly_time_series\",\n \"alpha_vantage.get_news_sentiment\",\n \"alpha_vantage.get_realtime_bulk_quotes\",\n \"alpha_vantage.get_realtime_options\",\n \"alpha_vantage.get_sector_performance\",\n \"alpha_vantage.get_splits\",\n \"alpha_vantage.get_technical_indicator\",\n \"alpha_vantage.get_top_gainers_losers\",\n \"alpha_vantage.get_weekly_adjusted_time_series\",\n \"alpha_vantage.get_weekly_time_series\",\n \"alpha_vantage.search_symbols\"\n ]\n },\n {\n \"service\": \"alt_text_ai\",\n \"displayName\": \"AltText.ai\",\n \"categories\": [\n \"AI\",\n \"Design & Media\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://alttext.ai\",\n \"actionCount\": 7,\n \"actions\": [\n \"alt_text_ai.create_image\",\n \"alt_text_ai.delete_image\",\n \"alt_text_ai.get_account\",\n \"alt_text_ai.get_image\",\n \"alt_text_ai.list_images\",\n \"alt_text_ai.scrape_page\",\n \"alt_text_ai.search_images\"\n ]\n },\n {\n \"service\": \"amap\",\n \"displayName\": \"AMap\",\n \"categories\": [\n \"Location\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.amap.com\",\n \"actionCount\": 15,\n \"actions\": [\n \"amap.district_search\",\n \"amap.geocode\",\n \"amap.get_place_detail\",\n \"amap.input_tips\",\n \"amap.ip_locate\",\n \"amap.reverse_geocode\",\n \"amap.route_bicycling\",\n \"amap.route_driving\",\n \"amap.route_electrobike\",\n \"amap.route_transit\",\n \"amap.route_walking\",\n \"amap.search_places\",\n \"amap.search_places_around\",\n \"amap.search_places_polygon\",\n \"amap.weather\"\n ]\n },\n {\n \"service\": \"amara\",\n \"displayName\": \"Amara\",\n \"categories\": [\n \"Design & Media\",\n \"Productivity\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://amara.org\",\n \"actionCount\": 33,\n \"actions\": [\n \"amara.add_subtitle_note\",\n \"amara.add_video_url\",\n \"amara.create_subtitle_language\",\n \"amara.create_subtitles\",\n \"amara.create_video\",\n \"amara.delete_video_url\",\n \"amara.fetch_subtitles_data\",\n \"amara.get_activity\",\n \"amara.get_subtitle_language_details\",\n \"amara.get_team_details\",\n \"amara.get_team_languages\",\n \"amara.get_user\",\n \"amara.get_user_activity\",\n \"amara.get_user_data\",\n \"amara.get_video\",\n \"amara.get_video_url\",\n \"amara.get_video_url_details\",\n \"amara.list_activity\",\n \"amara.list_available_languages\",\n \"amara.list_languages\",\n \"amara.list_subtitle_actions\",\n \"amara.list_subtitle_languages\",\n \"amara.list_subtitle_notes\",\n \"amara.list_teams\",\n \"amara.list_video_activity\",\n \"amara.list_video_urls\",\n \"amara.list_videos\",\n \"amara.make_video_url_primary\",\n \"amara.perform_subtitle_action\",\n \"amara.send_message\",\n \"amara.update_subtitle_language\",\n \"amara.update_video\",\n \"amara.view_video_details\"\n ]\n },\n {\n \"service\": \"ambee\",\n \"displayName\": \"Ambee\",\n \"categories\": [\n \"Location\",\n \"Data\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.getambee.com\",\n \"actionCount\": 5,\n \"actions\": [\n \"ambee.geocode_by_place\",\n \"ambee.get_air_quality_by_lat_lng\",\n \"ambee.get_air_quality_forecast_by_lat_lng\",\n \"ambee.get_air_quality_history_by_lat_lng\",\n \"ambee.reverse_geocode_by_lat_lng\"\n ]\n },\n {\n \"service\": \"ambient_weather\",\n \"displayName\": \"Ambient Weather\",\n \"categories\": [\n \"Location\",\n \"Data\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://ambientweather.net/\",\n \"actionCount\": 3,\n \"actions\": [\n \"ambient_weather.get_device_history\",\n \"ambient_weather.get_latest_device_data\",\n \"ambient_weather.list_devices\"\n ]\n },\n {\n \"service\": \"amplemarket\",\n \"displayName\": \"Amplemarket\",\n \"categories\": [\n \"Marketing\",\n \"Data\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.amplemarket.com\",\n \"actionCount\": 11,\n \"actions\": [\n \"amplemarket.complete_task\",\n \"amplemarket.get_account_details\",\n \"amplemarket.get_contact\",\n \"amplemarket.get_contact_by_email\",\n \"amplemarket.get_lead_list\",\n \"amplemarket.list_contacts\",\n \"amplemarket.list_lead_lists\",\n \"amplemarket.list_task_statuses\",\n \"amplemarket.list_task_types\",\n \"amplemarket.list_tasks\",\n \"amplemarket.skip_task\"\n ]\n },\n {\n \"service\": \"amplitude\",\n \"displayName\": \"Amplitude\",\n \"categories\": [\n \"Data\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://amplitude.com\",\n \"actionCount\": 4,\n \"actions\": [\n \"amplitude.get_event_segmentation\",\n \"amplitude.get_user_activity\",\n \"amplitude.list_events\",\n \"amplitude.search_user\"\n ]\n },\n {\n \"service\": \"anchor_browser\",\n \"displayName\": \"Anchor Browser\",\n \"categories\": [\n \"Developer Tools\",\n \"AI\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://anchorbrowser.io\",\n \"actionCount\": 3,\n \"actions\": [\n \"anchor_browser.get_billing_info\",\n \"anchor_browser.get_project_metadata\",\n \"anchor_browser.start_browser_session\"\n ]\n },\n {\n \"service\": \"anrok\",\n \"displayName\": \"Anrok\",\n \"categories\": [\n \"Finance\",\n \"Data\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.anrok.com\",\n \"actionCount\": 7,\n \"actions\": [\n \"anrok.get_customer\",\n \"anrok.get_product\",\n \"anrok.list_customers\",\n \"anrok.list_filings\",\n \"anrok.list_product_mappings\",\n \"anrok.list_product_tax_categories\",\n \"anrok.list_transactions\"\n ]\n },\n {\n \"service\": \"anthropic\",\n \"displayName\": \"Anthropic\",\n \"categories\": [\n \"AI\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.anthropic.com\",\n \"actionCount\": 4,\n \"actions\": [\n \"anthropic.count_message_tokens\",\n \"anthropic.create_message\",\n \"anthropic.get_model\",\n \"anthropic.list_models\"\n ]\n },\n {\n \"service\": \"anthropic_admin\",\n \"displayName\": \"Anthropic Admin\",\n \"categories\": [\n \"AI\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.anthropic.com\",\n \"actionCount\": 6,\n \"actions\": [\n \"anthropic_admin.get_organization\",\n \"anthropic_admin.list_api_keys\",\n \"anthropic_admin.list_invites\",\n \"anthropic_admin.list_users\",\n \"anthropic_admin.list_workspace_members\",\n \"anthropic_admin.list_workspaces\"\n ]\n },\n {\n \"service\": \"anysearch\",\n \"displayName\": \"AnySearch\",\n \"categories\": [\n \"AI\",\n \"Data\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://anysearch.com/home\",\n \"actionCount\": 4,\n \"actions\": [\n \"anysearch.batch_search\",\n \"anysearch.extract\",\n \"anysearch.get_sub_domains\",\n \"anysearch.search\"\n ]\n },\n {\n \"service\": \"apaleo\",\n \"displayName\": \"apaleo\",\n \"categories\": [\n \"Productivity\",\n \"Finance\"\n ],\n \"authTypes\": [\n \"oauth2\"\n ],\n \"homepageUrl\": \"https://apaleo.com\",\n \"actionCount\": 29,\n \"actions\": [\n \"apaleo.archive_property\",\n \"apaleo.check_property_exists\",\n \"apaleo.check_unit_attribute_exists\",\n \"apaleo.check_unit_exists\",\n \"apaleo.check_unit_group_exists\",\n \"apaleo.clone_property\",\n \"apaleo.count_properties\",\n \"apaleo.count_unit_groups\",\n \"apaleo.count_units\",\n \"apaleo.create_multiple_units\",\n \"apaleo.create_property\",\n \"apaleo.create_unit\",\n \"apaleo.create_unit_attribute\",\n \"apaleo.create_unit_group\",\n \"apaleo.delete_unit\",\n \"apaleo.delete_unit_attribute\",\n \"apaleo.delete_unit_group\",\n \"apaleo.get_property\",\n \"apaleo.get_unit\",\n \"apaleo.get_unit_attribute\",\n \"apaleo.get_unit_group\",\n \"apaleo.list_properties\",\n \"apaleo.list_supported_countries\",\n \"apaleo.list_unit_attributes\",\n \"apaleo.list_unit_groups\",\n \"apaleo.list_units\",\n \"apaleo.move_property_to_live\",\n \"apaleo.replace_unit_group\",\n \"apaleo.reset_property_data\"\n ]\n },\n {\n \"service\": \"api2pdf\",\n \"displayName\": \"API2PDF\",\n \"categories\": [\n \"Productivity\",\n \"Developer Tools\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.api2pdf.com\",\n \"actionCount\": 1,\n \"actions\": [\n \"api2pdf.markdown_to_pdf\"\n ]\n },\n {\n \"service\": \"api_bible\",\n \"displayName\": \"API.Bible\",\n \"categories\": [\n \"Data\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://scripture.api.bible/\",\n \"actionCount\": 8,\n \"actions\": [\n \"api_bible.get_chapter\",\n \"api_bible.get_passage\",\n \"api_bible.get_verse\",\n \"api_bible.list_bibles\",\n \"api_bible.list_books\",\n \"api_bible.list_chapters\",\n \"api_bible.list_verses\",\n \"api_bible.search_scripture\"\n ]\n },\n {\n \"service\": \"api_ninjas\",\n \"displayName\": \"API Ninjas\",\n \"categories\": [\n \"Developer Tools\",\n \"Data\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://api-ninjas.com\",\n \"actionCount\": 6,\n \"actions\": [\n \"api_ninjas.air_quality\",\n \"api_ninjas.geocode\",\n \"api_ninjas.reverse_geocode\",\n \"api_ninjas.timezone\",\n \"api_ninjas.weather\",\n \"api_ninjas.weather_forecast\"\n ]\n },\n {\n \"service\": \"api_sports\",\n \"displayName\": \"API-SPORTS\",\n \"categories\": [\n \"Data\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://api-sports.io\",\n \"actionCount\": 14,\n \"actions\": [\n \"api_sports.football_get_fixture_events\",\n \"api_sports.football_get_fixture_lineups\",\n \"api_sports.football_get_fixture_statistics\",\n \"api_sports.football_get_predictions\",\n \"api_sports.football_get_standings\",\n \"api_sports.football_get_team_statistics\",\n \"api_sports.football_list_fixtures\",\n \"api_sports.football_list_injuries\",\n \"api_sports.football_list_leagues\",\n \"api_sports.football_list_players_profiles\",\n \"api_sports.football_list_players_statistics\",\n \"api_sports.football_list_team_squad\",\n \"api_sports.football_list_teams\",\n \"api_sports.football_list_top_scorers\"\n ]\n },\n {\n \"service\": \"api_void\",\n \"displayName\": \"APIVoid\",\n \"categories\": [\n \"Security\",\n \"Data\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.apivoid.com/\",\n \"actionCount\": 5,\n \"actions\": [\n \"api_void.check_domain_reputation\",\n \"api_void.check_ip_reputation\",\n \"api_void.check_url_reputation\",\n \"api_void.get_account_info\",\n \"api_void.verify_email\"\n ]\n },\n {\n \"service\": \"apiflash\",\n \"displayName\": \"ApiFlash\",\n \"categories\": [\n \"Developer Tools\",\n \"Design & Media\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://apiflash.com\",\n \"actionCount\": 3,\n \"actions\": [\n \"apiflash.capture_website_screenshot\",\n \"apiflash.get_quota_information\",\n \"apiflash.get_screenshot_metadata\"\n ]\n },\n {\n \"service\": \"apify\",\n \"displayName\": \"Apify\",\n \"categories\": [\n \"Developer Tools\",\n \"Data\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://apify.com\",\n \"actionCount\": 5,\n \"actions\": [\n \"apify.get_actor\",\n \"apify.get_current_user\",\n \"apify.get_dataset_items\",\n \"apify.get_run\",\n \"apify.run_actor\"\n ]\n },\n {\n \"service\": \"apipie_ai\",\n \"displayName\": \"APIpie AI\",\n \"categories\": [\n \"AI\",\n \"Developer Tools\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://apipie.ai\",\n \"actionCount\": 4,\n \"actions\": [\n \"apipie_ai.create_chat_completion\",\n \"apipie_ai.create_embedding\",\n \"apipie_ai.list_detailed_models\",\n \"apipie_ai.list_models\"\n ]\n },\n {\n \"service\": \"apiverve\",\n \"displayName\": \"APIVerve\",\n \"categories\": [\n \"Developer Tools\",\n \"Data\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://apiverve.com/\",\n \"actionCount\": 9,\n \"actions\": [\n \"apiverve.calculate_age\",\n \"apiverve.convert_currency\",\n \"apiverve.find_antonyms\",\n \"apiverve.generate_advice\",\n \"apiverve.get_air_quality\",\n \"apiverve.get_airport_distance\",\n \"apiverve.get_word_definition\",\n \"apiverve.lookup_airlines\",\n \"apiverve.lookup_airport\"\n ]\n },\n {\n \"service\": \"apollo\",\n \"displayName\": \"Apollo\",\n \"categories\": [\n \"Marketing\",\n \"Data\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.apollo.io\",\n \"actionCount\": 5,\n \"actions\": [\n \"apollo.enrich_organization\",\n \"apollo.enrich_person\",\n \"apollo.get_api_usage_stats\",\n \"apollo.search_organizations\",\n \"apollo.search_people\"\n ]\n },\n {\n \"service\": \"appdrag\",\n \"displayName\": \"AppDrag\",\n \"categories\": [\n \"Developer Tools\",\n \"Data\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://appdrag.com\",\n \"actionCount\": 1,\n \"actions\": [\n \"appdrag.execute_function\"\n ]\n },\n {\n \"service\": \"appstle_subscriptions\",\n \"displayName\": \"Appstle Subscriptions\",\n \"categories\": [\n \"Productivity\",\n \"Marketing\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://appstle.com\",\n \"actionCount\": 4,\n \"actions\": [\n \"appstle_subscriptions.get_customer_with_subscriptions\",\n \"appstle_subscriptions.get_valid_subscription_contract_ids\",\n \"appstle_subscriptions.list_customer_subscription_details\",\n \"appstle_subscriptions.list_customers_with_subscriptions\"\n ]\n },\n {\n \"service\": \"appveyor\",\n \"displayName\": \"AppVeyor\",\n \"categories\": [\n \"Developer Tools\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.appveyor.com\",\n \"actionCount\": 6,\n \"actions\": [\n \"appveyor.get_build_artifacts\",\n \"appveyor.get_environments\",\n \"appveyor.get_projects\",\n \"appveyor.get_role\",\n \"appveyor.get_roles\",\n \"appveyor.get_users\"\n ]\n },\n {\n \"service\": \"arxiv\",\n \"displayName\": \"arXiv\",\n \"categories\": [\n \"Data\"\n ],\n \"authTypes\": [\n \"no_auth\"\n ],\n \"homepageUrl\": \"https://arxiv.org/\",\n \"actionCount\": 8,\n \"actions\": [\n \"arxiv.get_paper\",\n \"arxiv.get_papers\",\n \"arxiv.list_recent_papers\",\n \"arxiv.search_by_abstract\",\n \"arxiv.search_by_all_fields\",\n \"arxiv.search_by_author\",\n \"arxiv.search_by_title\",\n \"arxiv.search_papers\"\n ]\n },\n {\n \"service\": \"asana\",\n \"displayName\": \"Asana\",\n \"categories\": [\n \"Productivity\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://asana.com\",\n \"actionCount\": 10,\n \"actions\": [\n \"asana.create_project\",\n \"asana.create_task\",\n \"asana.get_project\",\n \"asana.get_task\",\n \"asana.get_workspace\",\n \"asana.list_project_tasks\",\n \"asana.list_projects\",\n \"asana.list_workspaces\",\n \"asana.update_project\",\n \"asana.update_task\"\n ]\n },\n {\n \"service\": \"ashby\",\n \"displayName\": \"Ashby\",\n \"categories\": [\n \"Productivity\",\n \"Data\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.ashbyhq.com\",\n \"actionCount\": 4,\n \"actions\": [\n \"ashby.api_key_info\",\n \"ashby.list_candidates\",\n \"ashby.list_jobs\",\n \"ashby.search_candidates\"\n ]\n },\n {\n \"service\": \"asin_data_api\",\n \"displayName\": \"ASIN Data API\",\n \"categories\": [\n \"Data\",\n \"Marketing\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.asindataapi.com\",\n \"actionCount\": 6,\n \"actions\": [\n \"asin_data_api.clear_collection_requests\",\n \"asin_data_api.delete_destination\",\n \"asin_data_api.get_collection\",\n \"asin_data_api.list_collection_requests\",\n \"asin_data_api.list_destinations\",\n \"asin_data_api.update_destination\"\n ]\n },\n {\n \"service\": \"assemblyai\",\n \"displayName\": \"AssemblyAI\",\n \"categories\": [\n \"AI\",\n \"Developer Tools\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.assemblyai.com/\",\n \"actionCount\": 6,\n \"actions\": [\n \"assemblyai.create_transcript\",\n \"assemblyai.delete_transcript\",\n \"assemblyai.get_transcript\",\n \"assemblyai.get_transcript_paragraphs\",\n \"assemblyai.get_transcript_sentences\",\n \"assemblyai.list_transcripts\"\n ]\n },\n {\n \"service\": \"atlas_so\",\n \"displayName\": \"Atlas.so\",\n \"categories\": [\n \"Communication\",\n \"Productivity\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://atlas.so\",\n \"actionCount\": 10,\n \"actions\": [\n \"atlas_so.create_customer\",\n \"atlas_so.get_account\",\n \"atlas_so.get_customer\",\n \"atlas_so.list_accounts\",\n \"atlas_so.list_customers\",\n \"atlas_so.list_sessions\",\n \"atlas_so.lookup_customer\",\n \"atlas_so.update_customer\",\n \"atlas_so.upsert_account\",\n \"atlas_so.upsert_customer\"\n ]\n },\n {\n \"service\": \"attention\",\n \"displayName\": \"Attention\",\n \"categories\": [\n \"AI\",\n \"Communication\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://attention.com\",\n \"actionCount\": 5,\n \"actions\": [\n \"attention.ask_attention\",\n \"attention.get_conversation\",\n \"attention.list_conversations\",\n \"attention.list_teams\",\n \"attention.list_users\"\n ]\n },\n {\n \"service\": \"attio\",\n \"displayName\": \"Attio\",\n \"categories\": [\n \"Productivity\",\n \"Data\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://attio.com\",\n \"actionCount\": 10,\n \"actions\": [\n \"attio.create_record\",\n \"attio.delete_record\",\n \"attio.get_object\",\n \"attio.get_record\",\n \"attio.identify\",\n \"attio.list_attributes\",\n \"attio.list_objects\",\n \"attio.list_records\",\n \"attio.update_record\",\n \"attio.upsert_record\"\n ]\n },\n {\n \"service\": \"auth0_management\",\n \"displayName\": \"Auth0 Management\",\n \"categories\": [\n \"Security\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://auth0.com\",\n \"actionCount\": 15,\n \"actions\": [\n \"auth0_management.add_permissions_to_role\",\n \"auth0_management.assign_roles_to_user\",\n \"auth0_management.get_role\",\n \"auth0_management.get_user\",\n \"auth0_management.list_role_permissions\",\n \"auth0_management.list_role_users\",\n \"auth0_management.list_roles\",\n \"auth0_management.list_user_effective_permissions\",\n \"auth0_management.list_user_effective_roles\",\n \"auth0_management.list_user_permissions\",\n \"auth0_management.list_user_roles\",\n \"auth0_management.list_users\",\n \"auth0_management.remove_permissions_from_role\",\n \"auth0_management.remove_roles_from_user\",\n \"auth0_management.search_users_by_email\"\n ]\n },\n {\n \"service\": \"autobound\",\n \"displayName\": \"Autobound\",\n \"categories\": [\n \"Data\",\n \"Marketing\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.autobound.ai\",\n \"actionCount\": 6,\n \"actions\": [\n \"autobound.enrich_company\",\n \"autobound.enrich_contact\",\n \"autobound.get_account\",\n \"autobound.list_signal_types\",\n \"autobound.search_companies\",\n \"autobound.search_contacts\"\n ]\n },\n {\n \"service\": \"autom\",\n \"displayName\": \"Autom\",\n \"categories\": [\n \"Data\",\n \"Developer Tools\",\n \"Marketing\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.autom.dev\",\n \"actionCount\": 4,\n \"actions\": [\n \"autom.find_google_countries\",\n \"autom.find_google_languages\",\n \"autom.find_google_locations\",\n \"autom.get_usage\"\n ]\n },\n {\n \"service\": \"autotask\",\n \"displayName\": \"Autotask\",\n \"categories\": [\n \"Productivity\",\n \"Data\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.datto.com/products/autotask-psa/\",\n \"actionCount\": 4,\n \"actions\": [\n \"autotask.get_entity_information\",\n \"autotask.get_record\",\n \"autotask.get_zone_information\",\n \"autotask.query_records\"\n ]\n },\n {\n \"service\": \"aviationstack\",\n \"displayName\": \"Aviationstack\",\n \"categories\": [\n \"Data\",\n \"Developer Tools\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://aviationstack.com/\",\n \"actionCount\": 9,\n \"actions\": [\n \"aviationstack.list_aircraft_types\",\n \"aviationstack.list_airlines\",\n \"aviationstack.list_airplanes\",\n \"aviationstack.list_airports\",\n \"aviationstack.list_cities\",\n \"aviationstack.list_countries\",\n \"aviationstack.list_taxes\",\n \"aviationstack.search_flights\",\n \"aviationstack.search_routes\"\n ]\n },\n {\n \"service\": \"avoma\",\n \"displayName\": \"Avoma\",\n \"categories\": [\n \"AI\",\n \"Communication\",\n \"Data\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.avoma.com/\",\n \"actionCount\": 9,\n \"actions\": [\n \"avoma.get_meeting\",\n \"avoma.get_meeting_insights\",\n \"avoma.get_recording\",\n \"avoma.get_recording_for_meeting\",\n \"avoma.get_transcription\",\n \"avoma.get_user\",\n \"avoma.list_meetings\",\n \"avoma.list_transcriptions\",\n \"avoma.list_users\"\n ]\n },\n {\n \"service\": \"aws_s3\",\n \"displayName\": \"AWS S3\",\n \"categories\": [\n \"Storage\",\n \"Developer Tools\"\n ],\n \"authTypes\": [\n \"custom_credential\"\n ],\n \"homepageUrl\": \"https://aws.amazon.com/s3/\",\n \"actionCount\": 6,\n \"actions\": [\n \"aws_s3.delete_object\",\n \"aws_s3.generate_presigned_url\",\n \"aws_s3.head_object\",\n \"aws_s3.list_buckets\",\n \"aws_s3.list_objects\",\n \"aws_s3.put_object\"\n ]\n },\n {\n \"service\": \"aws_sts\",\n \"displayName\": \"AWS STS\",\n \"categories\": [\n \"Security\",\n \"Developer Tools\"\n ],\n \"authTypes\": [\n \"custom_credential\"\n ],\n \"homepageUrl\": \"https://aws.amazon.com/iam/\",\n \"actionCount\": 1,\n \"actions\": [\n \"aws_sts.assume_role\"\n ]\n },\n {\n \"service\": \"axiom\",\n \"displayName\": \"Axiom\",\n \"categories\": [\n \"Data\",\n \"Developer Tools\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://axiom.co\",\n \"actionCount\": 5,\n \"actions\": [\n \"axiom.create_dataset\",\n \"axiom.delete_dataset\",\n \"axiom.get_dataset\",\n \"axiom.list_datasets\",\n \"axiom.run_apl_query\"\n ]\n },\n {\n \"service\": \"ayrshare\",\n \"displayName\": \"Ayrshare\",\n \"categories\": [\n \"Social\",\n \"Marketing\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.ayrshare.com/\",\n \"actionCount\": 11,\n \"actions\": [\n \"ayrshare.check_post_length\",\n \"ayrshare.delete_post\",\n \"ayrshare.get_post\",\n \"ayrshare.get_post_analytics\",\n \"ayrshare.get_user_profile\",\n \"ayrshare.list_post_history\",\n \"ayrshare.publish_post\",\n \"ayrshare.retry_post\",\n \"ayrshare.update_post\",\n \"ayrshare.validate_post\",\n \"ayrshare.verify_media_url\"\n ]\n },\n {\n \"service\": \"baidu_maps\",\n \"displayName\": \"Baidu Maps\",\n \"categories\": [\n \"Location\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://lbsyun.baidu.com\",\n \"actionCount\": 14,\n \"actions\": [\n \"baidu_maps.district_search\",\n \"baidu_maps.geocode\",\n \"baidu_maps.get_place_detail\",\n \"baidu_maps.input_tips\",\n \"baidu_maps.ip_locate\",\n \"baidu_maps.reverse_geocode\",\n \"baidu_maps.route_bicycling\",\n \"baidu_maps.route_driving\",\n \"baidu_maps.route_transit\",\n \"baidu_maps.route_walking\",\n \"baidu_maps.search_places\",\n \"baidu_maps.search_places_around\",\n \"baidu_maps.search_places_polygon\",\n \"baidu_maps.weather\"\n ]\n },\n {\n \"service\": \"balldontlie_worldcup\",\n \"displayName\": \"BALLDONTLIE World Cup\",\n \"categories\": [\n \"Data\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://fifa.balldontlie.io/\",\n \"actionCount\": 20,\n \"actions\": [\n \"balldontlie_worldcup.get_match\",\n \"balldontlie_worldcup.list_futures_odds\",\n \"balldontlie_worldcup.list_match_avg_positions\",\n \"balldontlie_worldcup.list_match_best_players\",\n \"balldontlie_worldcup.list_match_events\",\n \"balldontlie_worldcup.list_match_lineups\",\n \"balldontlie_worldcup.list_match_momentum\",\n \"balldontlie_worldcup.list_match_shots\",\n \"balldontlie_worldcup.list_match_team_form\",\n \"balldontlie_worldcup.list_matches\",\n \"balldontlie_worldcup.list_odds\",\n \"balldontlie_worldcup.list_player_injuries\",\n \"balldontlie_worldcup.list_player_match_stats\",\n \"balldontlie_worldcup.list_player_props\",\n \"balldontlie_worldcup.list_players\",\n \"balldontlie_worldcup.list_rosters\",\n \"balldontlie_worldcup.list_stadiums\",\n \"balldontlie_worldcup.list_standings\",\n \"balldontlie_worldcup.list_team_match_stats\",\n \"balldontlie_worldcup.list_teams\"\n ]\n },\n {\n \"service\": \"bamboohr\",\n \"displayName\": \"BambooHR\",\n \"categories\": [\n \"Productivity\",\n \"Data\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.bamboohr.com\",\n \"actionCount\": 4,\n \"actions\": [\n \"bamboohr.get_company_information\",\n \"bamboohr.get_employee\",\n \"bamboohr.list_employees\",\n \"bamboohr.list_fields\"\n ]\n },\n {\n \"service\": \"bannerbear\",\n \"displayName\": \"Bannerbear\",\n \"categories\": [\n \"Design & Media\",\n \"Marketing\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.bannerbear.com/\",\n \"actionCount\": 5,\n \"actions\": [\n \"bannerbear.create_image_sync\",\n \"bannerbear.get_auth\",\n \"bannerbear.get_image\",\n \"bannerbear.get_template\",\n \"bannerbear.list_templates\"\n ]\n },\n {\n \"service\": \"baremetrics\",\n \"displayName\": \"Baremetrics\",\n \"categories\": [\n \"Finance\",\n \"Data\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://baremetrics.com\",\n \"actionCount\": 12,\n \"actions\": [\n \"baremetrics.cancel_subscription\",\n \"baremetrics.create_customer\",\n \"baremetrics.create_plan\",\n \"baremetrics.create_subscription\",\n \"baremetrics.list_charges\",\n \"baremetrics.list_customers\",\n \"baremetrics.list_plans\",\n \"baremetrics.list_sources\",\n \"baremetrics.list_subscriptions\",\n \"baremetrics.update_customer\",\n \"baremetrics.update_plan\",\n \"baremetrics.update_subscription\"\n ]\n },\n {\n \"service\": \"bark\",\n \"displayName\": \"Bark\",\n \"categories\": [\n \"Communication\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://bark.day.app\",\n \"actionCount\": 4,\n \"actions\": [\n \"bark.get_server_info\",\n \"bark.send_batch_notifications\",\n \"bark.send_encrypted_notification\",\n \"bark.send_notification\"\n ]\n },\n {\n \"service\": \"baselinker\",\n \"displayName\": \"BaseLinker\",\n \"categories\": [\n \"Productivity\",\n \"Data\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://baselinker.com\",\n \"actionCount\": 6,\n \"actions\": [\n \"baselinker.list_inventories\",\n \"baselinker.list_inventory_products\",\n \"baselinker.list_inventory_warehouses\",\n \"baselinker.list_order_events\",\n \"baselinker.list_order_statuses\",\n \"baselinker.list_orders\"\n ]\n },\n {\n \"service\": \"baserow\",\n \"displayName\": \"Baserow\",\n \"categories\": [\n \"Productivity\",\n \"Data\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://baserow.io\",\n \"actionCount\": 7,\n \"actions\": [\n \"baserow.create_table_row\",\n \"baserow.delete_table_row\",\n \"baserow.get_table_row\",\n \"baserow.list_table_fields\",\n \"baserow.list_table_rows\",\n \"baserow.list_tables\",\n \"baserow.update_table_row\"\n ]\n },\n {\n \"service\": \"basin\",\n \"displayName\": \"Basin\",\n \"categories\": [\n \"Productivity\",\n \"Marketing\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://usebasin.com\",\n \"actionCount\": 18,\n \"actions\": [\n \"basin.create_form\",\n \"basin.create_form_webhook\",\n \"basin.create_project\",\n \"basin.delete_form\",\n \"basin.delete_form_webhook\",\n \"basin.delete_project\",\n \"basin.delete_submission\",\n \"basin.get_form\",\n \"basin.get_form_webhook\",\n \"basin.get_project\",\n \"basin.get_submission\",\n \"basin.list_form_webhooks\",\n \"basin.list_forms\",\n \"basin.list_projects\",\n \"basin.list_submissions\",\n \"basin.update_form\",\n \"basin.update_form_webhook\",\n \"basin.update_project\"\n ]\n },\n {\n \"service\": \"beaconchain\",\n \"displayName\": \"Beaconcha.in\",\n \"categories\": [\n \"Finance\",\n \"Data\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://beaconcha.in\",\n \"actionCount\": 5,\n \"actions\": [\n \"beaconchain.get_network_performance\",\n \"beaconchain.get_staking_queues\",\n \"beaconchain.get_validator\",\n \"beaconchain.get_validator_consensus_rewards\",\n \"beaconchain.list_validators\"\n ]\n },\n {\n \"service\": \"beamer\",\n \"displayName\": \"Beamer\",\n \"categories\": [\n \"Communication\",\n \"Productivity\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.getbeamer.com\",\n \"actionCount\": 4,\n \"actions\": [\n \"beamer.count_unread_posts\",\n \"beamer.create_post\",\n \"beamer.get_feed_url\",\n \"beamer.list_posts\"\n ]\n },\n {\n \"service\": \"beehiiv\",\n \"displayName\": \"Beehiiv\",\n \"categories\": [\n \"Marketing\",\n \"Productivity\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.beehiiv.com\",\n \"actionCount\": 6,\n \"actions\": [\n \"beehiiv.get_post\",\n \"beehiiv.get_publication\",\n \"beehiiv.get_subscription\",\n \"beehiiv.list_posts\",\n \"beehiiv.list_publications\",\n \"beehiiv.list_subscriptions\"\n ]\n },\n {\n \"service\": \"beeminder\",\n \"displayName\": \"Beeminder\",\n \"categories\": [\n \"Productivity\",\n \"Finance\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.beeminder.com\",\n \"actionCount\": 8,\n \"actions\": [\n \"beeminder.create_datapoint\",\n \"beeminder.delete_datapoint\",\n \"beeminder.get_goal\",\n \"beeminder.get_user\",\n \"beeminder.list_archived_goals\",\n \"beeminder.list_datapoints\",\n \"beeminder.list_goals\",\n \"beeminder.update_datapoint\"\n ]\n },\n {\n \"service\": \"benchmark_email\",\n \"displayName\": \"Benchmark Email\",\n \"categories\": [\n \"Marketing\",\n \"Communication\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.benchmarkemail.com\",\n \"actionCount\": 4,\n \"actions\": [\n \"benchmark_email.get_account_summary\",\n \"benchmark_email.get_contact_details\",\n \"benchmark_email.get_contact_list_summary\",\n \"benchmark_email.get_contacts_in_list\"\n ]\n },\n {\n \"service\": \"benzinga\",\n \"displayName\": \"Benzinga\",\n \"categories\": [\n \"Finance\",\n \"Data\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.benzinga.com/\",\n \"actionCount\": 4,\n \"actions\": [\n \"benzinga.get_consensus_ratings\",\n \"benzinga.list_analyst_ratings\",\n \"benzinga.list_earnings\",\n \"benzinga.list_news_channels\"\n ]\n },\n {\n \"service\": \"bestbuy\",\n \"displayName\": \"Best Buy\",\n \"categories\": [\n \"Data\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.bestbuy.com\",\n \"actionCount\": 8,\n \"actions\": [\n \"bestbuy.get_categories\",\n \"bestbuy.get_category_details\",\n \"bestbuy.get_product_details\",\n \"bestbuy.get_products\",\n \"bestbuy.get_review_details\",\n \"bestbuy.get_reviews\",\n \"bestbuy.get_store_details\",\n \"bestbuy.get_stores\"\n ]\n },\n {\n \"service\": \"better_proposals\",\n \"displayName\": \"Better Proposals\",\n \"categories\": [\n \"Productivity\",\n \"Communication\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://betterproposals.io\",\n \"actionCount\": 20,\n \"actions\": [\n \"better_proposals.get_brand_settings\",\n \"better_proposals.get_company\",\n \"better_proposals.get_currency\",\n \"better_proposals.get_proposal\",\n \"better_proposals.get_proposal_count\",\n \"better_proposals.get_quote\",\n \"better_proposals.get_settings\",\n \"better_proposals.get_template\",\n \"better_proposals.list_companies\",\n \"better_proposals.list_currencies\",\n \"better_proposals.list_document_types\",\n \"better_proposals.list_merge_tags\",\n \"better_proposals.list_new_proposals\",\n \"better_proposals.list_opened_proposals\",\n \"better_proposals.list_paid_proposals\",\n \"better_proposals.list_proposals\",\n \"better_proposals.list_quotes\",\n \"better_proposals.list_sent_proposals\",\n \"better_proposals.list_signed_proposals\",\n \"better_proposals.list_templates\"\n ]\n },\n {\n \"service\": \"better_stack\",\n \"displayName\": \"Better Stack\",\n \"categories\": [\n \"Developer Tools\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://betterstack.com\",\n \"actionCount\": 7,\n \"actions\": [\n \"better_stack.acknowledge_incident\",\n \"better_stack.create_incident\",\n \"better_stack.escalate_incident\",\n \"better_stack.get_incident\",\n \"better_stack.list_incident_comments\",\n \"better_stack.list_incidents\",\n \"better_stack.list_metadata\"\n ]\n },\n {\n \"service\": \"bettercontact\",\n \"displayName\": \"BetterContact\",\n \"categories\": [\n \"Marketing\",\n \"Data\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://bettercontact.rocks\",\n \"actionCount\": 3,\n \"actions\": [\n \"bettercontact.get_account_balance\",\n \"bettercontact.get_enrichment_result\",\n \"bettercontact.submit_enrichment\"\n ]\n },\n {\n \"service\": \"bidsketch\",\n \"displayName\": \"BidSketch\",\n \"categories\": [\n \"Productivity\",\n \"Marketing\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.bidsketch.com/\",\n \"actionCount\": 6,\n \"actions\": [\n \"bidsketch.get_client\",\n \"bidsketch.get_proposal\",\n \"bidsketch.get_proposal_content\",\n \"bidsketch.list_client_proposals\",\n \"bidsketch.list_clients\",\n \"bidsketch.list_proposals\"\n ]\n },\n {\n \"service\": \"big_commerce\",\n \"displayName\": \"BigCommerce\",\n \"categories\": [\n \"Marketing\",\n \"Data\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.bigcommerce.com\",\n \"actionCount\": 5,\n \"actions\": [\n \"big_commerce.create_product\",\n \"big_commerce.delete_product\",\n \"big_commerce.get_product\",\n \"big_commerce.list_products\",\n \"big_commerce.update_product\"\n ]\n },\n {\n \"service\": \"big_data_cloud\",\n \"displayName\": \"BigDataCloud\",\n \"categories\": [\n \"Location\",\n \"Security\",\n \"Data\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.bigdatacloud.com\",\n \"actionCount\": 4,\n \"actions\": [\n \"big_data_cloud.get_country_by_ip\",\n \"big_data_cloud.get_network_by_ip\",\n \"big_data_cloud.get_timezone_by_ip\",\n \"big_data_cloud.reverse_geocode_with_timezone\"\n ]\n },\n {\n \"service\": \"bigmailer\",\n \"displayName\": \"BigMailer\",\n \"categories\": [\n \"Marketing\",\n \"Communication\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.bigmailer.io/\",\n \"actionCount\": 13,\n \"actions\": [\n \"bigmailer.create_contact\",\n \"bigmailer.create_list\",\n \"bigmailer.delete_contact\",\n \"bigmailer.delete_list\",\n \"bigmailer.get_brand\",\n \"bigmailer.get_contact\",\n \"bigmailer.get_list\",\n \"bigmailer.list_brands\",\n \"bigmailer.list_contacts\",\n \"bigmailer.list_lists\",\n \"bigmailer.update_contact\",\n \"bigmailer.update_list\",\n \"bigmailer.upsert_contact\"\n ]\n },\n {\n \"service\": \"bigpicture_io\",\n \"displayName\": \"BigPicture.io\",\n \"categories\": [\n \"Data\",\n \"Marketing\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://bigpicture.io\",\n \"actionCount\": 2,\n \"actions\": [\n \"bigpicture_io.find_company_by_domain\",\n \"bigpicture_io.find_company_by_ip\"\n ]\n },\n {\n \"service\": \"bird\",\n \"displayName\": \"Bird\",\n \"categories\": [\n \"Communication\",\n \"Marketing\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://bird.com\",\n \"actionCount\": 12,\n \"actions\": [\n \"bird.create_contact\",\n \"bird.delete_contact\",\n \"bird.get_channel\",\n \"bird.get_contact\",\n \"bird.get_message\",\n \"bird.list_channels\",\n \"bird.list_contacts\",\n \"bird.list_message_interactions\",\n \"bird.search_contact_by_identifier\",\n \"bird.send_batch_messages\",\n \"bird.send_message\",\n \"bird.update_contact\"\n ]\n },\n {\n \"service\": \"bitly\",\n \"displayName\": \"Bitly\",\n \"categories\": [\n \"Marketing\",\n \"Data\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://bitly.com\",\n \"actionCount\": 6,\n \"actions\": [\n \"bitly.get_bitlink\",\n \"bitly.get_group\",\n \"bitly.get_user\",\n \"bitly.list_groups\",\n \"bitly.shorten_link\",\n \"bitly.update_bitlink\"\n ]\n },\n {\n \"service\": \"bitquery\",\n \"displayName\": \"Bitquery\",\n \"categories\": [\n \"Data\",\n \"Developer Tools\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://bitquery.io\",\n \"actionCount\": 1,\n \"actions\": [\n \"bitquery.run_query\"\n ]\n },\n {\n \"service\": \"bitrise\",\n \"displayName\": \"Bitrise\",\n \"categories\": [\n \"Developer Tools\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://bitrise.io\",\n \"actionCount\": 4,\n \"actions\": [\n \"bitrise.get_build\",\n \"bitrise.list_apps\",\n \"bitrise.list_builds\",\n \"bitrise.trigger_build\"\n ]\n },\n {\n \"service\": \"bland_ai\",\n \"displayName\": \"Bland AI\",\n \"categories\": [\n \"AI\",\n \"Communication\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.bland.ai/\",\n \"actionCount\": 5,\n \"actions\": [\n \"bland_ai.get_account\",\n \"bland_ai.get_call\",\n \"bland_ai.get_voice\",\n \"bland_ai.list_calls\",\n \"bland_ai.list_voices\"\n ]\n },\n {\n \"service\": \"blaze_meter_functional\",\n \"displayName\": \"BlazeMeter Functional\",\n \"categories\": [\n \"Developer Tools\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.blazemeter.com/\",\n \"actionCount\": 3,\n \"actions\": [\n \"blaze_meter_functional.get_active_sessions\",\n \"blaze_meter_functional.get_multi_test\",\n \"blaze_meter_functional.list_multi_tests\"\n ]\n },\n {\n \"service\": \"blaze_meter_performance\",\n \"displayName\": \"BlazeMeter Performance\",\n \"categories\": [\n \"Developer Tools\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.blazemeter.com/\",\n \"actionCount\": 6,\n \"actions\": [\n \"blaze_meter_performance.get_test\",\n \"blaze_meter_performance.get_user\",\n \"blaze_meter_performance.list_accounts\",\n \"blaze_meter_performance.list_projects\",\n \"blaze_meter_performance.list_tests\",\n \"blaze_meter_performance.list_workspaces\"\n ]\n },\n {\n \"service\": \"blaze_meter_service_virtualization\",\n \"displayName\": \"BlazeMeter Service Virtualization\",\n \"categories\": [\n \"Developer Tools\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.blazemeter.com/\",\n \"actionCount\": 3,\n \"actions\": [\n \"blaze_meter_service_virtualization.get_service_mock_template\",\n \"blaze_meter_service_virtualization.list_service_mock_templates\",\n \"blaze_meter_service_virtualization.update_service_mock_template\"\n ]\n },\n {\n \"service\": \"blocknative\",\n \"displayName\": \"Blocknative\",\n \"categories\": [\n \"Developer Tools\",\n \"Data\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.blocknative.com\",\n \"actionCount\": 4,\n \"actions\": [\n \"blocknative.get_gas_price_distribution\",\n \"blocknative.get_gas_prices\",\n \"blocknative.list_gas_oracles\",\n \"blocknative.list_supported_chains\"\n ]\n },\n {\n \"service\": \"bluesky\",\n \"displayName\": \"Bluesky\",\n \"categories\": [\n \"Social\",\n \"Communication\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://bsky.social\",\n \"actionCount\": 3,\n \"actions\": [\n \"bluesky.create_text_post\",\n \"bluesky.get_profile\",\n \"bluesky.search_posts\"\n ]\n },\n {\n \"service\": \"bolna\",\n \"displayName\": \"Bolna\",\n \"categories\": [\n \"AI\",\n \"Communication\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.bolna.ai\",\n \"actionCount\": 6,\n \"actions\": [\n \"bolna.get_agent\",\n \"bolna.get_execution\",\n \"bolna.get_execution_raw_logs\",\n \"bolna.get_user_info\",\n \"bolna.list_agent_executions\",\n \"bolna.list_agents\"\n ]\n },\n {\n \"service\": \"boloforms\",\n \"displayName\": \"BoloForms\",\n \"categories\": [\n \"Productivity\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.boloforms.com\",\n \"actionCount\": 4,\n \"actions\": [\n \"boloforms.get_form_responses\",\n \"boloforms.list_documents\",\n \"boloforms.list_template_respondents\",\n \"boloforms.send_template_for_signing\"\n ]\n },\n {\n \"service\": \"bookingmood\",\n \"displayName\": \"Bookingmood\",\n \"categories\": [\n \"Productivity\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.bookingmood.com\",\n \"actionCount\": 3,\n \"actions\": [\n \"bookingmood.list_bookings\",\n \"bookingmood.list_products\",\n \"bookingmood.query_availability\"\n ]\n },\n {\n \"service\": \"booqable\",\n \"displayName\": \"Booqable\",\n \"categories\": [\n \"Productivity\",\n \"Data\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.booqable.com/\",\n \"actionCount\": 10,\n \"actions\": [\n \"booqable.get_current_company\",\n \"booqable.get_customer\",\n \"booqable.get_order\",\n \"booqable.get_product_group\",\n \"booqable.list_customers\",\n \"booqable.list_orders\",\n \"booqable.list_product_groups\",\n \"booqable.search_customers\",\n \"booqable.search_orders\",\n \"booqable.search_product_groups\"\n ]\n },\n {\n \"service\": \"bot_star\",\n \"displayName\": \"BotStar\",\n \"categories\": [\n \"Communication\",\n \"Marketing\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://botstar.com\",\n \"actionCount\": 21,\n \"actions\": [\n \"bot_star.create_bot\",\n \"bot_star.create_bot_attribute\",\n \"bot_star.create_cms_entity\",\n \"bot_star.create_cms_entity_item\",\n \"bot_star.create_user_attribute\",\n \"bot_star.delete_bot_attribute\",\n \"bot_star.delete_cms_entity\",\n \"bot_star.delete_cms_entity_item\",\n \"bot_star.get_bot\",\n \"bot_star.get_cms_entity\",\n \"bot_star.get_cms_entity_item\",\n \"bot_star.get_user\",\n \"bot_star.list_bot_attributes\",\n \"bot_star.list_bots\",\n \"bot_star.list_cms_entities\",\n \"bot_star.list_cms_entity_items\",\n \"bot_star.publish_bot\",\n \"bot_star.update_bot_attribute\",\n \"bot_star.update_cms_entity\",\n \"bot_star.update_cms_entity_item\",\n \"bot_star.update_user_attributes\"\n ]\n },\n {\n \"service\": \"botpress\",\n \"displayName\": \"Botpress\",\n \"categories\": [\n \"AI\",\n \"Developer Tools\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://botpress.com\",\n \"actionCount\": 3,\n \"actions\": [\n \"botpress.get_bot\",\n \"botpress.list_bots\",\n \"botpress.list_workspaces\"\n ]\n },\n {\n \"service\": \"botsonic\",\n \"displayName\": \"Botsonic\",\n \"categories\": [\n \"AI\",\n \"Communication\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://botsonic.com\",\n \"actionCount\": 4,\n \"actions\": [\n \"botsonic.generate_response\",\n \"botsonic.get_conversation\",\n \"botsonic.list_conversations\",\n \"botsonic.list_faqs\"\n ]\n },\n {\n \"service\": \"bouncer\",\n \"displayName\": \"Bouncer\",\n \"categories\": [\n \"Communication\",\n \"Marketing\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.usebouncer.com/\",\n \"actionCount\": 13,\n \"actions\": [\n \"bouncer.create_batch_request\",\n \"bouncer.create_toxicity_list_job\",\n \"bouncer.delete_batch_request\",\n \"bouncer.delete_toxicity_list_job\",\n \"bouncer.finish_batch\",\n \"bouncer.get_batch_results\",\n \"bouncer.get_batch_status\",\n \"bouncer.get_credits\",\n \"bouncer.get_toxicity_list_job_status\",\n \"bouncer.get_toxicity_list_results\",\n \"bouncer.verify_domain\",\n \"bouncer.verify_email\",\n \"bouncer.verify_emails_batch_sync\"\n ]\n },\n {\n \"service\": \"boxhero\",\n \"displayName\": \"BoxHero\",\n \"categories\": [\n \"Productivity\",\n \"Data\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.boxhero-app.com\",\n \"actionCount\": 4,\n \"actions\": [\n \"boxhero.get_item\",\n \"boxhero.get_team_info\",\n \"boxhero.list_items\",\n \"boxhero.list_locations\"\n ]\n },\n {\n \"service\": \"brandfetch\",\n \"displayName\": \"Brandfetch\",\n \"categories\": [\n \"Design & Media\",\n \"Marketing\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://brandfetch.com\",\n \"actionCount\": 2,\n \"actions\": [\n \"brandfetch.get_brand\",\n \"brandfetch.get_transaction_info\"\n ]\n },\n {\n \"service\": \"brave_search\",\n \"displayName\": \"Brave Search\",\n \"categories\": [\n \"Data\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://search.brave.com/\",\n \"actionCount\": 4,\n \"actions\": [\n \"brave_search.image_search\",\n \"brave_search.news_search\",\n \"brave_search.video_search\",\n \"brave_search.web_search\"\n ]\n },\n {\n \"service\": \"braze\",\n \"displayName\": \"Braze\",\n \"categories\": [\n \"Marketing\",\n \"Data\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.braze.com\",\n \"actionCount\": 4,\n \"actions\": [\n \"braze.get_campaign_details\",\n \"braze.get_canvas_details\",\n \"braze.list_campaigns\",\n \"braze.list_canvases\"\n ]\n },\n {\n \"service\": \"breathe\",\n \"displayName\": \"Breathe\",\n \"categories\": [\n \"Productivity\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.breathehr.com/\",\n \"actionCount\": 5,\n \"actions\": [\n \"breathe.get_account\",\n \"breathe.get_employee\",\n \"breathe.list_departments\",\n \"breathe.list_employees\",\n \"breathe.list_locations\"\n ]\n },\n {\n \"service\": \"breeze\",\n \"displayName\": \"Breeze\",\n \"categories\": [\n \"Productivity\",\n \"Communication\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.breezechms.com\",\n \"actionCount\": 5,\n \"actions\": [\n \"breeze.get_person\",\n \"breeze.list_people\",\n \"breeze.list_profile_fields\",\n \"breeze.list_tag_folders\",\n \"breeze.list_tags\"\n ]\n },\n {\n \"service\": \"brevo\",\n \"displayName\": \"Brevo\",\n \"categories\": [\n \"Communication\",\n \"Marketing\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.brevo.com\",\n \"actionCount\": 12,\n \"actions\": [\n \"brevo.add_contacts_to_list\",\n \"brevo.create_contact\",\n \"brevo.create_contact_list\",\n \"brevo.delete_contact\",\n \"brevo.get_account\",\n \"brevo.get_contact\",\n \"brevo.list_contact_folders\",\n \"brevo.list_contact_lists\",\n \"brevo.list_contacts\",\n \"brevo.list_contacts_in_list\",\n \"brevo.remove_contacts_from_list\",\n \"brevo.update_contact_list\"\n ]\n },\n {\n \"service\": \"brex\",\n \"displayName\": \"Brex\",\n \"categories\": [\n \"Finance\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.brex.com/\",\n \"actionCount\": 9,\n \"actions\": [\n \"brex.get_budget\",\n \"brex.get_company\",\n \"brex.get_current_user\",\n \"brex.get_expense\",\n \"brex.list_budgets\",\n \"brex.list_card_accounts\",\n \"brex.list_expenses\",\n \"brex.list_primary_card_transactions\",\n \"brex.list_users\"\n ]\n },\n {\n \"service\": \"bright_data\",\n \"displayName\": \"Bright Data\",\n \"categories\": [\n \"Data\",\n \"Developer Tools\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://brightdata.com\",\n \"actionCount\": 6,\n \"actions\": [\n \"bright_data.get_account_status\",\n \"bright_data.get_dataset_metadata\",\n \"bright_data.get_snapshot_metadata\",\n \"bright_data.get_snapshot_parts\",\n \"bright_data.list_dataset_views\",\n \"bright_data.list_datasets\"\n ]\n },\n {\n \"service\": \"browse_ai\",\n \"displayName\": \"Browse AI\",\n \"categories\": [\n \"Data\",\n \"Developer Tools\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.browse.ai\",\n \"actionCount\": 6,\n \"actions\": [\n \"browse_ai.get_robot\",\n \"browse_ai.get_robot_task\",\n \"browse_ai.list_robot_tasks\",\n \"browse_ai.list_robots\",\n \"browse_ai.run_robot_task\",\n \"browse_ai.update_robot_cookies\"\n ]\n },\n {\n \"service\": \"browserbase\",\n \"displayName\": \"Browserbase\",\n \"categories\": [\n \"Developer Tools\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.browserbase.com\",\n \"actionCount\": 11,\n \"actions\": [\n \"browserbase.create_context\",\n \"browserbase.create_session\",\n \"browserbase.delete_context\",\n \"browserbase.get_context\",\n \"browserbase.get_project\",\n \"browserbase.get_project_usage\",\n \"browserbase.get_session\",\n \"browserbase.list_projects\",\n \"browserbase.list_sessions\",\n \"browserbase.refresh_context_upload_credentials\",\n \"browserbase.request_session_release\"\n ]\n },\n {\n \"service\": \"browserless\",\n \"displayName\": \"Browserless\",\n \"categories\": [\n \"Developer Tools\",\n \"Data\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.browserless.io\",\n \"actionCount\": 3,\n \"actions\": [\n \"browserless.fetch_content\",\n \"browserless.generate_pdf\",\n \"browserless.take_screenshot\"\n ]\n },\n {\n \"service\": \"btcpay_server\",\n \"displayName\": \"BTCPay Server\",\n \"categories\": [\n \"Finance\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://btcpayserver.org\",\n \"actionCount\": 7,\n \"actions\": [\n \"btcpay_server.create_invoice\",\n \"btcpay_server.get_invoice\",\n \"btcpay_server.get_store\",\n \"btcpay_server.list_invoices\",\n \"btcpay_server.list_stores\",\n \"btcpay_server.mark_invoice_status\",\n \"btcpay_server.update_invoice_metadata\"\n ]\n },\n {\n \"service\": \"bug_herd\",\n \"displayName\": \"BugHerd\",\n \"categories\": [\n \"Developer Tools\",\n \"Productivity\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://bugherd.com/\",\n \"actionCount\": 14,\n \"actions\": [\n \"bug_herd.create_attachment_from_url\",\n \"bug_herd.create_comment\",\n \"bug_herd.create_project\",\n \"bug_herd.create_task\",\n \"bug_herd.get_project\",\n \"bug_herd.get_task\",\n \"bug_herd.list_active_projects\",\n \"bug_herd.list_attachments\",\n \"bug_herd.list_comments\",\n \"bug_herd.list_project_tasks\",\n \"bug_herd.list_projects\",\n \"bug_herd.show_organization\",\n \"bug_herd.update_project\",\n \"bug_herd.update_task\"\n ]\n },\n {\n \"service\": \"bugbug\",\n \"displayName\": \"BugBug\",\n \"categories\": [\n \"Developer Tools\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://bugbug.io\",\n \"actionCount\": 8,\n \"actions\": [\n \"bugbug.get_suite\",\n \"bugbug.get_test\",\n \"bugbug.get_test_run_status\",\n \"bugbug.list_profiles\",\n \"bugbug.list_suites\",\n \"bugbug.list_test_runs\",\n \"bugbug.list_tests\",\n \"bugbug.run_test\"\n ]\n },\n {\n \"service\": \"bugsnag\",\n \"displayName\": \"Bugsnag\",\n \"categories\": [\n \"Developer Tools\",\n \"Security\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.bugsnag.com\",\n \"actionCount\": 7,\n \"actions\": [\n \"bugsnag.get_latest_error_event\",\n \"bugsnag.get_organization\",\n \"bugsnag.list_error_events\",\n \"bugsnag.list_organization_projects\",\n \"bugsnag.list_organizations\",\n \"bugsnag.list_project_errors\",\n \"bugsnag.list_project_releases\"\n ]\n },\n {\n \"service\": \"builder_io\",\n \"displayName\": \"Builder.io\",\n \"categories\": [\n \"Design & Media\",\n \"Marketing\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.builder.io\",\n \"actionCount\": 5,\n \"actions\": [\n \"builder_io.create_content\",\n \"builder_io.delete_content\",\n \"builder_io.get_content\",\n \"builder_io.list_content\",\n \"builder_io.update_content\"\n ]\n },\n {\n \"service\": \"buildium\",\n \"displayName\": \"Buildium\",\n \"categories\": [\n \"Productivity\",\n \"Data\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.buildium.com\",\n \"actionCount\": 7,\n \"actions\": [\n \"buildium.get_owner\",\n \"buildium.get_property\",\n \"buildium.get_unit\",\n \"buildium.list_owners\",\n \"buildium.list_properties\",\n \"buildium.list_property_notes\",\n \"buildium.list_units\"\n ]\n },\n {\n \"service\": \"buildkite\",\n \"displayName\": \"Buildkite\",\n \"categories\": [\n \"Developer Tools\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://buildkite.com\",\n \"actionCount\": 12,\n \"actions\": [\n \"buildkite.cancel_build\",\n \"buildkite.create_build\",\n \"buildkite.get_build\",\n \"buildkite.get_current_access_token\",\n \"buildkite.get_current_user\",\n \"buildkite.get_organization\",\n \"buildkite.get_pipeline\",\n \"buildkite.list_builds_for_organization\",\n \"buildkite.list_builds_for_pipeline\",\n \"buildkite.list_organizations\",\n \"buildkite.list_pipelines\",\n \"buildkite.rebuild_build\"\n ]\n },\n {\n \"service\": \"builtwith\",\n \"displayName\": \"BuiltWith\",\n \"categories\": [\n \"Data\",\n \"Developer Tools\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://builtwith.com\",\n \"actionCount\": 5,\n \"actions\": [\n \"builtwith.get_domain_recommendations\",\n \"builtwith.lookup_domain_profile\",\n \"builtwith.lookup_domain_summary\",\n \"builtwith.lookup_redirect_history\",\n \"builtwith.lookup_social_profiles\"\n ]\n },\n {\n \"service\": \"bunnycdn\",\n \"displayName\": \"BunnyCDN\",\n \"categories\": [\n \"Storage\",\n \"Developer Tools\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://bunny.net/\",\n \"actionCount\": 3,\n \"actions\": [\n \"bunnycdn.get_pull_zone\",\n \"bunnycdn.list_pull_zones\",\n \"bunnycdn.purge_pull_zone_cache\"\n ]\n },\n {\n \"service\": \"businessmap\",\n \"displayName\": \"Businessmap\",\n \"categories\": [\n \"Productivity\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://businessmap.io\",\n \"actionCount\": 10,\n \"actions\": [\n \"businessmap.create_board\",\n \"businessmap.create_card\",\n \"businessmap.delete_card\",\n \"businessmap.get_board\",\n \"businessmap.get_card\",\n \"businessmap.list_boards\",\n \"businessmap.list_cards\",\n \"businessmap.list_workspaces\",\n \"businessmap.update_board\",\n \"businessmap.update_card\"\n ]\n },\n {\n \"service\": \"buttondown\",\n \"displayName\": \"Buttondown\",\n \"categories\": [\n \"Marketing\",\n \"Communication\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://buttondown.com\",\n \"actionCount\": 12,\n \"actions\": [\n \"buttondown.create_subscriber\",\n \"buttondown.create_tag\",\n \"buttondown.delete_subscriber\",\n \"buttondown.delete_tag\",\n \"buttondown.get_account\",\n \"buttondown.get_subscriber\",\n \"buttondown.get_tag\",\n \"buttondown.list_newsletters\",\n \"buttondown.list_subscribers\",\n \"buttondown.list_tags\",\n \"buttondown.update_subscriber\",\n \"buttondown.update_tag\"\n ]\n },\n {\n \"service\": \"byteforms\",\n \"displayName\": \"ByteForms\",\n \"categories\": [\n \"Productivity\",\n \"Data\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://forms.bytesuite.io/\",\n \"actionCount\": 3,\n \"actions\": [\n \"byteforms.get_form\",\n \"byteforms.list_form_responses\",\n \"byteforms.list_forms\"\n ]\n },\n {\n \"service\": \"cal\",\n \"displayName\": \"Cal.com\",\n \"categories\": [\n \"Productivity\",\n \"Communication\"\n ],\n \"authTypes\": [\n \"oauth2\"\n ],\n \"homepageUrl\": \"https://cal.com\",\n \"actionCount\": 47,\n \"actions\": [\n \"cal.add_attendee\",\n \"cal.cancel_booking\",\n \"cal.cancel_booking_via_uid\",\n \"cal.confirm_booking_by_uid\",\n \"cal.create_booking\",\n \"cal.create_event_type\",\n \"cal.create_schedule\",\n \"cal.create_user_availability_schedule\",\n \"cal.decline_booking_with_reason\",\n \"cal.delete_event_type\",\n \"cal.delete_event_type_by_id\",\n \"cal.delete_schedule\",\n \"cal.delete_schedule_by_id\",\n \"cal.fetch_all_bookings\",\n \"cal.fetch_event_type_details\",\n \"cal.fetch_schedule_by_id\",\n \"cal.get_available_slots_info\",\n \"cal.get_booking\",\n \"cal.get_booking_references\",\n \"cal.get_default_schedule\",\n \"cal.get_default_schedule_details\",\n \"cal.get_event_type\",\n \"cal.get_event_type_private_links\",\n \"cal.get_my_profile\",\n \"cal.get_schedule\",\n \"cal.list_attendees\",\n \"cal.list_booking_references\",\n \"cal.list_bookings\",\n \"cal.list_event_types\",\n \"cal.list_schedules\",\n \"cal.mark_booking_absent_for_uid\",\n \"cal.post_new_booking_request\",\n \"cal.reassign_booking_with_uid\",\n \"cal.reschedule_booking\",\n \"cal.reschedule_booking_by_uid\",\n \"cal.retrieve_booking_details_by_uid\",\n \"cal.retrieve_calendar_busy_times\",\n \"cal.retrieve_calendar_list\",\n \"cal.retrieve_event_type_by_id\",\n \"cal.retrieve_my_information\",\n \"cal.retrieve_schedules_list\",\n \"cal.update_destination_calendar_integration\",\n \"cal.update_event_type\",\n \"cal.update_my_profile\",\n \"cal.update_schedule\",\n \"cal.update_schedule_by_id\",\n \"cal.update_user_profile_details\"\n ]\n },\n {\n \"service\": \"calendarific\",\n \"displayName\": \"Calendarific\",\n \"categories\": [\n \"Productivity\",\n \"Data\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://calendarific.com/\",\n \"actionCount\": 3,\n \"actions\": [\n \"calendarific.get_holidays\",\n \"calendarific.list_supported_countries\",\n \"calendarific.list_supported_languages\"\n ]\n },\n {\n \"service\": \"calendly\",\n \"displayName\": \"Calendly\",\n \"categories\": [\n \"Productivity\"\n ],\n \"authTypes\": [\n \"oauth2\",\n \"api_key\"\n ],\n \"homepageUrl\": \"https://calendly.com\",\n \"actionCount\": 37,\n \"actions\": [\n \"calendly.cancel_scheduled_event\",\n \"calendly.create_event_invitee\",\n \"calendly.create_invitee_no_show\",\n \"calendly.create_organization_invitation\",\n \"calendly.create_share\",\n \"calendly.create_single_use_scheduling_link\",\n \"calendly.create_webhook_subscription\",\n \"calendly.delete_invitee_no_show\",\n \"calendly.delete_organization_membership\",\n \"calendly.delete_webhook_subscription\",\n \"calendly.get_current_user\",\n \"calendly.get_event_invitee\",\n \"calendly.get_event_type\",\n \"calendly.get_invitee_no_show\",\n \"calendly.get_organization\",\n \"calendly.get_organization_membership\",\n \"calendly.get_routing_form\",\n \"calendly.get_routing_form_submission\",\n \"calendly.get_scheduled_event\",\n \"calendly.get_user\",\n \"calendly.get_user_availability_schedule\",\n \"calendly.get_webhook_subscription\",\n \"calendly.list_event_invitees\",\n \"calendly.list_event_type_availability_schedules\",\n \"calendly.list_event_type_available_times\",\n \"calendly.list_event_types\",\n \"calendly.list_organization_invitations\",\n \"calendly.list_organization_memberships\",\n \"calendly.list_routing_form_submissions\",\n \"calendly.list_routing_forms\",\n \"calendly.list_scheduled_events\",\n \"calendly.list_user_availability_schedules\",\n \"calendly.list_user_busy_times\",\n \"calendly.list_user_meeting_locations\",\n \"calendly.list_webhook_subscriptions\",\n \"calendly.revoke_organization_invitation\",\n \"calendly.update_event_type_availability_schedule\"\n ]\n },\n {\n \"service\": \"callerapi\",\n \"displayName\": \"CallerAPI\",\n \"categories\": [\n \"Communication\",\n \"Security\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://callerapi.com\",\n \"actionCount\": 2,\n \"actions\": [\n \"callerapi.get_phone_number_information\",\n \"callerapi.get_user_information\"\n ]\n },\n {\n \"service\": \"callingly\",\n \"displayName\": \"Callingly\",\n \"categories\": [\n \"Communication\",\n \"Productivity\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://callingly.com\",\n \"actionCount\": 12,\n \"actions\": [\n \"callingly.create_call\",\n \"callingly.delete_lead\",\n \"callingly.get_agent_schedule\",\n \"callingly.get_call\",\n \"callingly.get_lead\",\n \"callingly.get_team\",\n \"callingly.list_agents\",\n \"callingly.list_calls\",\n \"callingly.list_leads\",\n \"callingly.list_team_agents\",\n \"callingly.list_teams\",\n \"callingly.update_lead\"\n ]\n },\n {\n \"service\": \"callpage\",\n \"displayName\": \"CallPage\",\n \"categories\": [\n \"Communication\",\n \"Productivity\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.callpage.io\",\n \"actionCount\": 7,\n \"actions\": [\n \"callpage.create_widget_call\",\n \"callpage.get_call\",\n \"callpage.get_user\",\n \"callpage.get_widget\",\n \"callpage.list_calls\",\n \"callpage.list_users\",\n \"callpage.list_widgets\"\n ]\n },\n {\n \"service\": \"callrail\",\n \"displayName\": \"CallRail\",\n \"categories\": [\n \"Marketing\",\n \"Data\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.callrail.com\",\n \"actionCount\": 6,\n \"actions\": [\n \"callrail.get_call\",\n \"callrail.get_form_submission\",\n \"callrail.list_accounts\",\n \"callrail.list_calls\",\n \"callrail.list_companies\",\n \"callrail.list_form_submissions\"\n ]\n },\n {\n \"service\": \"campaign_cleaner\",\n \"displayName\": \"Campaign Cleaner\",\n \"categories\": [\n \"Communication\",\n \"Marketing\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://campaigncleaner.com\",\n \"actionCount\": 7,\n \"actions\": [\n \"campaign_cleaner.delete_campaign\",\n \"campaign_cleaner.get_campaign\",\n \"campaign_cleaner.get_campaign_pdf_analysis\",\n \"campaign_cleaner.get_campaign_status\",\n \"campaign_cleaner.get_credits\",\n \"campaign_cleaner.list_campaigns\",\n \"campaign_cleaner.send_campaign\"\n ]\n },\n {\n \"service\": \"canny\",\n \"displayName\": \"Canny\",\n \"categories\": [\n \"Productivity\",\n \"Data\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://canny.io\",\n \"actionCount\": 11,\n \"actions\": [\n \"canny.create_comment\",\n \"canny.create_or_update_user\",\n \"canny.create_post\",\n \"canny.list_boards\",\n \"canny.list_comments\",\n \"canny.list_posts\",\n \"canny.list_users\",\n \"canny.retrieve_board\",\n \"canny.retrieve_post\",\n \"canny.retrieve_user\",\n \"canny.update_post\"\n ]\n },\n {\n \"service\": \"canva\",\n \"displayName\": \"Canva\",\n \"categories\": [\n \"Design & Media\",\n \"Productivity\"\n ],\n \"authTypes\": [\n \"oauth2\"\n ],\n \"homepageUrl\": \"https://www.canva.com\",\n \"actionCount\": 13,\n \"actions\": [\n \"canva.create_design\",\n \"canva.create_design_export_job\",\n \"canva.create_folder\",\n \"canva.create_url_asset_upload_job\",\n \"canva.get_asset\",\n \"canva.get_current_user\",\n \"canva.get_design\",\n \"canva.get_design_export_formats\",\n \"canva.get_design_export_job\",\n \"canva.get_url_asset_upload_job\",\n \"canva.list_designs\",\n \"canva.list_folder_items\",\n \"canva.move_folder_item\"\n ]\n },\n {\n \"service\": \"capsule_crm\",\n \"displayName\": \"Capsule CRM\",\n \"categories\": [\n \"Productivity\",\n \"Marketing\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://capsulecrm.com\",\n \"actionCount\": 25,\n \"actions\": [\n \"capsule_crm.create_opportunity\",\n \"capsule_crm.create_party\",\n \"capsule_crm.create_task\",\n \"capsule_crm.delete_opportunity\",\n \"capsule_crm.delete_party\",\n \"capsule_crm.delete_task\",\n \"capsule_crm.get_current_user\",\n \"capsule_crm.get_opportunity\",\n \"capsule_crm.get_party\",\n \"capsule_crm.get_task\",\n \"capsule_crm.list_categories\",\n \"capsule_crm.list_countries\",\n \"capsule_crm.list_currencies\",\n \"capsule_crm.list_opportunities\",\n \"capsule_crm.list_parties\",\n \"capsule_crm.list_pipeline_milestones\",\n \"capsule_crm.list_pipelines\",\n \"capsule_crm.list_stages\",\n \"capsule_crm.list_tasks\",\n \"capsule_crm.list_users\",\n \"capsule_crm.search_opportunities\",\n \"capsule_crm.search_parties\",\n \"capsule_crm.update_opportunity\",\n \"capsule_crm.update_party\",\n \"capsule_crm.update_task\"\n ]\n },\n {\n \"service\": \"carbone\",\n \"displayName\": \"Carbone\",\n \"categories\": [\n \"Productivity\",\n \"Developer Tools\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://carbone.io\",\n \"actionCount\": 5,\n \"actions\": [\n \"carbone.delete_template\",\n \"carbone.list_template_categories\",\n \"carbone.list_template_tags\",\n \"carbone.list_templates\",\n \"carbone.update_template_metadata\"\n ]\n },\n {\n \"service\": \"cardly\",\n \"displayName\": \"Cardly\",\n \"categories\": [\n \"Marketing\",\n \"Productivity\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.card.ly\",\n \"actionCount\": 7,\n \"actions\": [\n \"cardly.echo\",\n \"cardly.get_balance\",\n \"cardly.list_credit_history\",\n \"cardly.list_fonts\",\n \"cardly.list_gift_credit_history\",\n \"cardly.list_media\",\n \"cardly.list_writing_styles\"\n ]\n },\n {\n \"service\": \"cats\",\n \"displayName\": \"CATS\",\n \"categories\": [\n \"Productivity\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://catsone.com/\",\n \"actionCount\": 10,\n \"actions\": [\n \"cats.get_candidate\",\n \"cats.get_company\",\n \"cats.get_job\",\n \"cats.get_site\",\n \"cats.list_candidates\",\n \"cats.list_companies\",\n \"cats.list_jobs\",\n \"cats.search_candidates\",\n \"cats.search_companies\",\n \"cats.search_jobs\"\n ]\n },\n {\n \"service\": \"celigo\",\n \"displayName\": \"Celigo\",\n \"categories\": [\n \"Developer Tools\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.celigo.com\",\n \"actionCount\": 8,\n \"actions\": [\n \"celigo.get_connection\",\n \"celigo.get_export\",\n \"celigo.get_flow\",\n \"celigo.get_import\",\n \"celigo.get_token_info\",\n \"celigo.list_exports\",\n \"celigo.list_flows\",\n \"celigo.list_imports\"\n ]\n },\n {\n \"service\": \"census_bureau\",\n \"displayName\": \"Census Bureau\",\n \"categories\": [\n \"Data\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.census.gov\",\n \"actionCount\": 5,\n \"actions\": [\n \"census_bureau.get_group\",\n \"census_bureau.list_datasets\",\n \"census_bureau.list_groups\",\n \"census_bureau.list_variables\",\n \"census_bureau.query_dataset\"\n ]\n },\n {\n \"service\": \"censys\",\n \"displayName\": \"Censys\",\n \"categories\": [\n \"Security\",\n \"Data\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://censys.com\",\n \"actionCount\": 3,\n \"actions\": [\n \"censys.get_certificate\",\n \"censys.get_host\",\n \"censys.get_web_property\"\n ]\n },\n {\n \"service\": \"central_station_crm\",\n \"displayName\": \"CentralStationCRM\",\n \"categories\": [\n \"Marketing\",\n \"Productivity\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://centralstationcrm.de\",\n \"actionCount\": 19,\n \"actions\": [\n \"central_station_crm.create_company\",\n \"central_station_crm.create_deal\",\n \"central_station_crm.create_person\",\n \"central_station_crm.delete_company\",\n \"central_station_crm.delete_deal\",\n \"central_station_crm.delete_person\",\n \"central_station_crm.get_company\",\n \"central_station_crm.get_deal\",\n \"central_station_crm.get_person\",\n \"central_station_crm.get_user\",\n \"central_station_crm.list_companies\",\n \"central_station_crm.list_deals\",\n \"central_station_crm.list_people\",\n \"central_station_crm.search_companies\",\n \"central_station_crm.search_deals\",\n \"central_station_crm.search_people\",\n \"central_station_crm.update_company\",\n \"central_station_crm.update_deal\",\n \"central_station_crm.update_person\"\n ]\n },\n {\n \"service\": \"certifier\",\n \"displayName\": \"Certifier\",\n \"categories\": [\n \"Productivity\",\n \"Communication\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://certifier.io\",\n \"actionCount\": 6,\n \"actions\": [\n \"certifier.create_issue_send_credential\",\n \"certifier.list_credential_interactions\",\n \"certifier.list_credentials\",\n \"certifier.list_designs\",\n \"certifier.list_groups\",\n \"certifier.search_credentials\"\n ]\n },\n {\n \"service\": \"certn\",\n \"displayName\": \"Certn\",\n \"categories\": [\n \"Security\",\n \"Productivity\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://certn.co\",\n \"actionCount\": 10,\n \"actions\": [\n \"certn.get_case\",\n \"certn.get_group\",\n \"certn.get_user\",\n \"certn.list_cases\",\n \"certn.list_events\",\n \"certn.list_groups\",\n \"certn.list_packages\",\n \"certn.list_questionnaires\",\n \"certn.list_tags\",\n \"certn.list_users\"\n ]\n },\n {\n \"service\": \"chargebee\",\n \"displayName\": \"Chargebee\",\n \"categories\": [\n \"Finance\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.chargebee.com\",\n \"actionCount\": 9,\n \"actions\": [\n \"chargebee.create_customer\",\n \"chargebee.get_customer\",\n \"chargebee.get_invoice\",\n \"chargebee.get_item_price\",\n \"chargebee.get_subscription\",\n \"chargebee.list_customers\",\n \"chargebee.list_invoices\",\n \"chargebee.list_item_prices\",\n \"chargebee.list_subscriptions\"\n ]\n },\n {\n \"service\": \"chartmogul\",\n \"displayName\": \"ChartMogul\",\n \"categories\": [\n \"Finance\",\n \"Data\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://chartmogul.com/\",\n \"actionCount\": 5,\n \"actions\": [\n \"chartmogul.get_account\",\n \"chartmogul.get_customer\",\n \"chartmogul.list_contacts\",\n \"chartmogul.list_customers\",\n \"chartmogul.list_sources\"\n ]\n },\n {\n \"service\": \"chaserhq\",\n \"displayName\": \"ChaserHQ\",\n \"categories\": [\n \"Finance\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.chaserhq.com/\",\n \"actionCount\": 8,\n \"actions\": [\n \"chaserhq.get_customer\",\n \"chaserhq.get_invoice\",\n \"chaserhq.get_invoice_history\",\n \"chaserhq.get_organisation\",\n \"chaserhq.get_status\",\n \"chaserhq.list_customers\",\n \"chaserhq.list_invoice_history\",\n \"chaserhq.list_invoices\"\n ]\n },\n {\n \"service\": \"chatarmin\",\n \"displayName\": \"Chatarmin\",\n \"categories\": [\n \"Marketing\",\n \"Communication\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://chatarmin.com/\",\n \"actionCount\": 23,\n \"actions\": [\n \"chatarmin.add_or_replace_voucher_codes\",\n \"chatarmin.create_contact\",\n \"chatarmin.create_voucher_pool\",\n \"chatarmin.create_webhook\",\n \"chatarmin.delete_contact\",\n \"chatarmin.delete_voucher_pool\",\n \"chatarmin.delete_webhook\",\n \"chatarmin.get_campaign\",\n \"chatarmin.get_contact\",\n \"chatarmin.get_flow\",\n \"chatarmin.get_flow_analytics\",\n \"chatarmin.get_flow_contact_analytics\",\n \"chatarmin.get_voucher_pool\",\n \"chatarmin.list_campaigns\",\n \"chatarmin.list_contacts\",\n \"chatarmin.list_flows\",\n \"chatarmin.list_voucher_pools\",\n \"chatarmin.list_webhooks\",\n \"chatarmin.remove_voucher_code\",\n \"chatarmin.send_message\",\n \"chatarmin.update_contact\",\n \"chatarmin.update_voucher_pool\",\n \"chatarmin.update_webhook\"\n ]\n },\n {\n \"service\": \"chatbotkit\",\n \"displayName\": \"ChatBotKit\",\n \"categories\": [\n \"AI\",\n \"Developer Tools\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://chatbotkit.com\",\n \"actionCount\": 27,\n \"actions\": [\n \"chatbotkit.attach_dataset_file\",\n \"chatbotkit.complete_conversation\",\n \"chatbotkit.create_bot\",\n \"chatbotkit.create_conversation\",\n \"chatbotkit.create_conversation_message\",\n \"chatbotkit.create_dataset\",\n \"chatbotkit.create_dataset_record\",\n \"chatbotkit.create_file\",\n \"chatbotkit.detach_dataset_file\",\n \"chatbotkit.download_file\",\n \"chatbotkit.fetch_bot\",\n \"chatbotkit.fetch_conversation\",\n \"chatbotkit.fetch_dataset\",\n \"chatbotkit.fetch_file\",\n \"chatbotkit.fetch_usage\",\n \"chatbotkit.list_bots\",\n \"chatbotkit.list_conversation_messages\",\n \"chatbotkit.list_conversations\",\n \"chatbotkit.list_dataset_files\",\n \"chatbotkit.list_dataset_records\",\n \"chatbotkit.list_datasets\",\n \"chatbotkit.list_files\",\n \"chatbotkit.search_dataset\",\n \"chatbotkit.sync_file\",\n \"chatbotkit.update_bot\",\n \"chatbotkit.update_dataset\",\n \"chatbotkit.upload_file\"\n ]\n },\n {\n \"service\": \"chatpdf\",\n \"displayName\": \"ChatPDF\",\n \"categories\": [\n \"AI\",\n \"Productivity\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.chatpdf.com\",\n \"actionCount\": 3,\n \"actions\": [\n \"chatpdf.add_source_url\",\n \"chatpdf.chat\",\n \"chatpdf.delete_sources\"\n ]\n },\n {\n \"service\": \"chattermill\",\n \"displayName\": \"Chattermill\",\n \"categories\": [\n \"Data\",\n \"Marketing\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://chattermill.com\",\n \"actionCount\": 22,\n \"actions\": [\n \"chattermill.create_response\",\n \"chattermill.delete_response\",\n \"chattermill.get_attribute\",\n \"chattermill.get_category\",\n \"chattermill.get_data_source\",\n \"chattermill.get_data_type\",\n \"chattermill.get_metric\",\n \"chattermill.get_project\",\n \"chattermill.get_response\",\n \"chattermill.get_tag\",\n \"chattermill.get_theme\",\n \"chattermill.list_attributes\",\n \"chattermill.list_categories\",\n \"chattermill.list_custom_segments\",\n \"chattermill.list_data_sources\",\n \"chattermill.list_data_types\",\n \"chattermill.list_projects\",\n \"chattermill.list_responses\",\n \"chattermill.list_tags\",\n \"chattermill.list_themes\",\n \"chattermill.search_responses\",\n \"chattermill.update_response\"\n ]\n },\n {\n \"service\": \"chatwork\",\n \"displayName\": \"Chatwork\",\n \"categories\": [\n \"Communication\",\n \"Productivity\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://go.chatwork.com\",\n \"actionCount\": 15,\n \"actions\": [\n \"chatwork.create_task\",\n \"chatwork.delete_message\",\n \"chatwork.get_contacts\",\n \"chatwork.get_me\",\n \"chatwork.get_message\",\n \"chatwork.get_room\",\n \"chatwork.get_task\",\n \"chatwork.list_my_tasks\",\n \"chatwork.list_room_members\",\n \"chatwork.list_room_messages\",\n \"chatwork.list_room_tasks\",\n \"chatwork.list_rooms\",\n \"chatwork.post_message\",\n \"chatwork.update_message\",\n \"chatwork.update_task_status\"\n ]\n },\n {\n \"service\": \"check\",\n \"displayName\": \"Check\",\n \"categories\": [\n \"Finance\",\n \"Data\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.checkhq.com\",\n \"actionCount\": 3,\n \"actions\": [\n \"check.get_agency\",\n \"check.list_agencies\",\n \"check.validate_address\"\n ]\n },\n {\n \"service\": \"checkly\",\n \"displayName\": \"Checkly\",\n \"categories\": [\n \"Developer Tools\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.checklyhq.com\",\n \"actionCount\": 7,\n \"actions\": [\n \"checkly.get_check\",\n \"checkly.get_check_result\",\n \"checkly.get_check_status\",\n \"checkly.get_current_account\",\n \"checkly.list_check_results\",\n \"checkly.list_check_statuses\",\n \"checkly.list_checks\"\n ]\n },\n {\n \"service\": \"chorus\",\n \"displayName\": \"Chorus\",\n \"categories\": [\n \"Communication\",\n \"Data\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.chorus.ai\",\n \"actionCount\": 6,\n \"actions\": [\n \"chorus.get_conversation\",\n \"chorus.get_current_user\",\n \"chorus.get_team\",\n \"chorus.list_engagements\",\n \"chorus.list_scorecards\",\n \"chorus.list_teams\"\n ]\n },\n {\n \"service\": \"cin7_core\",\n \"displayName\": \"Cin7 Core\",\n \"categories\": [\n \"Data\",\n \"Finance\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.cin7.com/solutions/core/\",\n \"actionCount\": 5,\n \"actions\": [\n \"cin7_core.get_current_account\",\n \"cin7_core.get_customer\",\n \"cin7_core.get_product\",\n \"cin7_core.list_customers\",\n \"cin7_core.list_products\"\n ]\n },\n {\n \"service\": \"cincopa\",\n \"displayName\": \"Cincopa\",\n \"categories\": [\n \"Design & Media\",\n \"Storage\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.cincopa.com/\",\n \"actionCount\": 4,\n \"actions\": [\n \"cincopa.list_asset_tags\",\n \"cincopa.list_assets\",\n \"cincopa.list_galleries\",\n \"cincopa.list_gallery_items\"\n ]\n },\n {\n \"service\": \"circle\",\n \"displayName\": \"Circle\",\n \"categories\": [\n \"Communication\",\n \"Productivity\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://circle.so\",\n \"actionCount\": 8,\n \"actions\": [\n \"circle.get_community\",\n \"circle.get_community_member\",\n \"circle.get_post\",\n \"circle.get_space_group\",\n \"circle.list_community_members\",\n \"circle.list_posts\",\n \"circle.list_space_groups\",\n \"circle.list_space_members\"\n ]\n },\n {\n \"service\": \"circleci\",\n \"displayName\": \"CircleCI\",\n \"categories\": [\n \"Developer Tools\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://circleci.com\",\n \"actionCount\": 11,\n \"actions\": [\n \"circleci.get_current_user\",\n \"circleci.get_job_artifacts\",\n \"circleci.get_job_details\",\n \"circleci.get_pipeline\",\n \"circleci.get_project\",\n \"circleci.get_workflow_summary\",\n \"circleci.list_insights_summary\",\n \"circleci.list_pipelines_for_project\",\n \"circleci.list_project_env_vars\",\n \"circleci.list_workflows_by_pipeline\",\n \"circleci.trigger_pipeline\"\n ]\n },\n {\n \"service\": \"claid_ai\",\n \"displayName\": \"Claid AI\",\n \"categories\": [\n \"AI\",\n \"Design & Media\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://claid.ai\",\n \"actionCount\": 3,\n \"actions\": [\n \"claid_ai.edit_image\",\n \"claid_ai.get_edit_task\",\n \"claid_ai.submit_edit_image\"\n ]\n },\n {\n \"service\": \"clari_copilot\",\n \"displayName\": \"Clari Copilot\",\n \"categories\": [\n \"Data\",\n \"Productivity\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.clari.com/products/copilot/\",\n \"actionCount\": 5,\n \"actions\": [\n \"clari_copilot.get_call_details\",\n \"clari_copilot.list_calls\",\n \"clari_copilot.list_scorecards\",\n \"clari_copilot.list_topics\",\n \"clari_copilot.list_users\"\n ]\n },\n {\n \"service\": \"classmarker\",\n \"displayName\": \"ClassMarker\",\n \"categories\": [\n \"Productivity\",\n \"Data\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.classmarker.com\",\n \"actionCount\": 5,\n \"actions\": [\n \"classmarker.list_groups_links_and_tests\",\n \"classmarker.list_recent_group_results\",\n \"classmarker.list_recent_link_results\",\n \"classmarker.list_recent_results_for_group_test\",\n \"classmarker.list_recent_results_for_link_test\"\n ]\n },\n {\n \"service\": \"clearout\",\n \"displayName\": \"Clearout\",\n \"categories\": [\n \"Marketing\",\n \"Data\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://clearout.io\",\n \"actionCount\": 8,\n \"actions\": [\n \"clearout.get_available_credits\",\n \"clearout.instant_verify_email\",\n \"clearout.verify_business_account_email\",\n \"clearout.verify_catch_all_email\",\n \"clearout.verify_disposable_email\",\n \"clearout.verify_free_account_email\",\n \"clearout.verify_gibberish_email\",\n \"clearout.verify_role_account_email\"\n ]\n },\n {\n \"service\": \"clerk\",\n \"displayName\": \"Clerk\",\n \"categories\": [\n \"Security\",\n \"Developer Tools\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://clerk.com\",\n \"actionCount\": 11,\n \"actions\": [\n \"clerk.ban_user\",\n \"clerk.count_users\",\n \"clerk.create_user\",\n \"clerk.delete_user\",\n \"clerk.get_user\",\n \"clerk.list_users\",\n \"clerk.lock_user\",\n \"clerk.unban_user\",\n \"clerk.unlock_user\",\n \"clerk.update_user\",\n \"clerk.update_user_metadata\"\n ]\n },\n {\n \"service\": \"clickhouse\",\n \"displayName\": \"ClickHouse\",\n \"categories\": [\n \"Data\",\n \"Developer Tools\"\n ],\n \"authTypes\": [\n \"custom_credential\"\n ],\n \"homepageUrl\": \"https://clickhouse.com\",\n \"actionCount\": 5,\n \"actions\": [\n \"clickhouse.execute_query\",\n \"clickhouse.get_database_schema\",\n \"clickhouse.get_table_schema\",\n \"clickhouse.list_databases\",\n \"clickhouse.list_tables\"\n ]\n },\n {\n \"service\": \"clickmeeting\",\n \"displayName\": \"ClickMeeting\",\n \"categories\": [\n \"Communication\",\n \"Marketing\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://clickmeeting.com/\",\n \"actionCount\": 19,\n \"actions\": [\n \"clickmeeting.create_conference\",\n \"clickmeeting.delete_conference\",\n \"clickmeeting.generate_access_tokens\",\n \"clickmeeting.get_conference\",\n \"clickmeeting.get_session\",\n \"clickmeeting.list_access_tokens\",\n \"clickmeeting.list_all_recordings\",\n \"clickmeeting.list_chats\",\n \"clickmeeting.list_conference_recordings\",\n \"clickmeeting.list_conferences\",\n \"clickmeeting.list_phone_gateways\",\n \"clickmeeting.list_registrations\",\n \"clickmeeting.list_session_attendees\",\n \"clickmeeting.list_session_registrations\",\n \"clickmeeting.list_sessions\",\n \"clickmeeting.list_time_zones\",\n \"clickmeeting.ping\",\n \"clickmeeting.register_participant\",\n \"clickmeeting.update_conference\"\n ]\n },\n {\n \"service\": \"clicksend\",\n \"displayName\": \"ClickSend\",\n \"categories\": [\n \"Communication\",\n \"Marketing\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.clicksend.com/\",\n \"actionCount\": 13,\n \"actions\": [\n \"clicksend.calculate_sms_price\",\n \"clicksend.create_contact\",\n \"clicksend.create_contact_list\",\n \"clicksend.delete_contact\",\n \"clicksend.delete_contact_list\",\n \"clicksend.get_account\",\n \"clicksend.get_contact\",\n \"clicksend.get_contact_list\",\n \"clicksend.list_contact_lists\",\n \"clicksend.list_contacts\",\n \"clicksend.send_sms\",\n \"clicksend.update_contact\",\n \"clicksend.update_contact_list\"\n ]\n },\n {\n \"service\": \"clickup\",\n \"displayName\": \"ClickUp\",\n \"categories\": [\n \"Productivity\"\n ],\n \"authTypes\": [\n \"oauth2\",\n \"api_key\"\n ],\n \"homepageUrl\": \"https://clickup.com\",\n \"actionCount\": 68,\n \"actions\": [\n \"clickup.add_dependency\",\n \"clickup.add_tag_to_task\",\n \"clickup.add_task_link\",\n \"clickup.add_task_to_list\",\n \"clickup.create_checklist\",\n \"clickup.create_checklist_item\",\n \"clickup.create_folder\",\n \"clickup.create_folderless_list\",\n \"clickup.create_list\",\n \"clickup.create_list_from_template\",\n \"clickup.create_space\",\n \"clickup.create_task\",\n \"clickup.create_task_attachment\",\n \"clickup.create_task_comment\",\n \"clickup.create_task_from_template\",\n \"clickup.create_threaded_comment\",\n \"clickup.delete_checklist\",\n \"clickup.delete_checklist_item\",\n \"clickup.delete_comment\",\n \"clickup.delete_dependency\",\n \"clickup.delete_folder\",\n \"clickup.delete_list\",\n \"clickup.delete_space\",\n \"clickup.delete_task\",\n \"clickup.delete_task_link\",\n \"clickup.get_current_user\",\n \"clickup.get_custom_task_types\",\n \"clickup.get_folder\",\n \"clickup.get_folder_custom_fields\",\n \"clickup.get_folder_views\",\n \"clickup.get_list\",\n \"clickup.get_list_custom_fields\",\n \"clickup.get_list_members\",\n \"clickup.get_list_views\",\n \"clickup.get_space\",\n \"clickup.get_space_custom_fields\",\n \"clickup.get_space_tags\",\n \"clickup.get_space_views\",\n \"clickup.get_task\",\n \"clickup.get_task_comments\",\n \"clickup.get_task_members\",\n \"clickup.get_task_templates\",\n \"clickup.get_threaded_comments\",\n \"clickup.get_user\",\n \"clickup.get_view\",\n \"clickup.get_view_tasks\",\n \"clickup.get_workspace_custom_fields\",\n \"clickup.get_workspace_everything_level_views\",\n \"clickup.list_folderless_lists\",\n \"clickup.list_folders\",\n \"clickup.list_list_tasks\",\n \"clickup.list_lists\",\n \"clickup.list_spaces\",\n \"clickup.list_workspace_tasks\",\n \"clickup.list_workspace_users\",\n \"clickup.list_workspaces\",\n \"clickup.move_task_to_home_list\",\n \"clickup.remove_custom_field_value\",\n \"clickup.remove_tag_from_task\",\n \"clickup.remove_task_from_list\",\n \"clickup.set_custom_field_value\",\n \"clickup.update_checklist\",\n \"clickup.update_checklist_item\",\n \"clickup.update_comment\",\n \"clickup.update_folder\",\n \"clickup.update_list\",\n \"clickup.update_space\",\n \"clickup.update_task\"\n ]\n },\n {\n \"service\": \"clockify\",\n \"displayName\": \"Clockify\",\n \"categories\": [\n \"Productivity\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://clockify.me\",\n \"actionCount\": 12,\n \"actions\": [\n \"clockify.create_project\",\n \"clockify.create_task\",\n \"clockify.create_time_entry\",\n \"clockify.delete_project\",\n \"clockify.get_current_user\",\n \"clockify.get_project\",\n \"clockify.get_workspace\",\n \"clockify.list_projects\",\n \"clockify.list_tasks\",\n \"clockify.list_time_entries\",\n \"clockify.list_workspaces\",\n \"clockify.update_project\"\n ]\n },\n {\n \"service\": \"close\",\n \"displayName\": \"Close\",\n \"categories\": [\n \"Productivity\",\n \"Marketing\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.close.com\",\n \"actionCount\": 16,\n \"actions\": [\n \"close.create_contact\",\n \"close.create_lead\",\n \"close.create_opportunity\",\n \"close.create_task\",\n \"close.get_contact\",\n \"close.get_lead\",\n \"close.get_opportunity\",\n \"close.get_task\",\n \"close.list_contacts\",\n \"close.list_leads\",\n \"close.list_opportunities\",\n \"close.list_tasks\",\n \"close.update_contact\",\n \"close.update_lead\",\n \"close.update_opportunity\",\n \"close.update_task\"\n ]\n },\n {\n \"service\": \"cloudconvert\",\n \"displayName\": \"CloudConvert\",\n \"categories\": [\n \"Productivity\",\n \"Design & Media\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://cloudconvert.com\",\n \"actionCount\": 14,\n \"actions\": [\n \"cloudconvert.cancel_task\",\n \"cloudconvert.create_url_conversion_job\",\n \"cloudconvert.create_url_conversion_job_and_wait\",\n \"cloudconvert.delete_job\",\n \"cloudconvert.delete_task\",\n \"cloudconvert.get_current_user\",\n \"cloudconvert.get_job\",\n \"cloudconvert.get_task\",\n \"cloudconvert.list_conversion_types\",\n \"cloudconvert.list_jobs\",\n \"cloudconvert.list_tasks\",\n \"cloudconvert.retry_task\",\n \"cloudconvert.wait_for_job\",\n \"cloudconvert.wait_for_task\"\n ]\n },\n {\n \"service\": \"cloudflare_browser_rendering\",\n \"displayName\": \"Cloudflare Browser Run\",\n \"categories\": [\n \"Developer Tools\",\n \"Data\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://developers.cloudflare.com/browser-run/\",\n \"actionCount\": 6,\n \"actions\": [\n \"cloudflare_browser_rendering.get_html_content\",\n \"cloudflare_browser_rendering.get_json\",\n \"cloudflare_browser_rendering.get_links\",\n \"cloudflare_browser_rendering.get_markdown\",\n \"cloudflare_browser_rendering.list_accounts\",\n \"cloudflare_browser_rendering.scrape_elements\"\n ]\n },\n {\n \"service\": \"cloudflare_dns\",\n \"displayName\": \"Cloudflare DNS\",\n \"categories\": [\n \"Developer Tools\",\n \"Security\"\n ],\n \"authTypes\": [\n \"api_key\",\n \"oauth2\"\n ],\n \"homepageUrl\": \"https://www.cloudflare.com\",\n \"actionCount\": 8,\n \"actions\": [\n \"cloudflare_dns.create_dns_record\",\n \"cloudflare_dns.delete_dns_record\",\n \"cloudflare_dns.get_dns_record\",\n \"cloudflare_dns.get_zone\",\n \"cloudflare_dns.list_accounts\",\n \"cloudflare_dns.list_dns_records\",\n \"cloudflare_dns.list_zones\",\n \"cloudflare_dns.update_dns_record\"\n ]\n },\n {\n \"service\": \"cloudflare_r2\",\n \"displayName\": \"Cloudflare R2\",\n \"categories\": [\n \"Storage\",\n \"Developer Tools\"\n ],\n \"authTypes\": [\n \"custom_credential\",\n \"oauth2\"\n ],\n \"homepageUrl\": \"https://www.cloudflare.com/developer-platform/products/r2/\",\n \"actionCount\": 9,\n \"actions\": [\n \"cloudflare_r2.create_bucket\",\n \"cloudflare_r2.delete_bucket\",\n \"cloudflare_r2.delete_bucket_cors_policy\",\n \"cloudflare_r2.get_bucket\",\n \"cloudflare_r2.get_bucket_cors_policy\",\n \"cloudflare_r2.list_accounts\",\n \"cloudflare_r2.list_buckets\",\n \"cloudflare_r2.update_bucket\",\n \"cloudflare_r2.update_bucket_cors_policy\"\n ]\n },\n {\n \"service\": \"cloudflare_worker\",\n \"displayName\": \"Cloudflare Worker\",\n \"categories\": [\n \"Developer Tools\"\n ],\n \"authTypes\": [\n \"custom_credential\",\n \"oauth2\"\n ],\n \"homepageUrl\": \"https://workers.cloudflare.com\",\n \"actionCount\": 19,\n \"actions\": [\n \"cloudflare_worker.create_worker\",\n \"cloudflare_worker.delete_worker\",\n \"cloudflare_worker.delete_worker_script\",\n \"cloudflare_worker.delete_worker_script_secret\",\n \"cloudflare_worker.edit_worker\",\n \"cloudflare_worker.get_worker\",\n \"cloudflare_worker.get_worker_script_content\",\n \"cloudflare_worker.get_worker_script_secret\",\n \"cloudflare_worker.get_worker_script_settings\",\n \"cloudflare_worker.list_accounts\",\n \"cloudflare_worker.list_worker_script_secrets\",\n \"cloudflare_worker.list_worker_scripts\",\n \"cloudflare_worker.list_workers\",\n \"cloudflare_worker.patch_worker_script_settings\",\n \"cloudflare_worker.put_worker_script_content\",\n \"cloudflare_worker.put_worker_script_secret\",\n \"cloudflare_worker.search_worker_scripts\",\n \"cloudflare_worker.update_worker\",\n \"cloudflare_worker.upload_worker_script\"\n ]\n },\n {\n \"service\": \"cloudinary\",\n \"displayName\": \"Cloudinary\",\n \"categories\": [\n \"Design & Media\",\n \"Storage\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://cloudinary.com\",\n \"actionCount\": 5,\n \"actions\": [\n \"cloudinary.get_asset\",\n \"cloudinary.list_assets\",\n \"cloudinary.rename_asset\",\n \"cloudinary.update_asset\",\n \"cloudinary.upload_asset\"\n ]\n },\n {\n \"service\": \"cloudlayer\",\n \"displayName\": \"cloudlayer.io\",\n \"categories\": [\n \"Productivity\",\n \"Developer Tools\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://cloudlayer.io\",\n \"actionCount\": 8,\n \"actions\": [\n \"cloudlayer.create_html_pdf_job\",\n \"cloudlayer.create_template_pdf_job\",\n \"cloudlayer.create_url_pdf_job\",\n \"cloudlayer.get_account\",\n \"cloudlayer.get_asset\",\n \"cloudlayer.get_job\",\n \"cloudlayer.list_assets\",\n \"cloudlayer.list_jobs\"\n ]\n },\n {\n \"service\": \"cockroach_labs\",\n \"displayName\": \"Cockroach Labs\",\n \"categories\": [\n \"Developer Tools\",\n \"Data\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.cockroachlabs.com\",\n \"actionCount\": 7,\n \"actions\": [\n \"cockroach_labs.get_cluster\",\n \"cockroach_labs.get_organization\",\n \"cockroach_labs.list_available_regions\",\n \"cockroach_labs.list_cluster_nodes\",\n \"cockroach_labs.list_clusters\",\n \"cockroach_labs.list_databases\",\n \"cockroach_labs.list_sql_users\"\n ]\n },\n {\n \"service\": \"coda\",\n \"displayName\": \"Coda\",\n \"categories\": [\n \"Productivity\",\n \"Data\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://coda.io\",\n \"actionCount\": 11,\n \"actions\": [\n \"coda.create_page\",\n \"coda.get_current_user\",\n \"coda.get_doc\",\n \"coda.get_mutation_status\",\n \"coda.get_table\",\n \"coda.list_columns\",\n \"coda.list_docs\",\n \"coda.list_pages\",\n \"coda.list_rows\",\n \"coda.list_tables\",\n \"coda.upsert_rows\"\n ]\n },\n {\n \"service\": \"codacy\",\n \"displayName\": \"Codacy\",\n \"categories\": [\n \"Developer Tools\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.codacy.com\",\n \"actionCount\": 8,\n \"actions\": [\n \"codacy.get_current_user\",\n \"codacy.get_repository_analysis\",\n \"codacy.get_tool_pattern\",\n \"codacy.list_languages\",\n \"codacy.list_repository_analyses\",\n \"codacy.list_tool_patterns\",\n \"codacy.list_tools\",\n \"codacy.list_user_organizations\"\n ]\n },\n {\n \"service\": \"codegen\",\n \"displayName\": \"Codegen\",\n \"categories\": [\n \"Developer Tools\",\n \"AI\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://codegen.com\",\n \"actionCount\": 6,\n \"actions\": [\n \"codegen.get_agent_run\",\n \"codegen.get_current_user\",\n \"codegen.list_agent_runs\",\n \"codegen.list_organizations\",\n \"codegen.list_repositories\",\n \"codegen.list_users\"\n ]\n },\n {\n \"service\": \"codemagic\",\n \"displayName\": \"Codemagic\",\n \"categories\": [\n \"Developer Tools\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://codemagic.io\",\n \"actionCount\": 8,\n \"actions\": [\n \"codemagic.cancel_build\",\n \"codemagic.create_build\",\n \"codemagic.get_build\",\n \"codemagic.get_current_user\",\n \"codemagic.list_team_apps\",\n \"codemagic.list_team_builds\",\n \"codemagic.list_user_apps\",\n \"codemagic.list_user_teams\"\n ]\n },\n {\n \"service\": \"coderabbit\",\n \"displayName\": \"CodeRabbit\",\n \"categories\": [\n \"Developer Tools\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.coderabbit.ai\",\n \"actionCount\": 13,\n \"actions\": [\n \"coderabbit.change_roles\",\n \"coderabbit.create_role\",\n \"coderabbit.delete_role\",\n \"coderabbit.get_review_metrics\",\n \"coderabbit.get_role\",\n \"coderabbit.get_seat_assignment_mode\",\n \"coderabbit.list_audit_logs\",\n \"coderabbit.list_role_permissions\",\n \"coderabbit.list_roles\",\n \"coderabbit.list_users\",\n \"coderabbit.manage_seats\",\n \"coderabbit.update_role\",\n \"coderabbit.update_seat_assignment_mode\"\n ]\n },\n {\n \"service\": \"cohere\",\n \"displayName\": \"Cohere\",\n \"categories\": [\n \"AI\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://cohere.com\",\n \"actionCount\": 3,\n \"actions\": [\n \"cohere.chat\",\n \"cohere.embed_texts\",\n \"cohere.rerank_documents\"\n ]\n },\n {\n \"service\": \"coinbase\",\n \"displayName\": \"Coinbase\",\n \"categories\": [\n \"Finance\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.coinbase.com\",\n \"actionCount\": 2,\n \"actions\": [\n \"coinbase.get_account\",\n \"coinbase.list_accounts\"\n ]\n },\n {\n \"service\": \"coinmarketcal\",\n \"displayName\": \"CoinMarketCal\",\n \"categories\": [\n \"Finance\",\n \"Data\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://coinmarketcal.com\",\n \"actionCount\": 5,\n \"actions\": [\n \"coinmarketcal.list_coins\",\n \"coinmarketcal.list_confirmed_events\",\n \"coinmarketcal.list_event_categories\",\n \"coinmarketcal.list_events\",\n \"coinmarketcal.list_ranked_events\"\n ]\n },\n {\n \"service\": \"coinmarketcap\",\n \"displayName\": \"CoinMarketCap\",\n \"categories\": [\n \"Finance\",\n \"Data\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://coinmarketcap.com\",\n \"actionCount\": 6,\n \"actions\": [\n \"coinmarketcap.convert_price\",\n \"coinmarketcap.get_cryptocurrency_map\",\n \"coinmarketcap.get_key_info\",\n \"coinmarketcap.get_latest_cryptocurrency_quotes\",\n \"coinmarketcap.get_latest_global_metrics_quotes\",\n \"coinmarketcap.list_latest_cryptocurrency_listings\"\n ]\n },\n {\n \"service\": \"coinranking\",\n \"displayName\": \"Coinranking\",\n \"categories\": [\n \"Finance\",\n \"Data\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://coinranking.com\",\n \"actionCount\": 6,\n \"actions\": [\n \"coinranking.get_coin_details\",\n \"coinranking.get_coin_price_history\",\n \"coinranking.get_global_stats\",\n \"coinranking.get_reference_currencies\",\n \"coinranking.list_coins\",\n \"coinranking.search_suggestions\"\n ]\n },\n {\n \"service\": \"college_football_data\",\n \"displayName\": \"CollegeFootballData\",\n \"categories\": [\n \"Data\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://collegefootballdata.com/\",\n \"actionCount\": 5,\n \"actions\": [\n \"college_football_data.get_info\",\n \"college_football_data.list_conferences\",\n \"college_football_data.list_games\",\n \"college_football_data.list_teams\",\n \"college_football_data.list_venues\"\n ]\n },\n {\n \"service\": \"collegiate\",\n \"displayName\": \"Merriam-Webster Collegiate\",\n \"categories\": [\n \"Data\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.merriam-webster.com\",\n \"actionCount\": 1,\n \"actions\": [\n \"collegiate.lookup_word\"\n ]\n },\n {\n \"service\": \"companycam\",\n \"displayName\": \"CompanyCam\",\n \"categories\": [\n \"Productivity\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://companycam.com\",\n \"actionCount\": 15,\n \"actions\": [\n \"companycam.archive_project\",\n \"companycam.create_project\",\n \"companycam.create_tag\",\n \"companycam.delete_tag\",\n \"companycam.get_company\",\n \"companycam.get_current_user\",\n \"companycam.get_project\",\n \"companycam.get_tag\",\n \"companycam.get_user\",\n \"companycam.list_projects\",\n \"companycam.list_tags\",\n \"companycam.list_users\",\n \"companycam.restore_project\",\n \"companycam.update_project\",\n \"companycam.update_tag\"\n ]\n },\n {\n \"service\": \"companyenrich\",\n \"displayName\": \"CompanyEnrich\",\n \"categories\": [\n \"Marketing\",\n \"Data\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://companyenrich.com\",\n \"actionCount\": 6,\n \"actions\": [\n \"companyenrich.count_companies\",\n \"companyenrich.enrich_company_by_domain\",\n \"companyenrich.enrich_company_by_properties\",\n \"companyenrich.find_similar_companies\",\n \"companyenrich.get_current_user\",\n \"companyenrich.search_companies\"\n ]\n },\n {\n \"service\": \"conductor\",\n \"displayName\": \"Conductor\",\n \"categories\": [\n \"Marketing\",\n \"Data\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.conductor.com\",\n \"actionCount\": 7,\n \"actions\": [\n \"conductor.get_page\",\n \"conductor.get_statistics\",\n \"conductor.list_affected_pages\",\n \"conductor.list_issues\",\n \"conductor.list_pages\",\n \"conductor.list_segments\",\n \"conductor.list_websites\"\n ]\n },\n {\n \"service\": \"configcat\",\n \"displayName\": \"ConfigCat\",\n \"categories\": [\n \"Developer Tools\",\n \"Productivity\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://configcat.com/\",\n \"actionCount\": 7,\n \"actions\": [\n \"configcat.get_me\",\n \"configcat.get_setting_value\",\n \"configcat.list_configs\",\n \"configcat.list_environments\",\n \"configcat.list_products\",\n \"configcat.list_setting_values\",\n \"configcat.list_settings\"\n ]\n },\n {\n \"service\": \"confluence\",\n \"displayName\": \"Confluence\",\n \"categories\": [\n \"Productivity\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.atlassian.com/software/confluence\",\n \"actionCount\": 5,\n \"actions\": [\n \"confluence.create_page\",\n \"confluence.get_page\",\n \"confluence.list_spaces\",\n \"confluence.search_content\",\n \"confluence.update_page\"\n ]\n },\n {\n \"service\": \"contactout\",\n \"displayName\": \"ContactOut\",\n \"categories\": [\n \"Data\",\n \"Marketing\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://contactout.com\",\n \"actionCount\": 15,\n \"actions\": [\n \"contactout.check_personal_email_available\",\n \"contactout.check_phone_available\",\n \"contactout.check_work_email_available\",\n \"contactout.count_people\",\n \"contactout.enrich_companies_by_domain\",\n \"contactout.enrich_email_profile\",\n \"contactout.enrich_linkedin_profile\",\n \"contactout.enrich_person\",\n \"contactout.find_decision_makers\",\n \"contactout.get_linkedin_contact_info\",\n \"contactout.get_linkedin_profile_by_email\",\n \"contactout.get_usage_stats\",\n \"contactout.search_companies\",\n \"contactout.search_people\",\n \"contactout.verify_email\"\n ]\n },\n {\n \"service\": \"contentful\",\n \"displayName\": \"Contentful\",\n \"categories\": [\n \"Productivity\",\n \"Developer Tools\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.contentful.com\",\n \"actionCount\": 8,\n \"actions\": [\n \"contentful.create_entry\",\n \"contentful.get_current_user\",\n \"contentful.get_entry\",\n \"contentful.list_content_types\",\n \"contentful.list_entries\",\n \"contentful.list_environments\",\n \"contentful.list_spaces\",\n \"contentful.update_entry\"\n ]\n },\n {\n \"service\": \"contentful_graphql\",\n \"displayName\": \"Contentful GraphQL\",\n \"categories\": [\n \"Developer Tools\",\n \"Productivity\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.contentful.com\",\n \"actionCount\": 1,\n \"actions\": [\n \"contentful_graphql.execute_query\"\n ]\n },\n {\n \"service\": \"contentstack_content_delivery\",\n \"displayName\": \"Contentstack Content Delivery\",\n \"categories\": [\n \"Data\",\n \"Productivity\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.contentstack.com/\",\n \"actionCount\": 5,\n \"actions\": [\n \"contentstack_content_delivery.get_content_type\",\n \"contentstack_content_delivery.get_entry\",\n \"contentstack_content_delivery.list_assets\",\n \"contentstack_content_delivery.list_content_types\",\n \"contentstack_content_delivery.list_entries\"\n ]\n },\n {\n \"service\": \"contentstack_content_management\",\n \"displayName\": \"Contentstack Content Management\",\n \"categories\": [\n \"Data\",\n \"Productivity\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.contentstack.com/\",\n \"actionCount\": 6,\n \"actions\": [\n \"contentstack_content_management.create_entry\",\n \"contentstack_content_management.get_content_type\",\n \"contentstack_content_management.get_entry\",\n \"contentstack_content_management.list_content_types\",\n \"contentstack_content_management.list_entries\",\n \"contentstack_content_management.update_entry\"\n ]\n },\n {\n \"service\": \"context7\",\n \"displayName\": \"Context7\",\n \"categories\": [\n \"Developer Tools\",\n \"AI\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://context7.com\",\n \"actionCount\": 2,\n \"actions\": [\n \"context7.get_documentation_context\",\n \"context7.search_libraries\"\n ]\n },\n {\n \"service\": \"control_d\",\n \"displayName\": \"Control D\",\n \"categories\": [\n \"Security\",\n \"Developer Tools\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://controld.com\",\n \"actionCount\": 8,\n \"actions\": [\n \"control_d.delete_profile_rule\",\n \"control_d.get_current_ip\",\n \"control_d.get_profile\",\n \"control_d.list_profile_rules\",\n \"control_d.list_profiles\",\n \"control_d.list_service_categories\",\n \"control_d.list_services_by_category\",\n \"control_d.upsert_profile_rule\"\n ]\n },\n {\n \"service\": \"convertapi\",\n \"displayName\": \"ConvertAPI\",\n \"categories\": [\n \"Productivity\",\n \"Design & Media\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.convertapi.com\",\n \"actionCount\": 1,\n \"actions\": [\n \"convertapi.convert_pdf_to_docx\"\n ]\n },\n {\n \"service\": \"convex\",\n \"displayName\": \"Convex\",\n \"categories\": [\n \"Developer Tools\"\n ],\n \"authTypes\": [\n \"oauth2\",\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.convex.dev\",\n \"actionCount\": 23,\n \"actions\": [\n \"convex.create_deploy_key\",\n \"convex.create_deployment\",\n \"convex.create_project\",\n \"convex.delete_custom_domain\",\n \"convex.delete_deploy_key\",\n \"convex.delete_deployment\",\n \"convex.delete_project\",\n \"convex.execute_query_batch\",\n \"convex.get_deployment\",\n \"convex.get_project_by_id\",\n \"convex.get_project_by_slug\",\n \"convex.get_token_details\",\n \"convex.list_custom_domains\",\n \"convex.list_deploy_keys\",\n \"convex.list_deployment_classes\",\n \"convex.list_deployment_regions\",\n \"convex.list_deployments\",\n \"convex.list_projects\",\n \"convex.run_action\",\n \"convex.run_function\",\n \"convex.run_mutation\",\n \"convex.run_query\",\n \"convex.update_deployment\"\n ]\n },\n {\n \"service\": \"coresignal\",\n \"displayName\": \"Coresignal\",\n \"categories\": [\n \"Data\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://coresignal.com\",\n \"actionCount\": 3,\n \"actions\": [\n \"coresignal.collect_base_company\",\n \"coresignal.preview_base_companies\",\n \"coresignal.search_base_companies\"\n ]\n },\n {\n \"service\": \"countdown_api\",\n \"displayName\": \"Countdown API\",\n \"categories\": [\n \"Data\",\n \"Marketing\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://countdownapi.com/\",\n \"actionCount\": 4,\n \"actions\": [\n \"countdown_api.autocomplete\",\n \"countdown_api.get_account\",\n \"countdown_api.get_product\",\n \"countdown_api.search_products\"\n ]\n },\n {\n \"service\": \"courier\",\n \"displayName\": \"Courier\",\n \"categories\": [\n \"Communication\",\n \"Marketing\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.courier.com\",\n \"actionCount\": 11,\n \"actions\": [\n \"courier.add_list_subscribers\",\n \"courier.delete_list\",\n \"courier.delete_profile\",\n \"courier.get_list\",\n \"courier.get_profile\",\n \"courier.list_list_subscriptions\",\n \"courier.list_lists\",\n \"courier.merge_profile\",\n \"courier.send_message\",\n \"courier.unsubscribe_list_subscriber\",\n \"courier.upsert_list\"\n ]\n },\n {\n \"service\": \"craftmypdf\",\n \"displayName\": \"CraftMyPDF\",\n \"categories\": [\n \"Design & Media\",\n \"Productivity\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://craftmypdf.com\",\n \"actionCount\": 4,\n \"actions\": [\n \"craftmypdf.create_pdf\",\n \"craftmypdf.get_account_info\",\n \"craftmypdf.get_template\",\n \"craftmypdf.list_templates\"\n ]\n },\n {\n \"service\": \"crisp\",\n \"displayName\": \"Crisp\",\n \"categories\": [\n \"Communication\",\n \"Marketing\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://crisp.chat/\",\n \"actionCount\": 5,\n \"actions\": [\n \"crisp.get_conversation\",\n \"crisp.get_website\",\n \"crisp.list_conversation_messages\",\n \"crisp.list_conversations\",\n \"crisp.send_text_message\"\n ]\n },\n {\n \"service\": \"cronitor\",\n \"displayName\": \"Cronitor\",\n \"categories\": [\n \"Developer Tools\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://cronitor.io\",\n \"actionCount\": 5,\n \"actions\": [\n \"cronitor.create_monitor\",\n \"cronitor.delete_monitor\",\n \"cronitor.get_monitor\",\n \"cronitor.list_monitors\",\n \"cronitor.update_monitor\"\n ]\n },\n {\n \"service\": \"crowdin\",\n \"displayName\": \"Crowdin\",\n \"categories\": [\n \"Productivity\",\n \"Communication\"\n ],\n \"authTypes\": [\n \"oauth2\",\n \"api_key\"\n ],\n \"homepageUrl\": \"https://crowdin.com\",\n \"actionCount\": 7,\n \"actions\": [\n \"crowdin.create_branch\",\n \"crowdin.create_directory\",\n \"crowdin.list_branches\",\n \"crowdin.list_directories\",\n \"crowdin.list_files\",\n \"crowdin.list_projects\",\n \"crowdin.upload_file\"\n ]\n },\n {\n \"service\": \"crunchbase\",\n \"displayName\": \"Crunchbase\",\n \"categories\": [\n \"Data\",\n \"Marketing\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.crunchbase.com\",\n \"actionCount\": 3,\n \"actions\": [\n \"crunchbase.autocomplete_entities\",\n \"crunchbase.get_organization\",\n \"crunchbase.search_organizations\"\n ]\n },\n {\n \"service\": \"crustdata\",\n \"displayName\": \"Crustdata\",\n \"categories\": [\n \"Data\",\n \"Marketing\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://crustdata.com\",\n \"actionCount\": 4,\n \"actions\": [\n \"crustdata.autocomplete_companies\",\n \"crustdata.enrich_companies\",\n \"crustdata.identify_companies\",\n \"crustdata.search_companies\"\n ]\n },\n {\n \"service\": \"currencyapi\",\n \"displayName\": \"currencyapi\",\n \"categories\": [\n \"Finance\",\n \"Data\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://currencyapi.com\",\n \"actionCount\": 5,\n \"actions\": [\n \"currencyapi.convert_currency\",\n \"currencyapi.get_api_status\",\n \"currencyapi.get_historical_rates\",\n \"currencyapi.get_latest_rates\",\n \"currencyapi.get_supported_currencies\"\n ]\n },\n {\n \"service\": \"currencyscoop\",\n \"displayName\": \"CurrencyBeacon\",\n \"categories\": [\n \"Finance\",\n \"Data\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://currencybeacon.com\",\n \"actionCount\": 5,\n \"actions\": [\n \"currencyscoop.convert_currency\",\n \"currencyscoop.get_currencies\",\n \"currencyscoop.get_historical_rates\",\n \"currencyscoop.get_latest_rates\",\n \"currencyscoop.get_timeseries_rates\"\n ]\n },\n {\n \"service\": \"currents_api\",\n \"displayName\": \"Currents API\",\n \"categories\": [\n \"Data\",\n \"Social\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://currentsapi.services\",\n \"actionCount\": 5,\n \"actions\": [\n \"currents_api.get_latest_news\",\n \"currents_api.list_available_categories\",\n \"currents_api.list_available_languages\",\n \"currents_api.list_available_regions\",\n \"currents_api.search_news\"\n ]\n },\n {\n \"service\": \"cursor\",\n \"displayName\": \"Cursor\",\n \"categories\": [\n \"Developer Tools\",\n \"AI\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://cursor.com\",\n \"actionCount\": 4,\n \"actions\": [\n \"cursor.get_daily_usage_data\",\n \"cursor.get_team_spend\",\n \"cursor.list_audit_logs\",\n \"cursor.list_team_members\"\n ]\n },\n {\n \"service\": \"customerio\",\n \"displayName\": \"Customer.io\",\n \"categories\": [\n \"Marketing\",\n \"Communication\",\n \"Data\"\n ],\n \"authTypes\": [\n \"custom_credential\"\n ],\n \"homepageUrl\": \"https://customer.io/\",\n \"actionCount\": 7,\n \"actions\": [\n \"customerio.delete_customer\",\n \"customerio.identify_customer\",\n \"customerio.merge_customers\",\n \"customerio.suppress_customer\",\n \"customerio.track_anonymous_event\",\n \"customerio.track_customer_event\",\n \"customerio.unsuppress_customer\"\n ]\n },\n {\n \"service\": \"customgpt\",\n \"displayName\": \"CustomGPT.ai\",\n \"categories\": [\n \"AI\",\n \"Productivity\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://customgpt.ai\",\n \"actionCount\": 7,\n \"actions\": [\n \"customgpt.create_conversation\",\n \"customgpt.get_agent\",\n \"customgpt.list_agents\",\n \"customgpt.list_conversations\",\n \"customgpt.list_documents\",\n \"customgpt.list_messages\",\n \"customgpt.send_message\"\n ]\n },\n {\n \"service\": \"cutt_ly\",\n \"displayName\": \"Cuttly\",\n \"categories\": [\n \"Marketing\",\n \"Data\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://cutt.ly\",\n \"actionCount\": 2,\n \"actions\": [\n \"cutt_ly.get_link_analytics\",\n \"cutt_ly.shorten_url\"\n ]\n },\n {\n \"service\": \"cyberimpact\",\n \"displayName\": \"Cyberimpact\",\n \"categories\": [\n \"Marketing\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.cyberimpact.com/\",\n \"actionCount\": 15,\n \"actions\": [\n \"cyberimpact.create_group\",\n \"cyberimpact.create_member\",\n \"cyberimpact.create_template\",\n \"cyberimpact.delete_group\",\n \"cyberimpact.delete_member\",\n \"cyberimpact.delete_template\",\n \"cyberimpact.get_group\",\n \"cyberimpact.get_member\",\n \"cyberimpact.get_template\",\n \"cyberimpact.list_groups\",\n \"cyberimpact.list_members\",\n \"cyberimpact.list_templates\",\n \"cyberimpact.replace_template\",\n \"cyberimpact.update_group\",\n \"cyberimpact.update_member\"\n ]\n },\n {\n \"service\": \"dadata_ru\",\n \"displayName\": \"DaData.ru\",\n \"categories\": [\n \"Data\",\n \"Location\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://dadata.ru\",\n \"actionCount\": 5,\n \"actions\": [\n \"dadata_ru.suggest_address\",\n \"dadata_ru.suggest_bank\",\n \"dadata_ru.suggest_email\",\n \"dadata_ru.suggest_fio\",\n \"dadata_ru.suggest_party\"\n ]\n },\n {\n \"service\": \"daffy\",\n \"displayName\": \"Daffy\",\n \"categories\": [\n \"Finance\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.daffy.org/\",\n \"actionCount\": 10,\n \"actions\": [\n \"daffy.get_balance\",\n \"daffy.get_current_user\",\n \"daffy.get_nonprofit\",\n \"daffy.get_user\",\n \"daffy.get_user_donation\",\n \"daffy.list_contributions\",\n \"daffy.list_donations\",\n \"daffy.list_user_causes\",\n \"daffy.list_user_donations\",\n \"daffy.search_nonprofits\"\n ]\n },\n {\n \"service\": \"dailybot\",\n \"displayName\": \"Dailybot\",\n \"categories\": [\n \"Communication\",\n \"Productivity\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.dailybot.com\",\n \"actionCount\": 10,\n \"actions\": [\n \"dailybot.get_me\",\n \"dailybot.get_organization\",\n \"dailybot.get_team\",\n \"dailybot.get_user\",\n \"dailybot.list_team_members\",\n \"dailybot.list_teams\",\n \"dailybot.list_users\",\n \"dailybot.open_conversation\",\n \"dailybot.send_email\",\n \"dailybot.send_message\"\n ]\n },\n {\n \"service\": \"dart\",\n \"displayName\": \"Dart\",\n \"categories\": [\n \"Productivity\",\n \"AI\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.dartai.com\",\n \"actionCount\": 6,\n \"actions\": [\n \"dart.create_task\",\n \"dart.delete_task\",\n \"dart.get_config\",\n \"dart.get_task\",\n \"dart.list_tasks\",\n \"dart.update_task\"\n ]\n },\n {\n \"service\": \"data247\",\n \"displayName\": \"Data247\",\n \"categories\": [\n \"Data\",\n \"Communication\",\n \"Marketing\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.data247.com/\",\n \"actionCount\": 5,\n \"actions\": [\n \"data247.append_gender\",\n \"data247.check_balance\",\n \"data247.check_dnc\",\n \"data247.get_carrier_type\",\n \"data247.verify_phone\"\n ]\n },\n {\n \"service\": \"databar_ai\",\n \"displayName\": \"Databar.ai\",\n \"categories\": [\n \"Data\",\n \"Marketing\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://databar.ai/\",\n \"actionCount\": 11,\n \"actions\": [\n \"databar_ai.create_table\",\n \"databar_ai.get_enrichment\",\n \"databar_ai.get_table_columns\",\n \"databar_ai.get_table_rows\",\n \"databar_ai.get_task_status\",\n \"databar_ai.get_user_info\",\n \"databar_ai.insert_rows\",\n \"databar_ai.list_enrichments\",\n \"databar_ai.list_tables\",\n \"databar_ai.run_enrichment\",\n \"databar_ai.run_waterfall\"\n ]\n },\n {\n \"service\": \"databox\",\n \"displayName\": \"Databox\",\n \"categories\": [\n \"Data\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://databox.com/\",\n \"actionCount\": 7,\n \"actions\": [\n \"databox.create_data_source\",\n \"databox.create_dataset\",\n \"databox.delete_data_source\",\n \"databox.delete_dataset\",\n \"databox.get_dataset_ingestion_status\",\n \"databox.list_accounts\",\n \"databox.push_dataset_data\"\n ]\n },\n {\n \"service\": \"databricks\",\n \"displayName\": \"Databricks\",\n \"categories\": [\n \"Data\",\n \"Developer Tools\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.databricks.com\",\n \"actionCount\": 36,\n \"actions\": [\n \"databricks.cancel_run\",\n \"databricks.create_cluster\",\n \"databricks.create_job\",\n \"databricks.create_repo\",\n \"databricks.create_secret_scope\",\n \"databricks.delete_job\",\n \"databricks.delete_repo\",\n \"databricks.delete_secret\",\n \"databricks.delete_secret_scope\",\n \"databricks.edit_cluster\",\n \"databricks.get_cluster\",\n \"databricks.get_current_user\",\n \"databricks.get_job\",\n \"databricks.get_run_by_id\",\n \"databricks.get_run_output\",\n \"databricks.list_cluster_node_types\",\n \"databricks.list_cluster_spark_versions\",\n \"databricks.list_cluster_zones\",\n \"databricks.list_clusters\",\n \"databricks.list_jobs\",\n \"databricks.list_runs\",\n \"databricks.list_secret_scopes\",\n \"databricks.list_secrets\",\n \"databricks.permanent_delete_cluster\",\n \"databricks.put_secret\",\n \"databricks.run_now_job\",\n \"databricks.start_cluster\",\n \"databricks.submit_run\",\n \"databricks.update_job_by_id\",\n \"databricks.update_repo\",\n \"databricks.workspace_delete\",\n \"databricks.workspace_export\",\n \"databricks.workspace_get_status\",\n \"databricks.workspace_import\",\n \"databricks.workspace_list\",\n \"databricks.workspace_mkdirs\"\n ]\n },\n {\n \"service\": \"datadog\",\n \"displayName\": \"Datadog\",\n \"categories\": [\n \"Developer Tools\",\n \"Data\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.datadoghq.com/\",\n \"actionCount\": 7,\n \"actions\": [\n \"datadog.get_metric_metadata\",\n \"datadog.get_monitor\",\n \"datadog.list_metrics\",\n \"datadog.list_monitors\",\n \"datadog.query_timeseries_points\",\n \"datadog.search_monitors\",\n \"datadog.validate_api_key\"\n ]\n },\n {\n \"service\": \"dataforseo\",\n \"displayName\": \"DataForSEO\",\n \"categories\": [\n \"Data\",\n \"Marketing\"\n ],\n \"authTypes\": [\n \"custom_credential\"\n ],\n \"homepageUrl\": \"https://dataforseo.com\",\n \"actionCount\": 14,\n \"actions\": [\n \"dataforseo.backlinks_anchors_live\",\n \"dataforseo.backlinks_list_live\",\n \"dataforseo.backlinks_referring_domains_live\",\n \"dataforseo.backlinks_summary_live\",\n \"dataforseo.get_user_data\",\n \"dataforseo.google_ads_search_volume_live\",\n \"dataforseo.google_domain_rank_overview_live\",\n \"dataforseo.google_keyword_ideas_live\",\n \"dataforseo.google_keyword_overview_live\",\n \"dataforseo.google_keyword_suggestions_live\",\n \"dataforseo.google_keywords_for_site_live\",\n \"dataforseo.google_organic_live_advanced\",\n \"dataforseo.google_relevant_pages_live\",\n \"dataforseo.google_serp_competitors_live\"\n ]\n },\n {\n \"service\": \"datalust\",\n \"displayName\": \"Datalust Seq\",\n \"categories\": [\n \"Data\",\n \"Developer Tools\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://datalust.co/seq\",\n \"actionCount\": 15,\n \"actions\": [\n \"datalust.create_saved_query\",\n \"datalust.create_signal\",\n \"datalust.delete_saved_query\",\n \"datalust.delete_signal\",\n \"datalust.execute_query\",\n \"datalust.get_event\",\n \"datalust.get_saved_query\",\n \"datalust.get_signal\",\n \"datalust.ingest_event\",\n \"datalust.ingest_events\",\n \"datalust.list_saved_queries\",\n \"datalust.list_signals\",\n \"datalust.search_events\",\n \"datalust.update_saved_query\",\n \"datalust.update_signal\"\n ]\n },\n {\n \"service\": \"datascope\",\n \"displayName\": \"DataScope\",\n \"categories\": [\n \"Productivity\",\n \"Data\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.mydatascope.com\",\n \"actionCount\": 9,\n \"actions\": [\n \"datascope.create_list_element\",\n \"datascope.create_location\",\n \"datascope.get_list_element\",\n \"datascope.list_answers\",\n \"datascope.list_answers_with_full_metadata\",\n \"datascope.list_list_elements\",\n \"datascope.list_locations\",\n \"datascope.update_list_element\",\n \"datascope.update_location\"\n ]\n },\n {\n \"service\": \"deck_co\",\n \"displayName\": \"Deck.co\",\n \"categories\": [\n \"AI\",\n \"Developer Tools\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.deck.co\",\n \"actionCount\": 6,\n \"actions\": [\n \"deck_co.create_source\",\n \"deck_co.get_agent\",\n \"deck_co.get_source\",\n \"deck_co.list_agents\",\n \"deck_co.list_sources\",\n \"deck_co.test_api_key\"\n ]\n },\n {\n \"service\": \"deepgram\",\n \"displayName\": \"Deepgram\",\n \"categories\": [\n \"AI\",\n \"Developer Tools\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://deepgram.com/\",\n \"actionCount\": 8,\n \"actions\": [\n \"deepgram.get_model\",\n \"deepgram.get_project\",\n \"deepgram.get_project_model\",\n \"deepgram.list_models\",\n \"deepgram.list_project_balances\",\n \"deepgram.list_project_keys\",\n \"deepgram.list_project_models\",\n \"deepgram.list_projects\"\n ]\n },\n {\n \"service\": \"deepl\",\n \"displayName\": \"DeepL\",\n \"categories\": [\n \"AI\",\n \"Productivity\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.deepl.com\",\n \"actionCount\": 3,\n \"actions\": [\n \"deepl.get_usage\",\n \"deepl.list_supported_languages\",\n \"deepl.translate_text\"\n ]\n },\n {\n \"service\": \"deepseek\",\n \"displayName\": \"DeepSeek\",\n \"categories\": [\n \"AI\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://platform.deepseek.com\",\n \"actionCount\": 4,\n \"actions\": [\n \"deepseek.create_anthropic_message\",\n \"deepseek.create_chat_completion\",\n \"deepseek.get_user_balance\",\n \"deepseek.list_models\"\n ]\n },\n {\n \"service\": \"delighted\",\n \"displayName\": \"Delighted\",\n \"categories\": [\n \"Marketing\",\n \"Data\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://delighted.com\",\n \"actionCount\": 8,\n \"actions\": [\n \"delighted.create_or_update_person\",\n \"delighted.delete_person\",\n \"delighted.get_metrics\",\n \"delighted.list_bounced_people\",\n \"delighted.list_people\",\n \"delighted.list_survey_responses\",\n \"delighted.list_unsubscribed_people\",\n \"delighted.unsubscribe_person\"\n ]\n },\n {\n \"service\": \"demodesk\",\n \"displayName\": \"Demodesk\",\n \"categories\": [\n \"Productivity\",\n \"AI\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://demodesk.com\",\n \"actionCount\": 8,\n \"actions\": [\n \"demodesk.batch_get_recording_transcripts\",\n \"demodesk.get_current_user\",\n \"demodesk.get_recording\",\n \"demodesk.get_recording_transcript\",\n \"demodesk.list_recording_scorecards\",\n \"demodesk.list_recording_summaries\",\n \"demodesk.list_recordings\",\n \"demodesk.list_users\"\n ]\n },\n {\n \"service\": \"desktime\",\n \"displayName\": \"DeskTime\",\n \"categories\": [\n \"Productivity\",\n \"Data\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://desktime.com/\",\n \"actionCount\": 5,\n \"actions\": [\n \"desktime.create_project\",\n \"desktime.get_company\",\n \"desktime.get_employee\",\n \"desktime.list_employees\",\n \"desktime.list_projects\"\n ]\n },\n {\n \"service\": \"detect_language\",\n \"displayName\": \"Detect Language\",\n \"categories\": [\n \"AI\",\n \"Data\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://detectlanguage.com/\",\n \"actionCount\": 4,\n \"actions\": [\n \"detect_language.detect_text\",\n \"detect_language.detect_texts\",\n \"detect_language.get_account_status\",\n \"detect_language.list_languages\"\n ]\n },\n {\n \"service\": \"devin\",\n \"displayName\": \"Devin\",\n \"categories\": [\n \"AI\",\n \"Developer Tools\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://devin.ai\",\n \"actionCount\": 6,\n \"actions\": [\n \"devin.create_session\",\n \"devin.get_self\",\n \"devin.get_session\",\n \"devin.list_sessions\",\n \"devin.send_message\",\n \"devin.terminate_session\"\n ]\n },\n {\n \"service\": \"devto\",\n \"displayName\": \"Dev.to\",\n \"categories\": [\n \"Social\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://dev.to\",\n \"actionCount\": 12,\n \"actions\": [\n \"devto.create_article\",\n \"devto.get_article\",\n \"devto.get_article_by_path\",\n \"devto.get_current_user\",\n \"devto.get_organization\",\n \"devto.list_articles\",\n \"devto.list_latest_articles\",\n \"devto.list_my_articles\",\n \"devto.list_organization_articles\",\n \"devto.list_tags\",\n \"devto.list_videos\",\n \"devto.update_article\"\n ]\n },\n {\n \"service\": \"dialpad_wfm\",\n \"displayName\": \"Dialpad WFM\",\n \"categories\": [\n \"Productivity\",\n \"Data\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.dialpad.com/features/workforce-management-software/\",\n \"actionCount\": 3,\n \"actions\": [\n \"dialpad_wfm.get_schedule\",\n \"dialpad_wfm.list_activity_metrics\",\n \"dialpad_wfm.list_agent_metrics\"\n ]\n },\n {\n \"service\": \"dida365\",\n \"displayName\": \"Dida365\",\n \"categories\": [\n \"Productivity\"\n ],\n \"authTypes\": [\n \"oauth2\"\n ],\n \"homepageUrl\": \"https://dida365.com\",\n \"actionCount\": 19,\n \"actions\": [\n \"dida365.complete_task\",\n \"dida365.create_or_update_habit_checkin\",\n \"dida365.create_project\",\n \"dida365.create_task\",\n \"dida365.delete_project\",\n \"dida365.delete_task\",\n \"dida365.filter_tasks\",\n \"dida365.get_habit\",\n \"dida365.get_project_by_id\",\n \"dida365.get_project_with_data\",\n \"dida365.get_task_by_project_and_id\",\n \"dida365.get_user_project\",\n \"dida365.list_all_tasks\",\n \"dida365.list_completed_tasks\",\n \"dida365.list_habit_checkins\",\n \"dida365.list_habits\",\n \"dida365.move_tasks\",\n \"dida365.update_project\",\n \"dida365.update_task\"\n ]\n },\n {\n \"service\": \"diffbot\",\n \"displayName\": \"Diffbot\",\n \"categories\": [\n \"Data\",\n \"AI\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.diffbot.com\",\n \"actionCount\": 1,\n \"actions\": [\n \"diffbot.extract_article\"\n ]\n },\n {\n \"service\": \"digital_ocean\",\n \"displayName\": \"DigitalOcean\",\n \"categories\": [\n \"Developer Tools\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.digitalocean.com\",\n \"actionCount\": 11,\n \"actions\": [\n \"digital_ocean.get_account\",\n \"digital_ocean.get_droplet\",\n \"digital_ocean.list_apps\",\n \"digital_ocean.list_databases\",\n \"digital_ocean.list_domain_records\",\n \"digital_ocean.list_domains\",\n \"digital_ocean.list_droplets\",\n \"digital_ocean.list_firewalls\",\n \"digital_ocean.list_load_balancers\",\n \"digital_ocean.list_vpcs\",\n \"digital_ocean.manage_droplet_lifecycle\"\n ]\n },\n {\n \"service\": \"dingtalk_bot\",\n \"displayName\": \"DingTalk Bot\",\n \"categories\": [\n \"Communication\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.dingtalk.com\",\n \"actionCount\": 5,\n \"actions\": [\n \"dingtalk_bot.send_action_card_message\",\n \"dingtalk_bot.send_feed_card_message\",\n \"dingtalk_bot.send_link_message\",\n \"dingtalk_bot.send_markdown_message\",\n \"dingtalk_bot.send_text_message\"\n ]\n },\n {\n \"service\": \"discolike\",\n \"displayName\": \"DiscoLike\",\n \"categories\": [\n \"Marketing\",\n \"Data\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://discolike.com/\",\n \"actionCount\": 7,\n \"actions\": [\n \"discolike.count_matching_domains\",\n \"discolike.discover_companies\",\n \"discolike.get_business_profile\",\n \"discolike.get_certificate_metrics\",\n \"discolike.get_digital_footprint_score\",\n \"discolike.get_growth_metrics\",\n \"discolike.get_usage\"\n ]\n },\n {\n \"service\": \"discord\",\n \"displayName\": \"Discord\",\n \"categories\": [\n \"Communication\",\n \"Social\"\n ],\n \"authTypes\": [\n \"oauth2\"\n ],\n \"homepageUrl\": \"https://discord.com\",\n \"actionCount\": 19,\n \"actions\": [\n \"discord.delete_my_application_role_connection\",\n \"discord.get_current_user_application_entitlements\",\n \"discord.get_gateway\",\n \"discord.get_guild_template\",\n \"discord.get_guild_widget\",\n \"discord.get_guild_widget_png\",\n \"discord.get_invite\",\n \"discord.get_my_application_role_connection\",\n \"discord.get_my_guild_member\",\n \"discord.get_my_oauth2_authorization\",\n \"discord.get_my_user\",\n \"discord.get_openid_connect_userinfo\",\n \"discord.get_public_keys\",\n \"discord.get_user\",\n \"discord.list_my_connections\",\n \"discord.list_my_guilds\",\n \"discord.list_sticker_packs\",\n \"discord.resolve_invite\",\n \"discord.update_my_application_role_connection\"\n ]\n },\n {\n \"service\": \"discordbot\",\n \"displayName\": \"Discord Bot\",\n \"categories\": [\n \"Communication\",\n \"Developer Tools\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://discord.com/developers/docs\",\n \"actionCount\": 15,\n \"actions\": [\n \"discordbot.create_message\",\n \"discordbot.delete_message\",\n \"discordbot.get_application\",\n \"discordbot.get_bot_gateway\",\n \"discordbot.get_channel\",\n \"discordbot.get_gateway\",\n \"discordbot.get_guild\",\n \"discordbot.get_guild_widget_png\",\n \"discordbot.get_my_application\",\n \"discordbot.get_public_keys\",\n \"discordbot.get_user\",\n \"discordbot.list_guild_channels\",\n \"discordbot.list_guild_roles\",\n \"discordbot.list_messages\",\n \"discordbot.test_auth\"\n ]\n },\n {\n \"service\": \"discourse\",\n \"displayName\": \"Discourse\",\n \"categories\": [\n \"Communication\",\n \"Productivity\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.discourse.org/\",\n \"actionCount\": 7,\n \"actions\": [\n \"discourse.create_post\",\n \"discourse.create_topic\",\n \"discourse.get_topic\",\n \"discourse.list_categories\",\n \"discourse.list_category_topics\",\n \"discourse.list_latest_topics\",\n \"discourse.search\"\n ]\n },\n {\n \"service\": \"dixa\",\n \"displayName\": \"Dixa\",\n \"categories\": [\n \"Communication\",\n \"Productivity\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.dixa.com\",\n \"actionCount\": 7,\n \"actions\": [\n \"dixa.get_agent\",\n \"dixa.get_conversation\",\n \"dixa.get_end_user\",\n \"dixa.list_agents\",\n \"dixa.list_conversation_messages\",\n \"dixa.list_end_users\",\n \"dixa.list_presence\"\n ]\n },\n {\n \"service\": \"dns_filter\",\n \"displayName\": \"DNSFilter\",\n \"categories\": [\n \"Security\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.dnsfilter.com\",\n \"actionCount\": 9,\n \"actions\": [\n \"dns_filter.get_category\",\n \"dns_filter.get_current_user\",\n \"dns_filter.get_my_ip\",\n \"dns_filter.list_application_categories\",\n \"dns_filter.list_applications\",\n \"dns_filter.list_categories\",\n \"dns_filter.list_ip_addresses\",\n \"dns_filter.list_networks\",\n \"dns_filter.list_policies\"\n ]\n },\n {\n \"service\": \"docker_hub\",\n \"displayName\": \"Docker Hub\",\n \"categories\": [\n \"Developer Tools\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://hub.docker.com\",\n \"actionCount\": 14,\n \"actions\": [\n \"docker_hub.add_org_member\",\n \"docker_hub.create_repository\",\n \"docker_hub.delete_team\",\n \"docker_hub.get_image\",\n \"docker_hub.get_repository\",\n \"docker_hub.get_tag\",\n \"docker_hub.get_team\",\n \"docker_hub.list_org_access_tokens\",\n \"docker_hub.list_org_members\",\n \"docker_hub.list_repositories\",\n \"docker_hub.list_team_members\",\n \"docker_hub.list_teams\",\n \"docker_hub.remove_org_member\",\n \"docker_hub.remove_team_member\"\n ]\n },\n {\n \"service\": \"docmosis\",\n \"displayName\": \"Docmosis\",\n \"categories\": [\n \"Productivity\",\n \"Design & Media\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.docmosis.com\",\n \"actionCount\": 6,\n \"actions\": [\n \"docmosis.check_environment_ready\",\n \"docmosis.get_environment_summary\",\n \"docmosis.get_template_details\",\n \"docmosis.get_template_structure\",\n \"docmosis.list_templates\",\n \"docmosis.render_document\"\n ]\n },\n {\n \"service\": \"docparser\",\n \"displayName\": \"Docparser\",\n \"categories\": [\n \"Productivity\",\n \"Data\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://docparser.com\",\n \"actionCount\": 10,\n \"actions\": [\n \"docparser.fetch_document_from_url\",\n \"docparser.get_document_result\",\n \"docparser.get_document_status\",\n \"docparser.get_multiple_document_results\",\n \"docparser.get_parser_models\",\n \"docparser.list_parsers\",\n \"docparser.ping\",\n \"docparser.reintegrate_documents\",\n \"docparser.reparse_documents\",\n \"docparser.upload_document_by_content\"\n ]\n },\n {\n \"service\": \"docraptor\",\n \"displayName\": \"DocRaptor\",\n \"categories\": [\n \"Developer Tools\",\n \"Productivity\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://docraptor.com\",\n \"actionCount\": 1,\n \"actions\": [\n \"docraptor.create_hosted_document\"\n ]\n },\n {\n \"service\": \"docsautomator\",\n \"displayName\": \"DocsAutomator\",\n \"categories\": [\n \"Productivity\",\n \"Design & Media\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.docsautomator.co\",\n \"actionCount\": 7,\n \"actions\": [\n \"docsautomator.create_document\",\n \"docsautomator.create_document_async\",\n \"docsautomator.get_automation\",\n \"docsautomator.get_document_job\",\n \"docsautomator.get_queue_stats\",\n \"docsautomator.list_automations\",\n \"docsautomator.list_template_placeholders\"\n ]\n },\n {\n \"service\": \"docsbot_ai\",\n \"displayName\": \"DocsBot AI\",\n \"categories\": [\n \"AI\",\n \"Data\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://docsbot.ai\",\n \"actionCount\": 6,\n \"actions\": [\n \"docsbot_ai.fetch_document\",\n \"docsbot_ai.get_bot\",\n \"docsbot_ai.get_team\",\n \"docsbot_ai.list_bots\",\n \"docsbot_ai.list_teams\",\n \"docsbot_ai.semantic_search\"\n ]\n },\n {\n \"service\": \"docsend_2_pdf\",\n \"displayName\": \"Docsend2pdf\",\n \"categories\": [\n \"Productivity\",\n \"Design & Media\"\n ],\n \"authTypes\": [\n \"no_auth\"\n ],\n \"homepageUrl\": \"https://docsend2pdf.com\",\n \"actionCount\": 1,\n \"actions\": [\n \"docsend_2_pdf.convert\"\n ]\n },\n {\n \"service\": \"docsumo\",\n \"displayName\": \"Docsumo\",\n \"categories\": [\n \"AI\",\n \"Productivity\",\n \"Data\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.docsumo.com\",\n \"actionCount\": 6,\n \"actions\": [\n \"docsumo.get_account_info\",\n \"docsumo.get_document_detail\",\n \"docsumo.get_documents_summary\",\n \"docsumo.get_extracted_data\",\n \"docsumo.list_documents\",\n \"docsumo.upload_document_from_url\"\n ]\n },\n {\n \"service\": \"docugenerate\",\n \"displayName\": \"DocuGenerate\",\n \"categories\": [\n \"Productivity\",\n \"Developer Tools\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.docugenerate.com\",\n \"actionCount\": 7,\n \"actions\": [\n \"docugenerate.delete_document\",\n \"docugenerate.generate_document\",\n \"docugenerate.get_document\",\n \"docugenerate.get_template\",\n \"docugenerate.list_documents\",\n \"docugenerate.list_templates\",\n \"docugenerate.update_document\"\n ]\n },\n {\n \"service\": \"documenso\",\n \"displayName\": \"Documenso\",\n \"categories\": [\n \"Productivity\",\n \"Communication\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://documenso.com\",\n \"actionCount\": 4,\n \"actions\": [\n \"documenso.get_envelope\",\n \"documenso.get_template\",\n \"documenso.list_envelopes\",\n \"documenso.list_templates\"\n ]\n },\n {\n \"service\": \"document360\",\n \"displayName\": \"Document360\",\n \"categories\": [\n \"Productivity\",\n \"Developer Tools\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://document360.com\",\n \"actionCount\": 4,\n \"actions\": [\n \"document360.get_workspace_categories\",\n \"document360.list_workspace_articles\",\n \"document360.list_workspaces\",\n \"document360.search_workspace\"\n ]\n },\n {\n \"service\": \"docuseal\",\n \"displayName\": \"DocuSeal\",\n \"categories\": [\n \"Productivity\",\n \"Communication\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.docuseal.com\",\n \"actionCount\": 3,\n \"actions\": [\n \"docuseal.create_submission\",\n \"docuseal.get_template\",\n \"docuseal.list_templates\"\n ]\n },\n {\n \"service\": \"dokploy\",\n \"displayName\": \"Dokploy\",\n \"categories\": [\n \"Developer Tools\",\n \"Infrastructure\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://dokploy.com\",\n \"actionCount\": 524,\n \"actions\": [\n \"dokploy.admin-setupMonitoring\",\n \"dokploy.ai-analyzeLogs\",\n \"dokploy.ai-create\",\n \"dokploy.ai-delete\",\n \"dokploy.ai-deploy\",\n \"dokploy.ai-get\",\n \"dokploy.ai-getAll\",\n \"dokploy.ai-getEnabledProviders\",\n \"dokploy.ai-getModels\",\n \"dokploy.ai-one\",\n \"dokploy.ai-suggest\",\n \"dokploy.ai-testConnection\",\n \"dokploy.ai-update\",\n \"dokploy.application-cancelDeployment\",\n \"dokploy.application-cleanQueues\",\n \"dokploy.application-clearDeployments\",\n \"dokploy.application-create\",\n \"dokploy.application-delete\",\n \"dokploy.application-deploy\",\n \"dokploy.application-disconnectGitProvider\",\n \"dokploy.application-dropDeployment\",\n \"dokploy.application-killBuild\",\n \"dokploy.application-markRunning\",\n \"dokploy.application-move\",\n \"dokploy.application-one\",\n \"dokploy.application-readAppMonitoring\",\n \"dokploy.application-readLogs\",\n \"dokploy.application-readTraefikConfig\",\n \"dokploy.application-redeploy\",\n \"dokploy.application-refreshToken\",\n \"dokploy.application-reload\",\n \"dokploy.application-saveBitbucketProvider\",\n \"dokploy.application-saveBuildType\",\n \"dokploy.application-saveDockerProvider\",\n \"dokploy.application-saveEnvironment\",\n \"dokploy.application-saveGiteaProvider\",\n \"dokploy.application-saveGithubProvider\",\n \"dokploy.application-saveGitlabProvider\",\n \"dokploy.application-saveGitProvider\",\n \"dokploy.application-search\",\n \"dokploy.application-start\",\n \"dokploy.application-stop\",\n \"dokploy.application-update\",\n \"dokploy.application-updateTraefikConfig\",\n \"dokploy.auditLog-all\",\n \"dokploy.backup-create\",\n \"dokploy.backup-listBackupFiles\",\n \"dokploy.backup-manualBackupCompose\",\n \"dokploy.backup-manualBackupLibsql\",\n \"dokploy.backup-manualBackupMariadb\",\n \"dokploy.backup-manualBackupMongo\",\n \"dokploy.backup-manualBackupMySql\",\n \"dokploy.backup-manualBackupPostgres\",\n \"dokploy.backup-manualBackupWebServer\",\n \"dokploy.backup-one\",\n \"dokploy.backup-remove\",\n \"dokploy.backup-update\",\n \"dokploy.bitbucket-bitbucketProviders\",\n \"dokploy.bitbucket-create\",\n \"dokploy.bitbucket-getBitbucketBranches\",\n \"dokploy.bitbucket-getBitbucketRepositories\",\n \"dokploy.bitbucket-one\",\n \"dokploy.bitbucket-testConnection\",\n \"dokploy.bitbucket-update\",\n \"dokploy.certificates-all\",\n \"dokploy.certificates-create\",\n \"dokploy.certificates-one\",\n \"dokploy.certificates-remove\",\n \"dokploy.certificates-update\",\n \"dokploy.cluster-addManager\",\n \"dokploy.cluster-addWorker\",\n \"dokploy.cluster-getNodes\",\n \"dokploy.cluster-removeWorker\",\n \"dokploy.compose-cancelDeployment\",\n \"dokploy.compose-cleanQueues\",\n \"dokploy.compose-clearDeployments\",\n \"dokploy.compose-create\",\n \"dokploy.compose-delete\",\n \"dokploy.compose-deploy\",\n \"dokploy.compose-deployTemplate\",\n \"dokploy.compose-disconnectGitProvider\",\n \"dokploy.compose-fetchSourceType\",\n \"dokploy.compose-getConvertedCompose\",\n \"dokploy.compose-getDefaultCommand\",\n \"dokploy.compose-getTags\",\n \"dokploy.compose-import\",\n \"dokploy.compose-isolatedDeployment\",\n \"dokploy.compose-killBuild\",\n \"dokploy.compose-loadMountsByService\",\n \"dokploy.compose-loadServices\",\n \"dokploy.compose-move\",\n \"dokploy.compose-one\",\n \"dokploy.compose-processTemplate\",\n \"dokploy.compose-randomizeCompose\",\n \"dokploy.compose-readLogs\",\n \"dokploy.compose-redeploy\",\n \"dokploy.compose-refreshToken\",\n \"dokploy.compose-saveEnvironment\",\n \"dokploy.compose-search\",\n \"dokploy.compose-start\",\n \"dokploy.compose-stop\",\n \"dokploy.compose-templates\",\n \"dokploy.compose-update\",\n \"dokploy.customRole-all\",\n \"dokploy.customRole-create\",\n \"dokploy.customRole-getStatements\",\n \"dokploy.customRole-membersByRole\",\n \"dokploy.customRole-remove\",\n \"dokploy.customRole-update\",\n \"dokploy.deployment-all\",\n \"dokploy.deployment-allByCompose\",\n \"dokploy.deployment-allByServer\",\n \"dokploy.deployment-allByType\",\n \"dokploy.deployment-allCentralized\",\n \"dokploy.deployment-killProcess\",\n \"dokploy.deployment-queueList\",\n \"dokploy.deployment-removeDeployment\",\n \"dokploy.destination-all\",\n \"dokploy.destination-create\",\n \"dokploy.destination-one\",\n \"dokploy.destination-remove\",\n \"dokploy.destination-testConnection\",\n \"dokploy.destination-update\",\n \"dokploy.docker-getConfig\",\n \"dokploy.docker-getContainers\",\n \"dokploy.docker-getContainersByAppLabel\",\n \"dokploy.docker-getContainersByAppNameMatch\",\n \"dokploy.docker-getServiceContainersByAppName\",\n \"dokploy.docker-getStackContainersByAppName\",\n \"dokploy.docker-killContainer\",\n \"dokploy.docker-removeContainer\",\n \"dokploy.docker-restartContainer\",\n \"dokploy.docker-startContainer\",\n \"dokploy.docker-stopContainer\",\n \"dokploy.docker-uploadFileToContainer\",\n \"dokploy.domain-byApplicationId\",\n \"dokploy.domain-byComposeId\",\n \"dokploy.domain-canGenerateTraefikMeDomains\",\n \"dokploy.domain-create\",\n \"dokploy.domain-delete\",\n \"dokploy.domain-generateDomain\",\n \"dokploy.domain-one\",\n \"dokploy.domain-update\",\n \"dokploy.domain-validateDomain\",\n \"dokploy.environment-byProjectId\",\n \"dokploy.environment-create\",\n \"dokploy.environment-duplicate\",\n \"dokploy.environment-one\",\n \"dokploy.environment-remove\",\n \"dokploy.environment-search\",\n \"dokploy.environment-update\",\n \"dokploy.gitea-create\",\n \"dokploy.gitea-getGiteaBranches\",\n \"dokploy.gitea-getGiteaRepositories\",\n \"dokploy.gitea-getGiteaUrl\",\n \"dokploy.gitea-giteaProviders\",\n \"dokploy.gitea-one\",\n \"dokploy.gitea-testConnection\",\n \"dokploy.gitea-update\",\n \"dokploy.github-getGithubBranches\",\n \"dokploy.github-getGithubRepositories\",\n \"dokploy.github-githubProviders\",\n \"dokploy.github-one\",\n \"dokploy.github-testConnection\",\n \"dokploy.github-update\",\n \"dokploy.gitlab-create\",\n \"dokploy.gitlab-getGitlabBranches\",\n \"dokploy.gitlab-getGitlabRepositories\",\n \"dokploy.gitlab-gitlabProviders\",\n \"dokploy.gitlab-one\",\n \"dokploy.gitlab-testConnection\",\n \"dokploy.gitlab-update\",\n \"dokploy.gitProvider-allForPermissions\",\n \"dokploy.gitProvider-getAll\",\n \"dokploy.gitProvider-remove\",\n \"dokploy.gitProvider-toggleShare\",\n \"dokploy.libsql-changeStatus\",\n \"dokploy.libsql-create\",\n \"dokploy.libsql-deploy\",\n \"dokploy.libsql-move\",\n \"dokploy.libsql-one\",\n \"dokploy.libsql-readLogs\",\n \"dokploy.libsql-rebuild\",\n \"dokploy.libsql-reload\",\n \"dokploy.libsql-remove\",\n \"dokploy.libsql-saveEnvironment\",\n \"dokploy.libsql-saveExternalPorts\",\n \"dokploy.libsql-start\",\n \"dokploy.libsql-stop\",\n \"dokploy.libsql-update\",\n \"dokploy.licenseKey-activate\",\n \"dokploy.licenseKey-deactivate\",\n \"dokploy.licenseKey-getEnterpriseSettings\",\n \"dokploy.licenseKey-haveValidLicenseKey\",\n \"dokploy.licenseKey-updateEnterpriseSettings\",\n \"dokploy.licenseKey-validate\",\n \"dokploy.mariadb-changePassword\",\n \"dokploy.mariadb-changeStatus\",\n \"dokploy.mariadb-create\",\n \"dokploy.mariadb-deploy\",\n \"dokploy.mariadb-move\",\n \"dokploy.mariadb-one\",\n \"dokploy.mariadb-readLogs\",\n \"dokploy.mariadb-rebuild\",\n \"dokploy.mariadb-reload\",\n \"dokploy.mariadb-remove\",\n \"dokploy.mariadb-saveEnvironment\",\n \"dokploy.mariadb-saveExternalPort\",\n \"dokploy.mariadb-search\",\n \"dokploy.mariadb-start\",\n \"dokploy.mariadb-stop\",\n \"dokploy.mariadb-update\",\n \"dokploy.mongo-changePassword\",\n \"dokploy.mongo-changeStatus\",\n \"dokploy.mongo-create\",\n \"dokploy.mongo-deploy\",\n \"dokploy.mongo-move\",\n \"dokploy.mongo-one\",\n \"dokploy.mongo-readLogs\",\n \"dokploy.mongo-rebuild\",\n \"dokploy.mongo-reload\",\n \"dokploy.mongo-remove\",\n \"dokploy.mongo-saveEnvironment\",\n \"dokploy.mongo-saveExternalPort\",\n \"dokploy.mongo-search\",\n \"dokploy.mongo-start\",\n \"dokploy.mongo-stop\",\n \"dokploy.mongo-update\",\n \"dokploy.mounts-allNamedByApplicationId\",\n \"dokploy.mounts-create\",\n \"dokploy.mounts-listByServiceId\",\n \"dokploy.mounts-one\",\n \"dokploy.mounts-remove\",\n \"dokploy.mounts-update\",\n \"dokploy.mysql-changePassword\",\n \"dokploy.mysql-changeStatus\",\n \"dokploy.mysql-create\",\n \"dokploy.mysql-deploy\",\n \"dokploy.mysql-move\",\n \"dokploy.mysql-one\",\n \"dokploy.mysql-readLogs\",\n \"dokploy.mysql-rebuild\",\n \"dokploy.mysql-reload\",\n \"dokploy.mysql-remove\",\n \"dokploy.mysql-saveEnvironment\",\n \"dokploy.mysql-saveExternalPort\",\n \"dokploy.mysql-search\",\n \"dokploy.mysql-start\",\n \"dokploy.mysql-stop\",\n \"dokploy.mysql-update\",\n \"dokploy.notification-all\",\n \"dokploy.notification-createCustom\",\n \"dokploy.notification-createDiscord\",\n \"dokploy.notification-createEmail\",\n \"dokploy.notification-createGotify\",\n \"dokploy.notification-createLark\",\n \"dokploy.notification-createMattermost\",\n \"dokploy.notification-createNtfy\",\n \"dokploy.notification-createPushover\",\n \"dokploy.notification-createResend\",\n \"dokploy.notification-createSlack\",\n \"dokploy.notification-createTeams\",\n \"dokploy.notification-createTelegram\",\n \"dokploy.notification-getEmailProviders\",\n \"dokploy.notification-one\",\n \"dokploy.notification-receiveNotification\",\n \"dokploy.notification-remove\",\n \"dokploy.notification-testCustomConnection\",\n \"dokploy.notification-testDiscordConnection\",\n \"dokploy.notification-testEmailConnection\",\n \"dokploy.notification-testGotifyConnection\",\n \"dokploy.notification-testLarkConnection\",\n \"dokploy.notification-testMattermostConnection\",\n \"dokploy.notification-testNtfyConnection\",\n \"dokploy.notification-testPushoverConnection\",\n \"dokploy.notification-testResendConnection\",\n \"dokploy.notification-testSlackConnection\",\n \"dokploy.notification-testTeamsConnection\",\n \"dokploy.notification-testTelegramConnection\",\n \"dokploy.notification-updateCustom\",\n \"dokploy.notification-updateDiscord\",\n \"dokploy.notification-updateEmail\",\n \"dokploy.notification-updateGotify\",\n \"dokploy.notification-updateLark\",\n \"dokploy.notification-updateMattermost\",\n \"dokploy.notification-updateNtfy\",\n \"dokploy.notification-updatePushover\",\n \"dokploy.notification-updateResend\",\n \"dokploy.notification-updateSlack\",\n \"dokploy.notification-updateTeams\",\n \"dokploy.notification-updateTelegram\",\n \"dokploy.organization-active\",\n \"dokploy.organization-all\",\n \"dokploy.organization-allInvitations\",\n \"dokploy.organization-create\",\n \"dokploy.organization-delete\",\n \"dokploy.organization-inviteMember\",\n \"dokploy.organization-one\",\n \"dokploy.organization-removeInvitation\",\n \"dokploy.organization-setDefault\",\n \"dokploy.organization-update\",\n \"dokploy.organization-updateMemberRole\",\n \"dokploy.patch-byEntityId\",\n \"dokploy.patch-cleanPatchRepos\",\n \"dokploy.patch-create\",\n \"dokploy.patch-delete\",\n \"dokploy.patch-ensureRepo\",\n \"dokploy.patch-markFileForDeletion\",\n \"dokploy.patch-one\",\n \"dokploy.patch-readRepoDirectories\",\n \"dokploy.patch-readRepoFile\",\n \"dokploy.patch-saveFileAsPatch\",\n \"dokploy.patch-toggleEnabled\",\n \"dokploy.patch-update\",\n \"dokploy.port-create\",\n \"dokploy.port-delete\",\n \"dokploy.port-one\",\n \"dokploy.port-update\",\n \"dokploy.postgres-changePassword\",\n \"dokploy.postgres-changeStatus\",\n \"dokploy.postgres-create\",\n \"dokploy.postgres-deploy\",\n \"dokploy.postgres-move\",\n \"dokploy.postgres-one\",\n \"dokploy.postgres-readLogs\",\n \"dokploy.postgres-rebuild\",\n \"dokploy.postgres-reload\",\n \"dokploy.postgres-remove\",\n \"dokploy.postgres-saveEnvironment\",\n \"dokploy.postgres-saveExternalPort\",\n \"dokploy.postgres-search\",\n \"dokploy.postgres-start\",\n \"dokploy.postgres-stop\",\n \"dokploy.postgres-update\",\n \"dokploy.previewDeployment-all\",\n \"dokploy.previewDeployment-delete\",\n \"dokploy.previewDeployment-one\",\n \"dokploy.previewDeployment-redeploy\",\n \"dokploy.project-all\",\n \"dokploy.project-allForPermissions\",\n \"dokploy.project-create\",\n \"dokploy.project-duplicate\",\n \"dokploy.project-homeStats\",\n \"dokploy.project-one\",\n \"dokploy.project-remove\",\n \"dokploy.project-search\",\n \"dokploy.project-update\",\n \"dokploy.redirects-create\",\n \"dokploy.redirects-delete\",\n \"dokploy.redirects-one\",\n \"dokploy.redirects-update\",\n \"dokploy.redis-changePassword\",\n \"dokploy.redis-changeStatus\",\n \"dokploy.redis-create\",\n \"dokploy.redis-deploy\",\n \"dokploy.redis-move\",\n \"dokploy.redis-one\",\n \"dokploy.redis-readLogs\",\n \"dokploy.redis-rebuild\",\n \"dokploy.redis-reload\",\n \"dokploy.redis-remove\",\n \"dokploy.redis-saveEnvironment\",\n \"dokploy.redis-saveExternalPort\",\n \"dokploy.redis-search\",\n \"dokploy.redis-start\",\n \"dokploy.redis-stop\",\n \"dokploy.redis-update\",\n \"dokploy.registry-all\",\n \"dokploy.registry-create\",\n \"dokploy.registry-one\",\n \"dokploy.registry-remove\",\n \"dokploy.registry-testRegistry\",\n \"dokploy.registry-testRegistryById\",\n \"dokploy.registry-update\",\n \"dokploy.rollback-delete\",\n \"dokploy.rollback-rollback\",\n \"dokploy.schedule-create\",\n \"dokploy.schedule-delete\",\n \"dokploy.schedule-list\",\n \"dokploy.schedule-one\",\n \"dokploy.schedule-runManually\",\n \"dokploy.schedule-update\",\n \"dokploy.security-create\",\n \"dokploy.security-delete\",\n \"dokploy.security-one\",\n \"dokploy.security-update\",\n \"dokploy.server-all\",\n \"dokploy.server-allForPermissions\",\n \"dokploy.server-buildServers\",\n \"dokploy.server-count\",\n \"dokploy.server-create\",\n \"dokploy.server-getDefaultCommand\",\n \"dokploy.server-getServerMetrics\",\n \"dokploy.server-getServerTime\",\n \"dokploy.server-one\",\n \"dokploy.server-publicIp\",\n \"dokploy.server-remove\",\n \"dokploy.server-security\",\n \"dokploy.server-setup\",\n \"dokploy.server-setupMonitoring\",\n \"dokploy.server-update\",\n \"dokploy.server-validate\",\n \"dokploy.server-withSSHKey\",\n \"dokploy.settings-assignDomainServer\",\n \"dokploy.settings-checkGPUStatus\",\n \"dokploy.settings-checkInfrastructureHealth\",\n \"dokploy.settings-cleanAll\",\n \"dokploy.settings-cleanAllDeploymentQueue\",\n \"dokploy.settings-cleanDockerBuilder\",\n \"dokploy.settings-cleanDockerPrune\",\n \"dokploy.settings-cleanMonitoring\",\n \"dokploy.settings-cleanRedis\",\n \"dokploy.settings-cleanSSHPrivateKey\",\n \"dokploy.settings-cleanStoppedContainers\",\n \"dokploy.settings-cleanUnusedImages\",\n \"dokploy.settings-cleanUnusedVolumes\",\n \"dokploy.settings-getDockerDiskUsage\",\n \"dokploy.settings-getDokployCloudIps\",\n \"dokploy.settings-getDokployVersion\",\n \"dokploy.settings-getIp\",\n \"dokploy.settings-getLogCleanupStatus\",\n \"dokploy.settings-getOpenApiDocument\",\n \"dokploy.settings-getReleaseTag\",\n \"dokploy.settings-getTraefikPorts\",\n \"dokploy.settings-getUpdateData\",\n \"dokploy.settings-getWebServerSettings\",\n \"dokploy.settings-haveActivateRequests\",\n \"dokploy.settings-haveTraefikDashboardPortEnabled\",\n \"dokploy.settings-health\",\n \"dokploy.settings-isCloud\",\n \"dokploy.settings-isUserSubscribed\",\n \"dokploy.settings-readDirectories\",\n \"dokploy.settings-readMiddlewareTraefikConfig\",\n \"dokploy.settings-readTraefikConfig\",\n \"dokploy.settings-readTraefikEnv\",\n \"dokploy.settings-readTraefikFile\",\n \"dokploy.settings-readWebServerTraefikConfig\",\n \"dokploy.settings-reloadRedis\",\n \"dokploy.settings-reloadServer\",\n \"dokploy.settings-reloadTraefik\",\n \"dokploy.settings-saveSSHPrivateKey\",\n \"dokploy.settings-setupGPU\",\n \"dokploy.settings-toggleDashboard\",\n \"dokploy.settings-toggleRequests\",\n \"dokploy.settings-updateDockerCleanup\",\n \"dokploy.settings-updateLogCleanup\",\n \"dokploy.settings-updateMiddlewareTraefikConfig\",\n \"dokploy.settings-updateServer\",\n \"dokploy.settings-updateServerIp\",\n \"dokploy.settings-updateTraefikConfig\",\n \"dokploy.settings-updateTraefikFile\",\n \"dokploy.settings-updateTraefikPorts\",\n \"dokploy.settings-updateWebServerTraefikConfig\",\n \"dokploy.settings-writeTraefikEnv\",\n \"dokploy.sshKey-all\",\n \"dokploy.sshKey-allForApps\",\n \"dokploy.sshKey-create\",\n \"dokploy.sshKey-generate\",\n \"dokploy.sshKey-one\",\n \"dokploy.sshKey-remove\",\n \"dokploy.sshKey-update\",\n \"dokploy.sso-addTrustedOrigin\",\n \"dokploy.sso-deleteProvider\",\n \"dokploy.sso-getTrustedOrigins\",\n \"dokploy.sso-listProviders\",\n \"dokploy.sso-one\",\n \"dokploy.sso-register\",\n \"dokploy.sso-removeTrustedOrigin\",\n \"dokploy.sso-showSignInWithSSO\",\n \"dokploy.sso-update\",\n \"dokploy.sso-updateTrustedOrigin\",\n \"dokploy.stripe-canCreateMoreServers\",\n \"dokploy.stripe-createCheckoutSession\",\n \"dokploy.stripe-createCustomerPortalSession\",\n \"dokploy.stripe-getCurrentPlan\",\n \"dokploy.stripe-getInvoices\",\n \"dokploy.stripe-getProducts\",\n \"dokploy.stripe-updateInvoiceNotifications\",\n \"dokploy.stripe-upgradeSubscription\",\n \"dokploy.swarm-getContainerStats\",\n \"dokploy.swarm-getNodeApps\",\n \"dokploy.swarm-getNodeInfo\",\n \"dokploy.swarm-getNodes\",\n \"dokploy.tag-all\",\n \"dokploy.tag-assignToProject\",\n \"dokploy.tag-bulkAssign\",\n \"dokploy.tag-create\",\n \"dokploy.tag-one\",\n \"dokploy.tag-remove\",\n \"dokploy.tag-removeFromProject\",\n \"dokploy.tag-update\",\n \"dokploy.user-all\",\n \"dokploy.user-assignPermissions\",\n \"dokploy.user-checkUserOrganizations\",\n \"dokploy.user-createApiKey\",\n \"dokploy.user-createUserWithCredentials\",\n \"dokploy.user-deleteApiKey\",\n \"dokploy.user-generateToken\",\n \"dokploy.user-get\",\n \"dokploy.user-getBackups\",\n \"dokploy.user-getBookmarkedTemplates\",\n \"dokploy.user-getContainerMetrics\",\n \"dokploy.user-getInvitations\",\n \"dokploy.user-getMetricsToken\",\n \"dokploy.user-getPermissions\",\n \"dokploy.user-getServerMetrics\",\n \"dokploy.user-getUserByToken\",\n \"dokploy.user-haveRootAccess\",\n \"dokploy.user-one\",\n \"dokploy.user-remove\",\n \"dokploy.user-sendInvitation\",\n \"dokploy.user-session\",\n \"dokploy.user-toggleTemplateBookmark\",\n \"dokploy.user-update\",\n \"dokploy.volumeBackups-create\",\n \"dokploy.volumeBackups-delete\",\n \"dokploy.volumeBackups-list\",\n \"dokploy.volumeBackups-one\",\n \"dokploy.volumeBackups-runManually\",\n \"dokploy.volumeBackups-update\",\n \"dokploy.whitelabeling-get\",\n \"dokploy.whitelabeling-getPublic\",\n \"dokploy.whitelabeling-reset\",\n \"dokploy.whitelabeling-update\"\n ]\n },\n {\n \"service\": \"doppler\",\n \"displayName\": \"Doppler\",\n \"categories\": [\n \"Developer Tools\",\n \"Security\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.doppler.com\",\n \"actionCount\": 44,\n \"actions\": [\n \"doppler.clone_config\",\n \"doppler.create_change_request\",\n \"doppler.create_config\",\n \"doppler.create_environment\",\n \"doppler.create_project\",\n \"doppler.create_service_token\",\n \"doppler.create_sync\",\n \"doppler.delete_config\",\n \"doppler.delete_environment\",\n \"doppler.delete_project\",\n \"doppler.delete_secret\",\n \"doppler.delete_service_token\",\n \"doppler.delete_sync\",\n \"doppler.download_secrets\",\n \"doppler.get_auth_me\",\n \"doppler.get_change_request\",\n \"doppler.get_config\",\n \"doppler.get_config_log\",\n \"doppler.get_environment\",\n \"doppler.get_integration\",\n \"doppler.get_project\",\n \"doppler.get_secret\",\n \"doppler.get_sync\",\n \"doppler.issue_dynamic_secret_lease\",\n \"doppler.list_change_requests\",\n \"doppler.list_config_logs\",\n \"doppler.list_configs\",\n \"doppler.list_environments\",\n \"doppler.list_integrations\",\n \"doppler.list_projects\",\n \"doppler.list_secret_names\",\n \"doppler.list_secrets\",\n \"doppler.list_service_tokens\",\n \"doppler.review_change_request_unit\",\n \"doppler.revoke_dynamic_secret_lease\",\n \"doppler.set_config_inheritable\",\n \"doppler.update_change_request\",\n \"doppler.update_change_request_assignees\",\n \"doppler.update_change_request_unit_status\",\n \"doppler.update_config\",\n \"doppler.update_environment\",\n \"doppler.update_project\",\n \"doppler.update_secret_note\",\n \"doppler.update_secrets\"\n ]\n },\n {\n \"service\": \"dovetail\",\n \"displayName\": \"Dovetail\",\n \"categories\": [\n \"Productivity\",\n \"Data\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://dovetail.com\",\n \"actionCount\": 7,\n \"actions\": [\n \"dovetail.create_data\",\n \"dovetail.export_data\",\n \"dovetail.get_data\",\n \"dovetail.get_token_info\",\n \"dovetail.list_data\",\n \"dovetail.list_projects\",\n \"dovetail.update_data\"\n ]\n },\n {\n \"service\": \"drata\",\n \"displayName\": \"Drata\",\n \"categories\": [\n \"Security\",\n \"Productivity\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://drata.com\",\n \"actionCount\": 8,\n \"actions\": [\n \"drata.get_company\",\n \"drata.get_control\",\n \"drata.get_personnel\",\n \"drata.get_vendor\",\n \"drata.list_controls\",\n \"drata.list_personnel\",\n \"drata.list_vendors\",\n \"drata.list_workspaces\"\n ]\n },\n {\n \"service\": \"dropbox\",\n \"displayName\": \"Dropbox\",\n \"categories\": [\n \"Storage\",\n \"Productivity\"\n ],\n \"authTypes\": [\n \"oauth2\"\n ],\n \"homepageUrl\": \"https://www.dropbox.com\",\n \"actionCount\": 24,\n \"actions\": [\n \"dropbox.copy\",\n \"dropbox.create_folder\",\n \"dropbox.create_shared_link\",\n \"dropbox.delete\",\n \"dropbox.download_file\",\n \"dropbox.get_current_account\",\n \"dropbox.get_metadata\",\n \"dropbox.get_shared_link_file\",\n \"dropbox.get_shared_link_metadata\",\n \"dropbox.get_tags\",\n \"dropbox.get_temporary_link\",\n \"dropbox.list_folder\",\n \"dropbox.list_folder_continue\",\n \"dropbox.list_revisions\",\n \"dropbox.list_shared_links\",\n \"dropbox.modify_shared_link\",\n \"dropbox.move\",\n \"dropbox.restore\",\n \"dropbox.revoke_shared_link\",\n \"dropbox.save_url\",\n \"dropbox.save_url_check_job_status\",\n \"dropbox.search_files\",\n \"dropbox.search_files_continue\",\n \"dropbox.upload_file\"\n ]\n },\n {\n \"service\": \"dropbox_sign\",\n \"displayName\": \"Dropbox Sign\",\n \"categories\": [\n \"Productivity\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://sign.dropbox.com\",\n \"actionCount\": 5,\n \"actions\": [\n \"dropbox_sign.get_account\",\n \"dropbox_sign.get_signature_request\",\n \"dropbox_sign.get_template\",\n \"dropbox_sign.list_signature_requests\",\n \"dropbox_sign.list_templates\"\n ]\n },\n {\n \"service\": \"dropcontact\",\n \"displayName\": \"Dropcontact\",\n \"categories\": [\n \"Data\",\n \"Marketing\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.dropcontact.com/\",\n \"actionCount\": 2,\n \"actions\": [\n \"dropcontact.get_enrichment_result\",\n \"dropcontact.submit_enrichment\"\n ]\n },\n {\n \"service\": \"dub\",\n \"displayName\": \"Dub\",\n \"categories\": [\n \"Marketing\",\n \"Developer Tools\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://dub.co\",\n \"actionCount\": 15,\n \"actions\": [\n \"dub.count_links\",\n \"dub.create_folder\",\n \"dub.create_link\",\n \"dub.create_tag\",\n \"dub.delete_folder\",\n \"dub.delete_link\",\n \"dub.delete_tag\",\n \"dub.list_folders\",\n \"dub.list_links\",\n \"dub.list_tags\",\n \"dub.retrieve_analytics\",\n \"dub.retrieve_link\",\n \"dub.update_folder\",\n \"dub.update_link\",\n \"dub.update_tag\"\n ]\n },\n {\n \"service\": \"dune\",\n \"displayName\": \"Dune\",\n \"categories\": [\n \"Data\",\n \"Developer Tools\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://dune.com/\",\n \"actionCount\": 6,\n \"actions\": [\n \"dune.execute_query\",\n \"dune.get_execution_result\",\n \"dune.get_execution_status\",\n \"dune.get_latest_query_result\",\n \"dune.get_query\",\n \"dune.list_queries\"\n ]\n },\n {\n \"service\": \"dynatrace\",\n \"displayName\": \"Dynatrace\",\n \"categories\": [\n \"Developer Tools\",\n \"Data\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.dynatrace.com\",\n \"actionCount\": 3,\n \"actions\": [\n \"dynatrace.get_entity\",\n \"dynatrace.list_entities\",\n \"dynatrace.list_problems\"\n ]\n },\n {\n \"service\": \"e2b\",\n \"displayName\": \"E2B\",\n \"categories\": [\n \"AI\",\n \"Developer Tools\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://e2b.dev\",\n \"actionCount\": 4,\n \"actions\": [\n \"e2b.create_sandbox\",\n \"e2b.delete_sandbox\",\n \"e2b.get_sandbox\",\n \"e2b.list_sandboxes\"\n ]\n },\n {\n \"service\": \"eagle_doc\",\n \"displayName\": \"Eagle Doc\",\n \"categories\": [\n \"AI\",\n \"Finance\",\n \"Productivity\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.eagle-doc.com/en/products/eagle-doc-apis/\",\n \"actionCount\": 5,\n \"actions\": [\n \"eagle_doc.get_current_usage\",\n \"eagle_doc.get_quota\",\n \"eagle_doc.list_monthly_usage\",\n \"eagle_doc.list_usage_logs\",\n \"eagle_doc.process_finance_document\"\n ]\n },\n {\n \"service\": \"easypost\",\n \"displayName\": \"EasyPost\",\n \"categories\": [\n \"Productivity\",\n \"Location\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.easypost.com/\",\n \"actionCount\": 6,\n \"actions\": [\n \"easypost.create_address\",\n \"easypost.create_tracker\",\n \"easypost.get_address\",\n \"easypost.get_tracker\",\n \"easypost.list_carrier_types\",\n \"easypost.list_trackers\"\n ]\n },\n {\n \"service\": \"ecologi\",\n \"displayName\": \"Ecologi\",\n \"categories\": [\n \"Finance\",\n \"Data\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://ecologi.com\",\n \"actionCount\": 10,\n \"actions\": [\n \"ecologi.get_carbon_offset_totals\",\n \"ecologi.get_carbon_removal_totals\",\n \"ecologi.get_habitat_restoration_totals\",\n \"ecologi.get_total_impact\",\n \"ecologi.get_tree_totals\",\n \"ecologi.purchase_carbon_avoidance\",\n \"ecologi.purchase_carbon_removal\",\n \"ecologi.purchase_habitat_restoration\",\n \"ecologi.purchase_local_trees\",\n \"ecologi.purchase_trees\"\n ]\n },\n {\n \"service\": \"elasticsearch\",\n \"displayName\": \"Elasticsearch\",\n \"categories\": [\n \"Data\",\n \"Developer Tools\"\n ],\n \"authTypes\": [\n \"api_key\",\n \"custom_credential\"\n ],\n \"homepageUrl\": \"https://www.elastic.co/elasticsearch\",\n \"actionCount\": 4,\n \"actions\": [\n \"elasticsearch.get_index_schema\",\n \"elasticsearch.list_indices\",\n \"elasticsearch.ping_cluster\",\n \"elasticsearch.query_index\"\n ]\n },\n {\n \"service\": \"elevenlabs\",\n \"displayName\": \"ElevenLabs\",\n \"categories\": [\n \"AI\",\n \"Design & Media\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://elevenlabs.io\",\n \"actionCount\": 14,\n \"actions\": [\n \"elevenlabs.create_sound_effect\",\n \"elevenlabs.delete_history_item\",\n \"elevenlabs.get_audio_from_history_item\",\n \"elevenlabs.get_generated_items\",\n \"elevenlabs.get_history_item_by_id\",\n \"elevenlabs.get_models\",\n \"elevenlabs.get_user_info\",\n \"elevenlabs.get_user_subscription_info\",\n \"elevenlabs.get_voice\",\n \"elevenlabs.get_voice_settings\",\n \"elevenlabs.get_voices\",\n \"elevenlabs.search_voices\",\n \"elevenlabs.text_to_speech\",\n \"elevenlabs.text_to_speech_with_timestamps\"\n ]\n },\n {\n \"service\": \"elevenreader\",\n \"displayName\": \"ElevenReader\",\n \"categories\": [\n \"AI\",\n \"Design & Media\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://elevenlabs.io/text-reader\",\n \"actionCount\": 5,\n \"actions\": [\n \"elevenreader.get_models\",\n \"elevenreader.get_user_info\",\n \"elevenreader.get_voice\",\n \"elevenreader.read_text\",\n \"elevenreader.search_voices\"\n ]\n },\n {\n \"service\": \"elevio\",\n \"displayName\": \"Elevio\",\n \"categories\": [\n \"Productivity\",\n \"Communication\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://elev.io\",\n \"actionCount\": 5,\n \"actions\": [\n \"elevio.get_article\",\n \"elevio.get_category\",\n \"elevio.list_articles\",\n \"elevio.list_categories\",\n \"elevio.search_articles\"\n ]\n },\n {\n \"service\": \"elorus\",\n \"displayName\": \"Elorus\",\n \"categories\": [\n \"Finance\",\n \"Productivity\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.elorus.com\",\n \"actionCount\": 12,\n \"actions\": [\n \"elorus.create_contact\",\n \"elorus.create_invoice\",\n \"elorus.create_product\",\n \"elorus.get_contact\",\n \"elorus.get_invoice\",\n \"elorus.get_product\",\n \"elorus.list_contacts\",\n \"elorus.list_invoices\",\n \"elorus.list_products\",\n \"elorus.update_contact\",\n \"elorus.update_invoice\",\n \"elorus.update_product\"\n ]\n },\n {\n \"service\": \"emailable\",\n \"displayName\": \"Emailable\",\n \"categories\": [\n \"Communication\",\n \"Developer Tools\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://emailable.com\",\n \"actionCount\": 4,\n \"actions\": [\n \"emailable.get_account_info\",\n \"emailable.get_batch_status\",\n \"emailable.verify_batch_emails\",\n \"emailable.verify_email\"\n ]\n },\n {\n \"service\": \"emaillistverify\",\n \"displayName\": \"EmailListVerify\",\n \"categories\": [\n \"Communication\",\n \"Marketing\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://emaillistverify.com\",\n \"actionCount\": 8,\n \"actions\": [\n \"emaillistverify.check_disposable\",\n \"emaillistverify.delete_email_list\",\n \"emaillistverify.download_email_list\",\n \"emaillistverify.get_credits\",\n \"emaillistverify.get_email_list_progress\",\n \"emaillistverify.upload_email_list\",\n \"emaillistverify.verify_email\",\n \"emaillistverify.verify_email_detailed\"\n ]\n },\n {\n \"service\": \"emailoctopus\",\n \"displayName\": \"EmailOctopus\",\n \"categories\": [\n \"Communication\",\n \"Marketing\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://emailoctopus.com\",\n \"actionCount\": 9,\n \"actions\": [\n \"emailoctopus.create_list_contact\",\n \"emailoctopus.delete_list_contact\",\n \"emailoctopus.get_campaign\",\n \"emailoctopus.get_list\",\n \"emailoctopus.get_list_contact\",\n \"emailoctopus.list_campaigns\",\n \"emailoctopus.list_list_contacts\",\n \"emailoctopus.list_lists\",\n \"emailoctopus.update_list_contact\"\n ]\n },\n {\n \"service\": \"encharge\",\n \"displayName\": \"Encharge\",\n \"categories\": [\n \"Communication\",\n \"Marketing\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://encharge.io\",\n \"actionCount\": 1,\n \"actions\": [\n \"encharge.send_email\"\n ]\n },\n {\n \"service\": \"encodian\",\n \"displayName\": \"Encodian\",\n \"categories\": [\n \"Productivity\",\n \"Design & Media\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.encodian.com\",\n \"actionCount\": 5,\n \"actions\": [\n \"encodian.compress_pdf\",\n \"encodian.extract_pdf_pages\",\n \"encodian.get_pdf_text_layer\",\n \"encodian.secure_pdf_document\",\n \"encodian.unlock_pdf_document\"\n ]\n },\n {\n \"service\": \"energy_performance_certificates\",\n \"displayName\": \"Energy Performance Certificates\",\n \"categories\": [\n \"Data\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://get-energy-performance-data.communities.gov.uk\",\n \"actionCount\": 4,\n \"actions\": [\n \"energy_performance_certificates.get_certificate\",\n \"energy_performance_certificates.search_display_certificates\",\n \"energy_performance_certificates.search_domestic_certificates\",\n \"energy_performance_certificates.search_non_domestic_certificates\"\n ]\n },\n {\n \"service\": \"enigma\",\n \"displayName\": \"Enigma\",\n \"categories\": [\n \"Data\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.enigma.com\",\n \"actionCount\": 12,\n \"actions\": [\n \"enigma.create_list\",\n \"enigma.create_suggestion\",\n \"enigma.delete_list\",\n \"enigma.get_account\",\n \"enigma.get_aggregate_counts\",\n \"enigma.get_background_task\",\n \"enigma.get_business\",\n \"enigma.get_graphql_schema_extended\",\n \"enigma.get_list_materialization\",\n \"enigma.search_graphql\",\n \"enigma.search_lists\",\n \"enigma.verify_business_v2\"\n ]\n },\n {\n \"service\": \"envoy\",\n \"displayName\": \"Envoy\",\n \"categories\": [\n \"Productivity\",\n \"Security\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://envoy.com\",\n \"actionCount\": 8,\n \"actions\": [\n \"envoy.get_employee\",\n \"envoy.get_flow\",\n \"envoy.get_invite\",\n \"envoy.get_location\",\n \"envoy.list_employees\",\n \"envoy.list_flows\",\n \"envoy.list_invites\",\n \"envoy.list_locations\"\n ]\n },\n {\n \"service\": \"eodhd_apis\",\n \"displayName\": \"EODHD APIs\",\n \"categories\": [\n \"Finance\",\n \"Data\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://eodhd.com\",\n \"actionCount\": 8,\n \"actions\": [\n \"eodhd_apis.get_eod\",\n \"eodhd_apis.get_id_mapping\",\n \"eodhd_apis.get_macro_indicators\",\n \"eodhd_apis.get_real_time_quote\",\n \"eodhd_apis.get_user_info\",\n \"eodhd_apis.get_ust_yield_rates\",\n \"eodhd_apis.list_exchanges\",\n \"eodhd_apis.search_instruments\"\n ]\n },\n {\n \"service\": \"erpnext\",\n \"displayName\": \"ERPNext\",\n \"categories\": [\n \"Productivity\",\n \"Finance\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://erpnext.com\",\n \"actionCount\": 9,\n \"actions\": [\n \"erpnext.create_document\",\n \"erpnext.delete_document\",\n \"erpnext.get_document\",\n \"erpnext.get_document_count\",\n \"erpnext.get_document_value\",\n \"erpnext.get_logged_user\",\n \"erpnext.list_documents\",\n \"erpnext.set_document_value\",\n \"erpnext.update_document\"\n ]\n },\n {\n \"service\": \"esignatures_io\",\n \"displayName\": \"eSignatures.com\",\n \"categories\": [\n \"Productivity\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://esignatures.com\",\n \"actionCount\": 8,\n \"actions\": [\n \"esignatures_io.create_contract\",\n \"esignatures_io.create_template\",\n \"esignatures_io.get_contract\",\n \"esignatures_io.get_contract_content\",\n \"esignatures_io.get_template\",\n \"esignatures_io.get_template_content\",\n \"esignatures_io.list_templates\",\n \"esignatures_io.withdraw_contract\"\n ]\n },\n {\n \"service\": \"espocrm\",\n \"displayName\": \"EspoCRM\",\n \"categories\": [\n \"Productivity\",\n \"Marketing\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.espocrm.com/\",\n \"actionCount\": 7,\n \"actions\": [\n \"espocrm.create_record\",\n \"espocrm.delete_record\",\n \"espocrm.get_app_user\",\n \"espocrm.get_metadata\",\n \"espocrm.get_record\",\n \"espocrm.list_records\",\n \"espocrm.update_record\"\n ]\n },\n {\n \"service\": \"evenium\",\n \"displayName\": \"Evenium\",\n \"categories\": [\n \"Productivity\",\n \"Communication\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://corp.evenium.com\",\n \"actionCount\": 6,\n \"actions\": [\n \"evenium.get_event\",\n \"evenium.get_guest\",\n \"evenium.get_guest_post_status\",\n \"evenium.get_guest_status\",\n \"evenium.list_events\",\n \"evenium.list_guests\"\n ]\n },\n {\n \"service\": \"eventee\",\n \"displayName\": \"Eventee\",\n \"categories\": [\n \"Productivity\",\n \"Communication\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://eventee.co\",\n \"actionCount\": 5,\n \"actions\": [\n \"eventee.get_event_content\",\n \"eventee.list_groups\",\n \"eventee.list_participants\",\n \"eventee.list_registrations\",\n \"eventee.list_reviews\"\n ]\n },\n {\n \"service\": \"eventzilla\",\n \"displayName\": \"Eventzilla\",\n \"categories\": [\n \"Productivity\",\n \"Marketing\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.eventzilla.net\",\n \"actionCount\": 9,\n \"actions\": [\n \"eventzilla.get_attendee\",\n \"eventzilla.get_event\",\n \"eventzilla.get_transaction\",\n \"eventzilla.get_user\",\n \"eventzilla.list_event_attendees\",\n \"eventzilla.list_event_tickets\",\n \"eventzilla.list_event_transactions\",\n \"eventzilla.list_events\",\n \"eventzilla.list_users\"\n ]\n },\n {\n \"service\": \"everhour\",\n \"displayName\": \"Everhour\",\n \"categories\": [\n \"Productivity\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://everhour.com\",\n \"actionCount\": 12,\n \"actions\": [\n \"everhour.create_time_record\",\n \"everhour.get_current_timer\",\n \"everhour.get_current_user\",\n \"everhour.get_project\",\n \"everhour.get_task\",\n \"everhour.list_project_tasks\",\n \"everhour.list_projects\",\n \"everhour.list_time_records\",\n \"everhour.list_users\",\n \"everhour.search_tasks\",\n \"everhour.start_timer\",\n \"everhour.stop_timer\"\n ]\n },\n {\n \"service\": \"exa\",\n \"displayName\": \"Exa\",\n \"categories\": [\n \"AI\",\n \"Data\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://exa.ai\",\n \"actionCount\": 4,\n \"actions\": [\n \"exa.answer\",\n \"exa.find_similar\",\n \"exa.get_contents\",\n \"exa.search\"\n ]\n },\n {\n \"service\": \"excel\",\n \"displayName\": \"Excel\",\n \"categories\": [\n \"Productivity\",\n \"Data\"\n ],\n \"authTypes\": [\n \"oauth2\"\n ],\n \"homepageUrl\": \"https://www.microsoft.com/microsoft-365/excel\",\n \"actionCount\": 31,\n \"actions\": [\n \"excel.add_table\",\n \"excel.add_table_column\",\n \"excel.add_table_row\",\n \"excel.add_worksheet\",\n \"excel.apply_table_filter\",\n \"excel.apply_table_sort\",\n \"excel.clear_range\",\n \"excel.clear_table_filter\",\n \"excel.convert_table_to_range\",\n \"excel.create_session\",\n \"excel.create_workbook\",\n \"excel.delete_table_column\",\n \"excel.delete_table_row\",\n \"excel.delete_worksheet\",\n \"excel.get_range\",\n \"excel.get_table_column\",\n \"excel.get_workbook\",\n \"excel.get_worksheet\",\n \"excel.get_worksheet_used_range\",\n \"excel.insert_range\",\n \"excel.list_drive_item_children\",\n \"excel.list_table_columns\",\n \"excel.list_table_rows\",\n \"excel.list_tables\",\n \"excel.list_worksheets\",\n \"excel.merge_cells\",\n \"excel.search_files\",\n \"excel.sort_range\",\n \"excel.update_range\",\n \"excel.update_table\",\n \"excel.update_worksheet\"\n ]\n },\n {\n \"service\": \"expofp\",\n \"displayName\": \"ExpoFP\",\n \"categories\": [\n \"Productivity\",\n \"Marketing\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://expofp.com\",\n \"actionCount\": 7,\n \"actions\": [\n \"expofp.add_exhibitor\",\n \"expofp.delete_exhibitor\",\n \"expofp.get_exhibitor\",\n \"expofp.get_exhibitor_id\",\n \"expofp.list_exhibitors\",\n \"expofp.list_expos\",\n \"expofp.update_exhibitor\"\n ]\n },\n {\n \"service\": \"fairing\",\n \"displayName\": \"Fairing\",\n \"categories\": [\n \"Marketing\",\n \"Data\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://fairing.co\",\n \"actionCount\": 1,\n \"actions\": [\n \"fairing.list_responses\"\n ]\n },\n {\n \"service\": \"fal_ai\",\n \"displayName\": \"fal.ai\",\n \"categories\": [\n \"AI\",\n \"Developer Tools\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://fal.ai\",\n \"actionCount\": 8,\n \"actions\": [\n \"fal_ai.cancel_queue_request\",\n \"fal_ai.estimate_pricing\",\n \"fal_ai.get_jwks\",\n \"fal_ai.get_models\",\n \"fal_ai.get_pricing\",\n \"fal_ai.get_queue_request_result\",\n \"fal_ai.queue_get_status\",\n \"fal_ai.queue_get_status_stream\"\n ]\n },\n {\n \"service\": \"faraday\",\n \"displayName\": \"Faraday\",\n \"categories\": [\n \"AI\",\n \"Data\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://faraday.ai\",\n \"actionCount\": 12,\n \"actions\": [\n \"faraday.get_account\",\n \"faraday.get_current_account\",\n \"faraday.get_dataset\",\n \"faraday.get_scope\",\n \"faraday.get_target\",\n \"faraday.get_trait\",\n \"faraday.list_accounts\",\n \"faraday.list_datasets\",\n \"faraday.list_scopes\",\n \"faraday.list_targets\",\n \"faraday.list_traits\",\n \"faraday.list_usages\"\n ]\n },\n {\n \"service\": \"fathom\",\n \"displayName\": \"Fathom Analytics\",\n \"categories\": [\n \"Data\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://usefathom.com\",\n \"actionCount\": 15,\n \"actions\": [\n \"fathom.create_event\",\n \"fathom.create_milestone\",\n \"fathom.create_site\",\n \"fathom.get_account\",\n \"fathom.get_current_visitors\",\n \"fathom.get_event\",\n \"fathom.get_milestone\",\n \"fathom.get_site\",\n \"fathom.list_events\",\n \"fathom.list_milestones\",\n \"fathom.list_sites\",\n \"fathom.run_aggregation\",\n \"fathom.update_event\",\n \"fathom.update_milestone\",\n \"fathom.update_site\"\n ]\n },\n {\n \"service\": \"feathery\",\n \"displayName\": \"Feathery\",\n \"categories\": [\n \"Productivity\",\n \"Marketing\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.feathery.io/\",\n \"actionCount\": 13,\n \"actions\": [\n \"feathery.create_hidden_field\",\n \"feathery.create_or_fetch_user\",\n \"feathery.create_or_update_form_submissions\",\n \"feathery.delete_hidden_field\",\n \"feathery.delete_user\",\n \"feathery.edit_hidden_field\",\n \"feathery.get_account_info\",\n \"feathery.get_form_schema\",\n \"feathery.get_user_data\",\n \"feathery.get_user_session\",\n \"feathery.list_forms\",\n \"feathery.list_hidden_fields\",\n \"feathery.list_users\"\n ]\n },\n {\n \"service\": \"featurebase\",\n \"displayName\": \"Featurebase\",\n \"categories\": [\n \"Productivity\",\n \"Developer Tools\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.featurebase.app/\",\n \"actionCount\": 11,\n \"actions\": [\n \"featurebase.create_post\",\n \"featurebase.delete_contact\",\n \"featurebase.delete_post\",\n \"featurebase.get_board\",\n \"featurebase.get_contact\",\n \"featurebase.get_post\",\n \"featurebase.list_boards\",\n \"featurebase.list_contacts\",\n \"featurebase.list_posts\",\n \"featurebase.update_post\",\n \"featurebase.upsert_contact\"\n ]\n },\n {\n \"service\": \"feishu\",\n \"displayName\": \"Feishu\",\n \"categories\": [\n \"Productivity\",\n \"Storage\"\n ],\n \"authTypes\": [\n \"oauth2\"\n ],\n \"homepageUrl\": \"https://www.feishu.cn\",\n \"actionCount\": 7,\n \"actions\": [\n \"feishu.get_current_user\",\n \"feishu.get_document\",\n \"feishu.get_document_content\",\n \"feishu.list_bitable_fields\",\n \"feishu.list_bitable_tables\",\n \"feishu.list_document_blocks\",\n \"feishu.search_bitable_records\"\n ]\n },\n {\n \"service\": \"feishu_app_bot\",\n \"displayName\": \"Feishu App Bot\",\n \"categories\": [\n \"Communication\"\n ],\n \"authTypes\": [\n \"custom_credential\"\n ],\n \"homepageUrl\": \"https://open.feishu.cn\",\n \"actionCount\": 20,\n \"actions\": [\n \"feishu_app_bot.add_message_reaction\",\n \"feishu_app_bot.download_file\",\n \"feishu_app_bot.download_image\",\n \"feishu_app_bot.edit_message\",\n \"feishu_app_bot.get_chat\",\n \"feishu_app_bot.get_message\",\n \"feishu_app_bot.list_chat_members\",\n \"feishu_app_bot.list_chats\",\n \"feishu_app_bot.list_message_reactions\",\n \"feishu_app_bot.list_messages\",\n \"feishu_app_bot.list_pins\",\n \"feishu_app_bot.pin_message\",\n \"feishu_app_bot.recall_message\",\n \"feishu_app_bot.remove_message_reaction\",\n \"feishu_app_bot.remove_pin\",\n \"feishu_app_bot.reply_message\",\n \"feishu_app_bot.search_chats\",\n \"feishu_app_bot.send_message\",\n \"feishu_app_bot.upload_file\",\n \"feishu_app_bot.upload_image\"\n ]\n },\n {\n \"service\": \"feishu_custom_bot\",\n \"displayName\": \"Feishu Custom Bot\",\n \"categories\": [\n \"Communication\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.feishu.cn\",\n \"actionCount\": 5,\n \"actions\": [\n \"feishu_custom_bot.send_image_message\",\n \"feishu_custom_bot.send_interactive_message\",\n \"feishu_custom_bot.send_post_message\",\n \"feishu_custom_bot.send_share_chat_message\",\n \"feishu_custom_bot.send_text_message\"\n ]\n },\n {\n \"service\": \"fellow\",\n \"displayName\": \"Fellow\",\n \"categories\": [\n \"Productivity\",\n \"Communication\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://fellow.app\",\n \"actionCount\": 7,\n \"actions\": [\n \"fellow.archive_action_item\",\n \"fellow.get_action_item\",\n \"fellow.get_current_user\",\n \"fellow.get_note\",\n \"fellow.list_action_items\",\n \"fellow.list_notes\",\n \"fellow.mark_action_item_complete\"\n ]\n },\n {\n \"service\": \"felt\",\n \"displayName\": \"Felt\",\n \"categories\": [\n \"Developer Tools\",\n \"Productivity\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://felt.com/\",\n \"actionCount\": 12,\n \"actions\": [\n \"felt.create_map\",\n \"felt.create_project\",\n \"felt.delete_map\",\n \"felt.delete_project\",\n \"felt.duplicate_map\",\n \"felt.get_current_user\",\n \"felt.get_map\",\n \"felt.get_project\",\n \"felt.list_projects\",\n \"felt.move_map\",\n \"felt.update_map\",\n \"felt.update_project\"\n ]\n },\n {\n \"service\": \"fern\",\n \"displayName\": \"Fern\",\n \"categories\": [\n \"Finance\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://fernhq.com\",\n \"actionCount\": 7,\n \"actions\": [\n \"fern.get_customer\",\n \"fern.get_exchange_rate\",\n \"fern.get_payment_account\",\n \"fern.get_transaction\",\n \"fern.list_customers\",\n \"fern.list_payment_accounts\",\n \"fern.list_transactions\"\n ]\n },\n {\n \"service\": \"ffhub\",\n \"displayName\": \"FFHub\",\n \"categories\": [\n \"Media\",\n \"Developer Tools\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://ffhub.io\",\n \"actionCount\": 3,\n \"actions\": [\n \"ffhub.create_ffmpeg_task\",\n \"ffhub.get_ffmpeg_task\",\n \"ffhub.list_ffmpeg_tasks\"\n ]\n },\n {\n \"service\": \"fiber_ai\",\n \"displayName\": \"Fiber AI\",\n \"categories\": [\n \"Data\",\n \"Marketing\",\n \"AI\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://fiber.ai\",\n \"actionCount\": 3,\n \"actions\": [\n \"fiber_ai.get_org_credits\",\n \"fiber_ai.get_rate_limits\",\n \"fiber_ai.list_enum_values\"\n ]\n },\n {\n \"service\": \"fidel_api\",\n \"displayName\": \"Fidel API\",\n \"categories\": [\n \"Finance\",\n \"Data\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://fidel.uk\",\n \"actionCount\": 6,\n \"actions\": [\n \"fidel_api.get_brand\",\n \"fidel_api.get_card\",\n \"fidel_api.get_transaction\",\n \"fidel_api.list_brands\",\n \"fidel_api.list_cards\",\n \"fidel_api.list_transactions\"\n ]\n },\n {\n \"service\": \"figma\",\n \"displayName\": \"Figma\",\n \"categories\": [\n \"Design\",\n \"Productivity\"\n ],\n \"authTypes\": [\n \"api_key\",\n \"oauth2\"\n ],\n \"homepageUrl\": \"https://www.figma.com\",\n \"actionCount\": 26,\n \"actions\": [\n \"figma.create_dev_resources\",\n \"figma.delete_comment\",\n \"figma.delete_comment_reaction\",\n \"figma.delete_dev_resource\",\n \"figma.get_component\",\n \"figma.get_component_set\",\n \"figma.get_current_user\",\n \"figma.get_dev_resources\",\n \"figma.get_file\",\n \"figma.get_file_metadata\",\n \"figma.get_file_nodes\",\n \"figma.get_image_fills\",\n \"figma.get_project_metadata\",\n \"figma.get_style\",\n \"figma.list_comment_reactions\",\n \"figma.list_comments\",\n \"figma.list_file_component_sets\",\n \"figma.list_file_components\",\n \"figma.list_file_styles\",\n \"figma.list_file_versions\",\n \"figma.list_project_files\",\n \"figma.list_team_projects\",\n \"figma.post_comment\",\n \"figma.post_comment_reaction\",\n \"figma.render_images\",\n \"figma.update_dev_resources\"\n ]\n },\n {\n \"service\": \"files_com\",\n \"displayName\": \"Files.com\",\n \"categories\": [\n \"Productivity\",\n \"Data\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.files.com\",\n \"actionCount\": 5,\n \"actions\": [\n \"files_com.create_folder\",\n \"files_com.delete_file\",\n \"files_com.get_file\",\n \"files_com.list_folder\",\n \"files_com.update_metadata\"\n ]\n },\n {\n \"service\": \"fillout\",\n \"displayName\": \"Fillout\",\n \"categories\": [\n \"Productivity\",\n \"Marketing\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.fillout.com/\",\n \"actionCount\": 6,\n \"actions\": [\n \"fillout.create_submissions\",\n \"fillout.delete_submission\",\n \"fillout.get_form_metadata\",\n \"fillout.get_submission\",\n \"fillout.list_forms\",\n \"fillout.list_submissions\"\n ]\n },\n {\n \"service\": \"finage\",\n \"displayName\": \"Finage\",\n \"categories\": [\n \"Finance\",\n \"Data\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://finage.co.uk\",\n \"actionCount\": 6,\n \"actions\": [\n \"finage.get_aggregates\",\n \"finage.get_last_quote\",\n \"finage.get_last_trade\",\n \"finage.get_previous_close\",\n \"finage.get_snapshot\",\n \"finage.list_stock_symbols\"\n ]\n },\n {\n \"service\": \"financial_modeling_prep\",\n \"displayName\": \"Financial Modeling Prep\",\n \"categories\": [\n \"Finance\",\n \"Data\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://financialmodelingprep.com\",\n \"actionCount\": 37,\n \"actions\": [\n \"financial_modeling_prep.get_analyst_estimates\",\n \"financial_modeling_prep.get_asset_quote\",\n \"financial_modeling_prep.get_balance_sheet_statement\",\n \"financial_modeling_prep.get_calendar\",\n \"financial_modeling_prep.get_cash_flow_statement\",\n \"financial_modeling_prep.get_company_executives\",\n \"financial_modeling_prep.get_company_notes\",\n \"financial_modeling_prep.get_company_peers\",\n \"financial_modeling_prep.get_company_profile\",\n \"financial_modeling_prep.get_company_profile_by_cik\",\n \"financial_modeling_prep.get_congressional_trades\",\n \"financial_modeling_prep.get_dcf\",\n \"financial_modeling_prep.get_economic_indicators\",\n \"financial_modeling_prep.get_enterprise_values\",\n \"financial_modeling_prep.get_etf_holdings\",\n \"financial_modeling_prep.get_financial_ratios\",\n \"financial_modeling_prep.get_financial_scores\",\n \"financial_modeling_prep.get_financial_statement_growth\",\n \"financial_modeling_prep.get_historical_prices\",\n \"financial_modeling_prep.get_income_statement\",\n \"financial_modeling_prep.get_insider_trades\",\n \"financial_modeling_prep.get_intraday_prices\",\n \"financial_modeling_prep.get_key_metrics\",\n \"financial_modeling_prep.get_market_cap\",\n \"financial_modeling_prep.get_market_movers\",\n \"financial_modeling_prep.get_market_performance\",\n \"financial_modeling_prep.get_news\",\n \"financial_modeling_prep.get_quote\",\n \"financial_modeling_prep.get_quote_short\",\n \"financial_modeling_prep.get_ratings\",\n \"financial_modeling_prep.get_sec_filings\",\n \"financial_modeling_prep.get_shares_float\",\n \"financial_modeling_prep.get_technical_indicator\",\n \"financial_modeling_prep.list_directory\",\n \"financial_modeling_prep.search_company_screener\",\n \"financial_modeling_prep.search_names\",\n \"financial_modeling_prep.search_symbols\"\n ]\n },\n {\n \"service\": \"findymail\",\n \"displayName\": \"Findymail\",\n \"categories\": [\n \"Marketing\",\n \"Data\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.findymail.com/\",\n \"actionCount\": 5,\n \"actions\": [\n \"findymail.get_credits\",\n \"findymail.search_by_name\",\n \"findymail.search_domain\",\n \"findymail.search_employees\",\n \"findymail.verify_email\"\n ]\n },\n {\n \"service\": \"fireberry\",\n \"displayName\": \"Fireberry\",\n \"categories\": [\n \"Productivity\",\n \"Marketing\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.fireberry.com\",\n \"actionCount\": 11,\n \"actions\": [\n \"fireberry.create_account\",\n \"fireberry.create_contact\",\n \"fireberry.delete_account\",\n \"fireberry.delete_contact\",\n \"fireberry.get_account\",\n \"fireberry.get_contact\",\n \"fireberry.list_accounts\",\n \"fireberry.list_contacts\",\n \"fireberry.query_records\",\n \"fireberry.update_account\",\n \"fireberry.update_contact\"\n ]\n },\n {\n \"service\": \"firecrawl\",\n \"displayName\": \"Firecrawl\",\n \"categories\": [\n \"Data\",\n \"Developer Tools\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.firecrawl.dev\",\n \"actionCount\": 30,\n \"actions\": [\n \"firecrawl.agent_cancel\",\n \"firecrawl.batch_scrape\",\n \"firecrawl.batch_scrape_cancel\",\n \"firecrawl.batch_scrape_get\",\n \"firecrawl.batch_scrape_get_errors\",\n \"firecrawl.crawl\",\n \"firecrawl.crawl_cancel\",\n \"firecrawl.crawl_delete\",\n \"firecrawl.crawl_get\",\n \"firecrawl.crawl_get_errors\",\n \"firecrawl.crawl_list_active\",\n \"firecrawl.crawl_params_preview\",\n \"firecrawl.crawl_v2\",\n \"firecrawl.credit_usage_get\",\n \"firecrawl.credit_usage_get_historical\",\n \"firecrawl.deep_research\",\n \"firecrawl.extract\",\n \"firecrawl.extract_get\",\n \"firecrawl.get_agent_status\",\n \"firecrawl.get_deep_research_status\",\n \"firecrawl.get_the_status_of_a_crawl_job\",\n \"firecrawl.llms_txt_generate\",\n \"firecrawl.llms_txt_get\",\n \"firecrawl.map_multiple_urls_based_on_options\",\n \"firecrawl.queue_get\",\n \"firecrawl.scrape\",\n \"firecrawl.search\",\n \"firecrawl.start_agent\",\n \"firecrawl.token_usage_get\",\n \"firecrawl.token_usage_get_historical\"\n ]\n },\n {\n \"service\": \"fireflies\",\n \"displayName\": \"Fireflies\",\n \"categories\": [\n \"AI\",\n \"Productivity\",\n \"Communication\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.fireflies.ai\",\n \"actionCount\": 22,\n \"actions\": [\n \"fireflies.continue_askfred_thread\",\n \"fireflies.create_askfred_thread\",\n \"fireflies.create_bite\",\n \"fireflies.delete_askfred_thread\",\n \"fireflies.delete_transcript\",\n \"fireflies.execute_graphql_query\",\n \"fireflies.get_askfred_thread\",\n \"fireflies.get_bite\",\n \"fireflies.get_current_user\",\n \"fireflies.get_transcript\",\n \"fireflies.get_user\",\n \"fireflies.list_ai_app_outputs\",\n \"fireflies.list_askfred_threads\",\n \"fireflies.list_bites\",\n \"fireflies.list_channels\",\n \"fireflies.list_transcripts\",\n \"fireflies.list_user_groups\",\n \"fireflies.list_users\",\n \"fireflies.set_user_role\",\n \"fireflies.update_meeting_channel\",\n \"fireflies.update_meeting_privacy\",\n \"fireflies.update_meeting_title\"\n ]\n },\n {\n \"service\": \"firehydrant\",\n \"displayName\": \"FireHydrant\",\n \"categories\": [\n \"Developer Tools\",\n \"Productivity\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://firehydrant.com\",\n \"actionCount\": 7,\n \"actions\": [\n \"firehydrant.create_incident\",\n \"firehydrant.get_environment\",\n \"firehydrant.get_incident\",\n \"firehydrant.get_service\",\n \"firehydrant.list_environments\",\n \"firehydrant.list_incidents\",\n \"firehydrant.list_services\"\n ]\n },\n {\n \"service\": \"firstbase\",\n \"displayName\": \"Firstbase\",\n \"categories\": [\n \"Productivity\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.firstbase.com\",\n \"actionCount\": 6,\n \"actions\": [\n \"firstbase.get_catalog_sku\",\n \"firstbase.get_inventory\",\n \"firstbase.list_brands\",\n \"firstbase.list_catalog_skus\",\n \"firstbase.list_categories\",\n \"firstbase.list_inventory\"\n ]\n },\n {\n \"service\": \"fivetran\",\n \"displayName\": \"Fivetran\",\n \"categories\": [\n \"Data\",\n \"Developer Tools\"\n ],\n \"authTypes\": [\n \"custom_credential\"\n ],\n \"homepageUrl\": \"https://fivetran.com\",\n \"actionCount\": 6,\n \"actions\": [\n \"fivetran.get_hybrid_deployment_agent\",\n \"fivetran.get_log_service\",\n \"fivetran.get_transformation_project\",\n \"fivetran.list_hybrid_deployment_agents\",\n \"fivetran.list_log_services\",\n \"fivetran.list_transformation_projects\"\n ]\n },\n {\n \"service\": \"fixer\",\n \"displayName\": \"Fixer\",\n \"categories\": [\n \"Finance\",\n \"Data\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://fixer.io\",\n \"actionCount\": 3,\n \"actions\": [\n \"fixer.get_historical_rates\",\n \"fixer.get_latest_rates\",\n \"fixer.get_supported_symbols\"\n ]\n },\n {\n \"service\": \"flagsmith\",\n \"displayName\": \"Flagsmith\",\n \"categories\": [\n \"Developer Tools\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.flagsmith.com\",\n \"actionCount\": 4,\n \"actions\": [\n \"flagsmith.get_feature_flag\",\n \"flagsmith.get_identity_flags\",\n \"flagsmith.identify_identity\",\n \"flagsmith.list_flags\"\n ]\n },\n {\n \"service\": \"float\",\n \"displayName\": \"Float\",\n \"categories\": [\n \"Productivity\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.float.com/\",\n \"actionCount\": 5,\n \"actions\": [\n \"float.list_accounts\",\n \"float.list_allocations\",\n \"float.list_clients\",\n \"float.list_people\",\n \"float.list_projects\"\n ]\n },\n {\n \"service\": \"flomo\",\n \"displayName\": \"flomo\",\n \"categories\": [\n \"Productivity\"\n ],\n \"authTypes\": [\n \"api_key\",\n \"custom_credential\"\n ],\n \"homepageUrl\": \"https://flomoapp.com\",\n \"actionCount\": 13,\n \"actions\": [\n \"flomo.create_memo\",\n \"flomo.get_daily_review\",\n \"flomo.get_format_guide\",\n \"flomo.get_tag_guide\",\n \"flomo.memo_batch_get\",\n \"flomo.memo_recommended\",\n \"flomo.memo_search\",\n \"flomo.memo_update\",\n \"flomo.memory_context\",\n \"flomo.memory_user\",\n \"flomo.tag_rename\",\n \"flomo.tag_search\",\n \"flomo.tag_tree\"\n ]\n },\n {\n \"service\": \"flowiseai\",\n \"displayName\": \"FlowiseAI\",\n \"categories\": [\n \"AI\",\n \"Developer Tools\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://flowiseai.com\",\n \"actionCount\": 2,\n \"actions\": [\n \"flowiseai.get_chatflow\",\n \"flowiseai.send_message\"\n ]\n },\n {\n \"service\": \"fluxguard\",\n \"displayName\": \"Fluxguard\",\n \"categories\": [\n \"Data\",\n \"Developer Tools\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://fluxguard.com/\",\n \"actionCount\": 12,\n \"actions\": [\n \"fluxguard.add_page\",\n \"fluxguard.create_category\",\n \"fluxguard.delete_page\",\n \"fluxguard.delete_site\",\n \"fluxguard.delete_webhook\",\n \"fluxguard.get_account\",\n \"fluxguard.get_page\",\n \"fluxguard.get_sample_webhook\",\n \"fluxguard.initiate_crawl\",\n \"fluxguard.list_categories\",\n \"fluxguard.list_webhooks\",\n \"fluxguard.upsert_webhook\"\n ]\n },\n {\n \"service\": \"fly\",\n \"displayName\": \"Fly.io\",\n \"categories\": [\n \"Developer Tools\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://fly.io/\",\n \"actionCount\": 9,\n \"actions\": [\n \"fly.create_machine\",\n \"fly.get_app\",\n \"fly.get_machine\",\n \"fly.list_apps\",\n \"fly.list_machines\",\n \"fly.restart_machine\",\n \"fly.start_machine\",\n \"fly.stop_machine\",\n \"fly.wait_for_machine\"\n ]\n },\n {\n \"service\": \"folk\",\n \"displayName\": \"folk\",\n \"categories\": [\n \"Productivity\",\n \"Communication\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://folk.app\",\n \"actionCount\": 15,\n \"actions\": [\n \"folk.create_company\",\n \"folk.create_person\",\n \"folk.delete_company\",\n \"folk.delete_person\",\n \"folk.get_company\",\n \"folk.get_current_user\",\n \"folk.get_person\",\n \"folk.get_user\",\n \"folk.list_companies\",\n \"folk.list_group_custom_fields\",\n \"folk.list_groups\",\n \"folk.list_people\",\n \"folk.list_users\",\n \"folk.update_company\",\n \"folk.update_person\"\n ]\n },\n {\n \"service\": \"fomo\",\n \"displayName\": \"Fomo\",\n \"categories\": [\n \"Marketing\",\n \"Social\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://fomo.com\",\n \"actionCount\": 5,\n \"actions\": [\n \"fomo.create_event\",\n \"fomo.delete_event\",\n \"fomo.get_event\",\n \"fomo.list_events\",\n \"fomo.update_event\"\n ]\n },\n {\n \"service\": \"football_data\",\n \"displayName\": \"football-data.org\",\n \"categories\": [\n \"Data\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.football-data.org/\",\n \"actionCount\": 6,\n \"actions\": [\n \"football_data.get_match\",\n \"football_data.get_standings\",\n \"football_data.list_all_matches\",\n \"football_data.list_competitions\",\n \"football_data.list_matches\",\n \"football_data.list_teams\"\n ]\n },\n {\n \"service\": \"forem\",\n \"displayName\": \"Forem\",\n \"categories\": [\n \"Social\",\n \"Developer Tools\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.forem.com\",\n \"actionCount\": 10,\n \"actions\": [\n \"forem.create_article\",\n \"forem.get_article\",\n \"forem.get_article_by_path\",\n \"forem.get_comment\",\n \"forem.get_current_user\",\n \"forem.list_articles\",\n \"forem.list_comments\",\n \"forem.list_my_articles\",\n \"forem.list_tags\",\n \"forem.update_article\"\n ]\n },\n {\n \"service\": \"formbricks\",\n \"displayName\": \"Formbricks\",\n \"categories\": [\n \"Productivity\",\n \"Data\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://formbricks.com\",\n \"actionCount\": 7,\n \"actions\": [\n \"formbricks.create_contact\",\n \"formbricks.create_contact_attribute_key\",\n \"formbricks.delete_contact_attribute_key\",\n \"formbricks.get_contact_attribute_key\",\n \"formbricks.get_me\",\n \"formbricks.list_contact_attribute_keys\",\n \"formbricks.update_contact_attribute_key\"\n ]\n },\n {\n \"service\": \"formcarry\",\n \"displayName\": \"Formcarry\",\n \"categories\": [\n \"Marketing\",\n \"Productivity\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://formcarry.com\",\n \"actionCount\": 3,\n \"actions\": [\n \"formcarry.create_form\",\n \"formcarry.delete_form\",\n \"formcarry.list_submissions\"\n ]\n },\n {\n \"service\": \"formsite\",\n \"displayName\": \"Formsite\",\n \"categories\": [\n \"Productivity\",\n \"Data\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.formsite.com\",\n \"actionCount\": 7,\n \"actions\": [\n \"formsite.delete_webhook\",\n \"formsite.get_form\",\n \"formsite.get_form_items\",\n \"formsite.get_form_results\",\n \"formsite.list_forms\",\n \"formsite.list_webhooks\",\n \"formsite.upsert_webhook\"\n ]\n },\n {\n \"service\": \"formspree\",\n \"displayName\": \"Formspree\",\n \"categories\": [\n \"Developer Tools\",\n \"Marketing\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://formspree.io\",\n \"actionCount\": 1,\n \"actions\": [\n \"formspree.list_submissions\"\n ]\n },\n {\n \"service\": \"foursquare\",\n \"displayName\": \"Foursquare\",\n \"categories\": [\n \"Location\",\n \"Data\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://foursquare.com\",\n \"actionCount\": 5,\n \"actions\": [\n \"foursquare.get_nearby_places\",\n \"foursquare.get_place\",\n \"foursquare.get_place_photos\",\n \"foursquare.get_place_tips\",\n \"foursquare.search_places\"\n ]\n },\n {\n \"service\": \"fraudlabspro\",\n \"displayName\": \"FraudLabs Pro\",\n \"categories\": [\n \"Security\",\n \"Data\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.fraudlabspro.com/\",\n \"actionCount\": 3,\n \"actions\": [\n \"fraudlabspro.feedback_order\",\n \"fraudlabspro.get_order_result\",\n \"fraudlabspro.screen_order\"\n ]\n },\n {\n \"service\": \"freepik\",\n \"displayName\": \"Magnific (Freepik)\",\n \"categories\": [\n \"Design & Media\",\n \"AI\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.magnific.com/freepik\",\n \"actionCount\": 3,\n \"actions\": [\n \"freepik.download_resource\",\n \"freepik.get_resource\",\n \"freepik.search_resources\"\n ]\n },\n {\n \"service\": \"freshdesk\",\n \"displayName\": \"Freshdesk\",\n \"categories\": [\n \"Communication\",\n \"Productivity\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.freshworks.com/freshdesk/\",\n \"actionCount\": 4,\n \"actions\": [\n \"freshdesk.get_account\",\n \"freshdesk.get_ticket\",\n \"freshdesk.list_ticket_conversations\",\n \"freshdesk.list_tickets\"\n ]\n },\n {\n \"service\": \"freshsales\",\n \"displayName\": \"Freshsales\",\n \"categories\": [\n \"Marketing\",\n \"Productivity\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.freshworks.com/crm/sales/\",\n \"actionCount\": 6,\n \"actions\": [\n \"freshsales.create_contact\",\n \"freshsales.delete_contact\",\n \"freshsales.get_contact\",\n \"freshsales.list_contact_filters\",\n \"freshsales.list_contacts\",\n \"freshsales.update_contact\"\n ]\n },\n {\n \"service\": \"freshservice\",\n \"displayName\": \"Freshservice\",\n \"categories\": [\n \"Communication\",\n \"Productivity\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.freshworks.com/freshservice/\",\n \"actionCount\": 6,\n \"actions\": [\n \"freshservice.create_service_request\",\n \"freshservice.create_ticket\",\n \"freshservice.get_ticket\",\n \"freshservice.list_locations\",\n \"freshservice.list_service_catalog_items\",\n \"freshservice.list_tickets\"\n ]\n },\n {\n \"service\": \"freshteam\",\n \"displayName\": \"Freshteam\",\n \"categories\": [\n \"Productivity\",\n \"Data\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.freshworks.com/freshteam/\",\n \"actionCount\": 9,\n \"actions\": [\n \"freshteam.get_employee\",\n \"freshteam.get_job_posting\",\n \"freshteam.list_applicant_fields\",\n \"freshteam.list_candidate_source_categories\",\n \"freshteam.list_candidate_sources\",\n \"freshteam.list_employee_fields\",\n \"freshteam.list_employees\",\n \"freshteam.list_job_posting_fields\",\n \"freshteam.list_job_postings\"\n ]\n },\n {\n \"service\": \"front\",\n \"displayName\": \"Front\",\n \"categories\": [\n \"Communication\",\n \"Productivity\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://front.com\",\n \"actionCount\": 5,\n \"actions\": [\n \"front.create_contact\",\n \"front.get_contact\",\n \"front.list_contacts\",\n \"front.list_teammates\",\n \"front.update_contact\"\n ]\n },\n {\n \"service\": \"fullenrich\",\n \"displayName\": \"FullEnrich\",\n \"categories\": [\n \"Data\",\n \"Marketing\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.fullenrich.com\",\n \"actionCount\": 3,\n \"actions\": [\n \"fullenrich.get_credit_balance\",\n \"fullenrich.lookup_company\",\n \"fullenrich.lookup_person\"\n ]\n },\n {\n \"service\": \"fusion-api\",\n \"displayName\": \"OOMOL Fusion API\",\n \"categories\": [\n \"AI\",\n \"Developer Tools\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.oomol.com\",\n \"actionCount\": 84,\n \"actions\": [\n \"fusion-api.cosyvoice_tts_generate\",\n \"fusion-api.cphone_nano_banana_result\",\n \"fusion-api.cphone_nano_banana_state\",\n \"fusion-api.cphone_nano_banana_submit\",\n \"fusion-api.deepseek_ocr_recognize\",\n \"fusion-api.doubao_stt_result\",\n \"fusion-api.doubao_stt_state\",\n \"fusion-api.doubao_stt_submit\",\n \"fusion-api.doubao_text_to_image_seedream_generate\",\n \"fusion-api.doubao_tts_result\",\n \"fusion-api.doubao_tts_state\",\n \"fusion-api.doubao_tts_submit\",\n \"fusion-api.fal_aura_sr_result\",\n \"fusion-api.fal_aura_sr_state\",\n \"fusion-api.fal_aura_sr_submit\",\n \"fusion-api.fal_nano_banana_2_result\",\n \"fusion-api.fal_nano_banana_2_state\",\n \"fusion-api.fal_nano_banana_2_submit\",\n \"fusion-api.fal_nano_banana_pro_result\",\n \"fusion-api.fal_nano_banana_pro_state\",\n \"fusion-api.fal_nano_banana_pro_submit\",\n \"fusion-api.fal_nano_banana_result\",\n \"fusion-api.fal_nano_banana_state\",\n \"fusion-api.fal_nano_banana_submit\",\n \"fusion-api.fal_remove_background_result\",\n \"fusion-api.fal_remove_background_state\",\n \"fusion-api.fal_remove_background_submit\",\n \"fusion-api.file_upload_abort_multipart_upload\",\n \"fusion-api.file_upload_complete_multipart_upload\",\n \"fusion-api.file_upload_create_multipart_upload\",\n \"fusion-api.file_upload_generate_presigned_url\",\n \"fusion-api.file_upload_generate_presigned_urls\",\n \"fusion-api.jina_reader_read\",\n \"fusion-api.jina_reader_search\",\n \"fusion-api.oomol_tts_ng_generate\",\n \"fusion-api.oomol_tts_result\",\n \"fusion-api.oomol_tts_state\",\n \"fusion-api.oomol_tts_submit\",\n \"fusion-api.openai_image_async_result\",\n \"fusion-api.openai_image_async_submit\",\n \"fusion-api.openai_image_edit_async_result\",\n \"fusion-api.openai_image_edit_async_submit\",\n \"fusion-api.pdf_transform_epub_result\",\n \"fusion-api.pdf_transform_epub_state\",\n \"fusion-api.pdf_transform_epub_submit\",\n \"fusion-api.pdf_transform_markdown_result\",\n \"fusion-api.pdf_transform_markdown_state\",\n \"fusion-api.pdf_transform_markdown_submit\",\n \"fusion-api.qwen_asr_filetrans_result\",\n \"fusion-api.qwen_asr_filetrans_state\",\n \"fusion-api.qwen_asr_filetrans_submit\",\n \"fusion-api.qwen_doc_turbo_analyze\",\n \"fusion-api.qwen_image_edit_plus_edit\",\n \"fusion-api.qwen_image_generate\",\n \"fusion-api.qwen_mt_image_result\",\n \"fusion-api.qwen_mt_image_state\",\n \"fusion-api.qwen_mt_image_submit\",\n \"fusion-api.qwen_tts_generate\",\n \"fusion-api.qwen_voice_cloning_create\",\n \"fusion-api.qwen_voice_design_create\",\n \"fusion-api.qwen_voice_design_delete\",\n \"fusion-api.qwen_voice_design_generate\",\n \"fusion-api.qwen_voice_design_list\",\n \"fusion-api.qwen_voice_design_query\",\n \"fusion-api.seedance_video_result\",\n \"fusion-api.seedance_video_state\",\n \"fusion-api.seedance_video_submit\",\n \"fusion-api.text_to_epub_illustrate_generate\",\n \"fusion-api.tinify_png_shrink_compress\",\n \"fusion-api.wanx_i2v_video_result\",\n \"fusion-api.wanx_i2v_video_state\",\n \"fusion-api.wanx_i2v_video_submit\",\n \"fusion-api.wanx_image_result\",\n \"fusion-api.wanx_image_state\",\n \"fusion-api.wanx_image_submit\",\n \"fusion-api.wanx_kf2v_video_result\",\n \"fusion-api.wanx_kf2v_video_state\",\n \"fusion-api.wanx_kf2v_video_submit\",\n \"fusion-api.wanx_r2v_video_result\",\n \"fusion-api.wanx_r2v_video_state\",\n \"fusion-api.wanx_r2v_video_submit\",\n \"fusion-api.wanx_t2v_video_result\",\n \"fusion-api.wanx_t2v_video_state\",\n \"fusion-api.wanx_t2v_video_submit\"\n ]\n },\n {\n \"service\": \"fuxin\",\n \"displayName\": \"Foxit Cloud API\",\n \"categories\": [\n \"Productivity\",\n \"Design & Media\"\n ],\n \"authTypes\": [\n \"custom_credential\"\n ],\n \"homepageUrl\": \"https://cloudapi.fuxinsoft.cn\",\n \"actionCount\": 22,\n \"actions\": [\n \"fuxin.check_pages_are_scanned\",\n \"fuxin.compare_documents\",\n \"fuxin.compress_document\",\n \"fuxin.convert_document\",\n \"fuxin.convert_office_document_to_images\",\n \"fuxin.create_pdf_from_document\",\n \"fuxin.create_pdf_from_html\",\n \"fuxin.download_file\",\n \"fuxin.extract_document\",\n \"fuxin.flatten_document\",\n \"fuxin.get_pages_basic_info\",\n \"fuxin.get_task\",\n \"fuxin.get_user_stock\",\n \"fuxin.linearize_document\",\n \"fuxin.manipulate_document_pages\",\n \"fuxin.merge_documents\",\n \"fuxin.ocr_document\",\n \"fuxin.protect_document\",\n \"fuxin.remove_password_from_document\",\n \"fuxin.split_document\",\n \"fuxin.upload_file\",\n \"fuxin.watermark_document\"\n ]\n },\n {\n \"service\": \"gamma\",\n \"displayName\": \"Gamma\",\n \"categories\": [\n \"AI\",\n \"Design & Media\",\n \"Productivity\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://gamma.app\",\n \"actionCount\": 8,\n \"actions\": [\n \"gamma.create_generation\",\n \"gamma.create_generation_and_wait\",\n \"gamma.create_generation_from_template\",\n \"gamma.create_generation_from_template_and_wait\",\n \"gamma.get_generation\",\n \"gamma.list_folders\",\n \"gamma.list_themes\",\n \"gamma.wait_for_generation\"\n ]\n },\n {\n \"service\": \"geckoboard\",\n \"displayName\": \"Geckoboard\",\n \"categories\": [\n \"Data\",\n \"Productivity\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.geckoboard.com/\",\n \"actionCount\": 4,\n \"actions\": [\n \"geckoboard.append_dataset_data\",\n \"geckoboard.delete_dataset\",\n \"geckoboard.find_or_create_dataset\",\n \"geckoboard.replace_dataset_data\"\n ]\n },\n {\n \"service\": \"gem\",\n \"displayName\": \"Gem\",\n \"categories\": [\n \"Productivity\",\n \"Data\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.gem.com\",\n \"actionCount\": 9,\n \"actions\": [\n \"gem.get_candidate\",\n \"gem.get_project\",\n \"gem.get_sequence\",\n \"gem.list_candidates\",\n \"gem.list_custom_fields\",\n \"gem.list_project_candidates\",\n \"gem.list_projects\",\n \"gem.list_sequences\",\n \"gem.list_users\"\n ]\n },\n {\n \"service\": \"gemini\",\n \"displayName\": \"Gemini\",\n \"categories\": [\n \"AI\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://ai.google.dev/gemini-api\",\n \"actionCount\": 8,\n \"actions\": [\n \"gemini.count_tokens\",\n \"gemini.embed_content\",\n \"gemini.generate_content\",\n \"gemini.generate_image\",\n \"gemini.generate_videos\",\n \"gemini.get_videos_operation\",\n \"gemini.list_models\",\n \"gemini.wait_for_video\"\n ]\n },\n {\n \"service\": \"gender_api\",\n \"displayName\": \"Gender-API.com\",\n \"categories\": [\n \"Data\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://gender-api.com/\",\n \"actionCount\": 5,\n \"actions\": [\n \"gender_api.get_country_of_origin\",\n \"gender_api.get_statistics\",\n \"gender_api.query_gender_by_email_address\",\n \"gender_api.query_gender_by_first_name\",\n \"gender_api.query_gender_by_full_name\"\n ]\n },\n {\n \"service\": \"genderapi_io\",\n \"displayName\": \"GenderAPI.io\",\n \"categories\": [\n \"Data\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.genderapi.io\",\n \"actionCount\": 3,\n \"actions\": [\n \"genderapi_io.get_gender_by_email_address\",\n \"genderapi_io.get_gender_by_first_name\",\n \"genderapi_io.get_gender_by_username\"\n ]\n },\n {\n \"service\": \"genderize\",\n \"displayName\": \"Genderize\",\n \"categories\": [\n \"Data\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://genderize.io/\",\n \"actionCount\": 2,\n \"actions\": [\n \"genderize.predict_gender\",\n \"genderize.predict_gender_batch\"\n ]\n },\n {\n \"service\": \"geoapify\",\n \"displayName\": \"Geoapify\",\n \"categories\": [\n \"Location\",\n \"Developer Tools\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.geoapify.com\",\n \"actionCount\": 5,\n \"actions\": [\n \"geoapify.address_autocomplete\",\n \"geoapify.forward_geocode\",\n \"geoapify.get_route\",\n \"geoapify.get_route_matrix\",\n \"geoapify.reverse_geocode\"\n ]\n },\n {\n \"service\": \"geocodio\",\n \"displayName\": \"Geocodio\",\n \"categories\": [\n \"Location\",\n \"Data\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.geocod.io\",\n \"actionCount\": 4,\n \"actions\": [\n \"geocodio.batch_reverse_geocode\",\n \"geocodio.geocode_batch\",\n \"geocodio.single_geocode\",\n \"geocodio.single_reverse_geocode\"\n ]\n },\n {\n \"service\": \"geokeo\",\n \"displayName\": \"Geokeo\",\n \"categories\": [\n \"Location\",\n \"Data\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://geokeo.com\",\n \"actionCount\": 2,\n \"actions\": [\n \"geokeo.geocode_forward\",\n \"geokeo.geocode_reverse\"\n ]\n },\n {\n \"service\": \"getform\",\n \"displayName\": \"Getform\",\n \"categories\": [\n \"Productivity\",\n \"Marketing\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://forminit.com\",\n \"actionCount\": 2,\n \"actions\": [\n \"getform.list_submissions\",\n \"getform.submit_form\"\n ]\n },\n {\n \"service\": \"getnote\",\n \"displayName\": \"Getnote\",\n \"categories\": [\n \"AI\",\n \"Productivity\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.biji.com/\",\n \"actionCount\": 23,\n \"actions\": [\n \"getnote.add_note_tags\",\n \"getnote.add_notes_to_knowledge_base\",\n \"getnote.create_knowledge_base\",\n \"getnote.delete_note\",\n \"getnote.follow_live\",\n \"getnote.get_blogger_content\",\n \"getnote.get_live_detail\",\n \"getnote.get_note\",\n \"getnote.get_save_task\",\n \"getnote.list_blogger_contents\",\n \"getnote.list_knowledge_base_bloggers\",\n \"getnote.list_knowledge_base_lives\",\n \"getnote.list_knowledge_base_notes\",\n \"getnote.list_knowledge_bases\",\n \"getnote.list_note_tags\",\n \"getnote.list_notes\",\n \"getnote.list_subscribed_knowledge_bases\",\n \"getnote.remove_note_tag\",\n \"getnote.remove_notes_from_knowledge_base\",\n \"getnote.save_note\",\n \"getnote.search_notes\",\n \"getnote.share_note\",\n \"getnote.update_note\"\n ]\n },\n {\n \"service\": \"getprospect\",\n \"displayName\": \"GetProspect\",\n \"categories\": [\n \"Marketing\",\n \"Data\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://getprospect.com\",\n \"actionCount\": 5,\n \"actions\": [\n \"getprospect.find_email\",\n \"getprospect.lookup_email\",\n \"getprospect.search_companies\",\n \"getprospect.search_leads\",\n \"getprospect.verify_email\"\n ]\n },\n {\n \"service\": \"ghost\",\n \"displayName\": \"Ghost\",\n \"categories\": [\n \"Productivity\",\n \"Marketing\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://ghost.org\",\n \"actionCount\": 9,\n \"actions\": [\n \"ghost.get_author\",\n \"ghost.get_page\",\n \"ghost.get_post\",\n \"ghost.get_tag\",\n \"ghost.list_authors\",\n \"ghost.list_pages\",\n \"ghost.list_posts\",\n \"ghost.list_tags\",\n \"ghost.read_settings\"\n ]\n },\n {\n \"service\": \"gift_up\",\n \"displayName\": \"Gift Up\",\n \"categories\": [\n \"Finance\",\n \"Marketing\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.giftup.com/\",\n \"actionCount\": 17,\n \"actions\": [\n \"gift_up.get_company\",\n \"gift_up.get_gift_card\",\n \"gift_up.get_item\",\n \"gift_up.get_order\",\n \"gift_up.get_report_transaction\",\n \"gift_up.list_gift_cards\",\n \"gift_up.list_items\",\n \"gift_up.list_locations\",\n \"gift_up.list_orders\",\n \"gift_up.list_promotions\",\n \"gift_up.list_report_transactions\",\n \"gift_up.reactivate_gift_card\",\n \"gift_up.redeem_gift_card\",\n \"gift_up.redeem_gift_card_in_full\",\n \"gift_up.top_up_gift_card\",\n \"gift_up.undo_gift_card_redemption\",\n \"gift_up.void_gift_card\"\n ]\n },\n {\n \"service\": \"gigasheet\",\n \"displayName\": \"Gigasheet\",\n \"categories\": [\n \"Data\",\n \"Productivity\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.gigasheet.com\",\n \"actionCount\": 7,\n \"actions\": [\n \"gigasheet.describe_dataset\",\n \"gigasheet.get_enrichment_credits\",\n \"gigasheet.get_library_path\",\n \"gigasheet.get_space_used\",\n \"gigasheet.list_exports\",\n \"gigasheet.list_home_files\",\n \"gigasheet.search_library\"\n ]\n },\n {\n \"service\": \"giphy\",\n \"displayName\": \"GIPHY\",\n \"categories\": [\n \"Design & Media\",\n \"Social\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://giphy.com\",\n \"actionCount\": 15,\n \"actions\": [\n \"giphy.get_gif\",\n \"giphy.get_random_gif\",\n \"giphy.get_random_id\",\n \"giphy.get_random_sticker\",\n \"giphy.list_categories\",\n \"giphy.list_gifs_by_ids\",\n \"giphy.list_related_tags\",\n \"giphy.list_trending_gifs\",\n \"giphy.list_trending_stickers\",\n \"giphy.list_trending_tags\",\n \"giphy.search_gifs\",\n \"giphy.search_stickers\",\n \"giphy.search_tags\",\n \"giphy.translate_gif\",\n \"giphy.translate_sticker\"\n ]\n },\n {\n \"service\": \"gist\",\n \"displayName\": \"Gist\",\n \"categories\": [\n \"Developer Tools\"\n ],\n \"authTypes\": [\n \"oauth2\",\n \"api_key\"\n ],\n \"homepageUrl\": \"https://gist.github.com\",\n \"actionCount\": 20,\n \"actions\": [\n \"gist.check_gist_starred\",\n \"gist.create_gist\",\n \"gist.create_gist_comment\",\n \"gist.delete_gist\",\n \"gist.delete_gist_comment\",\n \"gist.fork_gist\",\n \"gist.get_gist\",\n \"gist.get_gist_comment\",\n \"gist.get_gist_revision\",\n \"gist.list_gist_comments\",\n \"gist.list_gist_commits\",\n \"gist.list_gist_forks\",\n \"gist.list_my_gists\",\n \"gist.list_public_gists\",\n \"gist.list_starred_gists\",\n \"gist.list_user_gists\",\n \"gist.star_gist\",\n \"gist.unstar_gist\",\n \"gist.update_gist\",\n \"gist.update_gist_comment\"\n ]\n },\n {\n \"service\": \"gitea\",\n \"displayName\": \"Gitea\",\n \"categories\": [\n \"Developer Tools\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://about.gitea.com/products/gitea/\",\n \"actionCount\": 9,\n \"actions\": [\n \"gitea.create_issue\",\n \"gitea.create_issue_comment\",\n \"gitea.get_current_user\",\n \"gitea.get_issue\",\n \"gitea.get_repository\",\n \"gitea.list_issue_comments\",\n \"gitea.list_my_repositories\",\n \"gitea.list_repository_issues\",\n \"gitea.search_repositories\"\n ]\n },\n {\n \"service\": \"gitee\",\n \"displayName\": \"Gitee\",\n \"categories\": [\n \"Developer Tools\"\n ],\n \"authTypes\": [\n \"oauth2\",\n \"api_key\"\n ],\n \"homepageUrl\": \"https://gitee.com\",\n \"actionCount\": 3,\n \"actions\": [\n \"gitee.get_current_user\",\n \"gitee.get_repository\",\n \"gitee.list_my_repositories\"\n ]\n },\n {\n \"service\": \"github\",\n \"displayName\": \"GitHub\",\n \"categories\": [\n \"Developer Tools\"\n ],\n \"authTypes\": [\n \"oauth2\",\n \"api_key\"\n ],\n \"homepageUrl\": \"https://github.com\",\n \"actionCount\": 145,\n \"actions\": [\n \"github.add_issue_assignees\",\n \"github.add_issue_labels\",\n \"github.add_repository_collaborator\",\n \"github.cancel_workflow_run\",\n \"github.check_pull_request_merged\",\n \"github.check_repository_starred\",\n \"github.clear_issue_labels\",\n \"github.compare_commits\",\n \"github.create_commit_comment\",\n \"github.create_commit_status\",\n \"github.create_issue\",\n \"github.create_issue_comment\",\n \"github.create_issue_comment_reaction\",\n \"github.create_issue_reaction\",\n \"github.create_label\",\n \"github.create_milestone\",\n \"github.create_or_update_file\",\n \"github.create_pull_request\",\n \"github.create_pull_request_review\",\n \"github.create_pull_request_review_comment\",\n \"github.create_ref\",\n \"github.create_release\",\n \"github.create_repository\",\n \"github.delete_file\",\n \"github.delete_issue_comment\",\n \"github.delete_label\",\n \"github.delete_milestone\",\n \"github.delete_pending_pull_request_review\",\n \"github.delete_pull_request_review_comment\",\n \"github.delete_ref\",\n \"github.delete_release\",\n \"github.delete_release_asset\",\n \"github.delete_repository\",\n \"github.disable_workflow\",\n \"github.dismiss_pull_request_review\",\n \"github.dispatch_workflow\",\n \"github.enable_workflow\",\n \"github.fork_repository\",\n \"github.generate_release_notes\",\n \"github.get_branch\",\n \"github.get_commit\",\n \"github.get_commit_statuses\",\n \"github.get_current_user\",\n \"github.get_file_contents\",\n \"github.get_issue\",\n \"github.get_issue_comment\",\n \"github.get_label\",\n \"github.get_latest_release\",\n \"github.get_milestone\",\n \"github.get_pull_request\",\n \"github.get_pull_request_review\",\n \"github.get_ref\",\n \"github.get_release\",\n \"github.get_release_asset\",\n \"github.get_release_by_tag\",\n \"github.get_repository\",\n \"github.get_repository_permission_for_user\",\n \"github.get_repository_readme\",\n \"github.get_user\",\n \"github.get_workflow\",\n \"github.get_workflow_run\",\n \"github.list_assignees\",\n \"github.list_authenticated_user_events\",\n \"github.list_authenticated_user_received_events\",\n \"github.list_branches\",\n \"github.list_check_runs_for_ref\",\n \"github.list_commit_comments\",\n \"github.list_commits\",\n \"github.list_directory_contents\",\n \"github.list_issue_comments\",\n \"github.list_issue_events\",\n \"github.list_issue_labels\",\n \"github.list_issue_timeline_events\",\n \"github.list_matching_refs\",\n \"github.list_milestones\",\n \"github.list_my_repositories\",\n \"github.list_my_starred_repositories\",\n \"github.list_organization_repositories\",\n \"github.list_public_events\",\n \"github.list_pull_request_commits\",\n \"github.list_pull_request_files\",\n \"github.list_pull_request_requested_reviewers\",\n \"github.list_pull_request_review_comments\",\n \"github.list_pull_request_reviews\",\n \"github.list_pull_requests\",\n \"github.list_pull_requests_associated_with_commit\",\n \"github.list_release_assets\",\n \"github.list_releases\",\n \"github.list_repository_collaborators\",\n \"github.list_repository_contributors\",\n \"github.list_repository_events\",\n \"github.list_repository_forks\",\n \"github.list_repository_issue_events\",\n \"github.list_repository_issues\",\n \"github.list_repository_labels\",\n \"github.list_repository_languages\",\n \"github.list_repository_stargazers\",\n \"github.list_repository_tags\",\n \"github.list_repository_topics\",\n \"github.list_repository_watchers\",\n \"github.list_repository_workflows\",\n \"github.list_user_public_events\",\n \"github.list_user_received_public_events\",\n \"github.list_user_repositories\",\n \"github.list_workflow_run_artifacts\",\n \"github.list_workflow_run_jobs\",\n \"github.list_workflow_runs\",\n \"github.lock_issue\",\n \"github.merge_branch\",\n \"github.merge_pull_request\",\n \"github.remove_issue_assignees\",\n \"github.remove_issue_label\",\n \"github.remove_pull_request_reviewers\",\n \"github.remove_repository_collaborator\",\n \"github.rename_branch\",\n \"github.replace_repository_topics\",\n \"github.reply_pull_request_review_comment\",\n \"github.request_pull_request_reviewers\",\n \"github.rerequest_check_run\",\n \"github.rerequest_check_suite\",\n \"github.rerun_failed_jobs\",\n \"github.rerun_workflow\",\n \"github.search_code\",\n \"github.search_commits\",\n \"github.search_issues_and_pull_requests\",\n \"github.search_labels\",\n \"github.search_repositories\",\n \"github.search_topics\",\n \"github.search_users\",\n \"github.set_issue_labels\",\n \"github.star_repository\",\n \"github.submit_pull_request_review\",\n \"github.sync_fork_branch_with_upstream\",\n \"github.unlock_issue\",\n \"github.unstar_repository\",\n \"github.update_issue\",\n \"github.update_issue_comment\",\n \"github.update_label\",\n \"github.update_milestone\",\n \"github.update_pull_request\",\n \"github.update_pull_request_branch\",\n \"github.update_pull_request_review_comment\",\n \"github.update_ref\",\n \"github.update_release\",\n \"github.update_repository\"\n ]\n },\n {\n \"service\": \"gitlab\",\n \"displayName\": \"GitLab\",\n \"categories\": [\n \"Developer Tools\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://gitlab.com\",\n \"actionCount\": 5,\n \"actions\": [\n \"gitlab.create_project_issue\",\n \"gitlab.get_current_user\",\n \"gitlab.get_project\",\n \"gitlab.list_project_issues\",\n \"gitlab.list_projects\"\n ]\n },\n {\n \"service\": \"givebutter\",\n \"displayName\": \"Givebutter\",\n \"categories\": [\n \"Finance\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://givebutter.com\",\n \"actionCount\": 12,\n \"actions\": [\n \"givebutter.get_campaign\",\n \"givebutter.get_chapter\",\n \"givebutter.get_contact\",\n \"givebutter.get_fund\",\n \"givebutter.get_recurring_plan\",\n \"givebutter.get_transaction\",\n \"givebutter.list_campaigns\",\n \"givebutter.list_chapters\",\n \"givebutter.list_contacts\",\n \"givebutter.list_funds\",\n \"givebutter.list_recurring_plans\",\n \"givebutter.list_transactions\"\n ]\n },\n {\n \"service\": \"gladia\",\n \"displayName\": \"Gladia\",\n \"categories\": [\n \"AI\",\n \"Design & Media\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://app.gladia.io/\",\n \"actionCount\": 6,\n \"actions\": [\n \"gladia.delete_transcription\",\n \"gladia.download_transcription_audio\",\n \"gladia.get_transcription\",\n \"gladia.list_transcriptions\",\n \"gladia.start_transcription\",\n \"gladia.upload_file\"\n ]\n },\n {\n \"service\": \"gleap\",\n \"displayName\": \"Gleap\",\n \"categories\": [\n \"Communication\",\n \"Productivity\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.gleap.io\",\n \"actionCount\": 11,\n \"actions\": [\n \"gleap.create_contact\",\n \"gleap.create_ticket\",\n \"gleap.create_ticket_with_message\",\n \"gleap.delete_ticket\",\n \"gleap.get_contact_by_user_id\",\n \"gleap.get_current_user\",\n \"gleap.get_ticket\",\n \"gleap.list_contacts\",\n \"gleap.list_tickets\",\n \"gleap.update_contact\",\n \"gleap.update_ticket\"\n ]\n },\n {\n \"service\": \"globalping\",\n \"displayName\": \"Globalping\",\n \"categories\": [\n \"Developer Tools\",\n \"Data\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://globalping.io\",\n \"actionCount\": 4,\n \"actions\": [\n \"globalping.create_measurement\",\n \"globalping.get_limits\",\n \"globalping.get_measurement\",\n \"globalping.list_probes\"\n ]\n },\n {\n \"service\": \"glyphic\",\n \"displayName\": \"Glyphic\",\n \"categories\": [\n \"AI\",\n \"Productivity\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.goairspeed.com\",\n \"actionCount\": 9,\n \"actions\": [\n \"glyphic.get_call\",\n \"glyphic.get_call_media\",\n \"glyphic.get_call_snippets\",\n \"glyphic.get_playbook\",\n \"glyphic.get_playbook_version\",\n \"glyphic.list_call_tags\",\n \"glyphic.list_calls\",\n \"glyphic.list_playbook_versions\",\n \"glyphic.list_playbooks\"\n ]\n },\n {\n \"service\": \"gmail\",\n \"displayName\": \"Gmail\",\n \"categories\": [\n \"Productivity\"\n ],\n \"authTypes\": [\n \"oauth2\"\n ],\n \"homepageUrl\": \"https://mail.google.com\",\n \"actionCount\": 46,\n \"actions\": [\n \"gmail.add_label_to_email\",\n \"gmail.batch_modify_messages\",\n \"gmail.create_draft\",\n \"gmail.create_email_draft\",\n \"gmail.create_filter\",\n \"gmail.create_label\",\n \"gmail.delete_draft\",\n \"gmail.delete_filter\",\n \"gmail.delete_label\",\n \"gmail.fetch_emails\",\n \"gmail.fetch_message_by_message_id\",\n \"gmail.fetch_message_by_thread_id\",\n \"gmail.get_auto_forwarding\",\n \"gmail.get_draft\",\n \"gmail.get_filter\",\n \"gmail.get_label\",\n \"gmail.get_language_settings\",\n \"gmail.get_message\",\n \"gmail.get_profile\",\n \"gmail.get_vacation_settings\",\n \"gmail.list_drafts\",\n \"gmail.list_filters\",\n \"gmail.list_forwarding_addresses\",\n \"gmail.list_history\",\n \"gmail.list_labels\",\n \"gmail.list_threads\",\n \"gmail.modify_thread_labels\",\n \"gmail.move_thread_to_trash\",\n \"gmail.move_to_trash\",\n \"gmail.patch_label\",\n \"gmail.reply_email\",\n \"gmail.reply_to_thread\",\n \"gmail.search_threads\",\n \"gmail.send_draft\",\n \"gmail.send_email\",\n \"gmail.settings_get_imap\",\n \"gmail.settings_get_pop\",\n \"gmail.stop_watch\",\n \"gmail.untrash_message\",\n \"gmail.untrash_thread\",\n \"gmail.update_draft\",\n \"gmail.update_imap_settings\",\n \"gmail.update_label\",\n \"gmail.update_language_settings\",\n \"gmail.update_pop_settings\",\n \"gmail.update_vacation_settings\"\n ]\n },\n {\n \"service\": \"godial\",\n \"displayName\": \"GoDial\",\n \"categories\": [\n \"Communication\",\n \"Productivity\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://godial.cc\",\n \"actionCount\": 5,\n \"actions\": [\n \"godial.create_contact\",\n \"godial.get_contact\",\n \"godial.list_accounts\",\n \"godial.list_contacts_in_list\",\n \"godial.list_lists\"\n ]\n },\n {\n \"service\": \"gong\",\n \"displayName\": \"Gong\",\n \"categories\": [\n \"Data\",\n \"Productivity\"\n ],\n \"authTypes\": [\n \"custom_credential\"\n ],\n \"homepageUrl\": \"https://www.gong.io/\",\n \"actionCount\": 6,\n \"actions\": [\n \"gong.get_call\",\n \"gong.get_call_transcripts\",\n \"gong.get_user\",\n \"gong.list_call_outcomes\",\n \"gong.list_calls\",\n \"gong.list_users\"\n ]\n },\n {\n \"service\": \"goody\",\n \"displayName\": \"Goody\",\n \"categories\": [\n \"Productivity\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.ongoody.com\",\n \"actionCount\": 7,\n \"actions\": [\n \"goody.get_current_user\",\n \"goody.get_order\",\n \"goody.get_product\",\n \"goody.list_orders\",\n \"goody.list_payment_methods\",\n \"goody.list_products\",\n \"goody.list_workspaces\"\n ]\n },\n {\n \"service\": \"google_address_validation\",\n \"displayName\": \"Google Address Validation\",\n \"categories\": [\n \"Location\",\n \"Data\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://developers.google.com/maps/documentation/address-validation\",\n \"actionCount\": 2,\n \"actions\": [\n \"google_address_validation.provide_validation_feedback\",\n \"google_address_validation.validate_address\"\n ]\n },\n {\n \"service\": \"google_analytics\",\n \"displayName\": \"Google Analytics\",\n \"categories\": [\n \"Data\",\n \"Marketing\"\n ],\n \"authTypes\": [\n \"oauth2\"\n ],\n \"homepageUrl\": \"https://analytics.google.com\",\n \"actionCount\": 28,\n \"actions\": [\n \"google_analytics.archive_custom_dimension\",\n \"google_analytics.archive_custom_metric\",\n \"google_analytics.batch_run_pivot_reports\",\n \"google_analytics.batch_run_reports\",\n \"google_analytics.check_compatibility\",\n \"google_analytics.create_custom_dimension\",\n \"google_analytics.create_custom_metric\",\n \"google_analytics.get_metadata\",\n \"google_analytics.get_property_overview\",\n \"google_analytics.get_property_quotas_snapshot\",\n \"google_analytics.list_account_summaries\",\n \"google_analytics.list_custom_dimensions\",\n \"google_analytics.list_custom_metrics\",\n \"google_analytics.list_data_streams\",\n \"google_analytics.list_properties\",\n \"google_analytics.list_properties_filtered\",\n \"google_analytics.run_acquisition_report\",\n \"google_analytics.run_engagement_report\",\n \"google_analytics.run_events_report\",\n \"google_analytics.run_geography_report\",\n \"google_analytics.run_key_events_report\",\n \"google_analytics.run_pages_report\",\n \"google_analytics.run_pivot_report\",\n \"google_analytics.run_realtime_report\",\n \"google_analytics.run_report\",\n \"google_analytics.run_technology_report\",\n \"google_analytics.update_data_retention_settings\",\n \"google_analytics.update_property\"\n ]\n },\n {\n \"service\": \"google_bigquery\",\n \"displayName\": \"Google BigQuery\",\n \"categories\": [\n \"Data\",\n \"Developer Tools\"\n ],\n \"authTypes\": [\n \"oauth2\"\n ],\n \"homepageUrl\": \"https://cloud.google.com/bigquery\",\n \"actionCount\": 32,\n \"actions\": [\n \"google_bigquery.cancel_job\",\n \"google_bigquery.create_dataset\",\n \"google_bigquery.create_routine\",\n \"google_bigquery.create_table\",\n \"google_bigquery.delete_dataset\",\n \"google_bigquery.delete_model\",\n \"google_bigquery.delete_routine\",\n \"google_bigquery.delete_table\",\n \"google_bigquery.get_dataset\",\n \"google_bigquery.get_job\",\n \"google_bigquery.get_model\",\n \"google_bigquery.get_query_results\",\n \"google_bigquery.get_routine\",\n \"google_bigquery.get_table\",\n \"google_bigquery.insert_all\",\n \"google_bigquery.list_datasets\",\n \"google_bigquery.list_jobs\",\n \"google_bigquery.list_models\",\n \"google_bigquery.list_projects\",\n \"google_bigquery.list_routines\",\n \"google_bigquery.list_table_data\",\n \"google_bigquery.list_tables\",\n \"google_bigquery.patch_dataset\",\n \"google_bigquery.patch_model\",\n \"google_bigquery.patch_table\",\n \"google_bigquery.query\",\n \"google_bigquery.start_extract_job_to_gcs\",\n \"google_bigquery.start_load_job_from_gcs\",\n \"google_bigquery.start_query_job\",\n \"google_bigquery.update_dataset\",\n \"google_bigquery.update_routine\",\n \"google_bigquery.update_table\"\n ]\n },\n {\n \"service\": \"google_routes\",\n \"displayName\": \"Google Routes\",\n \"categories\": [\n \"Location\",\n \"Developer Tools\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://developers.google.com/maps/documentation/routes\",\n \"actionCount\": 2,\n \"actions\": [\n \"google_routes.compute_route_matrix\",\n \"google_routes.compute_routes\"\n ]\n },\n {\n \"service\": \"google_search_console\",\n \"displayName\": \"Google Search Console\",\n \"categories\": [\n \"Data\",\n \"Marketing\"\n ],\n \"authTypes\": [\n \"oauth2\"\n ],\n \"homepageUrl\": \"https://search.google.com/search-console\",\n \"actionCount\": 10,\n \"actions\": [\n \"google_search_console.add_site\",\n \"google_search_console.delete_site\",\n \"google_search_console.delete_sitemap\",\n \"google_search_console.get_site\",\n \"google_search_console.get_sitemap\",\n \"google_search_console.inspect_url\",\n \"google_search_console.list_sitemaps\",\n \"google_search_console.list_sites\",\n \"google_search_console.query_search_analytics\",\n \"google_search_console.submit_sitemap\"\n ]\n },\n {\n \"service\": \"googleads\",\n \"displayName\": \"Google Ads\",\n \"categories\": [\n \"Marketing\",\n \"Data\"\n ],\n \"authTypes\": [\n \"oauth2\"\n ],\n \"homepageUrl\": \"https://ads.google.com\",\n \"actionCount\": 9,\n \"actions\": [\n \"googleads.add_or_remove_to_customer_list\",\n \"googleads.create_customer_list\",\n \"googleads.get_campaign_by_id\",\n \"googleads.get_campaign_by_name\",\n \"googleads.list_accessible_customers\",\n \"googleads.list_customer_lists\",\n \"googleads.mutate_ad_groups\",\n \"googleads.mutate_campaigns\",\n \"googleads.search_stream_gaql\"\n ]\n },\n {\n \"service\": \"googlecalendar\",\n \"displayName\": \"Google Calendar\",\n \"categories\": [\n \"Productivity\",\n \"Communication\"\n ],\n \"authTypes\": [\n \"oauth2\"\n ],\n \"homepageUrl\": \"https://workspace.google.com/products/calendar/\",\n \"actionCount\": 37,\n \"actions\": [\n \"googlecalendar.add_calendar_to_list\",\n \"googlecalendar.clear_calendar\",\n \"googlecalendar.create_acl_rule\",\n \"googlecalendar.create_calendar\",\n \"googlecalendar.create_event\",\n \"googlecalendar.delete_acl_rule\",\n \"googlecalendar.delete_calendar\",\n \"googlecalendar.delete_event\",\n \"googlecalendar.find_event\",\n \"googlecalendar.find_free_slots\",\n \"googlecalendar.free_busy_query\",\n \"googlecalendar.get_acl_rule\",\n \"googlecalendar.get_calendar\",\n \"googlecalendar.get_calendar_list_entry\",\n \"googlecalendar.get_colors\",\n \"googlecalendar.get_event\",\n \"googlecalendar.get_setting\",\n \"googlecalendar.import_event\",\n \"googlecalendar.list_acl\",\n \"googlecalendar.list_calendars\",\n \"googlecalendar.list_event_instances\",\n \"googlecalendar.list_events\",\n \"googlecalendar.list_events_all_calendars\",\n \"googlecalendar.list_settings\",\n \"googlecalendar.move_event\",\n \"googlecalendar.patch_acl_rule\",\n \"googlecalendar.patch_calendar\",\n \"googlecalendar.patch_calendar_list_entry\",\n \"googlecalendar.patch_event\",\n \"googlecalendar.quick_add_event\",\n \"googlecalendar.remove_attendee\",\n \"googlecalendar.remove_calendar_from_list\",\n \"googlecalendar.sync_events\",\n \"googlecalendar.update_acl_rule\",\n \"googlecalendar.update_calendar\",\n \"googlecalendar.update_calendar_list_entry\",\n \"googlecalendar.update_event\"\n ]\n },\n {\n \"service\": \"googledocs\",\n \"displayName\": \"Google Docs\",\n \"categories\": [\n \"Productivity\"\n ],\n \"authTypes\": [\n \"oauth2\"\n ],\n \"homepageUrl\": \"https://workspace.google.com/products/docs/\",\n \"actionCount\": 32,\n \"actions\": [\n \"googledocs.copy_document\",\n \"googledocs.create_document\",\n \"googledocs.create_document2\",\n \"googledocs.create_footer\",\n \"googledocs.create_footnote\",\n \"googledocs.create_header\",\n \"googledocs.create_named_range\",\n \"googledocs.create_paragraph_bullets\",\n \"googledocs.delete_content_range\",\n \"googledocs.delete_footer\",\n \"googledocs.delete_header\",\n \"googledocs.delete_named_range\",\n \"googledocs.delete_paragraph_bullets\",\n \"googledocs.delete_table_column\",\n \"googledocs.delete_table_row\",\n \"googledocs.export_document_as_pdf\",\n \"googledocs.get_document_by_id\",\n \"googledocs.get_document_plaintext\",\n \"googledocs.insert_inline_image\",\n \"googledocs.insert_page_break\",\n \"googledocs.insert_table_action\",\n \"googledocs.insert_table_column\",\n \"googledocs.insert_text_action\",\n \"googledocs.list_spreadsheet_charts\",\n \"googledocs.replace_all_text\",\n \"googledocs.replace_image\",\n \"googledocs.search_documents\",\n \"googledocs.unmerge_table_cells\",\n \"googledocs.update_document_batch\",\n \"googledocs.update_document_style\",\n \"googledocs.update_existing_document\",\n \"googledocs.update_table_row_style\"\n ]\n },\n {\n \"service\": \"googledrive\",\n \"displayName\": \"Google Drive\",\n \"categories\": [\n \"Storage\",\n \"Productivity\"\n ],\n \"authTypes\": [\n \"oauth2\"\n ],\n \"homepageUrl\": \"https://workspace.google.com/products/drive/\",\n \"actionCount\": 43,\n \"actions\": [\n \"googledrive.about.get\",\n \"googledrive.accessproposals.list\",\n \"googledrive.approvals.list\",\n \"googledrive.apps.get\",\n \"googledrive.changes.getStartPageToken\",\n \"googledrive.changes.list\",\n \"googledrive.comments.create\",\n \"googledrive.comments.delete\",\n \"googledrive.comments.get\",\n \"googledrive.comments.list\",\n \"googledrive.comments.update\",\n \"googledrive.drives.create\",\n \"googledrive.drives.delete\",\n \"googledrive.drives.get\",\n \"googledrive.drives.hide\",\n \"googledrive.drives.list\",\n \"googledrive.drives.unhide\",\n \"googledrive.drives.update\",\n \"googledrive.files.copy\",\n \"googledrive.files.create\",\n \"googledrive.files.delete\",\n \"googledrive.files.emptyTrash\",\n \"googledrive.files.export\",\n \"googledrive.files.generateIds\",\n \"googledrive.files.get\",\n \"googledrive.files.list\",\n \"googledrive.files.listLabels\",\n \"googledrive.files.modifyLabels\",\n \"googledrive.files.update\",\n \"googledrive.permissions.create\",\n \"googledrive.permissions.delete\",\n \"googledrive.permissions.get\",\n \"googledrive.permissions.list\",\n \"googledrive.permissions.update\",\n \"googledrive.replies.create\",\n \"googledrive.replies.delete\",\n \"googledrive.replies.get\",\n \"googledrive.replies.list\",\n \"googledrive.replies.update\",\n \"googledrive.revisions.delete\",\n \"googledrive.revisions.get\",\n \"googledrive.revisions.list\",\n \"googledrive.revisions.update\"\n ]\n },\n {\n \"service\": \"googleforms\",\n \"displayName\": \"Google Forms\",\n \"categories\": [\n \"Productivity\",\n \"Data\"\n ],\n \"authTypes\": [\n \"oauth2\"\n ],\n \"homepageUrl\": \"https://workspace.google.com/products/forms/\",\n \"actionCount\": 7,\n \"actions\": [\n \"googleforms.batch_update_form\",\n \"googleforms.create_form\",\n \"googleforms.get_form\",\n \"googleforms.get_response\",\n \"googleforms.list_responses\",\n \"googleforms.list_watches\",\n \"googleforms.set_publish_settings\"\n ]\n },\n {\n \"service\": \"googlephotos\",\n \"displayName\": \"Google Photos\",\n \"categories\": [\n \"Storage\",\n \"Design\"\n ],\n \"authTypes\": [\n \"oauth2\"\n ],\n \"homepageUrl\": \"https://www.google.com/photos/about/\",\n \"actionCount\": 18,\n \"actions\": [\n \"googlephotos.add_enrichment\",\n \"googlephotos.batch_add_media_items\",\n \"googlephotos.batch_create_media_items\",\n \"googlephotos.batch_get_media_items\",\n \"googlephotos.create_album\",\n \"googlephotos.create_picker_session\",\n \"googlephotos.delete_picker_session\",\n \"googlephotos.get_album\",\n \"googlephotos.get_media_item_download\",\n \"googlephotos.get_picked_media_item_download\",\n \"googlephotos.get_picker_session\",\n \"googlephotos.list_albums\",\n \"googlephotos.list_media_items\",\n \"googlephotos.list_picked_media_items\",\n \"googlephotos.search_media_items\",\n \"googlephotos.update_album\",\n \"googlephotos.update_media_item\",\n \"googlephotos.upload_media\"\n ]\n },\n {\n \"service\": \"googlesheets\",\n \"displayName\": \"Google Sheets\",\n \"categories\": [\n \"Productivity\",\n \"Data\"\n ],\n \"authTypes\": [\n \"oauth2\"\n ],\n \"homepageUrl\": \"https://workspace.google.com/products/sheets/\",\n \"actionCount\": 40,\n \"actions\": [\n \"googlesheets.add_sheet\",\n \"googlesheets.aggregate_column_data\",\n \"googlesheets.append_dimension\",\n \"googlesheets.auto_resize_dimensions\",\n \"googlesheets.batch_clear_values_by_data_filter\",\n \"googlesheets.batch_get\",\n \"googlesheets.batch_update_values_by_data_filter\",\n \"googlesheets.clear_basic_filter\",\n \"googlesheets.clear_values\",\n \"googlesheets.create_chart\",\n \"googlesheets.create_google_sheet1\",\n \"googlesheets.create_spreadsheet_column\",\n \"googlesheets.create_spreadsheet_row\",\n \"googlesheets.delete_dimension\",\n \"googlesheets.delete_sheet\",\n \"googlesheets.find_replace\",\n \"googlesheets.format_cell\",\n \"googlesheets.get_conditional_format_rules\",\n \"googlesheets.get_data_validation_rules\",\n \"googlesheets.get_sheet_names\",\n \"googlesheets.get_spreadsheet_by_data_filter\",\n \"googlesheets.get_spreadsheet_info\",\n \"googlesheets.insert_dimension\",\n \"googlesheets.lookup_spreadsheet_row\",\n \"googlesheets.mutate_conditional_format_rules\",\n \"googlesheets.search_developer_metadata\",\n \"googlesheets.search_spreadsheets\",\n \"googlesheets.set_basic_filter\",\n \"googlesheets.set_data_validation_rule\",\n \"googlesheets.spreadsheets_sheets_copy_to\",\n \"googlesheets.spreadsheets_values_append\",\n \"googlesheets.spreadsheets_values_batch_clear\",\n \"googlesheets.spreadsheets_values_batch_get_by_data_filter\",\n \"googlesheets.update_dimension_properties\",\n \"googlesheets.update_sheet_properties\",\n \"googlesheets.update_spreadsheet_properties\",\n \"googlesheets.update_values_batch\",\n \"googlesheets.upsert_rows\",\n \"googlesheets.values_get\",\n \"googlesheets.values_update\"\n ]\n },\n {\n \"service\": \"googleslides\",\n \"displayName\": \"Google Slides\",\n \"categories\": [\n \"Productivity\",\n \"Design\"\n ],\n \"authTypes\": [\n \"oauth2\"\n ],\n \"homepageUrl\": \"https://workspace.google.com/products/slides/\",\n \"actionCount\": 7,\n \"actions\": [\n \"googleslides.create_presentation\",\n \"googleslides.get_page_thumbnail2\",\n \"googleslides.presentations_batch_update\",\n \"googleslides.presentations_copy_from_template\",\n \"googleslides.presentations_get\",\n \"googleslides.presentations_pages_get\",\n \"googleslides.presentations_pages_get_thumbnail\"\n ]\n },\n {\n \"service\": \"googletasks\",\n \"displayName\": \"Google Tasks\",\n \"categories\": [\n \"Productivity\"\n ],\n \"authTypes\": [\n \"oauth2\"\n ],\n \"homepageUrl\": \"https://tasks.google.com\",\n \"actionCount\": 16,\n \"actions\": [\n \"googletasks.clear_tasks\",\n \"googletasks.create_task_list\",\n \"googletasks.delete_task\",\n \"googletasks.delete_task_list\",\n \"googletasks.get_task\",\n \"googletasks.get_task_list\",\n \"googletasks.insert_task\",\n \"googletasks.list_all_tasks\",\n \"googletasks.list_task_lists\",\n \"googletasks.list_tasks\",\n \"googletasks.move_task\",\n \"googletasks.patch_task\",\n \"googletasks.patch_task_list\",\n \"googletasks.update_task\",\n \"googletasks.update_task_full\",\n \"googletasks.update_task_list\"\n ]\n },\n {\n \"service\": \"gorgias\",\n \"displayName\": \"Gorgias\",\n \"categories\": [\n \"Communication\",\n \"Productivity\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.gorgias.com\",\n \"actionCount\": 6,\n \"actions\": [\n \"gorgias.get_account\",\n \"gorgias.get_ticket\",\n \"gorgias.list_customers\",\n \"gorgias.list_tags\",\n \"gorgias.list_tickets\",\n \"gorgias.list_users\"\n ]\n },\n {\n \"service\": \"gosquared\",\n \"displayName\": \"GoSquared\",\n \"categories\": [\n \"Data\",\n \"Marketing\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.gosquared.com/\",\n \"actionCount\": 4,\n \"actions\": [\n \"gosquared.get_now_overview\",\n \"gosquared.get_now_time_series\",\n \"gosquared.get_token_info\",\n \"gosquared.get_trends_aggregate\"\n ]\n },\n {\n \"service\": \"grafana\",\n \"displayName\": \"Grafana\",\n \"categories\": [\n \"Data\",\n \"Developer Tools\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://grafana.com\",\n \"actionCount\": 15,\n \"actions\": [\n \"grafana.create_dashboard\",\n \"grafana.create_data_source\",\n \"grafana.create_folder\",\n \"grafana.delete_dashboard\",\n \"grafana.delete_data_source\",\n \"grafana.delete_folder\",\n \"grafana.get_dashboard\",\n \"grafana.get_data_source\",\n \"grafana.get_folder\",\n \"grafana.list_data_sources\",\n \"grafana.list_folders\",\n \"grafana.search_dashboards\",\n \"grafana.update_dashboard\",\n \"grafana.update_data_source\",\n \"grafana.update_folder\"\n ]\n },\n {\n \"service\": \"grafana_cloud\",\n \"displayName\": \"Grafana Cloud\",\n \"categories\": [\n \"Developer Tools\",\n \"Data\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://grafana.com/products/cloud/\",\n \"actionCount\": 4,\n \"actions\": [\n \"grafana_cloud.get_billed_usage\",\n \"grafana_cloud.get_stack_connectivity\",\n \"grafana_cloud.list_regions\",\n \"grafana_cloud.list_stacks\"\n ]\n },\n {\n \"service\": \"granola\",\n \"displayName\": \"Granola\",\n \"categories\": [\n \"AI\",\n \"Productivity\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.granola.ai\",\n \"actionCount\": 3,\n \"actions\": [\n \"granola.get_note\",\n \"granola.list_folders\",\n \"granola.list_notes\"\n ]\n },\n {\n \"service\": \"graphhopper\",\n \"displayName\": \"GraphHopper\",\n \"categories\": [\n \"Location\",\n \"Developer Tools\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.graphhopper.com\",\n \"actionCount\": 5,\n \"actions\": [\n \"graphhopper.calculate_route\",\n \"graphhopper.compute_isochrone\",\n \"graphhopper.compute_matrix\",\n \"graphhopper.geocode\",\n \"graphhopper.list_profiles\"\n ]\n },\n {\n \"service\": \"greenhouse\",\n \"displayName\": \"Greenhouse\",\n \"categories\": [\n \"Productivity\",\n \"Data\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.greenhouse.com\",\n \"actionCount\": 7,\n \"actions\": [\n \"greenhouse.add_candidate_note\",\n \"greenhouse.get_application\",\n \"greenhouse.get_candidate\",\n \"greenhouse.get_job\",\n \"greenhouse.list_applications\",\n \"greenhouse.list_candidates\",\n \"greenhouse.list_jobs\"\n ]\n },\n {\n \"service\": \"griptape\",\n \"displayName\": \"Griptape\",\n \"categories\": [\n \"AI\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.griptape.ai\",\n \"actionCount\": 12,\n \"actions\": [\n \"griptape.cancel_assistant_run\",\n \"griptape.create_assistant\",\n \"griptape.create_assistant_run\",\n \"griptape.delete_assistant\",\n \"griptape.get_assistant\",\n \"griptape.get_assistant_run\",\n \"griptape.get_organization\",\n \"griptape.list_assistant_events\",\n \"griptape.list_assistant_runs\",\n \"griptape.list_assistants\",\n \"griptape.list_organizations\",\n \"griptape.update_assistant\"\n ]\n },\n {\n \"service\": \"grist\",\n \"displayName\": \"Grist\",\n \"categories\": [\n \"Productivity\",\n \"Data\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.getgrist.com\",\n \"actionCount\": 8,\n \"actions\": [\n \"grist.add_records\",\n \"grist.delete_records\",\n \"grist.get_document\",\n \"grist.list_columns\",\n \"grist.list_records\",\n \"grist.list_tables\",\n \"grist.list_workspaces\",\n \"grist.update_records\"\n ]\n },\n {\n \"service\": \"groqcloud\",\n \"displayName\": \"GroqCloud\",\n \"categories\": [\n \"AI\",\n \"Developer Tools\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://groq.com\",\n \"actionCount\": 3,\n \"actions\": [\n \"groqcloud.create_chat_completion\",\n \"groqcloud.get_model\",\n \"groqcloud.list_models\"\n ]\n },\n {\n \"service\": \"gtmetrix\",\n \"displayName\": \"GTmetrix\",\n \"categories\": [\n \"Developer Tools\",\n \"Data\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://gtmetrix.com\",\n \"actionCount\": 15,\n \"actions\": [\n \"gtmetrix.get_account_status\",\n \"gtmetrix.get_browser\",\n \"gtmetrix.get_latest_page_report\",\n \"gtmetrix.get_location\",\n \"gtmetrix.get_page\",\n \"gtmetrix.get_report\",\n \"gtmetrix.get_simulated_device\",\n \"gtmetrix.get_test\",\n \"gtmetrix.list_browsers\",\n \"gtmetrix.list_locations\",\n \"gtmetrix.list_page_reports\",\n \"gtmetrix.list_pages\",\n \"gtmetrix.list_simulated_devices\",\n \"gtmetrix.list_tests\",\n \"gtmetrix.start_test\"\n ]\n },\n {\n \"service\": \"gumloop\",\n \"displayName\": \"Gumloop\",\n \"categories\": [\n \"AI\",\n \"Productivity\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.gumloop.com\",\n \"actionCount\": 7,\n \"actions\": [\n \"gumloop.get_input_schema\",\n \"gumloop.get_run_details\",\n \"gumloop.kill_flow_run\",\n \"gumloop.list_run_history\",\n \"gumloop.list_saved_flows\",\n \"gumloop.list_workbooks\",\n \"gumloop.start_flow_run\"\n ]\n },\n {\n \"service\": \"gumroad\",\n \"displayName\": \"Gumroad\",\n \"categories\": [\n \"Finance\",\n \"Marketing\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://gumroad.com\",\n \"actionCount\": 9,\n \"actions\": [\n \"gumroad.get_current_user\",\n \"gumroad.get_product\",\n \"gumroad.get_sale\",\n \"gumroad.list_product_subscribers\",\n \"gumroad.list_products\",\n \"gumroad.list_sales\",\n \"gumroad.mark_sale_as_shipped\",\n \"gumroad.refund_sale\",\n \"gumroad.resend_sale_receipt\"\n ]\n },\n {\n \"service\": \"guru\",\n \"displayName\": \"Guru\",\n \"categories\": [\n \"Productivity\",\n \"Data\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.getguru.com\",\n \"actionCount\": 5,\n \"actions\": [\n \"guru.get_card\",\n \"guru.get_current_identity\",\n \"guru.get_team_stats\",\n \"guru.list_collections\",\n \"guru.search_cards\"\n ]\n },\n {\n \"service\": \"habitica\",\n \"displayName\": \"Habitica\",\n \"categories\": [\n \"Productivity\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://habitica.com\",\n \"actionCount\": 11,\n \"actions\": [\n \"habitica.create_tag\",\n \"habitica.create_task\",\n \"habitica.delete_tag\",\n \"habitica.delete_task\",\n \"habitica.get_task\",\n \"habitica.get_user_profile\",\n \"habitica.list_my_tasks\",\n \"habitica.list_tags\",\n \"habitica.score_task\",\n \"habitica.update_tag\",\n \"habitica.update_task\"\n ]\n },\n {\n \"service\": \"hackernews\",\n \"displayName\": \"Hacker News\",\n \"categories\": [\n \"Social\"\n ],\n \"authTypes\": [\n \"no_auth\"\n ],\n \"homepageUrl\": \"https://news.ycombinator.com\",\n \"actionCount\": 14,\n \"actions\": [\n \"hackernews.get_ask_stories\",\n \"hackernews.get_best_stories\",\n \"hackernews.get_item\",\n \"hackernews.get_item_with_id\",\n \"hackernews.get_job_stories\",\n \"hackernews.get_latest_posts\",\n \"hackernews.get_max_item_id\",\n \"hackernews.get_new_stories\",\n \"hackernews.get_show_stories\",\n \"hackernews.get_top_stories\",\n \"hackernews.get_updates\",\n \"hackernews.get_user\",\n \"hackernews.get_user_by_username\",\n \"hackernews.search_posts\"\n ]\n },\n {\n \"service\": \"hackerrank_work\",\n \"displayName\": \"HackerRank Work\",\n \"categories\": [\n \"Productivity\",\n \"Developer Tools\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.hackerrank.com/work\",\n \"actionCount\": 5,\n \"actions\": [\n \"hackerrank_work.get_test\",\n \"hackerrank_work.get_test_candidate\",\n \"hackerrank_work.list_test_candidates\",\n \"hackerrank_work.list_tests\",\n \"hackerrank_work.search_test_candidates\"\n ]\n },\n {\n \"service\": \"harmonic_ai\",\n \"displayName\": \"Harmonic.ai\",\n \"categories\": [\n \"Data\",\n \"AI\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://harmonic.ai\",\n \"actionCount\": 6,\n \"actions\": [\n \"harmonic_ai.enrich_company\",\n \"harmonic_ai.enrich_person\",\n \"harmonic_ai.get_company\",\n \"harmonic_ai.get_company_employees\",\n \"harmonic_ai.get_enrichment_status\",\n \"harmonic_ai.get_person\"\n ]\n },\n {\n \"service\": \"harvest\",\n \"displayName\": \"Harvest\",\n \"categories\": [\n \"Productivity\"\n ],\n \"authTypes\": [\n \"oauth2\",\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.getharvest.com\",\n \"actionCount\": 15,\n \"actions\": [\n \"harvest.create_time_entry\",\n \"harvest.delete_time_entry\",\n \"harvest.get_client\",\n \"harvest.get_current_user\",\n \"harvest.get_project\",\n \"harvest.get_task\",\n \"harvest.get_time_entry\",\n \"harvest.list_clients\",\n \"harvest.list_project_task_assignments\",\n \"harvest.list_projects\",\n \"harvest.list_tasks\",\n \"harvest.list_time_entries\",\n \"harvest.restart_time_entry\",\n \"harvest.stop_time_entry\",\n \"harvest.update_time_entry\"\n ]\n },\n {\n \"service\": \"hasdata\",\n \"displayName\": \"HasData\",\n \"categories\": [\n \"Data\",\n \"Developer Tools\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://hasdata.com\",\n \"actionCount\": 2,\n \"actions\": [\n \"hasdata.scrape_web\",\n \"hasdata.search_google_serp\"\n ]\n },\n {\n \"service\": \"haveibeenpwned\",\n \"displayName\": \"Have I Been Pwned\",\n \"categories\": [\n \"Security\",\n \"Data\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://haveibeenpwned.com/\",\n \"actionCount\": 7,\n \"actions\": [\n \"haveibeenpwned.get_breach\",\n \"haveibeenpwned.get_latest_breach\",\n \"haveibeenpwned.get_subscription_status\",\n \"haveibeenpwned.list_breaches\",\n \"haveibeenpwned.list_data_classes\",\n \"haveibeenpwned.list_pastes_for_account\",\n \"haveibeenpwned.search_breached_account\"\n ]\n },\n {\n \"service\": \"headout\",\n \"displayName\": \"Headout\",\n \"categories\": [\n \"Productivity\",\n \"Data\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.headout.com\",\n \"actionCount\": 8,\n \"actions\": [\n \"headout.get_booking\",\n \"headout.get_product\",\n \"headout.list_bookings\",\n \"headout.list_categories_by_city\",\n \"headout.list_cities\",\n \"headout.list_inventory_by_variant\",\n \"headout.list_products_by_category\",\n \"headout.list_products_by_city\"\n ]\n },\n {\n \"service\": \"healthchecks_io\",\n \"displayName\": \"Healthchecks.io\",\n \"categories\": [\n \"Developer Tools\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://healthchecks.io\",\n \"actionCount\": 11,\n \"actions\": [\n \"healthchecks_io.create_check\",\n \"healthchecks_io.delete_check\",\n \"healthchecks_io.get_check\",\n \"healthchecks_io.list_badges\",\n \"healthchecks_io.list_channels\",\n \"healthchecks_io.list_checks\",\n \"healthchecks_io.list_flips\",\n \"healthchecks_io.list_pings\",\n \"healthchecks_io.pause_check\",\n \"healthchecks_io.resume_check\",\n \"healthchecks_io.update_check\"\n ]\n },\n {\n \"service\": \"helloleads\",\n \"displayName\": \"HelloLeads\",\n \"categories\": [\n \"Marketing\",\n \"Productivity\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.helloleads.io/\",\n \"actionCount\": 2,\n \"actions\": [\n \"helloleads.get_web_form_definition\",\n \"helloleads.submit_web_form\"\n ]\n },\n {\n \"service\": \"helpscout_docs\",\n \"displayName\": \"Help Scout Docs\",\n \"categories\": [\n \"Productivity\",\n \"Communication\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.helpscout.com\",\n \"actionCount\": 6,\n \"actions\": [\n \"helpscout_docs.get_article\",\n \"helpscout_docs.list_articles\",\n \"helpscout_docs.list_categories\",\n \"helpscout_docs.list_collections\",\n \"helpscout_docs.list_sites\",\n \"helpscout_docs.search_articles\"\n ]\n },\n {\n \"service\": \"here\",\n \"displayName\": \"HERE\",\n \"categories\": [\n \"Location\",\n \"Data\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.here.com\",\n \"actionCount\": 6,\n \"actions\": [\n \"here.autocomplete\",\n \"here.autosuggest\",\n \"here.discover\",\n \"here.geocode\",\n \"here.lookup\",\n \"here.reverse_geocode\"\n ]\n },\n {\n \"service\": \"hex\",\n \"displayName\": \"Hex\",\n \"categories\": [\n \"Data\",\n \"Developer Tools\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://hex.tech\",\n \"actionCount\": 6,\n \"actions\": [\n \"hex.cancel_run\",\n \"hex.get_project\",\n \"hex.get_run_status\",\n \"hex.list_project_runs\",\n \"hex.list_projects\",\n \"hex.run_project\"\n ]\n },\n {\n \"service\": \"heygen\",\n \"displayName\": \"HeyGen\",\n \"categories\": [\n \"AI\",\n \"Design & Media\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.heygen.com\",\n \"actionCount\": 17,\n \"actions\": [\n \"heygen.delete_asset\",\n \"heygen.delete_video\",\n \"heygen.generate_template_video\",\n \"heygen.generate_video\",\n \"heygen.get_avatar\",\n \"heygen.get_current_user\",\n \"heygen.get_remaining_quota\",\n \"heygen.get_shareable_video_url\",\n \"heygen.get_template\",\n \"heygen.get_video_status\",\n \"heygen.list_assets\",\n \"heygen.list_avatars\",\n \"heygen.list_folders\",\n \"heygen.list_templates\",\n \"heygen.list_videos\",\n \"heygen.list_voices\",\n \"heygen.upload_asset\"\n ]\n },\n {\n \"service\": \"heyreach\",\n \"displayName\": \"HeyReach\",\n \"categories\": [\n \"Marketing\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.heyreach.io\",\n \"actionCount\": 10,\n \"actions\": [\n \"heyreach.create_empty_list\",\n \"heyreach.get_campaign\",\n \"heyreach.get_lead\",\n \"heyreach.get_lead_tags\",\n \"heyreach.get_overall_stats\",\n \"heyreach.get_overall_stats_by_campaign\",\n \"heyreach.list_campaigns\",\n \"heyreach.list_leads\",\n \"heyreach.list_linkedin_accounts\",\n \"heyreach.list_lists\"\n ]\n },\n {\n \"service\": \"heyy\",\n \"displayName\": \"Heyy\",\n \"categories\": [\n \"Communication\",\n \"Marketing\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://heyy.io\",\n \"actionCount\": 9,\n \"actions\": [\n \"heyy.create_attribute\",\n \"heyy.create_contact\",\n \"heyy.create_label\",\n \"heyy.get_contact\",\n \"heyy.list_attributes\",\n \"heyy.list_channels\",\n \"heyy.list_contacts\",\n \"heyy.list_labels\",\n \"heyy.update_contact\"\n ]\n },\n {\n \"service\": \"heyzine\",\n \"displayName\": \"Heyzine\",\n \"categories\": [\n \"Design & Media\",\n \"Productivity\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://heyzine.com\",\n \"actionCount\": 9,\n \"actions\": [\n \"heyzine.add_flipbook_to_bookshelf\",\n \"heyzine.delete_flipbook\",\n \"heyzine.get_flipbook\",\n \"heyzine.list_bookshelf_flipbooks\",\n \"heyzine.list_bookshelves\",\n \"heyzine.list_flipbooks\",\n \"heyzine.remove_flipbook_from_bookshelf\",\n \"heyzine.set_bookshelf_social_data\",\n \"heyzine.set_flipbook_social_data\"\n ]\n },\n {\n \"service\": \"higgsfield_ai\",\n \"displayName\": \"Higgsfield AI\",\n \"categories\": [\n \"AI\",\n \"Design & Media\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://higgsfield.ai/\",\n \"actionCount\": 4,\n \"actions\": [\n \"higgsfield_ai.cancel_request\",\n \"higgsfield_ai.get_request_status\",\n \"higgsfield_ai.submit_image_generation\",\n \"higgsfield_ai.submit_video_generation\"\n ]\n },\n {\n \"service\": \"high_level\",\n \"displayName\": \"HighLevel\",\n \"categories\": [\n \"Marketing\",\n \"Communication\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.gohighlevel.com\",\n \"actionCount\": 5,\n \"actions\": [\n \"high_level.create_contact\",\n \"high_level.delete_contact\",\n \"high_level.get_contact\",\n \"high_level.search_contacts\",\n \"high_level.update_contact\"\n ]\n },\n {\n \"service\": \"highergov\",\n \"displayName\": \"HigherGov\",\n \"categories\": [\n \"Data\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.highergov.com/\",\n \"actionCount\": 4,\n \"actions\": [\n \"highergov.list_agencies\",\n \"highergov.list_contracts\",\n \"highergov.list_naics_codes\",\n \"highergov.list_opportunities\"\n ]\n },\n {\n \"service\": \"holded\",\n \"displayName\": \"Holded\",\n \"categories\": [\n \"Finance\",\n \"Productivity\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.holded.com\",\n \"actionCount\": 5,\n \"actions\": [\n \"holded.create_contact\",\n \"holded.get_contact\",\n \"holded.get_product\",\n \"holded.list_contacts\",\n \"holded.list_products\"\n ]\n },\n {\n \"service\": \"home_assistant\",\n \"displayName\": \"Home Assistant\",\n \"categories\": [\n \"Productivity\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.home-assistant.io\",\n \"actionCount\": 8,\n \"actions\": [\n \"home_assistant.call_service\",\n \"home_assistant.fire_event\",\n \"home_assistant.get_config\",\n \"home_assistant.get_state\",\n \"home_assistant.list_events\",\n \"home_assistant.list_services\",\n \"home_assistant.list_states\",\n \"home_assistant.render_template\"\n ]\n },\n {\n \"service\": \"honeybadger\",\n \"displayName\": \"Honeybadger\",\n \"categories\": [\n \"Developer Tools\",\n \"Security\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.honeybadger.io\",\n \"actionCount\": 5,\n \"actions\": [\n \"honeybadger.report_check_in\",\n \"honeybadger.report_check_in_with_payload\",\n \"honeybadger.report_deployment\",\n \"honeybadger.report_event\",\n \"honeybadger.report_exception\"\n ]\n },\n {\n \"service\": \"honeycomb\",\n \"displayName\": \"Honeycomb\",\n \"categories\": [\n \"Developer Tools\",\n \"Data\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.honeycomb.io/\",\n \"actionCount\": 7,\n \"actions\": [\n \"honeycomb.create_marker\",\n \"honeycomb.get_auth\",\n \"honeycomb.get_board\",\n \"honeycomb.get_dataset\",\n \"honeycomb.list_boards\",\n \"honeycomb.list_datasets\",\n \"honeycomb.list_markers\"\n ]\n },\n {\n \"service\": \"hookdeck\",\n \"displayName\": \"Hookdeck\",\n \"categories\": [\n \"Developer Tools\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://hookdeck.com\",\n \"actionCount\": 15,\n \"actions\": [\n \"hookdeck.create_connection\",\n \"hookdeck.create_destination\",\n \"hookdeck.create_source\",\n \"hookdeck.delete_connection\",\n \"hookdeck.delete_destination\",\n \"hookdeck.delete_source\",\n \"hookdeck.get_connection\",\n \"hookdeck.get_destination\",\n \"hookdeck.get_source\",\n \"hookdeck.list_connections\",\n \"hookdeck.list_destinations\",\n \"hookdeck.list_sources\",\n \"hookdeck.update_connection\",\n \"hookdeck.update_destination\",\n \"hookdeck.update_source\"\n ]\n },\n {\n \"service\": \"hoop\",\n \"displayName\": \"Hoop\",\n \"categories\": [\n \"Security\",\n \"Developer Tools\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://hoop.dev\",\n \"actionCount\": 3,\n \"actions\": [\n \"hoop.get_current_user\",\n \"hoop.list_connections\",\n \"hoop.list_sessions\"\n ]\n },\n {\n \"service\": \"hotspotsystem\",\n \"displayName\": \"HotspotSystem\",\n \"categories\": [\n \"Productivity\",\n \"Communication\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.hotspotsystem.com\",\n \"actionCount\": 7,\n \"actions\": [\n \"hotspotsystem.get_current_owner\",\n \"hotspotsystem.list_customers\",\n \"hotspotsystem.list_location_customers\",\n \"hotspotsystem.list_location_options\",\n \"hotspotsystem.list_location_subscribers\",\n \"hotspotsystem.list_locations\",\n \"hotspotsystem.list_subscribers\"\n ]\n },\n {\n \"service\": \"html_to_image\",\n \"displayName\": \"HTML to Image\",\n \"categories\": [\n \"Developer Tools\",\n \"Design & Media\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://html2img.com\",\n \"actionCount\": 2,\n \"actions\": [\n \"html_to_image.capture_website_screenshot\",\n \"html_to_image.convert_html_to_image\"\n ]\n },\n {\n \"service\": \"htmlcsstoimage\",\n \"displayName\": \"HTML/CSS to Image\",\n \"categories\": [\n \"Developer Tools\",\n \"Design & Media\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://htmlcsstoimage.com\",\n \"actionCount\": 5,\n \"actions\": [\n \"htmlcsstoimage.create_batch_images\",\n \"htmlcsstoimage.create_image\",\n \"htmlcsstoimage.delete_batch_images\",\n \"htmlcsstoimage.delete_image\",\n \"htmlcsstoimage.get_usage\"\n ]\n },\n {\n \"service\": \"hubspot\",\n \"displayName\": \"HubSpot\",\n \"categories\": [\n \"Marketing\",\n \"Productivity\"\n ],\n \"authTypes\": [\n \"oauth2\"\n ],\n \"homepageUrl\": \"https://www.hubspot.com\",\n \"actionCount\": 26,\n \"actions\": [\n \"hubspot.create_company\",\n \"hubspot.create_contact\",\n \"hubspot.create_deal\",\n \"hubspot.get_campaign_analytics\",\n \"hubspot.get_campaign_asset_metrics\",\n \"hubspot.get_campaign_asset_types\",\n \"hubspot.get_campaign_contacts_by_type\",\n \"hubspot.get_company\",\n \"hubspot.get_contact\",\n \"hubspot.get_crm_objects\",\n \"hubspot.get_deal\",\n \"hubspot.get_properties\",\n \"hubspot.get_property\",\n \"hubspot.get_user_details\",\n \"hubspot.list_properties\",\n \"hubspot.manage_crm_objects\",\n \"hubspot.search_companies\",\n \"hubspot.search_contacts\",\n \"hubspot.search_crm_objects\",\n \"hubspot.search_deals\",\n \"hubspot.search_owners\",\n \"hubspot.search_properties\",\n \"hubspot.submit_feedback\",\n \"hubspot.update_company\",\n \"hubspot.update_contact\",\n \"hubspot.update_deal\"\n ]\n },\n {\n \"service\": \"huggingface\",\n \"displayName\": \"Hugging Face\",\n \"categories\": [\n \"AI\",\n \"Developer Tools\"\n ],\n \"authTypes\": [\n \"oauth2\",\n \"api_key\"\n ],\n \"homepageUrl\": \"https://huggingface.co\",\n \"actionCount\": 14,\n \"actions\": [\n \"huggingface.generate_chat_completion\",\n \"huggingface.generate_embeddings\",\n \"huggingface.get_current_user\",\n \"huggingface.get_dataset_first_rows\",\n \"huggingface.get_dataset_info\",\n \"huggingface.get_dataset_statistics\",\n \"huggingface.get_model_info\",\n \"huggingface.get_space_info\",\n \"huggingface.get_trending\",\n \"huggingface.list_datasets\",\n \"huggingface.list_endpoints\",\n \"huggingface.list_models\",\n \"huggingface.list_repo_files\",\n \"huggingface.list_spaces\"\n ]\n },\n {\n \"service\": \"humanitix\",\n \"displayName\": \"Humanitix\",\n \"categories\": [\n \"Productivity\",\n \"Marketing\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://humanitix.com\",\n \"actionCount\": 3,\n \"actions\": [\n \"humanitix.get_event\",\n \"humanitix.list_events\",\n \"humanitix.list_tags\"\n ]\n },\n {\n \"service\": \"hunter\",\n \"displayName\": \"Hunter\",\n \"categories\": [\n \"Communication\",\n \"Marketing\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://hunter.io\",\n \"actionCount\": 18,\n \"actions\": [\n \"hunter.account_information\",\n \"hunter.combined_enrichment\",\n \"hunter.company_enrichment\",\n \"hunter.create_lead\",\n \"hunter.create_leads_list\",\n \"hunter.delete_lead\",\n \"hunter.discover_companies\",\n \"hunter.domain_search\",\n \"hunter.email_count\",\n \"hunter.email_finder\",\n \"hunter.email_verifier\",\n \"hunter.get_lead\",\n \"hunter.list_custom_attributes\",\n \"hunter.list_leads\",\n \"hunter.list_leads_lists\",\n \"hunter.people_enrichment\",\n \"hunter.update_lead\",\n \"hunter.upsert_lead\"\n ]\n },\n {\n \"service\": \"hyperbrowser\",\n \"displayName\": \"Hyperbrowser\",\n \"categories\": [\n \"Developer Tools\",\n \"Data\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.hyperbrowser.ai\",\n \"actionCount\": 5,\n \"actions\": [\n \"hyperbrowser.fetch_page\",\n \"hyperbrowser.get_web_crawl_results\",\n \"hyperbrowser.get_web_crawl_status\",\n \"hyperbrowser.search_web\",\n \"hyperbrowser.start_web_crawl\"\n ]\n },\n {\n \"service\": \"icypeas\",\n \"displayName\": \"Icypeas\",\n \"categories\": [\n \"Data\",\n \"Marketing\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.icypeas.com\",\n \"actionCount\": 6,\n \"actions\": [\n \"icypeas.get_search_item\",\n \"icypeas.get_subscription_information\",\n \"icypeas.reverse_email_lookup\",\n \"icypeas.submit_domain_scan\",\n \"icypeas.submit_email_search\",\n \"icypeas.submit_email_verification\"\n ]\n },\n {\n \"service\": \"ima\",\n \"displayName\": \"ima\",\n \"categories\": [\n \"AI\",\n \"Productivity\"\n ],\n \"authTypes\": [\n \"custom_credential\"\n ],\n \"homepageUrl\": \"https://ima.qq.com\",\n \"actionCount\": 17,\n \"actions\": [\n \"ima.add_note_to_knowledge_base\",\n \"ima.append_note\",\n \"ima.check_repeated_names\",\n \"ima.create_note\",\n \"ima.get_knowledge_bases\",\n \"ima.get_knowledge_item_original\",\n \"ima.get_media_info\",\n \"ima.get_note_content\",\n \"ima.import_urls\",\n \"ima.list_addable_knowledge_bases\",\n \"ima.list_knowledge_items\",\n \"ima.list_notebooks\",\n \"ima.list_notes\",\n \"ima.search_knowledge_bases\",\n \"ima.search_knowledge_items\",\n \"ima.search_notes\",\n \"ima.upload_file_to_knowledge_base\"\n ]\n },\n {\n \"service\": \"imagekit\",\n \"displayName\": \"ImageKit\",\n \"categories\": [\n \"Design & Media\",\n \"Storage\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://imagekit.io\",\n \"actionCount\": 7,\n \"actions\": [\n \"imagekit.delete_file\",\n \"imagekit.get_file_details\",\n \"imagekit.get_purge_status\",\n \"imagekit.get_remote_file_metadata\",\n \"imagekit.get_uploaded_file_metadata\",\n \"imagekit.list_assets\",\n \"imagekit.purge_cache\"\n ]\n },\n {\n \"service\": \"imgbb\",\n \"displayName\": \"ImgBB\",\n \"categories\": [\n \"Design & Media\",\n \"Storage\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://imgbb.com\",\n \"actionCount\": 1,\n \"actions\": [\n \"imgbb.upload_image\"\n ]\n },\n {\n \"service\": \"imgix\",\n \"displayName\": \"Imgix\",\n \"categories\": [\n \"Design & Media\",\n \"Developer Tools\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.imgix.com\",\n \"actionCount\": 4,\n \"actions\": [\n \"imgix.get_source\",\n \"imgix.list_sources\",\n \"imgix.purge_asset\",\n \"imgix.update_source\"\n ]\n },\n {\n \"service\": \"incident_io\",\n \"displayName\": \"incident.io\",\n \"categories\": [\n \"Developer Tools\",\n \"Productivity\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://incident.io\",\n \"actionCount\": 6,\n \"actions\": [\n \"incident_io.get_action\",\n \"incident_io.get_incident\",\n \"incident_io.list_actions\",\n \"incident_io.list_incident_statuses\",\n \"incident_io.list_incidents\",\n \"incident_io.list_severities\"\n ]\n },\n {\n \"service\": \"influxdb_cloud\",\n \"displayName\": \"InfluxDB Cloud\",\n \"categories\": [\n \"Data\",\n \"Developer Tools\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.influxdata.com/products/influxdb-cloud/\",\n \"actionCount\": 4,\n \"actions\": [\n \"influxdb_cloud.get_bucket\",\n \"influxdb_cloud.list_buckets\",\n \"influxdb_cloud.query_influxql\",\n \"influxdb_cloud.write_line_protocol\"\n ]\n },\n {\n \"service\": \"instantly_ai\",\n \"displayName\": \"Instantly.ai\",\n \"categories\": [\n \"Marketing\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://instantly.ai\",\n \"actionCount\": 4,\n \"actions\": [\n \"instantly_ai.create_lead\",\n \"instantly_ai.get_campaign\",\n \"instantly_ai.list_campaigns\",\n \"instantly_ai.list_leads\"\n ]\n },\n {\n \"service\": \"instatus\",\n \"displayName\": \"Instatus\",\n \"categories\": [\n \"Developer Tools\",\n \"Productivity\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://instatus.com\",\n \"actionCount\": 15,\n \"actions\": [\n \"instatus.create_component\",\n \"instatus.create_incident\",\n \"instatus.create_incident_update\",\n \"instatus.delete_component\",\n \"instatus.delete_incident\",\n \"instatus.delete_incident_update\",\n \"instatus.get_component\",\n \"instatus.get_incident\",\n \"instatus.get_incident_update\",\n \"instatus.list_components\",\n \"instatus.list_incidents\",\n \"instatus.list_status_pages\",\n \"instatus.update_component\",\n \"instatus.update_incident\",\n \"instatus.update_incident_update\"\n ]\n },\n {\n \"service\": \"intelliprint\",\n \"displayName\": \"Intelliprint\",\n \"categories\": [\n \"Productivity\",\n \"Communication\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.intelliprint.net\",\n \"actionCount\": 8,\n \"actions\": [\n \"intelliprint.get_background\",\n \"intelliprint.get_mailing_list\",\n \"intelliprint.get_mailing_list_recipient\",\n \"intelliprint.get_print\",\n \"intelliprint.list_backgrounds\",\n \"intelliprint.list_mailing_list_recipients\",\n \"intelliprint.list_mailing_lists\",\n \"intelliprint.list_prints\"\n ]\n },\n {\n \"service\": \"intercom\",\n \"displayName\": \"Intercom\",\n \"categories\": [\n \"Communication\",\n \"Productivity\"\n ],\n \"authTypes\": [\n \"oauth2\"\n ],\n \"homepageUrl\": \"https://www.intercom.com\",\n \"actionCount\": 24,\n \"actions\": [\n \"intercom.close_conversation\",\n \"intercom.create_contact\",\n \"intercom.get_admin\",\n \"intercom.get_article\",\n \"intercom.get_company\",\n \"intercom.get_contact\",\n \"intercom.get_contact_by_external_id\",\n \"intercom.get_conversation\",\n \"intercom.get_counts\",\n \"intercom.get_current_admin\",\n \"intercom.get_job_status\",\n \"intercom.get_ticket\",\n \"intercom.list_admins\",\n \"intercom.list_articles\",\n \"intercom.list_companies\",\n \"intercom.list_contacts\",\n \"intercom.list_conversations\",\n \"intercom.list_events\",\n \"intercom.list_tags\",\n \"intercom.reopen_conversation\",\n \"intercom.reply_to_conversation\",\n \"intercom.search_contacts\",\n \"intercom.search_tickets\",\n \"intercom.update_contact\"\n ]\n },\n {\n \"service\": \"interzoid\",\n \"displayName\": \"Interzoid\",\n \"categories\": [\n \"Data\",\n \"Developer Tools\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.interzoid.com/\",\n \"actionCount\": 7,\n \"actions\": [\n \"interzoid.get_company_match_key\",\n \"interzoid.get_email_info\",\n \"interzoid.get_full_name_match_key\",\n \"interzoid.get_full_name_match_score\",\n \"interzoid.get_ip_profile\",\n \"interzoid.get_remaining_credits\",\n \"interzoid.standardize_organization_name\"\n ]\n },\n {\n \"service\": \"ip2location\",\n \"displayName\": \"IP2Location.io\",\n \"categories\": [\n \"Location\",\n \"Security\",\n \"Data\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.ip2location.io\",\n \"actionCount\": 3,\n \"actions\": [\n \"ip2location.get_domain_whois\",\n \"ip2location.get_ip_geolocation\",\n \"ip2location.list_hosted_domains\"\n ]\n },\n {\n \"service\": \"ip2proxy\",\n \"displayName\": \"IP2Proxy\",\n \"categories\": [\n \"Security\",\n \"Location\",\n \"Data\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.ip2location.com/web-service/ip2proxy\",\n \"actionCount\": 1,\n \"actions\": [\n \"ip2proxy.lookup_ip\"\n ]\n },\n {\n \"service\": \"ip2whois\",\n \"displayName\": \"IP2WHOIS\",\n \"categories\": [\n \"Security\",\n \"Data\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.ip2location.io/ip2whois-documentation\",\n \"actionCount\": 2,\n \"actions\": [\n \"ip2whois.lookup_domain\",\n \"ip2whois.lookup_hosted_domains\"\n ]\n },\n {\n \"service\": \"ipdata_co\",\n \"displayName\": \"ipdata.co\",\n \"categories\": [\n \"Location\",\n \"Security\",\n \"Data\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://ipdata.co\",\n \"actionCount\": 30,\n \"actions\": [\n \"ipdata_co.bulk_lookup\",\n \"ipdata_co.get_calling_code\",\n \"ipdata_co.get_carrier_by_ip\",\n \"ipdata_co.get_city\",\n \"ipdata_co.get_company_by_ip\",\n \"ipdata_co.get_continent_code\",\n \"ipdata_co.get_continent_name\",\n \"ipdata_co.get_count\",\n \"ipdata_co.get_country_code\",\n \"ipdata_co.get_country_name\",\n \"ipdata_co.get_currency_by_ip\",\n \"ipdata_co.get_emoji_flag\",\n \"ipdata_co.get_emoji_unicode\",\n \"ipdata_co.get_flag\",\n \"ipdata_co.get_ip\",\n \"ipdata_co.get_is_eu\",\n \"ipdata_co.get_languages_by_ip\",\n \"ipdata_co.get_latitude\",\n \"ipdata_co.get_longitude\",\n \"ipdata_co.get_postal\",\n \"ipdata_co.get_region\",\n \"ipdata_co.get_region_code\",\n \"ipdata_co.get_threat_by_ip\",\n \"ipdata_co.get_time_zone_by_ip\",\n \"ipdata_co.lookup_advanced_asn\",\n \"ipdata_co.lookup_basic_asn_by_ip\",\n \"ipdata_co.lookup_current_ip\",\n \"ipdata_co.lookup_current_ip_eu\",\n \"ipdata_co.lookup_ip\",\n \"ipdata_co.lookup_ip_eu\"\n ]\n },\n {\n \"service\": \"ipgeolocation_io\",\n \"displayName\": \"IPGeolocation.io\",\n \"categories\": [\n \"Location\",\n \"Data\",\n \"Developer Tools\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://ipgeolocation.io/\",\n \"actionCount\": 3,\n \"actions\": [\n \"ipgeolocation_io.get_astronomy\",\n \"ipgeolocation_io.get_timezone\",\n \"ipgeolocation_io.lookup_ip\"\n ]\n },\n {\n \"service\": \"ipinfo_io\",\n \"displayName\": \"IPinfo\",\n \"categories\": [\n \"Location\",\n \"Data\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://ipinfo.io\",\n \"actionCount\": 27,\n \"actions\": [\n \"ipinfo_io.batch_lite_lookup\",\n \"ipinfo_io.batch_lookup\",\n \"ipinfo_io.get_abuse_contact\",\n \"ipinfo_io.get_carrier_info\",\n \"ipinfo_io.get_city_by_ip\",\n \"ipinfo_io.get_company_info\",\n \"ipinfo_io.get_core_field_by_me\",\n \"ipinfo_io.get_country_by_ip\",\n \"ipinfo_io.get_current_ip\",\n \"ipinfo_io.get_current_ip_info\",\n \"ipinfo_io.get_current_loc\",\n \"ipinfo_io.get_current_region\",\n \"ipinfo_io.get_geo_by_ip\",\n \"ipinfo_io.get_hostname_by_ip\",\n \"ipinfo_io.get_ip_by_ip\",\n \"ipinfo_io.get_ip_info\",\n \"ipinfo_io.get_ip_info_by_ip\",\n \"ipinfo_io.get_lite_field_by_ip\",\n \"ipinfo_io.get_location_by_ip\",\n \"ipinfo_io.get_org_by_ip\",\n \"ipinfo_io.get_plus_field_by_me\",\n \"ipinfo_io.get_postal_by_ip\",\n \"ipinfo_io.get_privacy_details\",\n \"ipinfo_io.get_region_by_ip\",\n \"ipinfo_io.get_timezone_by_ip\",\n \"ipinfo_io.get_token_info\",\n \"ipinfo_io.map_ips\"\n ]\n },\n {\n \"service\": \"iplocate\",\n \"displayName\": \"IPLocate\",\n \"categories\": [\n \"Location\",\n \"Security\",\n \"Data\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.iplocate.io/\",\n \"actionCount\": 3,\n \"actions\": [\n \"iplocate.batch_lookup\",\n \"iplocate.lookup_ip\",\n \"iplocate.lookup_self\"\n ]\n },\n {\n \"service\": \"ipqualityscore\",\n \"displayName\": \"IPQualityScore\",\n \"categories\": [\n \"Security\",\n \"Data\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.ipqualityscore.com/\",\n \"actionCount\": 4,\n \"actions\": [\n \"ipqualityscore.check_ip_reputation\",\n \"ipqualityscore.scan_url\",\n \"ipqualityscore.validate_email\",\n \"ipqualityscore.validate_phone\"\n ]\n },\n {\n \"service\": \"ipregistry\",\n \"displayName\": \"Ipregistry\",\n \"categories\": [\n \"Location\",\n \"Security\",\n \"Data\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://ipregistry.co\",\n \"actionCount\": 5,\n \"actions\": [\n \"ipregistry.batch_lookup_asns\",\n \"ipregistry.batch_lookup_ips\",\n \"ipregistry.lookup_asn\",\n \"ipregistry.lookup_ip\",\n \"ipregistry.parse_user_agents\"\n ]\n },\n {\n \"service\": \"ipstack\",\n \"displayName\": \"ipstack\",\n \"categories\": [\n \"Location\",\n \"Data\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://ipstack.com\",\n \"actionCount\": 3,\n \"actions\": [\n \"ipstack.bulk_lookup\",\n \"ipstack.lookup_current_ip\",\n \"ipstack.lookup_ip\"\n ]\n },\n {\n \"service\": \"iqair_airvisual\",\n \"displayName\": \"IQAir AirVisual\",\n \"categories\": [\n \"Location\",\n \"Data\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.iqair.com\",\n \"actionCount\": 5,\n \"actions\": [\n \"iqair_airvisual.get_city_data\",\n \"iqair_airvisual.get_nearest_city\",\n \"iqair_airvisual.list_supported_cities\",\n \"iqair_airvisual.list_supported_countries\",\n \"iqair_airvisual.list_supported_states\"\n ]\n },\n {\n \"service\": \"it_glue\",\n \"displayName\": \"IT Glue\",\n \"categories\": [\n \"Productivity\",\n \"Developer Tools\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.itglue.com/\",\n \"actionCount\": 8,\n \"actions\": [\n \"it_glue.get_configuration\",\n \"it_glue.get_contact\",\n \"it_glue.get_organization\",\n \"it_glue.get_user\",\n \"it_glue.list_configurations\",\n \"it_glue.list_contacts\",\n \"it_glue.list_organizations\",\n \"it_glue.list_users\"\n ]\n },\n {\n \"service\": \"jamie\",\n \"displayName\": \"Jamie\",\n \"categories\": [\n \"Productivity\",\n \"AI\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.meetjamie.ai\",\n \"actionCount\": 5,\n \"actions\": [\n \"jamie.get_meeting\",\n \"jamie.list_meetings\",\n \"jamie.list_tags\",\n \"jamie.list_tasks\",\n \"jamie.search_meetings\"\n ]\n },\n {\n \"service\": \"jazzhr\",\n \"displayName\": \"JazzHR\",\n \"categories\": [\n \"Productivity\",\n \"Data\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.jazzhr.com\",\n \"actionCount\": 6,\n \"actions\": [\n \"jazzhr.get_applicant\",\n \"jazzhr.get_job\",\n \"jazzhr.get_user\",\n \"jazzhr.list_applicants\",\n \"jazzhr.list_jobs\",\n \"jazzhr.list_users\"\n ]\n },\n {\n \"service\": \"jigsawstack\",\n \"displayName\": \"JigsawStack\",\n \"categories\": [\n \"AI\",\n \"Developer Tools\",\n \"Data\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://jigsawstack.com\",\n \"actionCount\": 6,\n \"actions\": [\n \"jigsawstack.check_profanity\",\n \"jigsawstack.check_spam\",\n \"jigsawstack.get_search_suggestions\",\n \"jigsawstack.search_web\",\n \"jigsawstack.summarize_text\",\n \"jigsawstack.translate_text\"\n ]\n },\n {\n \"service\": \"jimeng_ai\",\n \"displayName\": \"Jimeng AI\",\n \"categories\": [\n \"AI\",\n \"Design & Media\"\n ],\n \"authTypes\": [\n \"custom_credential\"\n ],\n \"homepageUrl\": \"https://www.volcengine.com/product/jimeng\",\n \"actionCount\": 28,\n \"actions\": [\n \"jimeng_ai.get_image_generation_4_0_result\",\n \"jimeng_ai.get_image_generation_4_6_result\",\n \"jimeng_ai.get_marketing_video_agent_result\",\n \"jimeng_ai.get_smart_upscale_result\",\n \"jimeng_ai.get_smart_video_agent_1_0_result\",\n \"jimeng_ai.get_smart_video_agent_2_0_with_reference_result\",\n \"jimeng_ai.get_smart_video_agent_2_0_without_reference_result\",\n \"jimeng_ai.get_text_to_image_3_0_result\",\n \"jimeng_ai.get_text_to_image_3_1_result\",\n \"jimeng_ai.get_video_generation_3_0_1080p_result\",\n \"jimeng_ai.get_video_generation_3_0_720p_result\",\n \"jimeng_ai.get_video_generation_3_0_pro_result\",\n \"jimeng_ai.submit_image_generation_4_0\",\n \"jimeng_ai.submit_image_generation_4_6\",\n \"jimeng_ai.submit_image_to_video_first_frame_3_0_1080p\",\n \"jimeng_ai.submit_image_to_video_first_frame_3_0_720p\",\n \"jimeng_ai.submit_image_to_video_first_tail_frame_3_0_1080p\",\n \"jimeng_ai.submit_image_to_video_first_tail_frame_3_0_720p\",\n \"jimeng_ai.submit_marketing_video_agent\",\n \"jimeng_ai.submit_smart_upscale\",\n \"jimeng_ai.submit_smart_video_agent_1_0\",\n \"jimeng_ai.submit_smart_video_agent_2_0_with_reference\",\n \"jimeng_ai.submit_smart_video_agent_2_0_without_reference\",\n \"jimeng_ai.submit_text_to_image_3_0\",\n \"jimeng_ai.submit_text_to_image_3_1\",\n \"jimeng_ai.submit_video_generation_3_0_1080p\",\n \"jimeng_ai.submit_video_generation_3_0_720p\",\n \"jimeng_ai.submit_video_generation_3_0_pro\"\n ]\n },\n {\n \"service\": \"jiminny\",\n \"displayName\": \"Jiminny\",\n \"categories\": [\n \"Data\",\n \"Marketing\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://jiminny.com\",\n \"actionCount\": 16,\n \"actions\": [\n \"jiminny.get_action_items\",\n \"jiminny.get_activity\",\n \"jiminny.get_ai_scorecard\",\n \"jiminny.get_current_organization\",\n \"jiminny.get_summary\",\n \"jiminny.get_transcription\",\n \"jiminny.list_activities\",\n \"jiminny.list_ai_scorecards\",\n \"jiminny.list_automated_call_scoring\",\n \"jiminny.list_coaching_feedback\",\n \"jiminny.list_comments\",\n \"jiminny.list_listens\",\n \"jiminny.list_matched_topic_triggers\",\n \"jiminny.list_questions\",\n \"jiminny.list_topic_triggers\",\n \"jiminny.list_users\"\n ]\n },\n {\n \"service\": \"jin10\",\n \"displayName\": \"Jin10\",\n \"categories\": [\n \"Finance\",\n \"Data\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.jin10.com\",\n \"actionCount\": 9,\n \"actions\": [\n \"jin10.get_kline\",\n \"jin10.get_news\",\n \"jin10.get_quote\",\n \"jin10.list_calendar\",\n \"jin10.list_flash\",\n \"jin10.list_news\",\n \"jin10.list_quote_codes\",\n \"jin10.search_flash\",\n \"jin10.search_news\"\n ]\n },\n {\n \"service\": \"jira\",\n \"displayName\": \"Jira\",\n \"categories\": [\n \"Productivity\",\n \"Developer Tools\"\n ],\n \"authTypes\": [\n \"oauth2\"\n ],\n \"homepageUrl\": \"https://www.atlassian.com/software/jira\",\n \"actionCount\": 7,\n \"actions\": [\n \"jira.add_comment\",\n \"jira.create_issue\",\n \"jira.get_issue\",\n \"jira.get_project\",\n \"jira.list_issue_comments\",\n \"jira.list_projects\",\n \"jira.search_issues\"\n ]\n },\n {\n \"service\": \"jobnimbus\",\n \"displayName\": \"JobNimbus\",\n \"categories\": [\n \"Productivity\",\n \"Marketing\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.jobnimbus.com\",\n \"actionCount\": 8,\n \"actions\": [\n \"jobnimbus.create_contact\",\n \"jobnimbus.create_job\",\n \"jobnimbus.get_contact\",\n \"jobnimbus.get_job\",\n \"jobnimbus.list_contacts\",\n \"jobnimbus.list_jobs\",\n \"jobnimbus.update_contact\",\n \"jobnimbus.update_job\"\n ]\n },\n {\n \"service\": \"jotform\",\n \"displayName\": \"Jotform\",\n \"categories\": [\n \"Productivity\",\n \"Data\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.jotform.com\",\n \"actionCount\": 7,\n \"actions\": [\n \"jotform.create_submission\",\n \"jotform.get_current_user\",\n \"jotform.get_form\",\n \"jotform.get_submission\",\n \"jotform.list_form_questions\",\n \"jotform.list_form_submissions\",\n \"jotform.list_forms\"\n ]\n },\n {\n \"service\": \"jsonbin\",\n \"displayName\": \"JSONBin.io\",\n \"categories\": [\n \"Storage\",\n \"Developer Tools\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://jsonbin.io/\",\n \"actionCount\": 4,\n \"actions\": [\n \"jsonbin.create_bin\",\n \"jsonbin.delete_bin\",\n \"jsonbin.read_bin\",\n \"jsonbin.update_bin\"\n ]\n },\n {\n \"service\": \"jumpcloud\",\n \"displayName\": \"JumpCloud\",\n \"categories\": [\n \"Security\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://jumpcloud.com/\",\n \"actionCount\": 4,\n \"actions\": [\n \"jumpcloud.get_system\",\n \"jumpcloud.get_system_user\",\n \"jumpcloud.list_system_users\",\n \"jumpcloud.list_systems\"\n ]\n },\n {\n \"service\": \"jumpserver\",\n \"displayName\": \"JumpServer\",\n \"categories\": [\n \"Developer Tools\",\n \"Infrastructure\",\n \"Security\"\n ],\n \"authTypes\": [\n \"custom_credential\"\n ],\n \"homepageUrl\": \"https://www.jumpserver.org\",\n \"actionCount\": 6,\n \"actions\": [\n \"jumpserver.accounts_accounts_list\",\n \"jumpserver.assets_assets_list\",\n \"jumpserver.assets_nodes_list\",\n \"jumpserver.perms_asset_permissions_list\",\n \"jumpserver.terminal_sessions_list\",\n \"jumpserver.users_users_list\"\n ]\n },\n {\n \"service\": \"juniper_mist\",\n \"displayName\": \"Juniper Mist\",\n \"categories\": [\n \"Security\",\n \"Developer Tools\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.juniper.net/us/en/products/networking/mist-ai.html\",\n \"actionCount\": 3,\n \"actions\": [\n \"juniper_mist.get_self\",\n \"juniper_mist.list_org_sites\",\n \"juniper_mist.list_site_devices\"\n ]\n },\n {\n \"service\": \"kaggle\",\n \"displayName\": \"Kaggle\",\n \"categories\": [\n \"Data\",\n \"AI\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.kaggle.com\",\n \"actionCount\": 4,\n \"actions\": [\n \"kaggle.list_competitions\",\n \"kaggle.list_datasets\",\n \"kaggle.list_kernels\",\n \"kaggle.list_models\"\n ]\n },\n {\n \"service\": \"kaleido\",\n \"displayName\": \"Kaleido\",\n \"categories\": [\n \"Developer Tools\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.kaleido.io\",\n \"actionCount\": 12,\n \"actions\": [\n \"kaleido.get_consortium\",\n \"kaleido.get_environment\",\n \"kaleido.get_environment_status\",\n \"kaleido.get_node\",\n \"kaleido.get_node_status\",\n \"kaleido.get_service\",\n \"kaleido.get_service_status\",\n \"kaleido.list_consortia\",\n \"kaleido.list_environments\",\n \"kaleido.list_memberships\",\n \"kaleido.list_nodes\",\n \"kaleido.list_services\"\n ]\n },\n {\n \"service\": \"kandji\",\n \"displayName\": \"Iru (Kandji)\",\n \"categories\": [\n \"Productivity\",\n \"Security\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.iru.com/\",\n \"actionCount\": 4,\n \"actions\": [\n \"kandji.get_blueprint\",\n \"kandji.get_user\",\n \"kandji.list_blueprints\",\n \"kandji.list_users\"\n ]\n },\n {\n \"service\": \"keen_io\",\n \"displayName\": \"Keen IO\",\n \"categories\": [\n \"Data\",\n \"Developer Tools\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://keen.io/\",\n \"actionCount\": 3,\n \"actions\": [\n \"keen_io.add_event\",\n \"keen_io.query_count\",\n \"keen_io.query_sum\"\n ]\n },\n {\n \"service\": \"keeper_scim\",\n \"displayName\": \"Keeper SCIM\",\n \"categories\": [\n \"Security\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.keepersecurity.com/\",\n \"actionCount\": 5,\n \"actions\": [\n \"keeper_scim.get_group\",\n \"keeper_scim.get_service_provider_config\",\n \"keeper_scim.get_user\",\n \"keeper_scim.list_groups\",\n \"keeper_scim.list_users\"\n ]\n },\n {\n \"service\": \"kernel\",\n \"displayName\": \"Kernel\",\n \"categories\": [\n \"Developer Tools\",\n \"AI\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://kernel.sh\",\n \"actionCount\": 5,\n \"actions\": [\n \"kernel.create_browser_session\",\n \"kernel.delete_browser_session\",\n \"kernel.get_browser_session\",\n \"kernel.list_browser_sessions\",\n \"kernel.update_browser_session\"\n ]\n },\n {\n \"service\": \"keygen\",\n \"displayName\": \"Keygen\",\n \"categories\": [\n \"Developer Tools\",\n \"Security\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://keygen.sh\",\n \"actionCount\": 76,\n \"actions\": [\n \"keygen.activate_machine\",\n \"keygen.attach_license_entitlements\",\n \"keygen.attach_license_users\",\n \"keygen.attach_policy_entitlements\",\n \"keygen.ban_user\",\n \"keygen.change_license_group\",\n \"keygen.change_license_owner\",\n \"keygen.change_license_policy\",\n \"keygen.change_machine_group\",\n \"keygen.change_machine_owner\",\n \"keygen.change_user_group\",\n \"keygen.check_in_license\",\n \"keygen.create_component\",\n \"keygen.create_entitlement\",\n \"keygen.create_group\",\n \"keygen.create_license\",\n \"keygen.create_policy\",\n \"keygen.create_process\",\n \"keygen.create_product\",\n \"keygen.create_user\",\n \"keygen.deactivate_machine\",\n \"keygen.decrement_license_usage\",\n \"keygen.delete_component\",\n \"keygen.delete_entitlement\",\n \"keygen.delete_group\",\n \"keygen.delete_license\",\n \"keygen.delete_policy\",\n \"keygen.delete_process\",\n \"keygen.delete_product\",\n \"keygen.delete_user\",\n \"keygen.detach_license_entitlements\",\n \"keygen.detach_license_users\",\n \"keygen.detach_policy_entitlements\",\n \"keygen.increment_license_usage\",\n \"keygen.list_components\",\n \"keygen.list_entitlements\",\n \"keygen.list_groups\",\n \"keygen.list_license_entitlements\",\n \"keygen.list_license_users\",\n \"keygen.list_licenses\",\n \"keygen.list_machines\",\n \"keygen.list_policies\",\n \"keygen.list_policy_entitlements\",\n \"keygen.list_processes\",\n \"keygen.list_products\",\n \"keygen.list_users\",\n \"keygen.ping_machine\",\n \"keygen.ping_process\",\n \"keygen.reinstate_license\",\n \"keygen.renew_license\",\n \"keygen.reset_license_usage\",\n \"keygen.reset_machine_heartbeat\",\n \"keygen.retrieve_component\",\n \"keygen.retrieve_entitlement\",\n \"keygen.retrieve_group\",\n \"keygen.retrieve_license\",\n \"keygen.retrieve_machine\",\n \"keygen.retrieve_policy\",\n \"keygen.retrieve_process\",\n \"keygen.retrieve_product\",\n \"keygen.retrieve_user\",\n \"keygen.revoke_license\",\n \"keygen.suspend_license\",\n \"keygen.unban_user\",\n \"keygen.update_component\",\n \"keygen.update_entitlement\",\n \"keygen.update_group\",\n \"keygen.update_license\",\n \"keygen.update_machine\",\n \"keygen.update_policy\",\n \"keygen.update_process\",\n \"keygen.update_product\",\n \"keygen.update_user\",\n \"keygen.validate_license_by_id\",\n \"keygen.validate_license_key\",\n \"keygen.whoami\"\n ]\n },\n {\n \"service\": \"keyword\",\n \"displayName\": \"Keyword.com\",\n \"categories\": [\n \"Marketing\",\n \"Data\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://keyword.com\",\n \"actionCount\": 6,\n \"actions\": [\n \"keyword.get_current_user\",\n \"keyword.get_keyword\",\n \"keyword.get_project\",\n \"keyword.list_keywords\",\n \"keyword.list_project_regions\",\n \"keyword.list_projects\"\n ]\n },\n {\n \"service\": \"kickbox\",\n \"displayName\": \"Kickbox\",\n \"categories\": [\n \"Communication\",\n \"Marketing\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://kickbox.com/\",\n \"actionCount\": 2,\n \"actions\": [\n \"kickbox.check_disposable_email\",\n \"kickbox.verify_email\"\n ]\n },\n {\n \"service\": \"kie_ai\",\n \"displayName\": \"KIE.AI\",\n \"categories\": [\n \"AI\",\n \"Design & Media\",\n \"Developer Tools\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://kie.ai\",\n \"actionCount\": 2,\n \"actions\": [\n \"kie_ai.get_account_credits\",\n \"kie_ai.get_download_url\"\n ]\n },\n {\n \"service\": \"kintone\",\n \"displayName\": \"Kintone\",\n \"categories\": [\n \"Productivity\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.kintone.com/\",\n \"actionCount\": 6,\n \"actions\": [\n \"kintone.get_user_departments\",\n \"kintone.get_user_groups\",\n \"kintone.get_user_services\",\n \"kintone.list_departments\",\n \"kintone.list_groups\",\n \"kintone.list_users\"\n ]\n },\n {\n \"service\": \"kit\",\n \"displayName\": \"Kit\",\n \"categories\": [\n \"Marketing\",\n \"Communication\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://kit.com/\",\n \"actionCount\": 9,\n \"actions\": [\n \"kit.create_subscriber\",\n \"kit.get_current_account\",\n \"kit.get_subscriber\",\n \"kit.list_form_subscribers\",\n \"kit.list_forms\",\n \"kit.list_subscribers\",\n \"kit.list_tag_subscribers\",\n \"kit.list_tags\",\n \"kit.update_subscriber\"\n ]\n },\n {\n \"service\": \"klangio\",\n \"displayName\": \"Klangio\",\n \"categories\": [\n \"AI\",\n \"Design & Media\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://klang.io\",\n \"actionCount\": 9,\n \"actions\": [\n \"klangio.create_beat_tracking_job\",\n \"klangio.create_chord_recognition_extended_job\",\n \"klangio.create_chord_recognition_job\",\n \"klangio.create_source_separation_job\",\n \"klangio.create_strum_recognition_job\",\n \"klangio.create_transcription_job\",\n \"klangio.download_job_result\",\n \"klangio.download_source_separation_audio\",\n \"klangio.get_job_status\"\n ]\n },\n {\n \"service\": \"klaviyo\",\n \"displayName\": \"Klaviyo\",\n \"categories\": [\n \"Marketing\",\n \"Data\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.klaviyo.com\",\n \"actionCount\": 7,\n \"actions\": [\n \"klaviyo.create_event\",\n \"klaviyo.get_campaign\",\n \"klaviyo.get_profile\",\n \"klaviyo.list_campaigns\",\n \"klaviyo.list_events\",\n \"klaviyo.list_profiles\",\n \"klaviyo.validate_account\"\n ]\n },\n {\n \"service\": \"klazify\",\n \"displayName\": \"Klazify\",\n \"categories\": [\n \"Data\",\n \"Marketing\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.klazify.com\",\n \"actionCount\": 8,\n \"actions\": [\n \"klazify.categorize_url\",\n \"klazify.get_company_data\",\n \"klazify.get_domain_expiration\",\n \"klazify.get_domain_logo\",\n \"klazify.get_iab_categories\",\n \"klazify.get_similar_domains\",\n \"klazify.get_social_media_links\",\n \"klazify.get_tech_stack\"\n ]\n },\n {\n \"service\": \"klicktipp\",\n \"displayName\": \"KlickTipp\",\n \"categories\": [\n \"Marketing\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.klicktipp.com\",\n \"actionCount\": 3,\n \"actions\": [\n \"klicktipp.signin\",\n \"klicktipp.signoff\",\n \"klicktipp.signout\"\n ]\n },\n {\n \"service\": \"klipfolio\",\n \"displayName\": \"Klipfolio\",\n \"categories\": [\n \"Data\",\n \"Productivity\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.klipfolio.com\",\n \"actionCount\": 8,\n \"actions\": [\n \"klipfolio.get_client\",\n \"klipfolio.get_dashboard\",\n \"klipfolio.get_data_source\",\n \"klipfolio.get_klip\",\n \"klipfolio.list_clients\",\n \"klipfolio.list_dashboards\",\n \"klipfolio.list_data_sources\",\n \"klipfolio.list_klips\"\n ]\n },\n {\n \"service\": \"knack\",\n \"displayName\": \"Knack\",\n \"categories\": [\n \"Productivity\",\n \"Data\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.knack.com\",\n \"actionCount\": 5,\n \"actions\": [\n \"knack.create_record\",\n \"knack.delete_record\",\n \"knack.get_record\",\n \"knack.list_records\",\n \"knack.update_record\"\n ]\n },\n {\n \"service\": \"knock\",\n \"displayName\": \"Knock\",\n \"categories\": [\n \"Communication\",\n \"Developer Tools\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://knock.app/\",\n \"actionCount\": 5,\n \"actions\": [\n \"knock.delete_user\",\n \"knock.get_user\",\n \"knock.identify_user\",\n \"knock.list_users\",\n \"knock.trigger_workflow\"\n ]\n },\n {\n \"service\": \"knowbe4\",\n \"displayName\": \"KnowBe4\",\n \"categories\": [\n \"Security\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.knowbe4.com\",\n \"actionCount\": 5,\n \"actions\": [\n \"knowbe4.get_account\",\n \"knowbe4.get_group\",\n \"knowbe4.get_user\",\n \"knowbe4.list_groups\",\n \"knowbe4.list_users\"\n ]\n },\n {\n \"service\": \"kommo\",\n \"displayName\": \"Kommo\",\n \"categories\": [\n \"Marketing\",\n \"Productivity\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.kommo.com/\",\n \"actionCount\": 13,\n \"actions\": [\n \"kommo.get_account\",\n \"kommo.get_company\",\n \"kommo.get_contact\",\n \"kommo.get_lead\",\n \"kommo.get_pipeline\",\n \"kommo.get_task\",\n \"kommo.get_user\",\n \"kommo.list_companies\",\n \"kommo.list_contacts\",\n \"kommo.list_leads\",\n \"kommo.list_pipelines\",\n \"kommo.list_tasks\",\n \"kommo.list_users\"\n ]\n },\n {\n \"service\": \"kontent_ai\",\n \"displayName\": \"Kontent.ai\",\n \"categories\": [\n \"Productivity\",\n \"Data\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://kontent.ai\",\n \"actionCount\": 6,\n \"actions\": [\n \"kontent_ai.get_content_item\",\n \"kontent_ai.get_content_type\",\n \"kontent_ai.get_language\",\n \"kontent_ai.list_content_items\",\n \"kontent_ai.list_content_types\",\n \"kontent_ai.list_languages\"\n ]\n },\n {\n \"service\": \"kraken_io\",\n \"displayName\": \"Kraken.io\",\n \"categories\": [\n \"Design & Media\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://kraken.io\",\n \"actionCount\": 2,\n \"actions\": [\n \"kraken_io.get_user_status\",\n \"kraken_io.optimize_image\"\n ]\n },\n {\n \"service\": \"kustomer\",\n \"displayName\": \"Kustomer\",\n \"categories\": [\n \"Productivity\",\n \"Data\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.kustomer.com\",\n \"actionCount\": 8,\n \"actions\": [\n \"kustomer.create_customer\",\n \"kustomer.get_customer\",\n \"kustomer.get_customer_by_email\",\n \"kustomer.get_customer_by_external_id\",\n \"kustomer.get_customer_by_phone\",\n \"kustomer.list_customers\",\n \"kustomer.search_customers\",\n \"kustomer.update_customer\"\n ]\n },\n {\n \"service\": \"l2s\",\n \"displayName\": \"L2S\",\n \"categories\": [\n \"Marketing\",\n \"Data\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.l2s.is\",\n \"actionCount\": 3,\n \"actions\": [\n \"l2s.get_url_details\",\n \"l2s.shorten_url\",\n \"l2s.update_url_details\"\n ]\n },\n {\n \"service\": \"la_growth_machine\",\n \"displayName\": \"La Growth Machine\",\n \"categories\": [\n \"Marketing\",\n \"Data\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://lagrowthmachine.com\",\n \"actionCount\": 7,\n \"actions\": [\n \"la_growth_machine.create_audience\",\n \"la_growth_machine.create_or_update_lead\",\n \"la_growth_machine.get_audience_detail\",\n \"la_growth_machine.get_audience_leads\",\n \"la_growth_machine.list_audiences\",\n \"la_growth_machine.list_members\",\n \"la_growth_machine.search_leads\"\n ]\n },\n {\n \"service\": \"label_studio\",\n \"displayName\": \"Label Studio\",\n \"categories\": [\n \"AI\",\n \"Data\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://labelstud.io\",\n \"actionCount\": 6,\n \"actions\": [\n \"label_studio.create_project\",\n \"label_studio.create_task\",\n \"label_studio.get_current_user\",\n \"label_studio.get_project\",\n \"label_studio.list_projects\",\n \"label_studio.list_tasks\"\n ]\n },\n {\n \"service\": \"landbot\",\n \"displayName\": \"Landbot\",\n \"categories\": [\n \"Communication\",\n \"Marketing\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://landbot.io\",\n \"actionCount\": 5,\n \"actions\": [\n \"landbot.get_customer_messages\",\n \"landbot.list_channels\",\n \"landbot.list_customers\",\n \"landbot.send_text\",\n \"landbot.set_customer_field\"\n ]\n },\n {\n \"service\": \"langbase\",\n \"displayName\": \"Langbase\",\n \"categories\": [\n \"AI\",\n \"Data\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://langbase.com\",\n \"actionCount\": 4,\n \"actions\": [\n \"langbase.create_memory\",\n \"langbase.delete_memory\",\n \"langbase.list_memories\",\n \"langbase.retrieve_memory\"\n ]\n },\n {\n \"service\": \"langsmith\",\n \"displayName\": \"LangSmith\",\n \"categories\": [\n \"AI\",\n \"Developer Tools\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.langchain.com/langsmith\",\n \"actionCount\": 10,\n \"actions\": [\n \"langsmith.create_dataset\",\n \"langsmith.create_example\",\n \"langsmith.create_project\",\n \"langsmith.get_dataset\",\n \"langsmith.get_example\",\n \"langsmith.get_project\",\n \"langsmith.list_datasets\",\n \"langsmith.list_examples\",\n \"langsmith.list_projects\",\n \"langsmith.list_workspaces\"\n ]\n },\n {\n \"service\": \"laposta\",\n \"displayName\": \"Laposta\",\n \"categories\": [\n \"Marketing\",\n \"Communication\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://laposta.nl/\",\n \"actionCount\": 8,\n \"actions\": [\n \"laposta.create_list\",\n \"laposta.create_member\",\n \"laposta.get_list\",\n \"laposta.get_member\",\n \"laposta.list_lists\",\n \"laposta.list_members\",\n \"laposta.update_list\",\n \"laposta.update_member\"\n ]\n },\n {\n \"service\": \"laravel_cloud\",\n \"displayName\": \"Laravel Cloud\",\n \"categories\": [\n \"Developer Tools\",\n \"Storage\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://cloud.laravel.com\",\n \"actionCount\": 8,\n \"actions\": [\n \"laravel_cloud.get_application\",\n \"laravel_cloud.get_deployment\",\n \"laravel_cloud.get_environment\",\n \"laravel_cloud.get_organization\",\n \"laravel_cloud.list_applications\",\n \"laravel_cloud.list_deployments\",\n \"laravel_cloud.list_environments\",\n \"laravel_cloud.list_regions\"\n ]\n },\n {\n \"service\": \"latchshot\",\n \"displayName\": \"Latchshot\",\n \"categories\": [\n \"Developer Tools\",\n \"Design & Media\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://latchshot.fly.dev\",\n \"actionCount\": 2,\n \"actions\": [\n \"latchshot.capture_page\",\n \"latchshot.get_usage\"\n ]\n },\n {\n \"service\": \"lattice\",\n \"displayName\": \"Lattice\",\n \"categories\": [\n \"Productivity\",\n \"Data\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://lattice.com\",\n \"actionCount\": 8,\n \"actions\": [\n \"lattice.get_current_user\",\n \"lattice.get_department\",\n \"lattice.get_goal\",\n \"lattice.get_user\",\n \"lattice.list_departments\",\n \"lattice.list_goals\",\n \"lattice.list_tags\",\n \"lattice.list_users\"\n ]\n },\n {\n \"service\": \"launch_darkly\",\n \"displayName\": \"LaunchDarkly\",\n \"categories\": [\n \"Developer Tools\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://launchdarkly.com\",\n \"actionCount\": 40,\n \"actions\": [\n \"launch_darkly.add_member_to_teams\",\n \"launch_darkly.create_environment\",\n \"launch_darkly.create_feature_flag\",\n \"launch_darkly.create_project\",\n \"launch_darkly.create_segment\",\n \"launch_darkly.create_team\",\n \"launch_darkly.create_token\",\n \"launch_darkly.delete_environment\",\n \"launch_darkly.delete_feature_flag\",\n \"launch_darkly.delete_project\",\n \"launch_darkly.delete_segment\",\n \"launch_darkly.delete_team\",\n \"launch_darkly.delete_token\",\n \"launch_darkly.get_caller_identity\",\n \"launch_darkly.get_context_instances\",\n \"launch_darkly.get_contexts\",\n \"launch_darkly.get_environment\",\n \"launch_darkly.get_environments\",\n \"launch_darkly.get_feature_flag\",\n \"launch_darkly.get_feature_flags\",\n \"launch_darkly.get_member\",\n \"launch_darkly.get_members\",\n \"launch_darkly.get_project\",\n \"launch_darkly.get_segment\",\n \"launch_darkly.get_segments\",\n \"launch_darkly.get_tags\",\n \"launch_darkly.get_team\",\n \"launch_darkly.get_token\",\n \"launch_darkly.get_tokens\",\n \"launch_darkly.list_projects\",\n \"launch_darkly.list_teams\",\n \"launch_darkly.patch_environment\",\n \"launch_darkly.patch_feature_flag\",\n \"launch_darkly.patch_project\",\n \"launch_darkly.patch_segment\",\n \"launch_darkly.patch_team\",\n \"launch_darkly.patch_token\",\n \"launch_darkly.reset_token\",\n \"launch_darkly.search_context_instances\",\n \"launch_darkly.search_contexts\"\n ]\n },\n {\n \"service\": \"leadfeeder\",\n \"displayName\": \"Leadfeeder\",\n \"categories\": [\n \"Marketing\",\n \"Data\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.leadfeeder.com\",\n \"actionCount\": 7,\n \"actions\": [\n \"leadfeeder.enrich_ip\",\n \"leadfeeder.get_companies\",\n \"leadfeeder.get_company\",\n \"leadfeeder.get_current_user\",\n \"leadfeeder.list_accounts\",\n \"leadfeeder.match_companies\",\n \"leadfeeder.search_companies\"\n ]\n },\n {\n \"service\": \"leadmagic\",\n \"displayName\": \"LeadMagic\",\n \"categories\": [\n \"Marketing\",\n \"Data\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://leadmagic.io\",\n \"actionCount\": 6,\n \"actions\": [\n \"leadmagic.enrich_company\",\n \"leadmagic.enrich_profile\",\n \"leadmagic.find_mobile\",\n \"leadmagic.find_work_email\",\n \"leadmagic.get_credits\",\n \"leadmagic.validate_email\"\n ]\n },\n {\n \"service\": \"leexi\",\n \"displayName\": \"Leexi\",\n \"categories\": [\n \"Productivity\",\n \"Communication\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.leexi.ai/\",\n \"actionCount\": 6,\n \"actions\": [\n \"leexi.get_call\",\n \"leexi.get_call_note\",\n \"leexi.list_call_notes\",\n \"leexi.list_calls\",\n \"leexi.list_teams\",\n \"leexi.list_users\"\n ]\n },\n {\n \"service\": \"leiga\",\n \"displayName\": \"Leiga\",\n \"categories\": [\n \"Productivity\",\n \"Developer Tools\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.leiga.com/\",\n \"actionCount\": 6,\n \"actions\": [\n \"leiga.get_issue_by_number\",\n \"leiga.get_issue_schema\",\n \"leiga.get_project\",\n \"leiga.get_project_by_key\",\n \"leiga.list_issues\",\n \"leiga.list_projects\"\n ]\n },\n {\n \"service\": \"lemlist\",\n \"displayName\": \"lemlist\",\n \"categories\": [\n \"Marketing\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.lemlist.com\",\n \"actionCount\": 4,\n \"actions\": [\n \"lemlist.get_campaign\",\n \"lemlist.get_team\",\n \"lemlist.list_campaign_leads\",\n \"lemlist.list_campaigns\"\n ]\n },\n {\n \"service\": \"lemon_squeezy\",\n \"displayName\": \"Lemon Squeezy\",\n \"categories\": [\n \"Productivity\",\n \"Finance\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.lemonsqueezy.com\",\n \"actionCount\": 16,\n \"actions\": [\n \"lemon_squeezy.create_customer\",\n \"lemon_squeezy.create_webhook\",\n \"lemon_squeezy.delete_webhook\",\n \"lemon_squeezy.list_customers\",\n \"lemon_squeezy.list_orders\",\n \"lemon_squeezy.list_products\",\n \"lemon_squeezy.list_stores\",\n \"lemon_squeezy.list_subscriptions\",\n \"lemon_squeezy.list_variants\",\n \"lemon_squeezy.list_webhooks\",\n \"lemon_squeezy.retrieve_authenticated_user\",\n \"lemon_squeezy.retrieve_customer\",\n \"lemon_squeezy.retrieve_store\",\n \"lemon_squeezy.retrieve_webhook\",\n \"lemon_squeezy.update_customer\",\n \"lemon_squeezy.update_webhook\"\n ]\n },\n {\n \"service\": \"lessonspace\",\n \"displayName\": \"Lessonspace\",\n \"categories\": [\n \"Productivity\",\n \"Communication\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.thelessonspace.com\",\n \"actionCount\": 4,\n \"actions\": [\n \"lessonspace.create_unified_space\",\n \"lessonspace.get_organisation_session\",\n \"lessonspace.get_session_recording_url\",\n \"lessonspace.list_organisation_sessions\"\n ]\n },\n {\n \"service\": \"lever\",\n \"displayName\": \"Lever\",\n \"categories\": [\n \"Productivity\",\n \"Communication\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.lever.co\",\n \"actionCount\": 6,\n \"actions\": [\n \"lever.create_opportunity_note\",\n \"lever.get_opportunity\",\n \"lever.get_posting\",\n \"lever.list_opportunities\",\n \"lever.list_opportunity_notes\",\n \"lever.list_postings\"\n ]\n },\n {\n \"service\": \"lexoffice\",\n \"displayName\": \"lexoffice\",\n \"categories\": [\n \"Finance\",\n \"Productivity\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://office.lexware.de/\",\n \"actionCount\": 10,\n \"actions\": [\n \"lexoffice.create_article\",\n \"lexoffice.create_contact\",\n \"lexoffice.get_article\",\n \"lexoffice.get_contact\",\n \"lexoffice.get_profile\",\n \"lexoffice.list_articles\",\n \"lexoffice.list_contacts\",\n \"lexoffice.list_voucherlist\",\n \"lexoffice.update_article\",\n \"lexoffice.update_contact\"\n ]\n },\n {\n \"service\": \"lifx\",\n \"displayName\": \"LIFX\",\n \"categories\": [\n \"Developer Tools\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.lifx.com\",\n \"actionCount\": 7,\n \"actions\": [\n \"lifx.activate_scene\",\n \"lifx.list_lights\",\n \"lifx.list_scenes\",\n \"lifx.set_state\",\n \"lifx.toggle_power\",\n \"lifx.turn_effects_off\",\n \"lifx.validate_color\"\n ]\n },\n {\n \"service\": \"lightfield\",\n \"displayName\": \"Lightfield\",\n \"categories\": [\n \"Productivity\",\n \"AI\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://lightfield.app\",\n \"actionCount\": 10,\n \"actions\": [\n \"lightfield.get_account\",\n \"lightfield.get_api_key_metadata\",\n \"lightfield.get_contact\",\n \"lightfield.get_custom_object_record\",\n \"lightfield.get_opportunity\",\n \"lightfield.list_accounts\",\n \"lightfield.list_contacts\",\n \"lightfield.list_custom_object_records\",\n \"lightfield.list_object_definitions\",\n \"lightfield.list_opportunities\"\n ]\n },\n {\n \"service\": \"linear\",\n \"displayName\": \"Linear\",\n \"categories\": [\n \"Productivity\",\n \"Developer Tools\"\n ],\n \"authTypes\": [\n \"oauth2\",\n \"api_key\"\n ],\n \"homepageUrl\": \"https://linear.app\",\n \"actionCount\": 34,\n \"actions\": [\n \"linear.create_attachment\",\n \"linear.create_comment_reaction\",\n \"linear.create_linear_comment\",\n \"linear.create_linear_issue\",\n \"linear.create_linear_issue_relation\",\n \"linear.create_linear_label\",\n \"linear.create_linear_project\",\n \"linear.create_project_milestone\",\n \"linear.create_project_update\",\n \"linear.delete_linear_issue\",\n \"linear.get_all_linear_teams\",\n \"linear.get_attachment\",\n \"linear.get_current_user\",\n \"linear.get_cycles_by_team_id\",\n \"linear.get_issue_defaults\",\n \"linear.get_linear_issue\",\n \"linear.get_linear_project\",\n \"linear.list_issue_drafts\",\n \"linear.list_issues_by_team_id\",\n \"linear.list_linear_cycles\",\n \"linear.list_linear_issues\",\n \"linear.list_linear_labels\",\n \"linear.list_linear_projects\",\n \"linear.list_linear_states\",\n \"linear.list_linear_teams\",\n \"linear.list_linear_users\",\n \"linear.remove_issue_label\",\n \"linear.remove_reaction\",\n \"linear.run_mutation\",\n \"linear.run_query\",\n \"linear.search_issues\",\n \"linear.update_issue\",\n \"linear.update_linear_comment\",\n \"linear.update_linear_project\"\n ]\n },\n {\n \"service\": \"linguapop\",\n \"displayName\": \"Linguapop\",\n \"categories\": [\n \"Productivity\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.linguapop.eu/\",\n \"actionCount\": 2,\n \"actions\": [\n \"linguapop.list_available_languages\",\n \"linguapop.send_invitation\"\n ]\n },\n {\n \"service\": \"lingvanex_translation_api\",\n \"displayName\": \"Lingvanex Translation API\",\n \"categories\": [\n \"AI\",\n \"Productivity\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://lingvanex.com/products/translationapi/\",\n \"actionCount\": 3,\n \"actions\": [\n \"lingvanex_translation_api.detect_language\",\n \"lingvanex_translation_api.list_languages\",\n \"lingvanex_translation_api.translate_text\"\n ]\n },\n {\n \"service\": \"linkedin\",\n \"displayName\": \"LinkedIn\",\n \"categories\": [\n \"Social\",\n \"Marketing\"\n ],\n \"authTypes\": [\n \"oauth2\"\n ],\n \"homepageUrl\": \"https://www.linkedin.com\",\n \"actionCount\": 5,\n \"actions\": [\n \"linkedin.create_article_post\",\n \"linkedin.create_reshare\",\n \"linkedin.create_text_post\",\n \"linkedin.delete_post\",\n \"linkedin.get_current_member\"\n ]\n },\n {\n \"service\": \"linkhut\",\n \"displayName\": \"Linkhut\",\n \"categories\": [\n \"Productivity\"\n ],\n \"authTypes\": [\n \"oauth2\"\n ],\n \"homepageUrl\": \"https://ln.ht\",\n \"actionCount\": 5,\n \"actions\": [\n \"linkhut.add_bookmark\",\n \"linkhut.delete_bookmark\",\n \"linkhut.get_all_tags\",\n \"linkhut.get_bookmarks\",\n \"linkhut.update_bookmark\"\n ]\n },\n {\n \"service\": \"linkly\",\n \"displayName\": \"Linkly\",\n \"categories\": [\n \"Marketing\",\n \"Data\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://linklyhq.com\",\n \"actionCount\": 6,\n \"actions\": [\n \"linkly.create_link\",\n \"linkly.delete_link\",\n \"linkly.get_link\",\n \"linkly.list_links\",\n \"linkly.list_workspaces\",\n \"linkly.update_link\"\n ]\n },\n {\n \"service\": \"linkup\",\n \"displayName\": \"Linkup\",\n \"categories\": [\n \"AI\",\n \"Data\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.linkup.so\",\n \"actionCount\": 5,\n \"actions\": [\n \"linkup.fetch_webpage\",\n \"linkup.get_credits_balance\",\n \"linkup.search_answer\",\n \"linkup.search_results\",\n \"linkup.search_structured_data\"\n ]\n },\n {\n \"service\": \"linux_do\",\n \"displayName\": \"Linux DO\",\n \"categories\": [\n \"Social\",\n \"Developer Tools\"\n ],\n \"authTypes\": [\n \"no_auth\"\n ],\n \"homepageUrl\": \"https://linux.do\",\n \"actionCount\": 13,\n \"actions\": [\n \"linux_do.list_badge_grants\",\n \"linux_do.list_category_tag_topics\",\n \"linux_do.list_category_topics\",\n \"linux_do.list_group_mentions\",\n \"linux_do.list_group_posts\",\n \"linux_do.list_hot_topics\",\n \"linux_do.list_latest_posts\",\n \"linux_do.list_latest_topics\",\n \"linux_do.list_tag_topics\",\n \"linux_do.list_top_topics\",\n \"linux_do.list_topic_posts\",\n \"linux_do.list_user_posts\",\n \"linux_do.list_user_topics\"\n ]\n },\n {\n \"service\": \"listennotes\",\n \"displayName\": \"Listen Notes\",\n \"categories\": [\n \"Data\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.listennotes.com\",\n \"actionCount\": 9,\n \"actions\": [\n \"listennotes.get_best_podcasts\",\n \"listennotes.get_episode\",\n \"listennotes.get_genres\",\n \"listennotes.get_languages\",\n \"listennotes.get_podcast\",\n \"listennotes.get_regions\",\n \"listennotes.get_related_podcasts\",\n \"listennotes.search\",\n \"listennotes.typeahead\"\n ]\n },\n {\n \"service\": \"livesession\",\n \"displayName\": \"LiveSession\",\n \"categories\": [\n \"Data\",\n \"Marketing\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://livesession.io\",\n \"actionCount\": 1,\n \"actions\": [\n \"livesession.list_sessions\"\n ]\n },\n {\n \"service\": \"lob\",\n \"displayName\": \"Lob\",\n \"categories\": [\n \"Marketing\",\n \"Location\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.lob.com\",\n \"actionCount\": 5,\n \"actions\": [\n \"lob.autocomplete_us_addresses\",\n \"lob.bulk_verify_international_addresses\",\n \"lob.bulk_verify_us_addresses\",\n \"lob.verify_international_address\",\n \"lob.verify_us_address\"\n ]\n },\n {\n \"service\": \"lodgify\",\n \"displayName\": \"Lodgify\",\n \"categories\": [\n \"Productivity\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.lodgify.com/\",\n \"actionCount\": 7,\n \"actions\": [\n \"lodgify.get_booking\",\n \"lodgify.get_property\",\n \"lodgify.get_property_availability\",\n \"lodgify.get_quote\",\n \"lodgify.list_bookings\",\n \"lodgify.list_properties\",\n \"lodgify.list_property_rooms\"\n ]\n },\n {\n \"service\": \"logo_dev\",\n \"displayName\": \"Logo.dev\",\n \"categories\": [\n \"Design & Media\",\n \"Developer Tools\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://logo.dev\",\n \"actionCount\": 7,\n \"actions\": [\n \"logo_dev.describe_brand\",\n \"logo_dev.get_logo_by_crypto\",\n \"logo_dev.get_logo_by_domain\",\n \"logo_dev.get_logo_by_isin\",\n \"logo_dev.get_logo_by_name\",\n \"logo_dev.get_logo_by_ticker\",\n \"logo_dev.search_brands\"\n ]\n },\n {\n \"service\": \"logsnag\",\n \"displayName\": \"LogSnag\",\n \"categories\": [\n \"Developer Tools\",\n \"Data\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://logsnag.com\",\n \"actionCount\": 4,\n \"actions\": [\n \"logsnag.identify_user\",\n \"logsnag.mutate_insight\",\n \"logsnag.publish_event\",\n \"logsnag.publish_insight\"\n ]\n },\n {\n \"service\": \"lokalise\",\n \"displayName\": \"Lokalise\",\n \"categories\": [\n \"Productivity\",\n \"Developer Tools\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://lokalise.com\",\n \"actionCount\": 11,\n \"actions\": [\n \"lokalise.create_keys\",\n \"lokalise.delete_key\",\n \"lokalise.get_key\",\n \"lokalise.get_project\",\n \"lokalise.get_translation\",\n \"lokalise.list_keys\",\n \"lokalise.list_project_languages\",\n \"lokalise.list_projects\",\n \"lokalise.list_translations\",\n \"lokalise.update_key\",\n \"lokalise.update_translation\"\n ]\n },\n {\n \"service\": \"longbridge\",\n \"displayName\": \"Longbridge\",\n \"categories\": [\n \"Finance\",\n \"Data\"\n ],\n \"authTypes\": [\n \"oauth2\"\n ],\n \"homepageUrl\": \"https://longbridge.com\",\n \"actionCount\": 80,\n \"actions\": [\n \"longbridge.ah_premium\",\n \"longbridge.ah_premium_intraday\",\n \"longbridge.anomaly\",\n \"longbridge.broker_holding\",\n \"longbridge.broker_holding_daily\",\n \"longbridge.broker_holding_detail\",\n \"longbridge.business_segments\",\n \"longbridge.business_segments_history\",\n \"longbridge.buyback\",\n \"longbridge.company\",\n \"longbridge.consensus\",\n \"longbridge.constituent\",\n \"longbridge.corp_action\",\n \"longbridge.dividend\",\n \"longbridge.dividend_detail\",\n \"longbridge.estimate_max_buy_quantity\",\n \"longbridge.exchange_rate\",\n \"longbridge.executive\",\n \"longbridge.finance_calendar\",\n \"longbridge.financial_report\",\n \"longbridge.financial_report_latest\",\n \"longbridge.financial_report_snapshot\",\n \"longbridge.financial_statement\",\n \"longbridge.forecast_eps\",\n \"longbridge.fund_holder\",\n \"longbridge.get_market_temperature\",\n \"longbridge.get_order_detail\",\n \"longbridge.industry_peers\",\n \"longbridge.industry_valuation\",\n \"longbridge.industry_valuation_dist\",\n \"longbridge.institution_rating\",\n \"longbridge.institution_rating_detail\",\n \"longbridge.institution_rating_history\",\n \"longbridge.institution_rating_industry_rank\",\n \"longbridge.institutional_views\",\n \"longbridge.invest_relation\",\n \"longbridge.list_account_cash\",\n \"longbridge.list_cash_flow\",\n \"longbridge.list_filings\",\n \"longbridge.list_fund_positions\",\n \"longbridge.list_history_executions\",\n \"longbridge.list_history_orders\",\n \"longbridge.list_market_temperature\",\n \"longbridge.list_news\",\n \"longbridge.list_securities\",\n \"longbridge.list_stock_positions\",\n \"longbridge.list_today_executions\",\n \"longbridge.list_today_orders\",\n \"longbridge.list_watchlist_groups\",\n \"longbridge.market_status\",\n \"longbridge.market_stock_events\",\n \"longbridge.news\",\n \"longbridge.operating\",\n \"longbridge.option_volume\",\n \"longbridge.option_volume_daily\",\n \"longbridge.profit_analysis\",\n \"longbridge.profit_analysis_by_market\",\n \"longbridge.profit_analysis_detail\",\n \"longbridge.profit_analysis_flows\",\n \"longbridge.profit_analysis_sublist\",\n \"longbridge.rank_categories\",\n \"longbridge.rank_list\",\n \"longbridge.screener_indicators\",\n \"longbridge.screener_recommend_strategies\",\n \"longbridge.screener_search\",\n \"longbridge.screener_strategy\",\n \"longbridge.screener_user_strategies\",\n \"longbridge.shareholder\",\n \"longbridge.shareholder_detail\",\n \"longbridge.shareholder_top\",\n \"longbridge.short_margin\",\n \"longbridge.short_positions\",\n \"longbridge.short_trades\",\n \"longbridge.stock_rating_history\",\n \"longbridge.stock_ratings\",\n \"longbridge.trade_stats\",\n \"longbridge.valuation\",\n \"longbridge.valuation_comparison\",\n \"longbridge.valuation_history\",\n \"longbridge.valuation_rank\"\n ]\n },\n {\n \"service\": \"loomio\",\n \"displayName\": \"Loomio\",\n \"categories\": [\n \"Productivity\",\n \"Communication\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.loomio.com\",\n \"actionCount\": 2,\n \"actions\": [\n \"loomio.get_poll\",\n \"loomio.list_polls\"\n ]\n },\n {\n \"service\": \"loop_returns\",\n \"displayName\": \"Loop Returns\",\n \"categories\": [\n \"Productivity\",\n \"Data\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.loopreturns.com\",\n \"actionCount\": 4,\n \"actions\": [\n \"loop_returns.get_destination\",\n \"loop_returns.get_return_details\",\n \"loop_returns.list_destinations\",\n \"loop_returns.list_returns\"\n ]\n },\n {\n \"service\": \"loops\",\n \"displayName\": \"Loops\",\n \"categories\": [\n \"Marketing\",\n \"Communication\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://loops.so\",\n \"actionCount\": 8,\n \"actions\": [\n \"loops.create_contact\",\n \"loops.create_contact_property\",\n \"loops.delete_contact\",\n \"loops.find_contact\",\n \"loops.list_contact_properties\",\n \"loops.list_mailing_lists\",\n \"loops.send_event\",\n \"loops.update_contact\"\n ]\n },\n {\n \"service\": \"loyverse\",\n \"displayName\": \"Loyverse\",\n \"categories\": [\n \"Finance\",\n \"Data\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://loyverse.com/\",\n \"actionCount\": 11,\n \"actions\": [\n \"loyverse.get_category\",\n \"loyverse.get_customer\",\n \"loyverse.get_item\",\n \"loyverse.get_merchant\",\n \"loyverse.get_receipt\",\n \"loyverse.get_store\",\n \"loyverse.list_categories\",\n \"loyverse.list_customers\",\n \"loyverse.list_items\",\n \"loyverse.list_receipts\",\n \"loyverse.list_stores\"\n ]\n },\n {\n \"service\": \"lucid_scim\",\n \"displayName\": \"Lucid SCIM\",\n \"categories\": [\n \"Security\",\n \"Productivity\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://lucid.co\",\n \"actionCount\": 5,\n \"actions\": [\n \"lucid_scim.get_group\",\n \"lucid_scim.get_service_provider_config\",\n \"lucid_scim.get_user\",\n \"lucid_scim.list_groups\",\n \"lucid_scim.list_users\"\n ]\n },\n {\n \"service\": \"luckin_coffee\",\n \"displayName\": \"Luckin Coffee\",\n \"categories\": [\n \"Location\",\n \"Productivity\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://open.lkcoffee.com/mcp\",\n \"actionCount\": 8,\n \"actions\": [\n \"luckin_coffee.cancelOrder\",\n \"luckin_coffee.createOrder\",\n \"luckin_coffee.previewOrder\",\n \"luckin_coffee.queryOrderDetailInfo\",\n \"luckin_coffee.queryProductDetailInfo\",\n \"luckin_coffee.queryShopList\",\n \"luckin_coffee.searchProductForMcp\",\n \"luckin_coffee.switchProduct\"\n ]\n },\n {\n \"service\": \"luma\",\n \"displayName\": \"Luma\",\n \"categories\": [\n \"Productivity\",\n \"Social\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://lu.ma\",\n \"actionCount\": 6,\n \"actions\": [\n \"luma.get_calendar\",\n \"luma.get_event\",\n \"luma.get_event_guest\",\n \"luma.get_self\",\n \"luma.list_calendar_events\",\n \"luma.list_event_guests\"\n ]\n },\n {\n \"service\": \"lumos\",\n \"displayName\": \"Lumos\",\n \"categories\": [\n \"Security\",\n \"Productivity\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.lumos.com/\",\n \"actionCount\": 4,\n \"actions\": [\n \"lumos.get_access_request\",\n \"lumos.get_appstore_app\",\n \"lumos.list_access_requests\",\n \"lumos.list_appstore_apps\"\n ]\n },\n {\n \"service\": \"lusha\",\n \"displayName\": \"Lusha\",\n \"categories\": [\n \"Data\",\n \"Marketing\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.lusha.com\",\n \"actionCount\": 5,\n \"actions\": [\n \"lusha.enrich_companies\",\n \"lusha.enrich_contacts\",\n \"lusha.get_account_usage\",\n \"lusha.search_companies\",\n \"lusha.search_contacts\"\n ]\n },\n {\n \"service\": \"mailbluster\",\n \"displayName\": \"MailBluster\",\n \"categories\": [\n \"Communication\",\n \"Marketing\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://mailbluster.com\",\n \"actionCount\": 5,\n \"actions\": [\n \"mailbluster.create_lead\",\n \"mailbluster.delete_lead\",\n \"mailbluster.get_lead\",\n \"mailbluster.list_fields\",\n \"mailbluster.update_lead\"\n ]\n },\n {\n \"service\": \"mailbox_validator\",\n \"displayName\": \"MailboxValidator\",\n \"categories\": [\n \"Communication\",\n \"Marketing\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.mailboxvalidator.com\",\n \"actionCount\": 3,\n \"actions\": [\n \"mailbox_validator.check_disposable_email\",\n \"mailbox_validator.check_free_email\",\n \"mailbox_validator.validate_email\"\n ]\n },\n {\n \"service\": \"mailboxlayer\",\n \"displayName\": \"Mailboxlayer\",\n \"categories\": [\n \"Communication\",\n \"Marketing\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://mailboxlayer.com\",\n \"actionCount\": 1,\n \"actions\": [\n \"mailboxlayer.check_email\"\n ]\n },\n {\n \"service\": \"mailcheck\",\n \"displayName\": \"Mailcheck\",\n \"categories\": [\n \"Communication\",\n \"Security\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.usercheck.com\",\n \"actionCount\": 3,\n \"actions\": [\n \"mailcheck.get_status\",\n \"mailcheck.validate_domain\",\n \"mailcheck.verify_email\"\n ]\n },\n {\n \"service\": \"mailchimp\",\n \"displayName\": \"Mailchimp\",\n \"categories\": [\n \"Communication\",\n \"Marketing\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://mailchimp.com\",\n \"actionCount\": 11,\n \"actions\": [\n \"mailchimp.archive_member\",\n \"mailchimp.delete_member_permanently\",\n \"mailchimp.get_list\",\n \"mailchimp.get_member\",\n \"mailchimp.list_lists\",\n \"mailchimp.list_member_tags\",\n \"mailchimp.list_members\",\n \"mailchimp.list_merge_fields\",\n \"mailchimp.update_member\",\n \"mailchimp.update_member_tags\",\n \"mailchimp.upsert_member\"\n ]\n },\n {\n \"service\": \"mailercloud\",\n \"displayName\": \"Mailercloud\",\n \"categories\": [\n \"Communication\",\n \"Marketing\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.mailercloud.com/\",\n \"actionCount\": 6,\n \"actions\": [\n \"mailercloud.create_contact\",\n \"mailercloud.create_contact_property\",\n \"mailercloud.create_list\",\n \"mailercloud.delete_contact_property\",\n \"mailercloud.list_contact_properties\",\n \"mailercloud.update_contact_property\"\n ]\n },\n {\n \"service\": \"mailerlite\",\n \"displayName\": \"MailerLite\",\n \"categories\": [\n \"Communication\",\n \"Marketing\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.mailerlite.com\",\n \"actionCount\": 13,\n \"actions\": [\n \"mailerlite.add_subscriber_to_group\",\n \"mailerlite.create_group\",\n \"mailerlite.delete_group\",\n \"mailerlite.delete_subscriber\",\n \"mailerlite.get_subscriber\",\n \"mailerlite.list_fields\",\n \"mailerlite.list_group_subscribers\",\n \"mailerlite.list_groups\",\n \"mailerlite.list_subscribers\",\n \"mailerlite.remove_subscriber_from_group\",\n \"mailerlite.update_group\",\n \"mailerlite.update_subscriber\",\n \"mailerlite.upsert_subscriber\"\n ]\n },\n {\n \"service\": \"mailersend\",\n \"displayName\": \"MailerSend\",\n \"categories\": [\n \"Communication\",\n \"Marketing\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.mailersend.com\",\n \"actionCount\": 12,\n \"actions\": [\n \"mailersend.get_domain\",\n \"mailersend.get_domain_dns_records\",\n \"mailersend.get_domain_verification_status\",\n \"mailersend.get_message\",\n \"mailersend.get_sender_identity\",\n \"mailersend.get_template\",\n \"mailersend.list_domain_recipients\",\n \"mailersend.list_domains\",\n \"mailersend.list_messages\",\n \"mailersend.list_sender_identities\",\n \"mailersend.list_templates\",\n \"mailersend.send_email\"\n ]\n },\n {\n \"service\": \"mailgun\",\n \"displayName\": \"Mailgun\",\n \"categories\": [\n \"Communication\",\n \"Marketing\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.mailgun.com\",\n \"actionCount\": 17,\n \"actions\": [\n \"mailgun.add_suppression\",\n \"mailgun.create_template\",\n \"mailgun.create_template_version\",\n \"mailgun.delete_suppression\",\n \"mailgun.get_domain\",\n \"mailgun.get_domain_tracking_settings\",\n \"mailgun.get_suppression\",\n \"mailgun.get_template\",\n \"mailgun.get_template_version\",\n \"mailgun.list_domains\",\n \"mailgun.list_events\",\n \"mailgun.list_suppressions\",\n \"mailgun.list_template_versions\",\n \"mailgun.list_templates\",\n \"mailgun.send_email\",\n \"mailgun.update_domain_tracking_settings\",\n \"mailgun.verify_domain\"\n ]\n },\n {\n \"service\": \"mailjet\",\n \"displayName\": \"Mailjet\",\n \"categories\": [\n \"Marketing\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.mailjet.com\",\n \"actionCount\": 4,\n \"actions\": [\n \"mailjet.create_contact\",\n \"mailjet.get_contact\",\n \"mailjet.list_contacts\",\n \"mailjet.update_contact\"\n ]\n },\n {\n \"service\": \"mailosaur\",\n \"displayName\": \"Mailosaur\",\n \"categories\": [\n \"Communication\",\n \"Developer Tools\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://mailosaur.com\",\n \"actionCount\": 12,\n \"actions\": [\n \"mailosaur.create_server\",\n \"mailosaur.delete_all_messages\",\n \"mailosaur.delete_message\",\n \"mailosaur.delete_server\",\n \"mailosaur.get_message\",\n \"mailosaur.get_server\",\n \"mailosaur.get_usage_limits\",\n \"mailosaur.list_messages\",\n \"mailosaur.list_servers\",\n \"mailosaur.list_usage_transactions\",\n \"mailosaur.search_messages\",\n \"mailosaur.update_server\"\n ]\n },\n {\n \"service\": \"mails_so\",\n \"displayName\": \"Mails\",\n \"categories\": [\n \"Communication\",\n \"Marketing\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://mails.so\",\n \"actionCount\": 3,\n \"actions\": [\n \"mails_so.create_validation_batch\",\n \"mails_so.get_validation_batch\",\n \"mails_so.validate_email\"\n ]\n },\n {\n \"service\": \"mailtrap\",\n \"displayName\": \"Mailtrap\",\n \"categories\": [\n \"Communication\",\n \"Developer Tools\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://mailtrap.io/\",\n \"actionCount\": 50,\n \"actions\": [\n \"mailtrap.clean_inbox\",\n \"mailtrap.create_contact\",\n \"mailtrap.create_contact_event\",\n \"mailtrap.create_contact_export\",\n \"mailtrap.create_contact_field\",\n \"mailtrap.create_contact_list\",\n \"mailtrap.create_email_template\",\n \"mailtrap.create_sending_domain\",\n \"mailtrap.delete_contact\",\n \"mailtrap.delete_contact_field\",\n \"mailtrap.delete_contact_list\",\n \"mailtrap.delete_email_template\",\n \"mailtrap.delete_project\",\n \"mailtrap.delete_sending_domain\",\n \"mailtrap.get_billing_usage\",\n \"mailtrap.get_contact\",\n \"mailtrap.get_contact_export\",\n \"mailtrap.get_contact_field\",\n \"mailtrap.get_contact_import\",\n \"mailtrap.get_contact_list\",\n \"mailtrap.get_email_template\",\n \"mailtrap.get_inbox\",\n \"mailtrap.get_message\",\n \"mailtrap.get_message_html_source\",\n \"mailtrap.get_permission_resources\",\n \"mailtrap.get_project\",\n \"mailtrap.get_sending_domain\",\n \"mailtrap.get_sending_stats\",\n \"mailtrap.get_sending_stats_by_categories\",\n \"mailtrap.get_sending_stats_by_date\",\n \"mailtrap.get_sending_stats_by_domains\",\n \"mailtrap.get_sending_stats_by_esp\",\n \"mailtrap.import_contacts\",\n \"mailtrap.list_accounts\",\n \"mailtrap.list_contact_fields\",\n \"mailtrap.list_contact_lists\",\n \"mailtrap.list_email_templates\",\n \"mailtrap.list_inboxes\",\n \"mailtrap.list_messages\",\n \"mailtrap.list_projects\",\n \"mailtrap.list_sending_domains\",\n \"mailtrap.list_suppressions\",\n \"mailtrap.mark_inbox_as_read\",\n \"mailtrap.reset_inbox_credentials\",\n \"mailtrap.update_contact\",\n \"mailtrap.update_contact_field\",\n \"mailtrap.update_contact_list\",\n \"mailtrap.update_email_template\",\n \"mailtrap.update_inbox\",\n \"mailtrap.update_project\"\n ]\n },\n {\n \"service\": \"maintainx\",\n \"displayName\": \"MaintainX\",\n \"categories\": [\n \"Productivity\",\n \"Data\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.getmaintainx.com/\",\n \"actionCount\": 16,\n \"actions\": [\n \"maintainx.create_location\",\n \"maintainx.create_user\",\n \"maintainx.create_work_order\",\n \"maintainx.create_work_order_comment\",\n \"maintainx.delete_location\",\n \"maintainx.get_location\",\n \"maintainx.get_user\",\n \"maintainx.get_work_order\",\n \"maintainx.list_locations\",\n \"maintainx.list_users\",\n \"maintainx.list_work_order_comments\",\n \"maintainx.list_work_orders\",\n \"maintainx.update_location\",\n \"maintainx.update_user\",\n \"maintainx.update_work_order\",\n \"maintainx.update_work_order_status\"\n ]\n },\n {\n \"service\": \"make\",\n \"displayName\": \"Make\",\n \"categories\": [\n \"Productivity\",\n \"Developer Tools\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.make.com\",\n \"actionCount\": 9,\n \"actions\": [\n \"make.activate_scenario\",\n \"make.deactivate_scenario\",\n \"make.get_current_authorization\",\n \"make.get_current_user\",\n \"make.get_scenario\",\n \"make.get_scenario_usage\",\n \"make.list_scenarios\",\n \"make.list_teams\",\n \"make.run_scenario_once\"\n ]\n },\n {\n \"service\": \"manatal\",\n \"displayName\": \"Manatal\",\n \"categories\": [\n \"Productivity\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.manatal.com/\",\n \"actionCount\": 16,\n \"actions\": [\n \"manatal.create_candidate\",\n \"manatal.create_job\",\n \"manatal.create_match\",\n \"manatal.create_organization\",\n \"manatal.get_candidate\",\n \"manatal.get_job\",\n \"manatal.get_match\",\n \"manatal.get_organization\",\n \"manatal.list_candidates\",\n \"manatal.list_jobs\",\n \"manatal.list_matches\",\n \"manatal.list_organizations\",\n \"manatal.update_candidate\",\n \"manatal.update_job\",\n \"manatal.update_match\",\n \"manatal.update_organization\"\n ]\n },\n {\n \"service\": \"manus\",\n \"displayName\": \"Manus\",\n \"categories\": [\n \"AI\",\n \"Productivity\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://manus.im\",\n \"actionCount\": 17,\n \"actions\": [\n \"manus.confirm_task_action\",\n \"manus.create_project\",\n \"manus.create_task\",\n \"manus.delete_task\",\n \"manus.get_agent\",\n \"manus.get_task\",\n \"manus.list_agents\",\n \"manus.list_connectors\",\n \"manus.list_online_browser_clients\",\n \"manus.list_projects\",\n \"manus.list_skills\",\n \"manus.list_task_messages\",\n \"manus.list_tasks\",\n \"manus.send_message\",\n \"manus.stop_task\",\n \"manus.update_agent\",\n \"manus.update_task\"\n ]\n },\n {\n \"service\": \"mapbox\",\n \"displayName\": \"Mapbox\",\n \"categories\": [\n \"Location\",\n \"Developer Tools\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.mapbox.com\",\n \"actionCount\": 5,\n \"actions\": [\n \"mapbox.batch_geocode\",\n \"mapbox.forward_geocode\",\n \"mapbox.get_directions\",\n \"mapbox.get_matrix\",\n \"mapbox.reverse_geocode\"\n ]\n },\n {\n \"service\": \"maple_billing\",\n \"displayName\": \"Measure\",\n \"categories\": [\n \"Finance\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://getmeasure.com\",\n \"actionCount\": 12,\n \"actions\": [\n \"maple_billing.create_checkout_session\",\n \"maple_billing.create_customer\",\n \"maple_billing.find_customers\",\n \"maple_billing.find_product_pricing\",\n \"maple_billing.find_products\",\n \"maple_billing.find_subscriptions\",\n \"maple_billing.get_checkout_session\",\n \"maple_billing.get_customer\",\n \"maple_billing.get_product\",\n \"maple_billing.get_product_pricing\",\n \"maple_billing.get_subscription\",\n \"maple_billing.update_customer\"\n ]\n },\n {\n \"service\": \"marketstack\",\n \"displayName\": \"Marketstack\",\n \"categories\": [\n \"Finance\",\n \"Data\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://marketstack.com\",\n \"actionCount\": 6,\n \"actions\": [\n \"marketstack.get_historical_eod\",\n \"marketstack.get_latest_eod\",\n \"marketstack.get_ticker_info\",\n \"marketstack.list_currencies\",\n \"marketstack.list_exchanges\",\n \"marketstack.list_tickers\"\n ]\n },\n {\n \"service\": \"mattermost\",\n \"displayName\": \"Mattermost\",\n \"categories\": [\n \"Communication\",\n \"Productivity\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://mattermost.com\",\n \"actionCount\": 7,\n \"actions\": [\n \"mattermost.create_post\",\n \"mattermost.get_channel\",\n \"mattermost.get_current_user\",\n \"mattermost.get_team\",\n \"mattermost.list_channel_posts\",\n \"mattermost.list_team_channels\",\n \"mattermost.list_user_teams\"\n ]\n },\n {\n \"service\": \"mcdonalds_cn\",\n \"displayName\": \"McDonald's China\",\n \"categories\": [\n \"Location\",\n \"Data\"\n ],\n \"authTypes\": [\n \"custom_credential\"\n ],\n \"homepageUrl\": \"https://open.mcd.cn\",\n \"actionCount\": 7,\n \"actions\": [\n \"mcdonalds_cn.get_cities\",\n \"mcdonalds_cn.get_menu\",\n \"mcdonalds_cn.get_product_detail\",\n \"mcdonalds_cn.get_store\",\n \"mcdonalds_cn.get_store_business\",\n \"mcdonalds_cn.search_products\",\n \"mcdonalds_cn.search_stores\"\n ]\n },\n {\n \"service\": \"mediastack\",\n \"displayName\": \"Mediastack\",\n \"categories\": [\n \"Data\",\n \"Social\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://mediastack.com\",\n \"actionCount\": 2,\n \"actions\": [\n \"mediastack.search_live_news\",\n \"mediastack.search_news_sources\"\n ]\n },\n {\n \"service\": \"meet_geek\",\n \"displayName\": \"MeetGeek\",\n \"categories\": [\n \"AI\",\n \"Productivity\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://meetgeek.ai\",\n \"actionCount\": 8,\n \"actions\": [\n \"meet_geek.get_highlights\",\n \"meet_geek.get_insights\",\n \"meet_geek.get_meeting\",\n \"meet_geek.get_summary\",\n \"meet_geek.get_transcript\",\n \"meet_geek.list_meetings\",\n \"meet_geek.list_team_meetings\",\n \"meet_geek.list_teams\"\n ]\n },\n {\n \"service\": \"mem0\",\n \"displayName\": \"Mem0\",\n \"categories\": [\n \"AI\",\n \"Data\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://mem0.ai\",\n \"actionCount\": 10,\n \"actions\": [\n \"mem0.add_memories\",\n \"mem0.delete_memory\",\n \"mem0.get_event\",\n \"mem0.get_events\",\n \"mem0.get_memories\",\n \"mem0.get_memory\",\n \"mem0.get_memory_history\",\n \"mem0.get_users\",\n \"mem0.search_memories\",\n \"mem0.update_memory\"\n ]\n },\n {\n \"service\": \"memberstack\",\n \"displayName\": \"Memberstack\",\n \"categories\": [\n \"Security\",\n \"Developer Tools\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.memberstack.com/\",\n \"actionCount\": 8,\n \"actions\": [\n \"memberstack.add_free_plan\",\n \"memberstack.create_member\",\n \"memberstack.delete_member\",\n \"memberstack.get_member\",\n \"memberstack.list_members\",\n \"memberstack.remove_free_plan\",\n \"memberstack.update_member\",\n \"memberstack.verify_member_token\"\n ]\n },\n {\n \"service\": \"meta\",\n \"displayName\": \"Meta\",\n \"categories\": [\n \"Marketing\",\n \"Social\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://business.meta.com/\",\n \"actionCount\": 4,\n \"actions\": [\n \"meta.get_current_user\",\n \"meta.get_insights\",\n \"meta.list_ad_accounts\",\n \"meta.list_campaigns\"\n ]\n },\n {\n \"service\": \"metabase\",\n \"displayName\": \"Metabase\",\n \"categories\": [\n \"Data\",\n \"Productivity\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.metabase.com\",\n \"actionCount\": 10,\n \"actions\": [\n \"metabase.get_card\",\n \"metabase.get_collection\",\n \"metabase.get_current_user\",\n \"metabase.get_dashboard\",\n \"metabase.get_database\",\n \"metabase.list_cards\",\n \"metabase.list_collections\",\n \"metabase.list_dashboards\",\n \"metabase.list_databases\",\n \"metabase.search\"\n ]\n },\n {\n \"service\": \"metaso\",\n \"displayName\": \"Metaso\",\n \"categories\": [\n \"AI\",\n \"Data\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://metaso.cn\",\n \"actionCount\": 4,\n \"actions\": [\n \"metaso.create_chat_completion\",\n \"metaso.create_chat_completion_stream\",\n \"metaso.read_webpage\",\n \"metaso.search\"\n ]\n },\n {\n \"service\": \"metatextai\",\n \"displayName\": \"MetatextAI\",\n \"categories\": [\n \"AI\",\n \"Security\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://metatext.ai\",\n \"actionCount\": 4,\n \"actions\": [\n \"metatextai.create_policy\",\n \"metatextai.evaluate\",\n \"metatextai.list_policies\",\n \"metatextai.run_test_scan\"\n ]\n },\n {\n \"service\": \"metronome\",\n \"displayName\": \"Metronome\",\n \"categories\": [\n \"Finance\",\n \"Developer Tools\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://metronome.com\",\n \"actionCount\": 5,\n \"actions\": [\n \"metronome.get_customer\",\n \"metronome.get_invoice\",\n \"metronome.list_billable_metrics\",\n \"metronome.list_customers\",\n \"metronome.list_invoices\"\n ]\n },\n {\n \"service\": \"mezmo\",\n \"displayName\": \"Mezmo\",\n \"categories\": [\n \"Data\",\n \"Developer Tools\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.mezmo.com\",\n \"actionCount\": 5,\n \"actions\": [\n \"mezmo.get_ingestion_status\",\n \"mezmo.get_usage_summary\",\n \"mezmo.list_app_usages\",\n \"mezmo.list_host_usages\",\n \"mezmo.list_tag_usages\"\n ]\n },\n {\n \"service\": \"microsoft_clarity\",\n \"displayName\": \"Microsoft Clarity\",\n \"categories\": [\n \"Data\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://clarity.microsoft.com\",\n \"actionCount\": 1,\n \"actions\": [\n \"microsoft_clarity.export_live_insights\"\n ]\n },\n {\n \"service\": \"mindbody\",\n \"displayName\": \"Mindbody\",\n \"categories\": [\n \"Productivity\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.mindbodyonline.com\",\n \"actionCount\": 1,\n \"actions\": [\n \"mindbody.list_businesses\"\n ]\n },\n {\n \"service\": \"mineru\",\n \"displayName\": \"MinerU\",\n \"categories\": [\n \"AI\",\n \"Productivity\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://mineru.net\",\n \"actionCount\": 4,\n \"actions\": [\n \"mineru.create_extract_batch\",\n \"mineru.create_extract_task\",\n \"mineru.get_extract_batch_results\",\n \"mineru.get_extract_task\"\n ]\n },\n {\n \"service\": \"minimax\",\n \"displayName\": \"MiniMax\",\n \"categories\": [\n \"AI\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.minimax.io\",\n \"actionCount\": 4,\n \"actions\": [\n \"minimax.create_response\",\n \"minimax.estimate_input_tokens\",\n \"minimax.list_models\",\n \"minimax.retrieve_model\"\n ]\n },\n {\n \"service\": \"missive\",\n \"displayName\": \"Missive\",\n \"categories\": [\n \"Communication\",\n \"Productivity\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://missiveapp.com\",\n \"actionCount\": 8,\n \"actions\": [\n \"missive.get_contact\",\n \"missive.get_conversation\",\n \"missive.list_contact_books\",\n \"missive.list_contacts\",\n \"missive.list_conversations\",\n \"missive.list_organizations\",\n \"missive.list_teams\",\n \"missive.list_users\"\n ]\n },\n {\n \"service\": \"mistral_ai\",\n \"displayName\": \"Mistral AI\",\n \"categories\": [\n \"AI\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://mistral.ai\",\n \"actionCount\": 54,\n \"actions\": [\n \"mistral_ai.append_to_conversation\",\n \"mistral_ai.create_agent\",\n \"mistral_ai.create_agents_completion\",\n \"mistral_ai.create_audio_transcription\",\n \"mistral_ai.create_chat_completion\",\n \"mistral_ai.create_chat_moderation\",\n \"mistral_ai.create_embeddings\",\n \"mistral_ai.create_fim_completion\",\n \"mistral_ai.create_library\",\n \"mistral_ai.create_library_share\",\n \"mistral_ai.create_moderation\",\n \"mistral_ai.create_ocr\",\n \"mistral_ai.create_or_update_agent_alias\",\n \"mistral_ai.delete_agent\",\n \"mistral_ai.delete_conversation\",\n \"mistral_ai.delete_file\",\n \"mistral_ai.delete_library\",\n \"mistral_ai.delete_library_document\",\n \"mistral_ai.delete_library_share\",\n \"mistral_ai.download_file\",\n \"mistral_ai.get_agent\",\n \"mistral_ai.get_agent_version\",\n \"mistral_ai.get_conversation\",\n \"mistral_ai.get_conversation_history\",\n \"mistral_ai.get_conversation_messages\",\n \"mistral_ai.get_document_extracted_text_url\",\n \"mistral_ai.get_document_signed_url\",\n \"mistral_ai.get_document_status\",\n \"mistral_ai.get_document_text_content\",\n \"mistral_ai.get_file_signed_url\",\n \"mistral_ai.get_fine_tuning_jobs\",\n \"mistral_ai.get_library\",\n \"mistral_ai.get_library_document\",\n \"mistral_ai.get_model\",\n \"mistral_ai.list_agent_aliases\",\n \"mistral_ai.list_agent_versions\",\n \"mistral_ai.list_agents\",\n \"mistral_ai.list_batch_jobs\",\n \"mistral_ai.list_conversations\",\n \"mistral_ai.list_files\",\n \"mistral_ai.list_libraries\",\n \"mistral_ai.list_library_documents\",\n \"mistral_ai.list_library_shares\",\n \"mistral_ai.list_models\",\n \"mistral_ai.reprocess_document\",\n \"mistral_ai.restart_conversation\",\n \"mistral_ai.retrieve_file\",\n \"mistral_ai.start_conversation\",\n \"mistral_ai.update_agent\",\n \"mistral_ai.update_agent_version\",\n \"mistral_ai.update_library\",\n \"mistral_ai.update_library_document\",\n \"mistral_ai.upload_file\",\n \"mistral_ai.upload_library_document\"\n ]\n },\n {\n \"service\": \"mixpanel\",\n \"displayName\": \"Mixpanel\",\n \"categories\": [\n \"Data\",\n \"Marketing\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://mixpanel.com\",\n \"actionCount\": 13,\n \"actions\": [\n \"mixpanel.export_events\",\n \"mixpanel.list_funnels\",\n \"mixpanel.list_saved_cohorts\",\n \"mixpanel.profile_event_activity\",\n \"mixpanel.query_frequency_report\",\n \"mixpanel.query_funnel\",\n \"mixpanel.query_numeric_average\",\n \"mixpanel.query_numeric_sum\",\n \"mixpanel.query_profiles\",\n \"mixpanel.query_retention_report\",\n \"mixpanel.query_saved_report\",\n \"mixpanel.query_segmentation_report\",\n \"mixpanel.query_top_events\"\n ]\n },\n {\n \"service\": \"mocean\",\n \"displayName\": \"Mocean\",\n \"categories\": [\n \"Communication\",\n \"Marketing\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://moceanapi.com\",\n \"actionCount\": 5,\n \"actions\": [\n \"mocean.get_balance\",\n \"mocean.get_message_status\",\n \"mocean.list_pricing\",\n \"mocean.lookup_number\",\n \"mocean.send_sms\"\n ]\n },\n {\n \"service\": \"moco\",\n \"displayName\": \"MOCO\",\n \"categories\": [\n \"Productivity\",\n \"Finance\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.mocoapp.com\",\n \"actionCount\": 5,\n \"actions\": [\n \"moco.get_company\",\n \"moco.get_contact\",\n \"moco.get_profile\",\n \"moco.list_companies\",\n \"moco.list_contacts\"\n ]\n },\n {\n \"service\": \"modjo_ai\",\n \"displayName\": \"Modjo AI\",\n \"categories\": [\n \"Communication\",\n \"AI\",\n \"Data\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.modjo.ai\",\n \"actionCount\": 20,\n \"actions\": [\n \"modjo_ai.get_account\",\n \"modjo_ai.get_call\",\n \"modjo_ai.get_call_next_steps\",\n \"modjo_ai.get_call_transcript\",\n \"modjo_ai.get_contact\",\n \"modjo_ai.get_deal_summary\",\n \"modjo_ai.get_team\",\n \"modjo_ai.get_user\",\n \"modjo_ai.list_accounts\",\n \"modjo_ai.list_call_notes\",\n \"modjo_ai.list_call_summaries\",\n \"modjo_ai.list_call_tags\",\n \"modjo_ai.list_calls\",\n \"modjo_ai.list_contacts\",\n \"modjo_ai.list_deals\",\n \"modjo_ai.list_tags\",\n \"modjo_ai.list_team_members\",\n \"modjo_ai.list_teams\",\n \"modjo_ai.list_topics\",\n \"modjo_ai.list_users\"\n ]\n },\n {\n \"service\": \"moesif\",\n \"displayName\": \"Moesif\",\n \"categories\": [\n \"Developer Tools\",\n \"Data\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.moesif.com/\",\n \"actionCount\": 4,\n \"actions\": [\n \"moesif.get_workspace\",\n \"moesif.list_apps\",\n \"moesif.list_workspace_templates\",\n \"moesif.list_workspaces\"\n ]\n },\n {\n \"service\": \"momentum_io\",\n \"displayName\": \"Momentum.io\",\n \"categories\": [\n \"AI\",\n \"Productivity\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.momentum.io\",\n \"actionCount\": 6,\n \"actions\": [\n \"momentum_io.list_meetings\",\n \"momentum_io.list_signal_definitions\",\n \"momentum_io.list_signal_executions\",\n \"momentum_io.list_signal_prompts\",\n \"momentum_io.list_signal_v2_executions\",\n \"momentum_io.list_users\"\n ]\n },\n {\n \"service\": \"monday\",\n \"displayName\": \"Monday\",\n \"categories\": [\n \"Productivity\"\n ],\n \"authTypes\": [\n \"oauth2\",\n \"api_key\"\n ],\n \"homepageUrl\": \"https://monday.com\",\n \"actionCount\": 64,\n \"actions\": [\n \"monday.activate_form\",\n \"monday.add_teams_to_board\",\n \"monday.add_users_to_board\",\n \"monday.archive_board\",\n \"monday.archive_item\",\n \"monday.assign_department_members\",\n \"monday.change_item_position\",\n \"monday.change_multiple_column_values\",\n \"monday.change_simple_column_value\",\n \"monday.clear_users_department\",\n \"monday.create_board\",\n \"monday.create_column\",\n \"monday.create_dashboard\",\n \"monday.create_department\",\n \"monday.create_doc\",\n \"monday.create_form\",\n \"monday.create_group\",\n \"monday.create_item\",\n \"monday.create_subitem\",\n \"monday.create_update\",\n \"monday.deactivate_form\",\n \"monday.delete_board\",\n \"monday.delete_column\",\n \"monday.delete_dashboard\",\n \"monday.delete_department\",\n \"monday.delete_doc\",\n \"monday.delete_group\",\n \"monday.delete_item\",\n \"monday.delete_subscribers_from_board\",\n \"monday.delete_teams_from_board\",\n \"monday.delete_update\",\n \"monday.duplicate_item\",\n \"monday.edit_update\",\n \"monday.find_items_by_column_values\",\n \"monday.get_board_memberships\",\n \"monday.get_current_user\",\n \"monday.get_form\",\n \"monday.get_items\",\n \"monday.get_items_page\",\n \"monday.get_next_items_page\",\n \"monday.list_activity_logs\",\n \"monday.list_assets\",\n \"monday.list_audit_logs\",\n \"monday.list_board_columns\",\n \"monday.list_boards\",\n \"monday.list_departments\",\n \"monday.list_docs\",\n \"monday.list_groups\",\n \"monday.list_subitems_by_parent\",\n \"monday.list_team_members\",\n \"monday.list_teams\",\n \"monday.list_update_replies\",\n \"monday.list_updates\",\n \"monday.list_users\",\n \"monday.list_workspaces\",\n \"monday.move_item_to_board\",\n \"monday.move_item_to_group\",\n \"monday.set_item_description_content\",\n \"monday.update_board\",\n \"monday.update_column\",\n \"monday.update_dashboard\",\n \"monday.update_department\",\n \"monday.update_doc_name\",\n \"monday.update_group\"\n ]\n },\n {\n \"service\": \"mongo_db_atlas_administration\",\n \"displayName\": \"MongoDB Atlas Administration\",\n \"categories\": [\n \"Developer Tools\",\n \"Data\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.mongodb.com/products/platform/atlas-database\",\n \"actionCount\": 4,\n \"actions\": [\n \"mongo_db_atlas_administration.get_cluster\",\n \"mongo_db_atlas_administration.get_project\",\n \"mongo_db_atlas_administration.list_clusters\",\n \"mongo_db_atlas_administration.list_projects\"\n ]\n },\n {\n \"service\": \"moonclerk\",\n \"displayName\": \"MoonClerk\",\n \"categories\": [\n \"Finance\",\n \"Productivity\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://moonclerk.com\",\n \"actionCount\": 6,\n \"actions\": [\n \"moonclerk.get_customer\",\n \"moonclerk.get_form\",\n \"moonclerk.get_payment\",\n \"moonclerk.list_customers\",\n \"moonclerk.list_forms\",\n \"moonclerk.list_payments\"\n ]\n },\n {\n \"service\": \"moorcheh\",\n \"displayName\": \"Moorcheh\",\n \"categories\": [\n \"AI\",\n \"Data\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.moorcheh.ai\",\n \"actionCount\": 7,\n \"actions\": [\n \"moorcheh.create_text_namespace\",\n \"moorcheh.delete_documents\",\n \"moorcheh.fetch_text_data\",\n \"moorcheh.get_documents\",\n \"moorcheh.list_namespaces\",\n \"moorcheh.search_text\",\n \"moorcheh.upload_text_documents\"\n ]\n },\n {\n \"service\": \"moosend\",\n \"displayName\": \"Moosend\",\n \"categories\": [\n \"Communication\",\n \"Marketing\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.moosend.com/\",\n \"actionCount\": 4,\n \"actions\": [\n \"moosend.add_subscriber\",\n \"moosend.get_subscriber_by_email\",\n \"moosend.list_mailing_lists\",\n \"moosend.list_subscribers\"\n ]\n },\n {\n \"service\": \"mopinion\",\n \"displayName\": \"Mopinion\",\n \"categories\": [\n \"Data\",\n \"Marketing\"\n ],\n \"authTypes\": [\n \"custom_credential\"\n ],\n \"homepageUrl\": \"https://www.mopinion.com\",\n \"actionCount\": 11,\n \"actions\": [\n \"mopinion.get_account\",\n \"mopinion.get_dataset\",\n \"mopinion.get_dataset_feedback\",\n \"mopinion.get_deployment\",\n \"mopinion.get_report\",\n \"mopinion.get_report_feedback\",\n \"mopinion.list_dataset_feedback\",\n \"mopinion.list_dataset_fields\",\n \"mopinion.list_deployments\",\n \"mopinion.list_report_feedback\",\n \"mopinion.list_report_fields\"\n ]\n },\n {\n \"service\": \"mother_duck\",\n \"displayName\": \"MotherDuck\",\n \"categories\": [\n \"Data\",\n \"Developer Tools\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://motherduck.com\",\n \"actionCount\": 8,\n \"actions\": [\n \"mother_duck.create_token\",\n \"mother_duck.create_user\",\n \"mother_duck.delete_token\",\n \"mother_duck.delete_user\",\n \"mother_duck.get_user_duckling_config\",\n \"mother_duck.list_active_accounts\",\n \"mother_duck.list_tokens\",\n \"mother_duck.set_user_duckling_config\"\n ]\n },\n {\n \"service\": \"motion\",\n \"displayName\": \"Motion\",\n \"categories\": [\n \"Productivity\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.usemotion.com\",\n \"actionCount\": 13,\n \"actions\": [\n \"motion.create_project\",\n \"motion.create_task\",\n \"motion.delete_task\",\n \"motion.get_my_user\",\n \"motion.get_project\",\n \"motion.get_task\",\n \"motion.list_projects\",\n \"motion.list_schedules\",\n \"motion.list_statuses\",\n \"motion.list_tasks\",\n \"motion.list_users\",\n \"motion.list_workspaces\",\n \"motion.update_task\"\n ]\n },\n {\n \"service\": \"msg91\",\n \"displayName\": \"MSG91\",\n \"categories\": [\n \"Communication\",\n \"Marketing\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://msg91.com\",\n \"actionCount\": 4,\n \"actions\": [\n \"msg91.resend_otp\",\n \"msg91.send_flow_sms\",\n \"msg91.send_otp\",\n \"msg91.verify_otp\"\n ]\n },\n {\n \"service\": \"mx_toolbox\",\n \"displayName\": \"MxToolbox\",\n \"categories\": [\n \"Communication\",\n \"Developer Tools\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://mxtoolbox.com\",\n \"actionCount\": 13,\n \"actions\": [\n \"mx_toolbox.lookup_bimi_record\",\n \"mx_toolbox.lookup_blacklist\",\n \"mx_toolbox.lookup_dkim\",\n \"mx_toolbox.lookup_dmarc\",\n \"mx_toolbox.lookup_dns\",\n \"mx_toolbox.lookup_http\",\n \"mx_toolbox.lookup_mta_sts_record\",\n \"mx_toolbox.lookup_mx\",\n \"mx_toolbox.lookup_ping\",\n \"mx_toolbox.lookup_smtp\",\n \"mx_toolbox.lookup_spf\",\n \"mx_toolbox.monitor_status\",\n \"mx_toolbox.usage_check\"\n ]\n },\n {\n \"service\": \"n8n\",\n \"displayName\": \"n8n\",\n \"categories\": [\n \"Productivity\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://n8n.io\",\n \"actionCount\": 36,\n \"actions\": [\n \"n8n.activate_workflow\",\n \"n8n.archive_workflow\",\n \"n8n.create_data_table\",\n \"n8n.create_data_table_column\",\n \"n8n.create_tag\",\n \"n8n.create_variable\",\n \"n8n.deactivate_workflow\",\n \"n8n.delete_data_table\",\n \"n8n.delete_data_table_column\",\n \"n8n.delete_tag\",\n \"n8n.delete_variable\",\n \"n8n.get_data_table\",\n \"n8n.get_execution\",\n \"n8n.get_execution_tags\",\n \"n8n.get_insights_summary\",\n \"n8n.get_workflow\",\n \"n8n.get_workflow_tags\",\n \"n8n.insert_data_table_rows\",\n \"n8n.list_data_table_columns\",\n \"n8n.list_data_table_rows\",\n \"n8n.list_data_tables\",\n \"n8n.list_executions\",\n \"n8n.list_tags\",\n \"n8n.list_variables\",\n \"n8n.list_workflows\",\n \"n8n.retry_execution\",\n \"n8n.stop_execution\",\n \"n8n.unarchive_workflow\",\n \"n8n.update_data_table\",\n \"n8n.update_data_table_column\",\n \"n8n.update_data_table_rows\",\n \"n8n.update_execution_tags\",\n \"n8n.update_tag\",\n \"n8n.update_variable\",\n \"n8n.update_workflow_tags\",\n \"n8n.upsert_data_table_row\"\n ]\n },\n {\n \"service\": \"namely\",\n \"displayName\": \"Namely\",\n \"categories\": [\n \"Productivity\",\n \"Data\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.namely.com\",\n \"actionCount\": 4,\n \"actions\": [\n \"namely.get_current_profile\",\n \"namely.get_profile\",\n \"namely.list_profile_fields\",\n \"namely.list_profiles\"\n ]\n },\n {\n \"service\": \"nango\",\n \"displayName\": \"Nango\",\n \"categories\": [\n \"Developer Tools\",\n \"Data\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://nango.dev\",\n \"actionCount\": 9,\n \"actions\": [\n \"nango.delete_connection\",\n \"nango.get_connection\",\n \"nango.get_integration\",\n \"nango.get_provider\",\n \"nango.list_connections\",\n \"nango.list_integrations\",\n \"nango.list_providers\",\n \"nango.patch_connection_tags\",\n \"nango.set_connection_metadata\"\n ]\n },\n {\n \"service\": \"nasa\",\n \"displayName\": \"NASA\",\n \"categories\": [\n \"Data\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.nasa.gov\",\n \"actionCount\": 27,\n \"actions\": [\n \"nasa.browse_neo\",\n \"nasa.get_apod\",\n \"nasa.get_donki_cme\",\n \"nasa.get_donki_cme_analysis\",\n \"nasa.get_donki_gst\",\n \"nasa.get_donki_hss\",\n \"nasa.get_donki_ips\",\n \"nasa.get_donki_mpc\",\n \"nasa.get_donki_notifications\",\n \"nasa.get_donki_rbe\",\n \"nasa.get_donki_sep\",\n \"nasa.get_donki_solar_flares\",\n \"nasa.get_donki_wsa_enlil\",\n \"nasa.get_epic_aerosol\",\n \"nasa.get_epic_aerosol_date\",\n \"nasa.get_epic_cloud\",\n \"nasa.get_epic_cloud_date\",\n \"nasa.get_epic_enhanced\",\n \"nasa.get_epic_enhanced_date\",\n \"nasa.get_epic_natural\",\n \"nasa.get_epic_natural_date\",\n \"nasa.get_neo_lookup\",\n \"nasa.list_epic_aerosol_dates\",\n \"nasa.list_epic_cloud_dates\",\n \"nasa.list_epic_enhanced_dates\",\n \"nasa.list_epic_natural_dates\",\n \"nasa.search_near_earth_objects\"\n ]\n },\n {\n \"service\": \"nasdaq\",\n \"displayName\": \"Nasdaq Data Link\",\n \"categories\": [\n \"Finance\",\n \"Data\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://data.nasdaq.com\",\n \"actionCount\": 7,\n \"actions\": [\n \"nasdaq.get_analyst_ratings\",\n \"nasdaq.get_datatable\",\n \"nasdaq.get_datatable_metadata\",\n \"nasdaq.get_dividend_history\",\n \"nasdaq.get_end_of_day_quote\",\n \"nasdaq.get_real_time_quote\",\n \"nasdaq.get_table_row\"\n ]\n },\n {\n \"service\": \"needle\",\n \"displayName\": \"Needle\",\n \"categories\": [\n \"AI\",\n \"Data\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://needle.app\",\n \"actionCount\": 7,\n \"actions\": [\n \"needle.add_files_to_collection\",\n \"needle.create_collection\",\n \"needle.get_collection\",\n \"needle.get_collection_stats\",\n \"needle.list_collection_files\",\n \"needle.list_collections\",\n \"needle.search_collection\"\n ]\n },\n {\n \"service\": \"neon\",\n \"displayName\": \"Neon\",\n \"categories\": [\n \"Developer Tools\",\n \"Data\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://neon.com\",\n \"actionCount\": 18,\n \"actions\": [\n \"neon.create_branch\",\n \"neon.create_database\",\n \"neon.create_project\",\n \"neon.delete_branch\",\n \"neon.delete_database\",\n \"neon.delete_project\",\n \"neon.get_branch\",\n \"neon.get_current_user\",\n \"neon.get_database\",\n \"neon.get_operation\",\n \"neon.get_project\",\n \"neon.list_branches\",\n \"neon.list_databases\",\n \"neon.list_operations\",\n \"neon.list_projects\",\n \"neon.update_branch\",\n \"neon.update_database\",\n \"neon.update_project\"\n ]\n },\n {\n \"service\": \"netease_mail\",\n \"displayName\": \"NetEase Mail\",\n \"categories\": [\n \"Communication\",\n \"Productivity\"\n ],\n \"authTypes\": [\n \"custom_credential\"\n ],\n \"homepageUrl\": \"https://mail.163.com/\",\n \"actionCount\": 12,\n \"actions\": [\n \"netease_mail.delete_email\",\n \"netease_mail.download_attachment\",\n \"netease_mail.forward_email\",\n \"netease_mail.get_email\",\n \"netease_mail.get_folder_status\",\n \"netease_mail.list_folders\",\n \"netease_mail.mark_email_read\",\n \"netease_mail.mark_email_unread\",\n \"netease_mail.move_email\",\n \"netease_mail.reply_email\",\n \"netease_mail.search_emails\",\n \"netease_mail.send_email\"\n ]\n },\n {\n \"service\": \"nethunt\",\n \"displayName\": \"NetHunt\",\n \"categories\": [\n \"Productivity\",\n \"Marketing\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://nethunt.com\",\n \"actionCount\": 15,\n \"actions\": [\n \"nethunt.auth_test\",\n \"nethunt.create_call_log\",\n \"nethunt.create_comment\",\n \"nethunt.create_record\",\n \"nethunt.delete_record\",\n \"nethunt.find_records\",\n \"nethunt.list_folder_fields\",\n \"nethunt.list_new_call_logs\",\n \"nethunt.list_new_comments\",\n \"nethunt.list_new_records\",\n \"nethunt.list_readable_folders\",\n \"nethunt.list_record_changes\",\n \"nethunt.list_updated_records\",\n \"nethunt.list_writable_folders\",\n \"nethunt.update_record\"\n ]\n },\n {\n \"service\": \"netlify\",\n \"displayName\": \"Netlify\",\n \"categories\": [\n \"Developer Tools\"\n ],\n \"authTypes\": [\n \"oauth2\",\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.netlify.com\",\n \"actionCount\": 19,\n \"actions\": [\n \"netlify.cancel_deploy\",\n \"netlify.create_site_build\",\n \"netlify.create_site_deploy_from_zip_url\",\n \"netlify.delete_submission\",\n \"netlify.get_account\",\n \"netlify.get_build\",\n \"netlify.get_current_user\",\n \"netlify.get_deploy\",\n \"netlify.get_site\",\n \"netlify.list_accounts\",\n \"netlify.list_site_deploys\",\n \"netlify.list_site_forms\",\n \"netlify.list_sites\",\n \"netlify.list_submissions\",\n \"netlify.lock_deploy\",\n \"netlify.notify_build_start\",\n \"netlify.unlock_deploy\",\n \"netlify.upload_deploy_file_from_url\",\n \"netlify.upload_deploy_function_from_zip_url\"\n ]\n },\n {\n \"service\": \"netsuite\",\n \"displayName\": \"NetSuite\",\n \"categories\": [\n \"Finance\",\n \"Productivity\"\n ],\n \"authTypes\": [\n \"custom_credential\"\n ],\n \"homepageUrl\": \"https://www.netsuite.com\",\n \"actionCount\": 5,\n \"actions\": [\n \"netsuite.create_record\",\n \"netsuite.get_record\",\n \"netsuite.list_records\",\n \"netsuite.run_suiteql\",\n \"netsuite.update_record\"\n ]\n },\n {\n \"service\": \"neutrino\",\n \"displayName\": \"Neutrino API\",\n \"categories\": [\n \"Data\",\n \"Location\",\n \"Security\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.neutrinoapi.com/\",\n \"actionCount\": 5,\n \"actions\": [\n \"neutrino.check_ip_blocklist\",\n \"neutrino.get_ip_info\",\n \"neutrino.lookup_domain\",\n \"neutrino.validate_email\",\n \"neutrino.validate_phone\"\n ]\n },\n {\n \"service\": \"neverbounce\",\n \"displayName\": \"NeverBounce\",\n \"categories\": [\n \"Communication\",\n \"Marketing\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://neverbounce.com\",\n \"actionCount\": 8,\n \"actions\": [\n \"neverbounce.create_job\",\n \"neverbounce.download_job_results\",\n \"neverbounce.get_account_info\",\n \"neverbounce.get_job_results\",\n \"neverbounce.get_job_status\",\n \"neverbounce.parse_job\",\n \"neverbounce.single_check\",\n \"neverbounce.start_job\"\n ]\n },\n {\n \"service\": \"new_relic\",\n \"displayName\": \"New Relic\",\n \"categories\": [\n \"Developer Tools\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://newrelic.com\",\n \"actionCount\": 28,\n \"actions\": [\n \"new_relic.create_alert_policy\",\n \"new_relic.create_dashboard\",\n \"new_relic.create_dashboard_snapshot_url\",\n \"new_relic.create_deployment_marker\",\n \"new_relic.create_nrql_condition\",\n \"new_relic.create_secure_credential\",\n \"new_relic.create_synthetics_simple_monitor\",\n \"new_relic.delete_alert_policy\",\n \"new_relic.delete_dashboard\",\n \"new_relic.delete_nrql_condition\",\n \"new_relic.delete_secure_credential\",\n \"new_relic.delete_synthetics_monitor\",\n \"new_relic.execute_nrql_query\",\n \"new_relic.get_alert_policies\",\n \"new_relic.get_current_user\",\n \"new_relic.get_dashboard_entity\",\n \"new_relic.get_secure_credential\",\n \"new_relic.get_synth_monitor\",\n \"new_relic.list_deployments\",\n \"new_relic.list_monitors\",\n \"new_relic.list_nrql_conditions\",\n \"new_relic.list_secure_credentials\",\n \"new_relic.search_entities\",\n \"new_relic.update_alert_policy\",\n \"new_relic.update_dashboard\",\n \"new_relic.update_nrql_condition\",\n \"new_relic.update_secure_credential\",\n \"new_relic.update_synthetics_simple_monitor\"\n ]\n },\n {\n \"service\": \"news_api\",\n \"displayName\": \"News API\",\n \"categories\": [\n \"Data\",\n \"Social\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://newsapi.org\",\n \"actionCount\": 4,\n \"actions\": [\n \"news_api.get_everything\",\n \"news_api.get_sources\",\n \"news_api.get_top_headlines\",\n \"news_api.get_v1_articles\"\n ]\n },\n {\n \"service\": \"newsdata_io\",\n \"displayName\": \"NewsData.io\",\n \"categories\": [\n \"Data\",\n \"Social\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://newsdata.io\",\n \"actionCount\": 4,\n \"actions\": [\n \"newsdata_io.get_latest_news\",\n \"newsdata_io.list_crypto_news\",\n \"newsdata_io.list_news_sources\",\n \"newsdata_io.search_news_archive\"\n ]\n },\n {\n \"service\": \"next_dns\",\n \"displayName\": \"NextDNS\",\n \"categories\": [\n \"Security\",\n \"Data\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://nextdns.io/\",\n \"actionCount\": 7,\n \"actions\": [\n \"next_dns.get_analytics_devices\",\n \"next_dns.get_analytics_domains\",\n \"next_dns.get_analytics_reasons\",\n \"next_dns.get_analytics_status\",\n \"next_dns.get_logs\",\n \"next_dns.get_profile\",\n \"next_dns.list_profiles\"\n ]\n },\n {\n \"service\": \"ngrok\",\n \"displayName\": \"ngrok\",\n \"categories\": [\n \"Developer Tools\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://ngrok.com\",\n \"actionCount\": 6,\n \"actions\": [\n \"ngrok.get_endpoint\",\n \"ngrok.get_reserved_domain\",\n \"ngrok.list_endpoints\",\n \"ngrok.list_reserved_domains\",\n \"ngrok.list_tunnel_sessions\",\n \"ngrok.list_tunnels\"\n ]\n },\n {\n \"service\": \"ninjapear\",\n \"displayName\": \"NinjaPear\",\n \"categories\": [\n \"Data\",\n \"Marketing\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://nubela.co/\",\n \"actionCount\": 8,\n \"actions\": [\n \"ninjapear.check_disposable_email\",\n \"ninjapear.get_company_details\",\n \"ninjapear.get_credit_balance\",\n \"ninjapear.get_employee_count\",\n \"ninjapear.list_competitors\",\n \"ninjapear.list_customers\",\n \"ninjapear.list_products\",\n \"ninjapear.lookup_company_website\"\n ]\n },\n {\n \"service\": \"ninox\",\n \"displayName\": \"Ninox\",\n \"categories\": [\n \"Productivity\",\n \"Data\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://ninox.com\",\n \"actionCount\": 12,\n \"actions\": [\n \"ninox.delete_record\",\n \"ninox.delete_records\",\n \"ninox.get_database\",\n \"ninox.get_record\",\n \"ninox.get_table\",\n \"ninox.get_workspace\",\n \"ninox.list_databases\",\n \"ninox.list_records\",\n \"ninox.list_tables\",\n \"ninox.list_workspaces\",\n \"ninox.save_records\",\n \"ninox.search_record\"\n ]\n },\n {\n \"service\": \"nocodb\",\n \"displayName\": \"NocoDB\",\n \"categories\": [\n \"Data\",\n \"Productivity\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://nocodb.com\",\n \"actionCount\": 24,\n \"actions\": [\n \"nocodb.count_records\",\n \"nocodb.count_table_records\",\n \"nocodb.create_records\",\n \"nocodb.create_table\",\n \"nocodb.create_table_field\",\n \"nocodb.create_table_records\",\n \"nocodb.create_table_view\",\n \"nocodb.delete_records\",\n \"nocodb.delete_table\",\n \"nocodb.delete_table_records\",\n \"nocodb.get_base_schema\",\n \"nocodb.get_current_user\",\n \"nocodb.get_table_metadata\",\n \"nocodb.list_bases\",\n \"nocodb.list_records\",\n \"nocodb.list_table_records\",\n \"nocodb.list_table_views\",\n \"nocodb.list_tables\",\n \"nocodb.read_record\",\n \"nocodb.read_table_record\",\n \"nocodb.update_records\",\n \"nocodb.update_table\",\n \"nocodb.update_table_records\",\n \"nocodb.upsert_table_records\"\n ]\n },\n {\n \"service\": \"nocrm_io\",\n \"displayName\": \"noCRM.io\",\n \"categories\": [\n \"Marketing\",\n \"Productivity\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.nocrm.io\",\n \"actionCount\": 9,\n \"actions\": [\n \"nocrm_io.add_tag_to_lead\",\n \"nocrm_io.append_to_lead_description\",\n \"nocrm_io.assign_lead_to_user\",\n \"nocrm_io.change_lead_status_to_cancelled\",\n \"nocrm_io.change_lead_status_to_standby\",\n \"nocrm_io.create_lead\",\n \"nocrm_io.delete_lead\",\n \"nocrm_io.duplicate_lead\",\n \"nocrm_io.list_teams\"\n ]\n },\n {\n \"service\": \"northbeam\",\n \"displayName\": \"Northbeam\",\n \"categories\": [\n \"Data\",\n \"Marketing\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.northbeam.io\",\n \"actionCount\": 5,\n \"actions\": [\n \"northbeam.list_attribution_models\",\n \"northbeam.list_breakdowns\",\n \"northbeam.list_hourly_spend\",\n \"northbeam.list_metrics\",\n \"northbeam.list_spend\"\n ]\n },\n {\n \"service\": \"northflank\",\n \"displayName\": \"Northflank\",\n \"categories\": [\n \"Developer Tools\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://northflank.com\",\n \"actionCount\": 4,\n \"actions\": [\n \"northflank.get_project\",\n \"northflank.get_service\",\n \"northflank.list_projects\",\n \"northflank.list_services\"\n ]\n },\n {\n \"service\": \"notion\",\n \"displayName\": \"Notion\",\n \"categories\": [\n \"Productivity\"\n ],\n \"authTypes\": [\n \"oauth2\",\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.notion.so\",\n \"actionCount\": 25,\n \"actions\": [\n \"notion.append_block\",\n \"notion.append_block_children\",\n \"notion.create_data_source\",\n \"notion.create_database\",\n \"notion.create_page\",\n \"notion.delete_block\",\n \"notion.get_page\",\n \"notion.list_block_children\",\n \"notion.list_data_source_templates\",\n \"notion.list_users\",\n \"notion.move_page\",\n \"notion.query_data_source\",\n \"notion.retrieve_block\",\n \"notion.retrieve_data_source\",\n \"notion.retrieve_database\",\n \"notion.retrieve_page\",\n \"notion.retrieve_page_markdown\",\n \"notion.retrieve_page_property\",\n \"notion.retrieve_user\",\n \"notion.search\",\n \"notion.update_block\",\n \"notion.update_data_source\",\n \"notion.update_database\",\n \"notion.update_page\",\n \"notion.update_page_markdown\"\n ]\n },\n {\n \"service\": \"novu\",\n \"displayName\": \"Novu\",\n \"categories\": [\n \"Communication\",\n \"Developer Tools\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://novu.co\",\n \"actionCount\": 5,\n \"actions\": [\n \"novu.create_subscriber\",\n \"novu.get_subscriber\",\n \"novu.search_subscribers\",\n \"novu.trigger_event\",\n \"novu.update_subscriber\"\n ]\n },\n {\n \"service\": \"ntfy\",\n \"displayName\": \"ntfy\",\n \"categories\": [\n \"Communication\",\n \"Developer Tools\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://ntfy.sh\",\n \"actionCount\": 2,\n \"actions\": [\n \"ntfy.get_account\",\n \"ntfy.publish_message\"\n ]\n },\n {\n \"service\": \"nylas\",\n \"displayName\": \"Nylas\",\n \"categories\": [\n \"Communication\",\n \"Productivity\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.nylas.com\",\n \"actionCount\": 4,\n \"actions\": [\n \"nylas.get_grant\",\n \"nylas.list_calendars\",\n \"nylas.list_events\",\n \"nylas.list_grants\"\n ]\n },\n {\n \"service\": \"nyne_ai\",\n \"displayName\": \"Nyne.ai\",\n \"categories\": [\n \"Data\",\n \"Marketing\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://nyne.ai\",\n \"actionCount\": 9,\n \"actions\": [\n \"nyne_ai.get_company_enrichment\",\n \"nyne_ai.get_company_search\",\n \"nyne_ai.get_person_enrichment\",\n \"nyne_ai.get_person_search\",\n \"nyne_ai.get_usage\",\n \"nyne_ai.submit_company_enrichment\",\n \"nyne_ai.submit_company_search\",\n \"nyne_ai.submit_person_enrichment\",\n \"nyne_ai.submit_person_search\"\n ]\n },\n {\n \"service\": \"ocrspace\",\n \"displayName\": \"OCR.space\",\n \"categories\": [\n \"AI\",\n \"Productivity\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://ocr.space\",\n \"actionCount\": 2,\n \"actions\": [\n \"ocrspace.extract_text\",\n \"ocrspace.get_conversion_stats\"\n ]\n },\n {\n \"service\": \"octave\",\n \"displayName\": \"Octave\",\n \"categories\": [\n \"AI\",\n \"Marketing\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.octavehq.com/\",\n \"actionCount\": 11,\n \"actions\": [\n \"octave.get_agent\",\n \"octave.list_agent_types\",\n \"octave.list_agents\",\n \"octave.list_languages\",\n \"octave.run_call_prep_agent\",\n \"octave.run_context_agent\",\n \"octave.run_enrich_company_agent\",\n \"octave.run_enrich_person_agent\",\n \"octave.run_qualify_company_agent\",\n \"octave.run_qualify_person_agent\",\n \"octave.validate_api_key\"\n ]\n },\n {\n \"service\": \"oksign\",\n \"displayName\": \"OKSign\",\n \"categories\": [\n \"Productivity\",\n \"Security\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.oksign.be/en/\",\n \"actionCount\": 5,\n \"actions\": [\n \"oksign.get_credits\",\n \"oksign.get_document_metadata\",\n \"oksign.get_linked_document\",\n \"oksign.list_active_documents\",\n \"oksign.list_users\"\n ]\n },\n {\n \"service\": \"okta\",\n \"displayName\": \"Okta\",\n \"categories\": [\n \"Security\"\n ],\n \"authTypes\": [\n \"custom_credential\"\n ],\n \"homepageUrl\": \"https://www.okta.com/\",\n \"actionCount\": 14,\n \"actions\": [\n \"okta.add_user_to_group\",\n \"okta.create_group\",\n \"okta.create_user\",\n \"okta.delete_group\",\n \"okta.delete_user\",\n \"okta.get_group\",\n \"okta.get_user\",\n \"okta.lifecycle_user\",\n \"okta.list_group_users\",\n \"okta.list_groups\",\n \"okta.list_users\",\n \"okta.remove_user_from_group\",\n \"okta.update_group\",\n \"okta.update_user\"\n ]\n },\n {\n \"service\": \"omnisend\",\n \"displayName\": \"Omnisend\",\n \"categories\": [\n \"Marketing\",\n \"Communication\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.omnisend.com\",\n \"actionCount\": 9,\n \"actions\": [\n \"omnisend.add_tags\",\n \"omnisend.get_contact\",\n \"omnisend.get_segment\",\n \"omnisend.list_contacts\",\n \"omnisend.list_segments\",\n \"omnisend.remove_tags\",\n \"omnisend.update_contact_by_email\",\n \"omnisend.update_contact_by_id\",\n \"omnisend.upsert_contact\"\n ]\n },\n {\n \"service\": \"oncehub\",\n \"displayName\": \"OnceHub\",\n \"categories\": [\n \"Productivity\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.oncehub.com\",\n \"actionCount\": 3,\n \"actions\": [\n \"oncehub.list_booking_pages\",\n \"oncehub.list_bookings\",\n \"oncehub.list_event_types\"\n ]\n },\n {\n \"service\": \"one_drive\",\n \"displayName\": \"OneDrive\",\n \"categories\": [\n \"Storage\",\n \"Productivity\"\n ],\n \"authTypes\": [\n \"oauth2\"\n ],\n \"homepageUrl\": \"https://www.microsoft.com/microsoft-365/onedrive/online-cloud-storage\",\n \"actionCount\": 13,\n \"actions\": [\n \"one_drive.create_folder\",\n \"one_drive.delete_item\",\n \"one_drive.download_file\",\n \"one_drive.download_file_by_path\",\n \"one_drive.download_item_as_format\",\n \"one_drive.get_drive\",\n \"one_drive.get_item\",\n \"one_drive.get_root\",\n \"one_drive.list_folder_children\",\n \"one_drive.search_items\",\n \"one_drive.update_file_content\",\n \"one_drive.update_item_metadata\",\n \"one_drive.upload_file\"\n ]\n },\n {\n \"service\": \"one_page_crm\",\n \"displayName\": \"OnePageCRM\",\n \"categories\": [\n \"Marketing\"\n ],\n \"authTypes\": [\n \"custom_credential\"\n ],\n \"homepageUrl\": \"https://www.onepagecrm.com\",\n \"actionCount\": 6,\n \"actions\": [\n \"one_page_crm.create_contact\",\n \"one_page_crm.create_deal\",\n \"one_page_crm.get_contact\",\n \"one_page_crm.get_deal\",\n \"one_page_crm.list_contacts\",\n \"one_page_crm.list_deals\"\n ]\n },\n {\n \"service\": \"one_password\",\n \"displayName\": \"1Password\",\n \"categories\": [\n \"Security\",\n \"Productivity\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://1password.com\",\n \"actionCount\": 6,\n \"actions\": [\n \"one_password.get_health\",\n \"one_password.get_item\",\n \"one_password.get_vault\",\n \"one_password.list_activity\",\n \"one_password.list_items\",\n \"one_password.list_vaults\"\n ]\n },\n {\n \"service\": \"one_password_events\",\n \"displayName\": \"1Password Events API\",\n \"categories\": [\n \"Security\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://1password.com\",\n \"actionCount\": 3,\n \"actions\": [\n \"one_password_events.list_audit_events\",\n \"one_password_events.list_item_usages\",\n \"one_password_events.list_sign_in_attempts\"\n ]\n },\n {\n \"service\": \"onedesk\",\n \"displayName\": \"OneDesk\",\n \"categories\": [\n \"Productivity\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.onedesk.com\",\n \"actionCount\": 5,\n \"actions\": [\n \"onedesk.filter_items\",\n \"onedesk.filter_projects\",\n \"onedesk.get_item\",\n \"onedesk.get_organization_profile\",\n \"onedesk.get_project\"\n ]\n },\n {\n \"service\": \"onesignal_rest_api\",\n \"displayName\": \"OneSignal\",\n \"categories\": [\n \"Communication\",\n \"Marketing\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://onesignal.com\",\n \"actionCount\": 4,\n \"actions\": [\n \"onesignal_rest_api.cancel_message\",\n \"onesignal_rest_api.create_push_notification\",\n \"onesignal_rest_api.get_message\",\n \"onesignal_rest_api.list_messages\"\n ]\n },\n {\n \"service\": \"ongage\",\n \"displayName\": \"Ongage\",\n \"categories\": [\n \"Marketing\",\n \"Communication\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.ongage.com/\",\n \"actionCount\": 7,\n \"actions\": [\n \"ongage.change_contact_status\",\n \"ongage.get_contact_by_email\",\n \"ongage.get_contact_by_id\",\n \"ongage.get_list\",\n \"ongage.list_lists\",\n \"ongage.update_contacts\",\n \"ongage.upsert_contacts\"\n ]\n },\n {\n \"service\": \"oomnitza\",\n \"displayName\": \"Oomnitza\",\n \"categories\": [\n \"Productivity\",\n \"Data\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.oomnitza.com\",\n \"actionCount\": 5,\n \"actions\": [\n \"oomnitza.get_asset\",\n \"oomnitza.get_user\",\n \"oomnitza.identify\",\n \"oomnitza.list_assets\",\n \"oomnitza.list_users\"\n ]\n },\n {\n \"service\": \"open_exchange_rates\",\n \"displayName\": \"Open Exchange Rates\",\n \"categories\": [\n \"Finance\",\n \"Data\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://openexchangerates.org\",\n \"actionCount\": 5,\n \"actions\": [\n \"open_exchange_rates.convert_currency\",\n \"open_exchange_rates.get_currencies\",\n \"open_exchange_rates.get_historical_rates\",\n \"open_exchange_rates.get_latest_rates\",\n \"open_exchange_rates.get_timeseries_rates\"\n ]\n },\n {\n \"service\": \"open_hands\",\n \"displayName\": \"OpenHands\",\n \"categories\": [\n \"AI\",\n \"Developer Tools\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.all-hands.dev\",\n \"actionCount\": 5,\n \"actions\": [\n \"open_hands.get_conversation\",\n \"open_hands.get_start_task\",\n \"open_hands.list_conversations\",\n \"open_hands.send_message\",\n \"open_hands.start_conversation\"\n ]\n },\n {\n \"service\": \"openai\",\n \"displayName\": \"OpenAI\",\n \"categories\": [\n \"AI\",\n \"Developer Tools\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://openai.com/api/\",\n \"actionCount\": 15,\n \"actions\": [\n \"openai.cancel_batch\",\n \"openai.create_audio_transcription\",\n \"openai.create_audio_translation\",\n \"openai.create_batch\",\n \"openai.create_embeddings\",\n \"openai.create_image\",\n \"openai.create_moderation\",\n \"openai.create_response\",\n \"openai.create_speech\",\n \"openai.get_batch\",\n \"openai.get_input_token_counts\",\n \"openai.get_model\",\n \"openai.get_response\",\n \"openai.list_input_items\",\n \"openai.list_models\"\n ]\n },\n {\n \"service\": \"openalex\",\n \"displayName\": \"OpenAlex\",\n \"categories\": [\n \"Data\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://openalex.org/\",\n \"actionCount\": 5,\n \"actions\": [\n \"openalex.autocomplete\",\n \"openalex.get_entity\",\n \"openalex.get_work\",\n \"openalex.list_entities\",\n \"openalex.list_works\"\n ]\n },\n {\n \"service\": \"opencage\",\n \"displayName\": \"OpenCage\",\n \"categories\": [\n \"Location\",\n \"Data\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://opencagedata.com\",\n \"actionCount\": 3,\n \"actions\": [\n \"opencage.geocode_forward\",\n \"opencage.geocode_geojson\",\n \"opencage.geocode_reverse\"\n ]\n },\n {\n \"service\": \"openfootball_worldcup\",\n \"displayName\": \"OpenFootball World Cup\",\n \"categories\": [\n \"Data\"\n ],\n \"authTypes\": [\n \"no_auth\"\n ],\n \"homepageUrl\": \"https://github.com/openfootball/worldcup.json\",\n \"actionCount\": 6,\n \"actions\": [\n \"openfootball_worldcup.list_groups\",\n \"openfootball_worldcup.list_matches\",\n \"openfootball_worldcup.list_qualification_playoffs\",\n \"openfootball_worldcup.list_squads\",\n \"openfootball_worldcup.list_stadiums\",\n \"openfootball_worldcup.list_teams\"\n ]\n },\n {\n \"service\": \"opengraph_io\",\n \"displayName\": \"OpenGraph.io\",\n \"categories\": [\n \"Data\",\n \"Developer Tools\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.opengraph.io\",\n \"actionCount\": 4,\n \"actions\": [\n \"opengraph_io.capture_screenshot\",\n \"opengraph_io.extract_site\",\n \"opengraph_io.scrape_site\",\n \"opengraph_io.scrape_url\"\n ]\n },\n {\n \"service\": \"openpagerank\",\n \"displayName\": \"OpenPageRank\",\n \"categories\": [\n \"Data\",\n \"Marketing\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://openpagerank.com\",\n \"actionCount\": 1,\n \"actions\": [\n \"openpagerank.get_page_rank\"\n ]\n },\n {\n \"service\": \"openrouter\",\n \"displayName\": \"OpenRouter\",\n \"categories\": [\n \"AI\",\n \"Developer Tools\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://openrouter.ai\",\n \"actionCount\": 13,\n \"actions\": [\n \"openrouter.create_chat_completion\",\n \"openrouter.create_coinbase_charge\",\n \"openrouter.create_message\",\n \"openrouter.get_credits\",\n \"openrouter.get_current_key\",\n \"openrouter.get_generation\",\n \"openrouter.get_models_count\",\n \"openrouter.list_available_models\",\n \"openrouter.list_embedding_models\",\n \"openrouter.list_model_endpoints\",\n \"openrouter.list_providers\",\n \"openrouter.list_user_models\",\n \"openrouter.list_zdr_endpoints\"\n ]\n },\n {\n \"service\": \"opensea\",\n \"displayName\": \"OpenSea\",\n \"categories\": [\n \"Data\",\n \"Finance\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://opensea.io\",\n \"actionCount\": 9,\n \"actions\": [\n \"opensea.get_best_nft_listing\",\n \"opensea.get_best_nft_offer\",\n \"opensea.get_collection\",\n \"opensea.get_collection_stats\",\n \"opensea.get_nft\",\n \"opensea.list_collection_nfts\",\n \"opensea.list_collection_offers\",\n \"opensea.list_collection_traits\",\n \"opensea.search\"\n ]\n },\n {\n \"service\": \"openstatus\",\n \"displayName\": \"OpenStatus\",\n \"categories\": [\n \"Developer Tools\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.openstatus.dev\",\n \"actionCount\": 9,\n \"actions\": [\n \"openstatus.create_http_monitor\",\n \"openstatus.delete_monitor\",\n \"openstatus.get_monitor\",\n \"openstatus.get_monitor_status\",\n \"openstatus.get_monitor_summary\",\n \"openstatus.list_http_response_logs\",\n \"openstatus.list_monitors\",\n \"openstatus.trigger_monitor\",\n \"openstatus.update_http_monitor\"\n ]\n },\n {\n \"service\": \"openweather_api\",\n \"displayName\": \"OpenWeather\",\n \"categories\": [\n \"Location\",\n \"Data\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://openweathermap.org\",\n \"actionCount\": 21,\n \"actions\": [\n \"openweather_api.add_weather_station\",\n \"openweather_api.delete_weather_station\",\n \"openweather_api.get_5_day_forecast\",\n \"openweather_api.get_air_pollution_current\",\n \"openweather_api.get_air_pollution_forecast\",\n \"openweather_api.get_air_pollution_history\",\n \"openweather_api.get_circle_city_weather\",\n \"openweather_api.get_current_weather\",\n \"openweather_api.get_geocoding_by_zip\",\n \"openweather_api.get_geocoding_direct\",\n \"openweather_api.get_geocoding_reverse\",\n \"openweather_api.get_station_measurements\",\n \"openweather_api.get_uv_index\",\n \"openweather_api.get_uv_index_forecast\",\n \"openweather_api.get_uv_index_history\",\n \"openweather_api.get_weather_map_tile\",\n \"openweather_api.get_weather_station\",\n \"openweather_api.get_weather_triggers\",\n \"openweather_api.list_weather_stations\",\n \"openweather_api.submit_station_measurements\",\n \"openweather_api.update_weather_station\"\n ]\n },\n {\n \"service\": \"opsgenie\",\n \"displayName\": \"Opsgenie\",\n \"categories\": [\n \"Developer Tools\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.atlassian.com/software/opsgenie\",\n \"actionCount\": 7,\n \"actions\": [\n \"opsgenie.acknowledge_alert\",\n \"opsgenie.close_alert\",\n \"opsgenie.create_alert\",\n \"opsgenie.get_alert\",\n \"opsgenie.get_current_account\",\n \"opsgenie.get_request_status\",\n \"opsgenie.list_alerts\"\n ]\n },\n {\n \"service\": \"optimoroute\",\n \"displayName\": \"OptimoRoute\",\n \"categories\": [\n \"Location\",\n \"Productivity\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://optimoroute.com/\",\n \"actionCount\": 3,\n \"actions\": [\n \"optimoroute.create_or_update_orders\",\n \"optimoroute.delete_orders\",\n \"optimoroute.get_orders\"\n ]\n },\n {\n \"service\": \"oracle_cloud\",\n \"displayName\": \"Oracle Cloud Infrastructure\",\n \"categories\": [\n \"Developer Tools\",\n \"Infrastructure\"\n ],\n \"authTypes\": [\n \"custom_credential\"\n ],\n \"homepageUrl\": \"https://www.oracle.com/cloud/\",\n \"actionCount\": 34,\n \"actions\": [\n \"oracle_cloud.create_subnet\",\n \"oracle_cloud.create_vcn\",\n \"oracle_cloud.delete_vcn\",\n \"oracle_cloud.get_compartment_by_name\",\n \"oracle_cloud.get_current_tenancy\",\n \"oracle_cloud.get_current_user\",\n \"oracle_cloud.get_image\",\n \"oracle_cloud.get_instance\",\n \"oracle_cloud.get_metrics_data\",\n \"oracle_cloud.get_network_security_group\",\n \"oracle_cloud.get_security_list\",\n \"oracle_cloud.get_subnet\",\n \"oracle_cloud.get_tenancy\",\n \"oracle_cloud.get_vcn\",\n \"oracle_cloud.get_vnic\",\n \"oracle_cloud.get_vnic_attachment\",\n \"oracle_cloud.instance_action\",\n \"oracle_cloud.launch_instance\",\n \"oracle_cloud.list_alarms\",\n \"oracle_cloud.list_availability_domains\",\n \"oracle_cloud.list_compartments\",\n \"oracle_cloud.list_images\",\n \"oracle_cloud.list_instance_agent_command_executions\",\n \"oracle_cloud.list_instances\",\n \"oracle_cloud.list_metric_definitions\",\n \"oracle_cloud.list_network_security_groups\",\n \"oracle_cloud.list_security_lists\",\n \"oracle_cloud.list_subnets\",\n \"oracle_cloud.list_subscribed_regions\",\n \"oracle_cloud.list_vcns\",\n \"oracle_cloud.list_vnic_attachments\",\n \"oracle_cloud.run_instance_agent_command\",\n \"oracle_cloud.terminate_instance\",\n \"oracle_cloud.update_instance\"\n ]\n },\n {\n \"service\": \"ordinal\",\n \"displayName\": \"Ordinal\",\n \"categories\": [\n \"Social\",\n \"Marketing\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.tryordinal.com\",\n \"actionCount\": 9,\n \"actions\": [\n \"ordinal.get_idea\",\n \"ordinal.get_post\",\n \"ordinal.get_workspace\",\n \"ordinal.list_engagement_profiles\",\n \"ordinal.list_ideas\",\n \"ordinal.list_labels\",\n \"ordinal.list_posts\",\n \"ordinal.list_scheduling_profiles\",\n \"ordinal.list_users\"\n ]\n },\n {\n \"service\": \"ortto\",\n \"displayName\": \"Ortto\",\n \"categories\": [\n \"Marketing\",\n \"Data\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://ortto.com\",\n \"actionCount\": 3,\n \"actions\": [\n \"ortto.get_people_by_ids\",\n \"ortto.list_people\",\n \"ortto.merge_people\"\n ]\n },\n {\n \"service\": \"ossinsight\",\n \"displayName\": \"OSS Insight\",\n \"categories\": [\n \"Developer Tools\",\n \"Data\"\n ],\n \"authTypes\": [\n \"no_auth\"\n ],\n \"homepageUrl\": \"https://ossinsight.io\",\n \"actionCount\": 18,\n \"actions\": [\n \"ossinsight.get_issue_creators_history\",\n \"ossinsight.get_pull_request_creators_history\",\n \"ossinsight.get_stargazers_history\",\n \"ossinsight.list_collection_repos\",\n \"ossinsight.list_collections\",\n \"ossinsight.list_hot_collections\",\n \"ossinsight.list_issue_creator_countries\",\n \"ossinsight.list_issue_creator_organizations\",\n \"ossinsight.list_issue_creators\",\n \"ossinsight.list_pull_request_creator_countries\",\n \"ossinsight.list_pull_request_creator_organizations\",\n \"ossinsight.list_pull_request_creators\",\n \"ossinsight.list_stargazer_countries\",\n \"ossinsight.list_stargazer_organizations\",\n \"ossinsight.list_trending_repos\",\n \"ossinsight.rank_collection_repos_by_issues\",\n \"ossinsight.rank_collection_repos_by_pull_requests\",\n \"ossinsight.rank_collection_repos_by_stars\"\n ]\n },\n {\n \"service\": \"otter_ai\",\n \"displayName\": \"Otter.ai\",\n \"categories\": [\n \"AI\",\n \"Productivity\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://otter.ai\",\n \"actionCount\": 6,\n \"actions\": [\n \"otter_ai.get_conversation\",\n \"otter_ai.get_conversation_audio\",\n \"otter_ai.get_workspace\",\n \"otter_ai.list_channel_members\",\n \"otter_ai.list_channels\",\n \"otter_ai.list_conversations\"\n ]\n },\n {\n \"service\": \"outline\",\n \"displayName\": \"Outline\",\n \"categories\": [\n \"Productivity\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.getoutline.com\",\n \"actionCount\": 6,\n \"actions\": [\n \"outline.get_collection\",\n \"outline.get_document\",\n \"outline.list_collection_documents\",\n \"outline.list_collections\",\n \"outline.list_documents\",\n \"outline.search_documents\"\n ]\n },\n {\n \"service\": \"outlook\",\n \"displayName\": \"Outlook\",\n \"categories\": [\n \"Communication\",\n \"Productivity\"\n ],\n \"authTypes\": [\n \"oauth2\"\n ],\n \"homepageUrl\": \"https://www.microsoft.com/microsoft-365/outlook/email-and-calendar-software-microsoft-outlook\",\n \"actionCount\": 11,\n \"actions\": [\n \"outlook.create_draft\",\n \"outlook.get_mailbox_settings\",\n \"outlook.get_message\",\n \"outlook.get_profile\",\n \"outlook.list_mail_folders\",\n \"outlook.list_messages\",\n \"outlook.reply_email\",\n \"outlook.send_draft\",\n \"outlook.send_email\",\n \"outlook.update_draft\",\n \"outlook.update_mailbox_settings\"\n ]\n },\n {\n \"service\": \"owl_protocol\",\n \"displayName\": \"Owl Protocol\",\n \"categories\": [\n \"Developer Tools\",\n \"Finance\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://owlprotocol.xyz\",\n \"actionCount\": 3,\n \"actions\": [\n \"owl_protocol.get_project_info\",\n \"owl_protocol.get_project_token\",\n \"owl_protocol.patch_project_token\"\n ]\n },\n {\n \"service\": \"paddle\",\n \"displayName\": \"Paddle\",\n \"categories\": [\n \"Finance\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.paddle.com\",\n \"actionCount\": 12,\n \"actions\": [\n \"paddle.create_customer\",\n \"paddle.create_price\",\n \"paddle.create_product\",\n \"paddle.get_customer\",\n \"paddle.get_price\",\n \"paddle.get_product\",\n \"paddle.list_customers\",\n \"paddle.list_prices\",\n \"paddle.list_products\",\n \"paddle.update_customer\",\n \"paddle.update_price\",\n \"paddle.update_product\"\n ]\n },\n {\n \"service\": \"pagerduty\",\n \"displayName\": \"PagerDuty\",\n \"categories\": [\n \"Developer Tools\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.pagerduty.com\",\n \"actionCount\": 7,\n \"actions\": [\n \"pagerduty.acknowledge_incident\",\n \"pagerduty.get_current_user\",\n \"pagerduty.get_incident\",\n \"pagerduty.list_incidents\",\n \"pagerduty.list_on_calls\",\n \"pagerduty.resolve_incident\",\n \"pagerduty.update_incident\"\n ]\n },\n {\n \"service\": \"pandadoc\",\n \"displayName\": \"PandaDoc\",\n \"categories\": [\n \"Productivity\",\n \"Communication\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.pandadoc.com\",\n \"actionCount\": 13,\n \"actions\": [\n \"pandadoc.create_document_attachment\",\n \"pandadoc.create_document_from_file\",\n \"pandadoc.create_folder\",\n \"pandadoc.create_or_update_contact\",\n \"pandadoc.create_template\",\n \"pandadoc.create_webhook\",\n \"pandadoc.delete_contact\",\n \"pandadoc.delete_template\",\n \"pandadoc.get_document_details\",\n \"pandadoc.get_template_details\",\n \"pandadoc.list_contacts\",\n \"pandadoc.list_document_folders\",\n \"pandadoc.list_templates\"\n ]\n },\n {\n \"service\": \"paperform\",\n \"displayName\": \"Paperform\",\n \"categories\": [\n \"Productivity\",\n \"Marketing\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://paperform.co\",\n \"actionCount\": 14,\n \"actions\": [\n \"paperform.get_form\",\n \"paperform.get_form_coupon\",\n \"paperform.get_form_field\",\n \"paperform.get_form_partial_submission\",\n \"paperform.get_form_product\",\n \"paperform.get_form_submission\",\n \"paperform.get_partial_submission\",\n \"paperform.get_submission\",\n \"paperform.list_form_coupons\",\n \"paperform.list_form_fields\",\n \"paperform.list_form_partial_submissions\",\n \"paperform.list_form_products\",\n \"paperform.list_form_submissions\",\n \"paperform.list_forms\"\n ]\n },\n {\n \"service\": \"paradym\",\n \"displayName\": \"Paradym\",\n \"categories\": [\n \"Security\",\n \"Developer Tools\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://paradym.id\",\n \"actionCount\": 11,\n \"actions\": [\n \"paradym.create_openid4vc_credential_offer\",\n \"paradym.create_openid4vc_verification_request\",\n \"paradym.get_openid4vc_issuance_session\",\n \"paradym.get_openid4vc_verification_session\",\n \"paradym.list_issued_credentials\",\n \"paradym.list_mdoc_credential_templates\",\n \"paradym.list_openid4vc_issuance_sessions\",\n \"paradym.list_openid4vc_verification_sessions\",\n \"paradym.list_presentation_templates\",\n \"paradym.list_projects\",\n \"paradym.list_sd_jwt_vc_credential_templates\"\n ]\n },\n {\n \"service\": \"parallel\",\n \"displayName\": \"Parallel\",\n \"categories\": [\n \"AI\",\n \"Data\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://parallel.ai\",\n \"actionCount\": 5,\n \"actions\": [\n \"parallel.create_task_run\",\n \"parallel.extract\",\n \"parallel.retrieve_task_run\",\n \"parallel.retrieve_task_run_result\",\n \"parallel.search\"\n ]\n },\n {\n \"service\": \"parsehub\",\n \"displayName\": \"ParseHub\",\n \"categories\": [\n \"Data\",\n \"Developer Tools\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.parsehub.com\",\n \"actionCount\": 2,\n \"actions\": [\n \"parsehub.get_project\",\n \"parsehub.list_projects\"\n ]\n },\n {\n \"service\": \"parsera\",\n \"displayName\": \"Parsera\",\n \"categories\": [\n \"Data\",\n \"Developer Tools\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://parsera.org\",\n \"actionCount\": 5,\n \"actions\": [\n \"parsera.extract\",\n \"parsera.extract_markdown\",\n \"parsera.list_llm_specs\",\n \"parsera.list_proxy_countries\",\n \"parsera.parse\"\n ]\n },\n {\n \"service\": \"parseur\",\n \"displayName\": \"Parseur\",\n \"categories\": [\n \"Productivity\",\n \"Data\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://parseur.com\",\n \"actionCount\": 5,\n \"actions\": [\n \"parseur.get_document\",\n \"parseur.get_mailbox\",\n \"parseur.get_mailbox_schema\",\n \"parseur.list_mailbox_documents\",\n \"parseur.list_mailboxes\"\n ]\n },\n {\n \"service\": \"partner_stack_partner\",\n \"displayName\": \"PartnerStack Partner\",\n \"categories\": [\n \"Marketing\",\n \"Finance\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://partnerstack.com\",\n \"actionCount\": 5,\n \"actions\": [\n \"partner_stack_partner.get_marketplace_program\",\n \"partner_stack_partner.list_marketplace_programs\",\n \"partner_stack_partner.list_partnerships\",\n \"partner_stack_partner.list_payouts\",\n \"partner_stack_partner.list_rewards\"\n ]\n },\n {\n \"service\": \"partnerstack\",\n \"displayName\": \"PartnerStack\",\n \"categories\": [\n \"Marketing\",\n \"Finance\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://partnerstack.com\",\n \"actionCount\": 7,\n \"actions\": [\n \"partnerstack.create_customer\",\n \"partnerstack.get_customer\",\n \"partnerstack.get_partnership\",\n \"partnerstack.list_customers\",\n \"partnerstack.list_deals\",\n \"partnerstack.list_leads\",\n \"partnerstack.list_partnerships\"\n ]\n },\n {\n \"service\": \"payhip\",\n \"displayName\": \"Payhip\",\n \"categories\": [\n \"Finance\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://payhip.com/\",\n \"actionCount\": 9,\n \"actions\": [\n \"payhip.create_coupon\",\n \"payhip.decrease_license_uses\",\n \"payhip.delete_coupon\",\n \"payhip.disable_license\",\n \"payhip.enable_license\",\n \"payhip.get_coupon\",\n \"payhip.list_coupons\",\n \"payhip.update_coupon\",\n \"payhip.verify_license\"\n ]\n },\n {\n \"service\": \"paymo\",\n \"displayName\": \"Paymo\",\n \"categories\": [\n \"Productivity\",\n \"Finance\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.paymoapp.com\",\n \"actionCount\": 16,\n \"actions\": [\n \"paymo.create_client\",\n \"paymo.create_project\",\n \"paymo.create_task\",\n \"paymo.delete_client\",\n \"paymo.delete_project\",\n \"paymo.delete_task\",\n \"paymo.get_client\",\n \"paymo.get_current_user\",\n \"paymo.get_project\",\n \"paymo.get_task\",\n \"paymo.list_clients\",\n \"paymo.list_projects\",\n \"paymo.list_tasks\",\n \"paymo.update_client\",\n \"paymo.update_project\",\n \"paymo.update_task\"\n ]\n },\n {\n \"service\": \"paystack\",\n \"displayName\": \"Paystack\",\n \"categories\": [\n \"Finance\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://paystack.com\",\n \"actionCount\": 8,\n \"actions\": [\n \"paystack.create_customer\",\n \"paystack.get_customer\",\n \"paystack.get_transaction\",\n \"paystack.initialize_transaction\",\n \"paystack.list_customers\",\n \"paystack.list_transactions\",\n \"paystack.update_customer\",\n \"paystack.verify_transaction\"\n ]\n },\n {\n \"service\": \"pdf_api_io\",\n \"displayName\": \"PDF-API.io\",\n \"categories\": [\n \"Productivity\",\n \"Design & Media\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://pdf-api.io\",\n \"actionCount\": 3,\n \"actions\": [\n \"pdf_api_io.get_template\",\n \"pdf_api_io.list_templates\",\n \"pdf_api_io.render_pdf\"\n ]\n },\n {\n \"service\": \"pdf_co\",\n \"displayName\": \"PDF.co\",\n \"categories\": [\n \"Productivity\",\n \"Design & Media\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://pdf.co\",\n \"actionCount\": 8,\n \"actions\": [\n \"pdf_co.compress_pdf\",\n \"pdf_co.get_account_balance\",\n \"pdf_co.get_pdf_info\",\n \"pdf_co.html_to_pdf\",\n \"pdf_co.merge_pdfs\",\n \"pdf_co.pdf_to_text\",\n \"pdf_co.split_pdf\",\n \"pdf_co.url_to_pdf\"\n ]\n },\n {\n \"service\": \"pdfless\",\n \"displayName\": \"Pdfless\",\n \"categories\": [\n \"Productivity\",\n \"Data\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://pdfless.com\",\n \"actionCount\": 2,\n \"actions\": [\n \"pdfless.get_workspace\",\n \"pdfless.list_document_templates\"\n ]\n },\n {\n \"service\": \"pdfmonkey\",\n \"displayName\": \"PDFMonkey\",\n \"categories\": [\n \"Productivity\",\n \"Design & Media\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://pdfmonkey.io\",\n \"actionCount\": 7,\n \"actions\": [\n \"pdfmonkey.create_document\",\n \"pdfmonkey.get_current_user\",\n \"pdfmonkey.get_document\",\n \"pdfmonkey.get_document_card\",\n \"pdfmonkey.get_document_template\",\n \"pdfmonkey.list_document_cards\",\n \"pdfmonkey.list_document_template_cards\"\n ]\n },\n {\n \"service\": \"pendo\",\n \"displayName\": \"Pendo\",\n \"categories\": [\n \"Data\",\n \"Marketing\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.pendo.io\",\n \"actionCount\": 5,\n \"actions\": [\n \"pendo.get_features\",\n \"pendo.get_pages\",\n \"pendo.identify\",\n \"pendo.list_features\",\n \"pendo.list_pages\"\n ]\n },\n {\n \"service\": \"peopledatalabs\",\n \"displayName\": \"People Data Labs\",\n \"categories\": [\n \"Data\",\n \"Marketing\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.peopledatalabs.com\",\n \"actionCount\": 4,\n \"actions\": [\n \"peopledatalabs.enrich_company\",\n \"peopledatalabs.enrich_person\",\n \"peopledatalabs.search_companies\",\n \"peopledatalabs.search_people\"\n ]\n },\n {\n \"service\": \"perdoo\",\n \"displayName\": \"Perdoo\",\n \"categories\": [\n \"Productivity\",\n \"Data\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.perdoo.com\",\n \"actionCount\": 4,\n \"actions\": [\n \"perdoo.execute_graphql\",\n \"perdoo.get_goal\",\n \"perdoo.list_goals\",\n \"perdoo.upsert_commit\"\n ]\n },\n {\n \"service\": \"perigon\",\n \"displayName\": \"Perigon\",\n \"categories\": [\n \"AI\",\n \"Data\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://perigon.io\",\n \"actionCount\": 12,\n \"actions\": [\n \"perigon.get_journalist\",\n \"perigon.search_articles\",\n \"perigon.search_companies\",\n \"perigon.search_journalists\",\n \"perigon.search_people\",\n \"perigon.search_sources\",\n \"perigon.search_stories\",\n \"perigon.search_topics\",\n \"perigon.search_wikipedia\",\n \"perigon.summarize_news\",\n \"perigon.vector_search_news\",\n \"perigon.vector_search_wikipedia\"\n ]\n },\n {\n \"service\": \"permit_io\",\n \"displayName\": \"Permit.io\",\n \"categories\": [\n \"Developer Tools\",\n \"Security\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.permit.io\",\n \"actionCount\": 13,\n \"actions\": [\n \"permit_io.assign_role\",\n \"permit_io.create_tenant\",\n \"permit_io.create_user\",\n \"permit_io.delete_tenant\",\n \"permit_io.delete_user\",\n \"permit_io.get_tenant\",\n \"permit_io.get_user\",\n \"permit_io.list_role_assignments\",\n \"permit_io.list_tenants\",\n \"permit_io.list_users\",\n \"permit_io.unassign_role\",\n \"permit_io.update_tenant\",\n \"permit_io.update_user\"\n ]\n },\n {\n \"service\": \"perplexity\",\n \"displayName\": \"Perplexity\",\n \"categories\": [\n \"AI\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.perplexity.ai\",\n \"actionCount\": 4,\n \"actions\": [\n \"perplexity.create_chat_completion\",\n \"perplexity.create_embeddings\",\n \"perplexity.list_models\",\n \"perplexity.search\"\n ]\n },\n {\n \"service\": \"persona\",\n \"displayName\": \"Persona\",\n \"categories\": [\n \"Security\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://withpersona.com/\",\n \"actionCount\": 4,\n \"actions\": [\n \"persona.create_inquiry\",\n \"persona.get_inquiry\",\n \"persona.list_inquiries\",\n \"persona.update_inquiry\"\n ]\n },\n {\n \"service\": \"personal_ai\",\n \"displayName\": \"Personal AI\",\n \"categories\": [\n \"AI\",\n \"Productivity\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://personal.ai\",\n \"actionCount\": 5,\n \"actions\": [\n \"personal_ai.send_instruction\",\n \"personal_ai.send_message\",\n \"personal_ai.upload_memory\",\n \"personal_ai.upload_text_document\",\n \"personal_ai.upload_url\"\n ]\n },\n {\n \"service\": \"pexels\",\n \"displayName\": \"Pexels\",\n \"categories\": [\n \"Design & Media\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.pexels.com\",\n \"actionCount\": 9,\n \"actions\": [\n \"pexels.collection_media\",\n \"pexels.curated_photos\",\n \"pexels.featured_collections\",\n \"pexels.get_photo\",\n \"pexels.get_video\",\n \"pexels.my_collections\",\n \"pexels.popular_videos\",\n \"pexels.search_photos\",\n \"pexels.search_videos\"\n ]\n },\n {\n \"service\": \"phantombuster\",\n \"displayName\": \"PhantomBuster\",\n \"categories\": [\n \"Developer Tools\",\n \"Data\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://phantombuster.com\",\n \"actionCount\": 7,\n \"actions\": [\n \"phantombuster.get_agent\",\n \"phantombuster.get_container\",\n \"phantombuster.get_current_organization\",\n \"phantombuster.launch_agent\",\n \"phantombuster.list_agents\",\n \"phantombuster.list_containers\",\n \"phantombuster.stop_agent\"\n ]\n },\n {\n \"service\": \"pilvio\",\n \"displayName\": \"Pilvio\",\n \"categories\": [\n \"Developer Tools\",\n \"Storage\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://pilvio.com/\",\n \"actionCount\": 5,\n \"actions\": [\n \"pilvio.get_billing_account\",\n \"pilvio.get_current_user\",\n \"pilvio.list_billing_accounts\",\n \"pilvio.list_locations\",\n \"pilvio.list_virtual_machines\"\n ]\n },\n {\n \"service\": \"pinata\",\n \"displayName\": \"Pinata\",\n \"categories\": [\n \"Developer Tools\",\n \"Storage\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://pinata.cloud\",\n \"actionCount\": 12,\n \"actions\": [\n \"pinata.add_file_to_group\",\n \"pinata.create_group\",\n \"pinata.delete_file\",\n \"pinata.get_file\",\n \"pinata.get_group\",\n \"pinata.list_files\",\n \"pinata.list_groups\",\n \"pinata.pin_by_cid\",\n \"pinata.query_pin_requests\",\n \"pinata.remove_file_from_group\",\n \"pinata.update_file\",\n \"pinata.update_group\"\n ]\n },\n {\n \"service\": \"pinecone\",\n \"displayName\": \"Pinecone\",\n \"categories\": [\n \"AI\",\n \"Data\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.pinecone.io/\",\n \"actionCount\": 12,\n \"actions\": [\n \"pinecone.configure_index\",\n \"pinecone.create_index\",\n \"pinecone.delete_index\",\n \"pinecone.delete_vectors\",\n \"pinecone.describe_index\",\n \"pinecone.fetch_vectors\",\n \"pinecone.get_index_stats\",\n \"pinecone.list_indexes\",\n \"pinecone.list_vector_ids\",\n \"pinecone.query_vectors\",\n \"pinecone.update_vector\",\n \"pinecone.upsert_vectors\"\n ]\n },\n {\n \"service\": \"pingdom\",\n \"displayName\": \"Pingdom\",\n \"categories\": [\n \"Developer Tools\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.pingdom.com\",\n \"actionCount\": 4,\n \"actions\": [\n \"pingdom.get_check\",\n \"pingdom.get_credits\",\n \"pingdom.list_checks\",\n \"pingdom.list_probes\"\n ]\n },\n {\n \"service\": \"pipedream\",\n \"displayName\": \"Pipedream\",\n \"categories\": [\n \"Developer Tools\",\n \"Productivity\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://pipedream.com\",\n \"actionCount\": 6,\n \"actions\": [\n \"pipedream.get_app\",\n \"pipedream.get_current_user\",\n \"pipedream.get_workflow\",\n \"pipedream.get_workflow_emits\",\n \"pipedream.get_workspace\",\n \"pipedream.list_apps\"\n ]\n },\n {\n \"service\": \"pipedrive\",\n \"displayName\": \"Pipedrive\",\n \"categories\": [\n \"Productivity\",\n \"Marketing\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.pipedrive.com\",\n \"actionCount\": 27,\n \"actions\": [\n \"pipedrive.create_activity\",\n \"pipedrive.create_deal\",\n \"pipedrive.create_organization\",\n \"pipedrive.create_person\",\n \"pipedrive.delete_activity\",\n \"pipedrive.delete_deal\",\n \"pipedrive.delete_organization\",\n \"pipedrive.delete_person\",\n \"pipedrive.get_activity\",\n \"pipedrive.get_deal\",\n \"pipedrive.get_organization\",\n \"pipedrive.get_person\",\n \"pipedrive.get_pipeline\",\n \"pipedrive.get_stage\",\n \"pipedrive.list_activities\",\n \"pipedrive.list_deals\",\n \"pipedrive.list_organizations\",\n \"pipedrive.list_persons\",\n \"pipedrive.list_pipelines\",\n \"pipedrive.list_stages\",\n \"pipedrive.search_deals\",\n \"pipedrive.search_organizations\",\n \"pipedrive.search_persons\",\n \"pipedrive.update_activity\",\n \"pipedrive.update_deal\",\n \"pipedrive.update_organization\",\n \"pipedrive.update_person\"\n ]\n },\n {\n \"service\": \"pivotal_tracker\",\n \"displayName\": \"Pivotal Tracker\",\n \"categories\": [\n \"Productivity\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.pivotaltracker.com\",\n \"actionCount\": 9,\n \"actions\": [\n \"pivotal_tracker.create_story\",\n \"pivotal_tracker.create_story_comment\",\n \"pivotal_tracker.get_current_user\",\n \"pivotal_tracker.get_project\",\n \"pivotal_tracker.get_story\",\n \"pivotal_tracker.list_project_stories\",\n \"pivotal_tracker.list_projects\",\n \"pivotal_tracker.list_story_comments\",\n \"pivotal_tracker.update_story_state\"\n ]\n },\n {\n \"service\": \"pixellab\",\n \"displayName\": \"PixelLab\",\n \"categories\": [\n \"AI\",\n \"Design & Media\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.pixellab.ai/\",\n \"actionCount\": 56,\n \"actions\": [\n \"pixellab.animate_with_skeleton\",\n \"pixellab.animate_with_text_legacy\",\n \"pixellab.convert_to_pixel_art\",\n \"pixellab.create_pixen_image\",\n \"pixellab.create_pixflux_image\",\n \"pixellab.delete_character\",\n \"pixellab.delete_object\",\n \"pixellab.delete_ui_asset\",\n \"pixellab.dismiss_object_review\",\n \"pixellab.download_character_zip\",\n \"pixellab.enhance_animation_prompt\",\n \"pixellab.enhance_character_prompt\",\n \"pixellab.enhance_pixen_prompt\",\n \"pixellab.estimate_skeleton\",\n \"pixellab.get_background_job\",\n \"pixellab.get_balance\",\n \"pixellab.get_character\",\n \"pixellab.get_object\",\n \"pixellab.get_ui_asset\",\n \"pixellab.inpaint_image_legacy\",\n \"pixellab.list_characters\",\n \"pixellab.list_objects\",\n \"pixellab.list_ui_assets\",\n \"pixellab.remove_background\",\n \"pixellab.resize_image\",\n \"pixellab.rotate_image\",\n \"pixellab.select_object_frames\",\n \"pixellab.start_animate_object\",\n \"pixellab.start_convert_to_pixel_art_pro\",\n \"pixellab.start_create_character_4_directions\",\n \"pixellab.start_create_character_8_directions\",\n \"pixellab.start_create_character_animation\",\n \"pixellab.start_create_character_pro\",\n \"pixellab.start_create_character_state\",\n \"pixellab.start_create_character_v3\",\n \"pixellab.start_create_object_1_direction\",\n \"pixellab.start_create_object_8_directions\",\n \"pixellab.start_create_object_state\",\n \"pixellab.start_create_ui_asset\",\n \"pixellab.start_edit_animation\",\n \"pixellab.start_edit_image_legacy\",\n \"pixellab.start_edit_images\",\n \"pixellab.start_generate_image\",\n \"pixellab.start_generate_rotations\",\n \"pixellab.start_generate_rotations_pro\",\n \"pixellab.start_generate_ui\",\n \"pixellab.start_generate_with_style\",\n \"pixellab.start_inpaint\",\n \"pixellab.start_interpolation\",\n \"pixellab.start_pixflux_background\",\n \"pixellab.start_portrait_character_conversion\",\n \"pixellab.start_text_animation\",\n \"pixellab.start_text_animation_pro\",\n \"pixellab.start_transfer_outfit\",\n \"pixellab.update_character_tags\",\n \"pixellab.update_object_tags\"\n ]\n },\n {\n \"service\": \"placekey\",\n \"displayName\": \"Placekey\",\n \"categories\": [\n \"Location\",\n \"Data\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.placekey.io\",\n \"actionCount\": 4,\n \"actions\": [\n \"placekey.get_geocode_from_address\",\n \"placekey.get_placekey\",\n \"placekey.get_placekey_from_address\",\n \"placekey.get_placekeys_bulk\"\n ]\n },\n {\n \"service\": \"placid\",\n \"displayName\": \"Placid\",\n \"categories\": [\n \"Design & Media\",\n \"Developer Tools\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://placid.app\",\n \"actionCount\": 5,\n \"actions\": [\n \"placid.create_image\",\n \"placid.delete_image\",\n \"placid.get_image\",\n \"placid.get_template\",\n \"placid.list_templates\"\n ]\n },\n {\n \"service\": \"plain\",\n \"displayName\": \"Plain\",\n \"categories\": [\n \"Communication\",\n \"Productivity\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.plain.com\",\n \"actionCount\": 4,\n \"actions\": [\n \"plain.get_customer_by_email\",\n \"plain.get_customer_by_external_id\",\n \"plain.search_customers\",\n \"plain.upsert_customer\"\n ]\n },\n {\n \"service\": \"plane\",\n \"displayName\": \"Plane\",\n \"categories\": [\n \"Productivity\",\n \"Developer Tools\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://plane.so\",\n \"actionCount\": 11,\n \"actions\": [\n \"plane.create_work_item\",\n \"plane.delete_work_item\",\n \"plane.get_current_user\",\n \"plane.get_project\",\n \"plane.get_work_item\",\n \"plane.list_labels\",\n \"plane.list_project_members\",\n \"plane.list_projects\",\n \"plane.list_states\",\n \"plane.list_work_items\",\n \"plane.update_work_item\"\n ]\n },\n {\n \"service\": \"plasmic\",\n \"displayName\": \"Plasmic\",\n \"categories\": [\n \"Design & Media\",\n \"Developer Tools\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.plasmic.app\",\n \"actionCount\": 2,\n \"actions\": [\n \"plasmic.count_items\",\n \"plasmic.list_items\"\n ]\n },\n {\n \"service\": \"platerecognizer\",\n \"displayName\": \"Plate Recognizer\",\n \"categories\": [\n \"AI\",\n \"Security\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://platerecognizer.com\",\n \"actionCount\": 2,\n \"actions\": [\n \"platerecognizer.get_statistics\",\n \"platerecognizer.read_number_plates\"\n ]\n },\n {\n \"service\": \"plausible_analytics\",\n \"displayName\": \"Plausible Analytics\",\n \"categories\": [\n \"Data\",\n \"Marketing\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://plausible.io\",\n \"actionCount\": 4,\n \"actions\": [\n \"plausible_analytics.get_breakdown_stats\",\n \"plausible_analytics.get_timeseries_stats\",\n \"plausible_analytics.query_stats\",\n \"plausible_analytics.record_event\"\n ]\n },\n {\n \"service\": \"plisio\",\n \"displayName\": \"Plisio\",\n \"categories\": [\n \"Finance\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://plisio.net\",\n \"actionCount\": 4,\n \"actions\": [\n \"plisio.create_invoice\",\n \"plisio.get_balance\",\n \"plisio.get_operation\",\n \"plisio.list_operations\"\n ]\n },\n {\n \"service\": \"plunk\",\n \"displayName\": \"Plunk\",\n \"categories\": [\n \"Communication\",\n \"Marketing\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.useplunk.com\",\n \"actionCount\": 8,\n \"actions\": [\n \"plunk.create_contact\",\n \"plunk.delete_contact\",\n \"plunk.get_contact\",\n \"plunk.list_contacts\",\n \"plunk.send_email\",\n \"plunk.track_event\",\n \"plunk.update_contact\",\n \"plunk.verify_email\"\n ]\n },\n {\n \"service\": \"podscribe\",\n \"displayName\": \"Podscribe\",\n \"categories\": [\n \"Marketing\",\n \"Data\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://podscribe.com\",\n \"actionCount\": 3,\n \"actions\": [\n \"podscribe.get_integration_health\",\n \"podscribe.get_show_info\",\n \"podscribe.search_episodes\"\n ]\n },\n {\n \"service\": \"polar\",\n \"displayName\": \"Polar\",\n \"categories\": [\n \"Finance\",\n \"Developer Tools\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://polar.sh\",\n \"actionCount\": 13,\n \"actions\": [\n \"polar.get_customer\",\n \"polar.get_customer_by_external_id\",\n \"polar.get_customer_state\",\n \"polar.get_customer_state_by_external_id\",\n \"polar.get_order\",\n \"polar.get_organization\",\n \"polar.get_product\",\n \"polar.get_subscription\",\n \"polar.list_customers\",\n \"polar.list_orders\",\n \"polar.list_organizations\",\n \"polar.list_products\",\n \"polar.list_subscriptions\"\n ]\n },\n {\n \"service\": \"polygon_io\",\n \"displayName\": \"Massive (Polygon.io)\",\n \"categories\": [\n \"Finance\",\n \"Data\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://massive.com/\",\n \"actionCount\": 7,\n \"actions\": [\n \"polygon_io.get_aggregate_bars\",\n \"polygon_io.get_market_status\",\n \"polygon_io.get_previous_day_bar\",\n \"polygon_io.get_ticker_details\",\n \"polygon_io.list_exchanges\",\n \"polygon_io.list_ticker_types\",\n \"polygon_io.list_tickers\"\n ]\n },\n {\n \"service\": \"positionstack\",\n \"displayName\": \"Positionstack\",\n \"categories\": [\n \"Location\",\n \"Data\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://positionstack.com\",\n \"actionCount\": 2,\n \"actions\": [\n \"positionstack.forward_geocode\",\n \"positionstack.reverse_geocode\"\n ]\n },\n {\n \"service\": \"postgrid\",\n \"displayName\": \"PostGrid\",\n \"categories\": [\n \"Communication\",\n \"Marketing\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.postgrid.com\",\n \"actionCount\": 9,\n \"actions\": [\n \"postgrid.create_contact\",\n \"postgrid.create_template\",\n \"postgrid.delete_contact\",\n \"postgrid.delete_template\",\n \"postgrid.get_contact\",\n \"postgrid.get_template\",\n \"postgrid.list_contacts\",\n \"postgrid.list_templates\",\n \"postgrid.update_template\"\n ]\n },\n {\n \"service\": \"postgrid_verify\",\n \"displayName\": \"PostGrid Verify\",\n \"categories\": [\n \"Location\",\n \"Data\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.postgrid.com/address-verification/\",\n \"actionCount\": 4,\n \"actions\": [\n \"postgrid_verify.autocomplete_address\",\n \"postgrid_verify.lookup_city_state_from_postal\",\n \"postgrid_verify.parse_address\",\n \"postgrid_verify.verify_address\"\n ]\n },\n {\n \"service\": \"posthog\",\n \"displayName\": \"PostHog\",\n \"categories\": [\n \"Data\",\n \"Developer Tools\"\n ],\n \"authTypes\": [\n \"oauth2\",\n \"api_key\"\n ],\n \"homepageUrl\": \"https://posthog.com\",\n \"actionCount\": 57,\n \"actions\": [\n \"posthog.add_dashboard_collaborator\",\n \"posthog.add_persons_to_static_cohort\",\n \"posthog.bulk_update_event_definition_tags\",\n \"posthog.bulk_update_property_definition_tags\",\n \"posthog.cancel_query\",\n \"posthog.copy_dashboard_tile\",\n \"posthog.create_annotation\",\n \"posthog.create_cohort\",\n \"posthog.create_dashboard\",\n \"posthog.create_event_definition\",\n \"posthog.create_feature_flag\",\n \"posthog.create_insight\",\n \"posthog.delete_annotation\",\n \"posthog.delete_cohort\",\n \"posthog.delete_dashboard\",\n \"posthog.delete_event_definition\",\n \"posthog.delete_feature_flag\",\n \"posthog.delete_insight\",\n \"posthog.delete_property_definition\",\n \"posthog.get_annotation\",\n \"posthog.get_async_query_status\",\n \"posthog.get_cohort\",\n \"posthog.get_cohort_calculation_history\",\n \"posthog.get_cohort_persons\",\n \"posthog.get_current_user\",\n \"posthog.get_dashboard\",\n \"posthog.get_event_definition\",\n \"posthog.get_event_definition_by_name\",\n \"posthog.get_event_definition_primary_properties\",\n \"posthog.get_feature_flag\",\n \"posthog.get_feature_flag_dependent_flags\",\n \"posthog.get_feature_flag_status\",\n \"posthog.get_feature_flags_local_evaluation\",\n \"posthog.get_insight\",\n \"posthog.get_project\",\n \"posthog.get_property_definition\",\n \"posthog.list_annotations\",\n \"posthog.list_cohorts\",\n \"posthog.list_dashboard_collaborators\",\n \"posthog.list_dashboards\",\n \"posthog.list_event_definitions\",\n \"posthog.list_feature_flags\",\n \"posthog.list_insights\",\n \"posthog.list_projects\",\n \"posthog.list_property_definitions\",\n \"posthog.move_dashboard_tile\",\n \"posthog.remove_dashboard_collaborator\",\n \"posthog.reorder_dashboard_tiles\",\n \"posthog.run_dashboard_insights\",\n \"posthog.run_query\",\n \"posthog.update_annotation\",\n \"posthog.update_cohort\",\n \"posthog.update_dashboard\",\n \"posthog.update_event_definition\",\n \"posthog.update_feature_flag\",\n \"posthog.update_insight\",\n \"posthog.update_property_definition\"\n ]\n },\n {\n \"service\": \"postman\",\n \"displayName\": \"Postman\",\n \"categories\": [\n \"Developer Tools\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.postman.com\",\n \"actionCount\": 135,\n \"actions\": [\n \"postman.create_a_collection\",\n \"postman.create_a_collection_comment\",\n \"postman.create_a_collection_from_a_schema\",\n \"postman.create_a_folder\",\n \"postman.create_a_folder_comment\",\n \"postman.create_a_fork2\",\n \"postman.create_a_mock_server\",\n \"postman.create_a_monitor\",\n \"postman.create_a_pull_request\",\n \"postman.create_a_request\",\n \"postman.create_a_request_comment\",\n \"postman.create_a_response\",\n \"postman.create_a_response_comment\",\n \"postman.create_a_schema\",\n \"postman.create_a_server_response\",\n \"postman.create_a_spec\",\n \"postman.create_a_spec_file\",\n \"postman.create_a_webhook\",\n \"postman.create_a_workspace\",\n \"postman.create_an_api\",\n \"postman.create_an_environment\",\n \"postman.create_or_update_a_schema_file\",\n \"postman.create_relations\",\n \"postman.delete_a_collection\",\n \"postman.delete_a_collections_comment\",\n \"postman.delete_a_folder\",\n \"postman.delete_a_folders_comment\",\n \"postman.delete_a_requests_comment\",\n \"postman.delete_a_response\",\n \"postman.delete_a_responses_comment\",\n \"postman.delete_a_schema_file\",\n \"postman.delete_a_server_response\",\n \"postman.delete_a_spec\",\n \"postman.delete_a_spec_file\",\n \"postman.delete_a_workspace\",\n \"postman.delete_an_api\",\n \"postman.delete_an_apis_comment\",\n \"postman.delete_an_environment\",\n \"postman.delete_monitor\",\n \"postman.duplicate_a_collection\",\n \"postman.fork_collection\",\n \"postman.generate_a_collection_from_spec\",\n \"postman.generate_spec_from_collection\",\n \"postman.get_a_collections_comments\",\n \"postman.get_a_collections_forks\",\n \"postman.get_a_collections_pull_requests\",\n \"postman.get_a_collections_roles\",\n \"postman.get_a_folder\",\n \"postman.get_a_folders_comments\",\n \"postman.get_a_monitor\",\n \"postman.get_a_request\",\n \"postman.get_a_requests_comments\",\n \"postman.get_a_response\",\n \"postman.get_a_responses_comments\",\n \"postman.get_a_schema\",\n \"postman.get_a_spec\",\n \"postman.get_a_spec_file\",\n \"postman.get_a_specs_definition\",\n \"postman.get_a_specs_files\",\n \"postman.get_a_specs_generated_collections\",\n \"postman.get_a_team_user\",\n \"postman.get_a_workspace\",\n \"postman.get_a_workspaces_activity_feed\",\n \"postman.get_a_workspaces_roles\",\n \"postman.get_accounts\",\n \"postman.get_all_api_releases\",\n \"postman.get_all_apis\",\n \"postman.get_all_collections2\",\n \"postman.get_all_environments\",\n \"postman.get_all_forked_collections\",\n \"postman.get_all_groups\",\n \"postman.get_all_linked_relations\",\n \"postman.get_all_mock_servers\",\n \"postman.get_all_monitors\",\n \"postman.get_all_specs\",\n \"postman.get_all_team_users\",\n \"postman.get_all_test_relations\",\n \"postman.get_all_versions\",\n \"postman.get_all_workspaces\",\n \"postman.get_an_api\",\n \"postman.get_an_api_version\",\n \"postman.get_an_apis_comments\",\n \"postman.get_an_environment\",\n \"postman.get_an_environments_forks\",\n \"postman.get_async_collection_update_status\",\n \"postman.get_authenticated_user\",\n \"postman.get_collection_access_keys\",\n \"postman.get_contract_test_relations\",\n \"postman.get_documentation_relations\",\n \"postman.get_duplication_task_status\",\n \"postman.get_environment_relations\",\n \"postman.get_generated_spec\",\n \"postman.get_global_variables\",\n \"postman.get_integration_test_relations\",\n \"postman.get_resource_types\",\n \"postman.get_schema_file_contents\",\n \"postman.get_schema_files\",\n \"postman.get_service_provider_configuration\",\n \"postman.get_source_collections_status\",\n \"postman.get_test_suite_relations\",\n \"postman.get_unclassified_relations\",\n \"postman.import_openapi\",\n \"postman.list_account_invoices\",\n \"postman.merge_a_fork\",\n \"postman.merge_a_fork2\",\n \"postman.publish_a_mock_server\",\n \"postman.pull_source_changes2\",\n \"postman.replace_an_environments_data\",\n \"postman.replace_collections_data_asynchronously\",\n \"postman.resolve_a_comment_thread\",\n \"postman.review_a_pull_request\",\n \"postman.run_a_monitor\",\n \"postman.sync_collection_with_schema\",\n \"postman.sync_collection_with_spec\",\n \"postman.sync_spec_with_collection\",\n \"postman.transfer_folders\",\n \"postman.transform_collection_to_openapi\",\n \"postman.update_a_folder\",\n \"postman.update_a_folders_comment\",\n \"postman.update_a_mock_server\",\n \"postman.update_a_monitor\",\n \"postman.update_a_pull_request\",\n \"postman.update_a_request\",\n \"postman.update_a_requests_comment\",\n \"postman.update_a_response\",\n \"postman.update_a_responses_comment\",\n \"postman.update_a_server_response\",\n \"postman.update_a_spec_file\",\n \"postman.update_a_specs_properties\",\n \"postman.update_a_workspace\",\n \"postman.update_an_api\",\n \"postman.update_an_apis_comment\",\n \"postman.update_an_environment\",\n \"postman.update_global_variables\",\n \"postman.update_part_of_a_collection\"\n ]\n },\n {\n \"service\": \"postmark\",\n \"displayName\": \"Postmark\",\n \"categories\": [\n \"Communication\",\n \"Marketing\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://postmarkapp.com\",\n \"actionCount\": 12,\n \"actions\": [\n \"postmark.create_template\",\n \"postmark.edit_template\",\n \"postmark.get_bounces\",\n \"postmark.get_outbound_message_details\",\n \"postmark.get_server\",\n \"postmark.get_template\",\n \"postmark.list_templates\",\n \"postmark.search_outbound_messages\",\n \"postmark.send_batch_with_templates\",\n \"postmark.send_email\",\n \"postmark.send_email_with_template\",\n \"postmark.validate_template\"\n ]\n },\n {\n \"service\": \"precoro\",\n \"displayName\": \"Precoro\",\n \"categories\": [\n \"Finance\",\n \"Productivity\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://precoro.com/\",\n \"actionCount\": 8,\n \"actions\": [\n \"precoro.get_item\",\n \"precoro.get_purchase_order\",\n \"precoro.get_supplier\",\n \"precoro.list_items\",\n \"precoro.list_purchase_orders\",\n \"precoro.list_suppliers\",\n \"precoro.list_users\",\n \"precoro.list_warehouses\"\n ]\n },\n {\n \"service\": \"prerender\",\n \"displayName\": \"Prerender\",\n \"categories\": [\n \"Marketing\",\n \"Developer Tools\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://prerender.io\",\n \"actionCount\": 4,\n \"actions\": [\n \"prerender.add_sitemap\",\n \"prerender.clear_cache\",\n \"prerender.get_cache_clear_status\",\n \"prerender.recache_urls\"\n ]\n },\n {\n \"service\": \"process_street\",\n \"displayName\": \"Process Street\",\n \"categories\": [\n \"Productivity\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.process.st/\",\n \"actionCount\": 10,\n \"actions\": [\n \"process_street.create_workflow_run\",\n \"process_street.get_workflow\",\n \"process_street.get_workflow_run\",\n \"process_street.list_workflow_form_fields\",\n \"process_street.list_workflow_run_form_fields\",\n \"process_street.list_workflow_runs\",\n \"process_street.list_workflow_tasks\",\n \"process_street.list_workflows\",\n \"process_street.update_workflow_run_form_fields\",\n \"process_street.update_workflow_task\"\n ]\n },\n {\n \"service\": \"productboard\",\n \"displayName\": \"Productboard\",\n \"categories\": [\n \"Productivity\",\n \"Data\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.productboard.com\",\n \"actionCount\": 13,\n \"actions\": [\n \"productboard.get_entity\",\n \"productboard.get_entity_configuration\",\n \"productboard.get_member\",\n \"productboard.get_note\",\n \"productboard.get_note_configuration\",\n \"productboard.get_team\",\n \"productboard.list_entities\",\n \"productboard.list_entity_configurations\",\n \"productboard.list_members\",\n \"productboard.list_note_configurations\",\n \"productboard.list_notes\",\n \"productboard.list_team_members\",\n \"productboard.list_teams\"\n ]\n },\n {\n \"service\": \"productive\",\n \"displayName\": \"Productive\",\n \"categories\": [\n \"Productivity\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://productive.io\",\n \"actionCount\": 8,\n \"actions\": [\n \"productive.create_task\",\n \"productive.create_time_entry\",\n \"productive.delete_time_entry\",\n \"productive.get_task\",\n \"productive.list_tasks\",\n \"productive.list_time_entries\",\n \"productive.update_task\",\n \"productive.update_time_entry\"\n ]\n },\n {\n \"service\": \"projectmanager\",\n \"displayName\": \"ProjectManager\",\n \"categories\": [\n \"Productivity\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.projectmanager.com\",\n \"actionCount\": 3,\n \"actions\": [\n \"projectmanager.get_project\",\n \"projectmanager.list_projects\",\n \"projectmanager.list_tasks\"\n ]\n },\n {\n \"service\": \"prospeo\",\n \"displayName\": \"Prospeo\",\n \"categories\": [\n \"Marketing\",\n \"Data\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://prospeo.io\",\n \"actionCount\": 6,\n \"actions\": [\n \"prospeo.enrich_company\",\n \"prospeo.enrich_person\",\n \"prospeo.get_account_information\",\n \"prospeo.search_companies\",\n \"prospeo.search_people\",\n \"prospeo.search_suggestions\"\n ]\n },\n {\n \"service\": \"proxiedmail\",\n \"displayName\": \"ProxiedMail\",\n \"categories\": [\n \"Communication\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://proxiedmail.com/\",\n \"actionCount\": 5,\n \"actions\": [\n \"proxiedmail.create_proxy_binding\",\n \"proxiedmail.get_received_email\",\n \"proxiedmail.list_proxy_bindings\",\n \"proxiedmail.list_received_email_links\",\n \"proxiedmail.update_proxy_binding\"\n ]\n },\n {\n \"service\": \"prtg_classic\",\n \"displayName\": \"PRTG Classic\",\n \"categories\": [\n \"Developer Tools\",\n \"Data\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.paessler.com/prtg\",\n \"actionCount\": 2,\n \"actions\": [\n \"prtg_classic.list_devices\",\n \"prtg_classic.list_sensors\"\n ]\n },\n {\n \"service\": \"pubmed\",\n \"displayName\": \"PubMed\",\n \"categories\": [\n \"Data\"\n ],\n \"authTypes\": [\n \"no_auth\",\n \"api_key\"\n ],\n \"homepageUrl\": \"https://pubmed.ncbi.nlm.nih.gov/\",\n \"actionCount\": 8,\n \"actions\": [\n \"pubmed.convert_article_ids\",\n \"pubmed.find_related_articles\",\n \"pubmed.get_article\",\n \"pubmed.get_article_references\",\n \"pubmed.get_articles\",\n \"pubmed.get_citing_articles\",\n \"pubmed.match_citation\",\n \"pubmed.search_articles\"\n ]\n },\n {\n \"service\": \"push_by_techulus\",\n \"displayName\": \"Push by Techulus\",\n \"categories\": [\n \"Communication\",\n \"Developer Tools\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://push.techulus.com\",\n \"actionCount\": 2,\n \"actions\": [\n \"push_by_techulus.send_group_notification\",\n \"push_by_techulus.send_notification\"\n ]\n },\n {\n \"service\": \"pushbullet\",\n \"displayName\": \"Pushbullet\",\n \"categories\": [\n \"Communication\",\n \"Productivity\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.pushbullet.com\",\n \"actionCount\": 14,\n \"actions\": [\n \"pushbullet.create_chat\",\n \"pushbullet.create_device\",\n \"pushbullet.create_push\",\n \"pushbullet.delete_all_pushes\",\n \"pushbullet.delete_chat\",\n \"pushbullet.delete_device\",\n \"pushbullet.delete_push\",\n \"pushbullet.get_current_user\",\n \"pushbullet.list_chats\",\n \"pushbullet.list_devices\",\n \"pushbullet.list_pushes\",\n \"pushbullet.update_chat\",\n \"pushbullet.update_device\",\n \"pushbullet.update_push\"\n ]\n },\n {\n \"service\": \"pushover\",\n \"displayName\": \"Pushover\",\n \"categories\": [\n \"Communication\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://pushover.net\",\n \"actionCount\": 29,\n \"actions\": [\n \"pushover.ack_delete_messages_up_to_id\",\n \"pushover.add_group_user\",\n \"pushover.add_team_user\",\n \"pushover.assign_license\",\n \"pushover.cancel_receipt_retries\",\n \"pushover.cancel_retries_by_tag\",\n \"pushover.check_license_credits\",\n \"pushover.client_login\",\n \"pushover.create_group\",\n \"pushover.disable_group_user\",\n \"pushover.enable_group_user\",\n \"pushover.fetch_client_messages\",\n \"pushover.get_app_icon_image\",\n \"pushover.get_app_limits\",\n \"pushover.get_app_token\",\n \"pushover.get_group\",\n \"pushover.get_receipt_status\",\n \"pushover.get_team_api_token\",\n \"pushover.list_groups\",\n \"pushover.listen_client_websocket\",\n \"pushover.register_client_device\",\n \"pushover.remove_group_user\",\n \"pushover.remove_team_user\",\n \"pushover.rename_group\",\n \"pushover.send_message\",\n \"pushover.store_team_api_token\",\n \"pushover.subscription_flow\",\n \"pushover.update_glances\",\n \"pushover.validate_user_or_group\"\n ]\n },\n {\n \"service\": \"pylon\",\n \"displayName\": \"Pylon\",\n \"categories\": [\n \"Communication\",\n \"Productivity\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.usepylon.com\",\n \"actionCount\": 13,\n \"actions\": [\n \"pylon.create_account\",\n \"pylon.create_contact\",\n \"pylon.create_issue\",\n \"pylon.create_issue_note\",\n \"pylon.get_account\",\n \"pylon.get_contact\",\n \"pylon.get_issue\",\n \"pylon.get_me\",\n \"pylon.list_issue_messages\",\n \"pylon.list_issues\",\n \"pylon.search_accounts\",\n \"pylon.search_contacts\",\n \"pylon.update_issue\"\n ]\n },\n {\n \"service\": \"qianfan\",\n \"displayName\": \"Baidu Qianfan\",\n \"categories\": [\n \"AI\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://qianfan.cloud.baidu.com\",\n \"actionCount\": 25,\n \"actions\": [\n \"qianfan.cancel_batch\",\n \"qianfan.cancel_video_generation_task\",\n \"qianfan.create_ai_search_completion\",\n \"qianfan.create_air_image_generation\",\n \"qianfan.create_batch\",\n \"qianfan.create_chat_completion\",\n \"qianfan.create_completion\",\n \"qianfan.create_embeddings\",\n \"qianfan.create_image_generation\",\n \"qianfan.create_response\",\n \"qianfan.create_video_generation_task\",\n \"qianfan.delete_response\",\n \"qianfan.get_batch\",\n \"qianfan.get_file_content\",\n \"qianfan.get_response\",\n \"qianfan.get_video_generation_task\",\n \"qianfan.list_batches\",\n \"qianfan.list_files\",\n \"qianfan.list_models\",\n \"qianfan.list_response_input_items\",\n \"qianfan.list_video_generation_tasks\",\n \"qianfan.rerank\",\n \"qianfan.run_paddleocr_vl\",\n \"qianfan.run_pp_structure_v3\",\n \"qianfan.upload_file\"\n ]\n },\n {\n \"service\": \"qlty\",\n \"displayName\": \"Qlty\",\n \"categories\": [\n \"Developer Tools\",\n \"Data\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://qlty.sh\",\n \"actionCount\": 8,\n \"actions\": [\n \"qlty.get_authenticated_user\",\n \"qlty.get_project\",\n \"qlty.get_project_metrics\",\n \"qlty.get_rate_limit_status\",\n \"qlty.get_workspace\",\n \"qlty.list_issues\",\n \"qlty.list_projects\",\n \"qlty.list_workspaces\"\n ]\n },\n {\n \"service\": \"qq_mail\",\n \"displayName\": \"QQ Mail\",\n \"categories\": [\n \"Communication\",\n \"Productivity\"\n ],\n \"authTypes\": [\n \"custom_credential\"\n ],\n \"homepageUrl\": \"https://mail.qq.com/\",\n \"actionCount\": 12,\n \"actions\": [\n \"qq_mail.delete_email\",\n \"qq_mail.download_attachment\",\n \"qq_mail.forward_email\",\n \"qq_mail.get_email\",\n \"qq_mail.get_folder_status\",\n \"qq_mail.list_folders\",\n \"qq_mail.mark_email_read\",\n \"qq_mail.mark_email_unread\",\n \"qq_mail.move_email\",\n \"qq_mail.reply_email\",\n \"qq_mail.search_emails\",\n \"qq_mail.send_email\"\n ]\n },\n {\n \"service\": \"quaderno\",\n \"displayName\": \"Quaderno\",\n \"categories\": [\n \"Finance\",\n \"Developer Tools\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://quaderno.io/\",\n \"actionCount\": 12,\n \"actions\": [\n \"quaderno.calculate_tax_rate\",\n \"quaderno.create_contact\",\n \"quaderno.create_product\",\n \"quaderno.delete_contact\",\n \"quaderno.delete_product\",\n \"quaderno.get_account\",\n \"quaderno.get_contact\",\n \"quaderno.get_product\",\n \"quaderno.list_contacts\",\n \"quaderno.list_products\",\n \"quaderno.update_contact\",\n \"quaderno.update_product\"\n ]\n },\n {\n \"service\": \"quentn\",\n \"displayName\": \"Quentn\",\n \"categories\": [\n \"Marketing\",\n \"Productivity\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://quentn.com\",\n \"actionCount\": 15,\n \"actions\": [\n \"quentn.create_contact\",\n \"quentn.create_term\",\n \"quentn.delete_contact\",\n \"quentn.delete_term\",\n \"quentn.find_contacts_by_email\",\n \"quentn.get_contact_by_id\",\n \"quentn.get_term\",\n \"quentn.get_user\",\n \"quentn.list_contact_terms\",\n \"quentn.list_terms\",\n \"quentn.list_users\",\n \"quentn.remove_contact_terms\",\n \"quentn.set_contact_terms\",\n \"quentn.update_contact\",\n \"quentn.update_term\"\n ]\n },\n {\n \"service\": \"quickbase\",\n \"displayName\": \"Quickbase\",\n \"categories\": [\n \"Productivity\",\n \"Data\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.quickbase.com\",\n \"actionCount\": 6,\n \"actions\": [\n \"quickbase.delete_records\",\n \"quickbase.get_app\",\n \"quickbase.get_table_fields\",\n \"quickbase.list_app_tables\",\n \"quickbase.query_records\",\n \"quickbase.upsert_records\"\n ]\n },\n {\n \"service\": \"quickchart\",\n \"displayName\": \"QuickChart\",\n \"categories\": [\n \"Developer Tools\",\n \"Design & Media\"\n ],\n \"authTypes\": [\n \"no_auth\"\n ],\n \"homepageUrl\": \"https://quickchart.io\",\n \"actionCount\": 3,\n \"actions\": [\n \"quickchart.build_chart_url\",\n \"quickchart.build_qr_url\",\n \"quickchart.create_chart_short_url\"\n ]\n },\n {\n \"service\": \"quipteams\",\n \"displayName\": \"Quipteams\",\n \"categories\": [\n \"Productivity\",\n \"Data\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.quipteams.com\",\n \"actionCount\": 11,\n \"actions\": [\n \"quipteams.get_device_action\",\n \"quipteams.get_employee\",\n \"quipteams.get_kit\",\n \"quipteams.get_product\",\n \"quipteams.get_quote\",\n \"quipteams.list_assets\",\n \"quipteams.list_device_actions\",\n \"quipteams.list_employees\",\n \"quipteams.list_kits\",\n \"quipteams.list_products\",\n \"quipteams.list_quotes\"\n ]\n },\n {\n \"service\": \"quo\",\n \"displayName\": \"Quo (OpenPhone)\",\n \"categories\": [\n \"Communication\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.quo.com\",\n \"actionCount\": 12,\n \"actions\": [\n \"quo.create_contact\",\n \"quo.delete_contact\",\n \"quo.get_contact\",\n \"quo.get_message\",\n \"quo.get_phone_number\",\n \"quo.get_user\",\n \"quo.list_contacts\",\n \"quo.list_messages\",\n \"quo.list_phone_numbers\",\n \"quo.list_users\",\n \"quo.send_text_message\",\n \"quo.update_contact\"\n ]\n },\n {\n \"service\": \"radar\",\n \"displayName\": \"Radar\",\n \"categories\": [\n \"Location\",\n \"Data\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://radar.com\",\n \"actionCount\": 5,\n \"actions\": [\n \"radar.autocomplete\",\n \"radar.forward_geocode\",\n \"radar.ip_geocode\",\n \"radar.reverse_geocode\",\n \"radar.search_places\"\n ]\n },\n {\n \"service\": \"ragie\",\n \"displayName\": \"Ragie\",\n \"categories\": [\n \"AI\",\n \"Developer Tools\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.ragie.ai\",\n \"actionCount\": 19,\n \"actions\": [\n \"ragie.create_document_from_url\",\n \"ragie.create_document_raw\",\n \"ragie.create_oauth_redirect_url\",\n \"ragie.create_partition\",\n \"ragie.delete_document\",\n \"ragie.delete_partition\",\n \"ragie.get_document\",\n \"ragie.get_document_chunks\",\n \"ragie.get_document_content\",\n \"ragie.get_document_summary\",\n \"ragie.get_partition\",\n \"ragie.list_connection_source_types\",\n \"ragie.list_connections\",\n \"ragie.list_documents\",\n \"ragie.list_partitions\",\n \"ragie.patch_document_metadata\",\n \"ragie.retrieve\",\n \"ragie.set_partition_limits\",\n \"ragie.update_partition\"\n ]\n },\n {\n \"service\": \"railway\",\n \"displayName\": \"Railway\",\n \"categories\": [\n \"Developer Tools\",\n \"Infrastructure\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://railway.com\",\n \"actionCount\": 9,\n \"actions\": [\n \"railway.deploy_service\",\n \"railway.get_deployment\",\n \"railway.get_deployment_logs\",\n \"railway.get_project\",\n \"railway.get_service_instance\",\n \"railway.list_deployments\",\n \"railway.list_projects\",\n \"railway.rollback_deployment\",\n \"railway.upsert_variable\"\n ]\n },\n {\n \"service\": \"raisely\",\n \"displayName\": \"Raisely\",\n \"categories\": [\n \"Finance\",\n \"Marketing\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://raisely.com/\",\n \"actionCount\": 8,\n \"actions\": [\n \"raisely.create_webhook\",\n \"raisely.delete_webhook\",\n \"raisely.get_campaign\",\n \"raisely.get_profile\",\n \"raisely.list_campaigns\",\n \"raisely.list_profiles\",\n \"raisely.list_webhooks\",\n \"raisely.update_webhook\"\n ]\n },\n {\n \"service\": \"rawg\",\n \"displayName\": \"RAWG\",\n \"categories\": [\n \"Data\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://rawg.io\",\n \"actionCount\": 21,\n \"actions\": [\n \"rawg.get_developer\",\n \"rawg.get_game\",\n \"rawg.get_genre\",\n \"rawg.get_platform\",\n \"rawg.get_publisher\",\n \"rawg.get_store\",\n \"rawg.get_tag\",\n \"rawg.list_developers\",\n \"rawg.list_game_additions\",\n \"rawg.list_game_movies\",\n \"rawg.list_game_reddit_posts\",\n \"rawg.list_game_screenshots\",\n \"rawg.list_game_series\",\n \"rawg.list_game_stores\",\n \"rawg.list_games\",\n \"rawg.list_genres\",\n \"rawg.list_parent_platforms\",\n \"rawg.list_platforms\",\n \"rawg.list_publishers\",\n \"rawg.list_stores\",\n \"rawg.list_tags\"\n ]\n },\n {\n \"service\": \"raygun\",\n \"displayName\": \"Raygun\",\n \"categories\": [\n \"Developer Tools\",\n \"Data\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://raygun.com\",\n \"actionCount\": 10,\n \"actions\": [\n \"raygun.create_deployment\",\n \"raygun.delete_deployment\",\n \"raygun.get_application\",\n \"raygun.get_deployment\",\n \"raygun.get_error_group\",\n \"raygun.get_latest_deployment\",\n \"raygun.list_applications\",\n \"raygun.list_deployments\",\n \"raygun.list_error_groups\",\n \"raygun.update_deployment\"\n ]\n },\n {\n \"service\": \"razorpay\",\n \"displayName\": \"Razorpay\",\n \"categories\": [\n \"Finance\",\n \"Productivity\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://razorpay.com\",\n \"actionCount\": 6,\n \"actions\": [\n \"razorpay.create_order\",\n \"razorpay.create_refund\",\n \"razorpay.get_order\",\n \"razorpay.get_payment\",\n \"razorpay.list_orders\",\n \"razorpay.list_payments\"\n ]\n },\n {\n \"service\": \"readme\",\n \"displayName\": \"ReadMe\",\n \"categories\": [\n \"Developer Tools\",\n \"Productivity\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://readme.com\",\n \"actionCount\": 33,\n \"actions\": [\n \"readme.ask_owlbot\",\n \"readme.create_category\",\n \"readme.create_changelog\",\n \"readme.create_custom_page\",\n \"readme.create_doc\",\n \"readme.create_version\",\n \"readme.delete_api_specification\",\n \"readme.delete_category\",\n \"readme.delete_changelog\",\n \"readme.delete_custom_page\",\n \"readme.delete_doc\",\n \"readme.delete_version\",\n \"readme.get_api_registry\",\n \"readme.get_category\",\n \"readme.get_changelog\",\n \"readme.get_custom_page\",\n \"readme.get_doc\",\n \"readme.get_openapi_schema\",\n \"readme.get_project\",\n \"readme.get_version\",\n \"readme.list_api_specifications\",\n \"readme.list_categories\",\n \"readme.list_category_docs\",\n \"readme.list_changelogs\",\n \"readme.list_custom_pages\",\n \"readme.list_outbound_ips\",\n \"readme.list_versions\",\n \"readme.search_docs\",\n \"readme.update_category\",\n \"readme.update_changelog\",\n \"readme.update_custom_page\",\n \"readme.update_doc\",\n \"readme.update_version\"\n ]\n },\n {\n \"service\": \"readwise\",\n \"displayName\": \"Readwise\",\n \"categories\": [\n \"Productivity\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://readwise.io\",\n \"actionCount\": 6,\n \"actions\": [\n \"readwise.create_highlights\",\n \"readwise.export_highlights\",\n \"readwise.list_books\",\n \"readwise.list_documents\",\n \"readwise.save_document\",\n \"readwise.update_document\"\n ]\n },\n {\n \"service\": \"realphonevalidation\",\n \"displayName\": \"RealPhoneValidation\",\n \"categories\": [\n \"Communication\",\n \"Data\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://realphonevalidation.com\",\n \"actionCount\": 2,\n \"actions\": [\n \"realphonevalidation.validate_phone_standard\",\n \"realphonevalidation.validate_phone_v3\"\n ]\n },\n {\n \"service\": \"rebrandly\",\n \"displayName\": \"Rebrandly\",\n \"categories\": [\n \"Marketing\",\n \"Data\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.rebrandly.com\",\n \"actionCount\": 7,\n \"actions\": [\n \"rebrandly.create_link\",\n \"rebrandly.delete_link\",\n \"rebrandly.get_account\",\n \"rebrandly.get_link\",\n \"rebrandly.list_domains\",\n \"rebrandly.list_links\",\n \"rebrandly.update_link\"\n ]\n },\n {\n \"service\": \"recallai\",\n \"displayName\": \"Recall.ai\",\n \"categories\": [\n \"Communication\",\n \"AI\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.recall.ai\",\n \"actionCount\": 5,\n \"actions\": [\n \"recallai.create_bot\",\n \"recallai.delete_bot_media\",\n \"recallai.get_bot\",\n \"recallai.list_bots\",\n \"recallai.remove_bot_from_call\"\n ]\n },\n {\n \"service\": \"recharge\",\n \"displayName\": \"Recharge\",\n \"categories\": [\n \"Finance\",\n \"Marketing\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://getrecharge.com/\",\n \"actionCount\": 10,\n \"actions\": [\n \"recharge.get_charge\",\n \"recharge.get_customer\",\n \"recharge.get_order\",\n \"recharge.get_product\",\n \"recharge.get_subscription\",\n \"recharge.list_charges\",\n \"recharge.list_customers\",\n \"recharge.list_orders\",\n \"recharge.list_products\",\n \"recharge.list_subscriptions\"\n ]\n },\n {\n \"service\": \"recruitcrm\",\n \"displayName\": \"Recruit CRM\",\n \"categories\": [\n \"Productivity\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://recruitcrm.io\",\n \"actionCount\": 8,\n \"actions\": [\n \"recruitcrm.get_candidate\",\n \"recruitcrm.get_company\",\n \"recruitcrm.get_contact\",\n \"recruitcrm.get_job\",\n \"recruitcrm.list_candidates\",\n \"recruitcrm.list_companies\",\n \"recruitcrm.list_contacts\",\n \"recruitcrm.list_jobs\"\n ]\n },\n {\n \"service\": \"recruitee\",\n \"displayName\": \"Recruitee\",\n \"categories\": [\n \"Productivity\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://recruitee.com\",\n \"actionCount\": 4,\n \"actions\": [\n \"recruitee.create_candidate\",\n \"recruitee.get_offer\",\n \"recruitee.list_offers\",\n \"recruitee.search_candidates\"\n ]\n },\n {\n \"service\": \"recruiterflow\",\n \"displayName\": \"Recruiterflow\",\n \"categories\": [\n \"Productivity\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://recruiterflow.com\",\n \"actionCount\": 6,\n \"actions\": [\n \"recruiterflow.get_candidate\",\n \"recruiterflow.get_job\",\n \"recruiterflow.get_user\",\n \"recruiterflow.list_candidates\",\n \"recruiterflow.list_jobs\",\n \"recruiterflow.list_users\"\n ]\n },\n {\n \"service\": \"recurly\",\n \"displayName\": \"Recurly\",\n \"categories\": [\n \"Finance\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://recurly.com\",\n \"actionCount\": 10,\n \"actions\": [\n \"recurly.create_account\",\n \"recurly.create_plan\",\n \"recurly.create_subscription\",\n \"recurly.get_account\",\n \"recurly.get_plan\",\n \"recurly.get_subscription\",\n \"recurly.list_accounts\",\n \"recurly.list_plans\",\n \"recurly.list_subscriptions\",\n \"recurly.update_account\"\n ]\n },\n {\n \"service\": \"redfox\",\n \"displayName\": \"RedFoxHub\",\n \"categories\": [\n \"Social\",\n \"Data\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://redfox.hk\",\n \"actionCount\": 19,\n \"actions\": [\n \"redfox.get_douyin_user\",\n \"redfox.get_douyin_work\",\n \"redfox.get_wechat_account\",\n \"redfox.get_wechat_article\",\n \"redfox.get_wechat_article_by_url\",\n \"redfox.get_xiaohongshu_user\",\n \"redfox.get_xiaohongshu_work\",\n \"redfox.list_douyin_user_works\",\n \"redfox.list_wechat_account_articles\",\n \"redfox.search_douyin_ai_creations\",\n \"redfox.search_douyin_users\",\n \"redfox.search_douyin_works\",\n \"redfox.search_tiktok_users\",\n \"redfox.search_wechat_accounts\",\n \"redfox.search_wechat_ai_creations\",\n \"redfox.search_wechat_articles\",\n \"redfox.search_xiaohongshu_ai_creations\",\n \"redfox.search_xiaohongshu_users\",\n \"redfox.search_xiaohongshu_works\"\n ]\n },\n {\n \"service\": \"reducto\",\n \"displayName\": \"Reducto\",\n \"categories\": [\n \"AI\",\n \"Productivity\",\n \"Data\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://reducto.ai\",\n \"actionCount\": 3,\n \"actions\": [\n \"reducto.extract_data\",\n \"reducto.parse_document\",\n \"reducto.split_document\"\n ]\n },\n {\n \"service\": \"refiner\",\n \"displayName\": \"Refiner\",\n \"categories\": [\n \"Marketing\",\n \"Data\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://refiner.io\",\n \"actionCount\": 12,\n \"actions\": [\n \"refiner.add_contact_to_segment\",\n \"refiner.get_account_info\",\n \"refiner.get_contact\",\n \"refiner.get_reporting\",\n \"refiner.identify_user\",\n \"refiner.list_contacts\",\n \"refiner.list_forms\",\n \"refiner.list_responses\",\n \"refiner.list_segments\",\n \"refiner.remove_contact_from_segment\",\n \"refiner.tag_response\",\n \"refiner.track_event\"\n ]\n },\n {\n \"service\": \"remove_bg\",\n \"displayName\": \"remove.bg\",\n \"categories\": [\n \"AI\",\n \"Design & Media\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.remove.bg\",\n \"actionCount\": 3,\n \"actions\": [\n \"remove_bg.get_account\",\n \"remove_bg.remove_background\",\n \"remove_bg.submit_improvement\"\n ]\n },\n {\n \"service\": \"render\",\n \"displayName\": \"Render\",\n \"categories\": [\n \"Developer Tools\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://render.com\",\n \"actionCount\": 10,\n \"actions\": [\n \"render.get_current_user\",\n \"render.get_service\",\n \"render.list_deploys\",\n \"render.list_services\",\n \"render.list_workspaces\",\n \"render.restart_service\",\n \"render.resume_service\",\n \"render.rollback_deploy\",\n \"render.suspend_service\",\n \"render.trigger_deploy\"\n ]\n },\n {\n \"service\": \"renderform\",\n \"displayName\": \"RenderForm\",\n \"categories\": [\n \"Design & Media\",\n \"Developer Tools\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://renderform.io\",\n \"actionCount\": 6,\n \"actions\": [\n \"renderform.get_template\",\n \"renderform.get_usage\",\n \"renderform.list_results\",\n \"renderform.list_templates\",\n \"renderform.render_image\",\n \"renderform.take_screenshot\"\n ]\n },\n {\n \"service\": \"rentman\",\n \"displayName\": \"Rentman\",\n \"categories\": [\n \"Productivity\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://rentman.io\",\n \"actionCount\": 8,\n \"actions\": [\n \"rentman.get_contact\",\n \"rentman.get_contact_person\",\n \"rentman.get_equipment\",\n \"rentman.get_project\",\n \"rentman.list_contact_persons\",\n \"rentman.list_contacts\",\n \"rentman.list_equipment\",\n \"rentman.list_projects\"\n ]\n },\n {\n \"service\": \"repairshopr\",\n \"displayName\": \"RepairShopr\",\n \"categories\": [\n \"Productivity\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.repairshopr.com\",\n \"actionCount\": 5,\n \"actions\": [\n \"repairshopr.get_current_user\",\n \"repairshopr.get_customer\",\n \"repairshopr.get_ticket\",\n \"repairshopr.list_customers\",\n \"repairshopr.list_tickets\"\n ]\n },\n {\n \"service\": \"replicate\",\n \"displayName\": \"Replicate\",\n \"categories\": [\n \"AI\",\n \"Developer Tools\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://replicate.com\",\n \"actionCount\": 11,\n \"actions\": [\n \"replicate.cancel_prediction\",\n \"replicate.create_prediction\",\n \"replicate.get_account\",\n \"replicate.get_collection\",\n \"replicate.get_model\",\n \"replicate.get_model_version\",\n \"replicate.get_prediction\",\n \"replicate.list_collections\",\n \"replicate.list_model_versions\",\n \"replicate.list_models\",\n \"replicate.list_predictions\"\n ]\n },\n {\n \"service\": \"reply_io\",\n \"displayName\": \"Reply.io\",\n \"categories\": [\n \"Marketing\",\n \"Communication\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://reply.io\",\n \"actionCount\": 9,\n \"actions\": [\n \"reply_io.create_contact\",\n \"reply_io.get_contact\",\n \"reply_io.get_current_user\",\n \"reply_io.get_sequence\",\n \"reply_io.list_contacts\",\n \"reply_io.list_sequences\",\n \"reply_io.pause_sequence\",\n \"reply_io.start_sequence\",\n \"reply_io.update_contact\"\n ]\n },\n {\n \"service\": \"resend\",\n \"displayName\": \"Resend\",\n \"categories\": [\n \"Communication\",\n \"Marketing\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://resend.com\",\n \"actionCount\": 1,\n \"actions\": [\n \"resend.send_email\"\n ]\n },\n {\n \"service\": \"retell_ai\",\n \"displayName\": \"Retell AI\",\n \"categories\": [\n \"AI\",\n \"Communication\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.retellai.com/\",\n \"actionCount\": 8,\n \"actions\": [\n \"retell_ai.get_call\",\n \"retell_ai.get_phone_number\",\n \"retell_ai.get_voice\",\n \"retell_ai.get_voice_agent\",\n \"retell_ai.list_calls\",\n \"retell_ai.list_phone_numbers\",\n \"retell_ai.list_voice_agents\",\n \"retell_ai.list_voices\"\n ]\n },\n {\n \"service\": \"retently\",\n \"displayName\": \"Retently\",\n \"categories\": [\n \"Marketing\",\n \"Data\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.retently.com/\",\n \"actionCount\": 9,\n \"actions\": [\n \"retently.get_account_status\",\n \"retently.get_customer\",\n \"retently.get_feedback\",\n \"retently.get_template\",\n \"retently.list_campaigns\",\n \"retently.list_customers\",\n \"retently.list_feedback\",\n \"retently.list_templates\",\n \"retently.upsert_customers\"\n ]\n },\n {\n \"service\": \"revenuecat\",\n \"displayName\": \"RevenueCat\",\n \"categories\": [\n \"Finance\",\n \"Developer Tools\",\n \"Subscriptions\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.revenuecat.com\",\n \"actionCount\": 12,\n \"actions\": [\n \"revenuecat.get_customer\",\n \"revenuecat.get_overview_metrics\",\n \"revenuecat.get_revenue_metric\",\n \"revenuecat.get_subscription\",\n \"revenuecat.list_customer_active_entitlements\",\n \"revenuecat.list_customer_subscriptions\",\n \"revenuecat.list_customers\",\n \"revenuecat.list_entitlements\",\n \"revenuecat.list_offerings\",\n \"revenuecat.list_products\",\n \"revenuecat.list_projects\",\n \"revenuecat.search_subscriptions\"\n ]\n },\n {\n \"service\": \"ringover\",\n \"displayName\": \"Ringover\",\n \"categories\": [\n \"Communication\",\n \"Productivity\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.ringover.com/\",\n \"actionCount\": 13,\n \"actions\": [\n \"ringover.get_call\",\n \"ringover.get_group\",\n \"ringover.get_ivr\",\n \"ringover.get_number\",\n \"ringover.get_tag\",\n \"ringover.get_team\",\n \"ringover.get_user\",\n \"ringover.list_calls\",\n \"ringover.list_groups\",\n \"ringover.list_ivrs\",\n \"ringover.list_numbers\",\n \"ringover.list_tags\",\n \"ringover.list_users\"\n ]\n },\n {\n \"service\": \"rippling\",\n \"displayName\": \"Rippling\",\n \"categories\": [\n \"Productivity\",\n \"Security\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.rippling.com/\",\n \"actionCount\": 4,\n \"actions\": [\n \"rippling.get_worker\",\n \"rippling.list_companies\",\n \"rippling.list_departments\",\n \"rippling.list_workers\"\n ]\n },\n {\n \"service\": \"riveter\",\n \"displayName\": \"Riveter\",\n \"categories\": [\n \"AI\",\n \"Data\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://riveterhq.com\",\n \"actionCount\": 2,\n \"actions\": [\n \"riveter.get_account\",\n \"riveter.scrape\"\n ]\n },\n {\n \"service\": \"roam\",\n \"displayName\": \"Roam HQ\",\n \"categories\": [\n \"Communication\",\n \"Productivity\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://ro.am\",\n \"actionCount\": 5,\n \"actions\": [\n \"roam.get_magicast\",\n \"roam.list_groups\",\n \"roam.list_magicasts\",\n \"roam.list_recordings\",\n \"roam.send_message\"\n ]\n },\n {\n \"service\": \"roam_scim\",\n \"displayName\": \"Roam SCIM\",\n \"categories\": [\n \"Security\",\n \"Productivity\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://ro.am\",\n \"actionCount\": 13,\n \"actions\": [\n \"roam_scim.create_group\",\n \"roam_scim.create_user\",\n \"roam_scim.delete_group\",\n \"roam_scim.delete_user\",\n \"roam_scim.get_group\",\n \"roam_scim.get_service_provider_config\",\n \"roam_scim.get_user\",\n \"roam_scim.list_groups\",\n \"roam_scim.list_users\",\n \"roam_scim.replace_group\",\n \"roam_scim.replace_user\",\n \"roam_scim.set_user_active\",\n \"roam_scim.update_group_members\"\n ]\n },\n {\n \"service\": \"roboflow\",\n \"displayName\": \"Roboflow\",\n \"categories\": [\n \"AI\",\n \"Developer Tools\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://roboflow.com/\",\n \"actionCount\": 12,\n \"actions\": [\n \"roboflow.describe_workflow_interface\",\n \"roboflow.detect_objects\",\n \"roboflow.get_execution_engine_versions\",\n \"roboflow.get_project_versions\",\n \"roboflow.get_server_info\",\n \"roboflow.get_server_metrics\",\n \"roboflow.get_version\",\n \"roboflow.get_workflow_schema\",\n \"roboflow.list_projects\",\n \"roboflow.run_saved_workflow\",\n \"roboflow.run_workflow\",\n \"roboflow.validate_workflow\"\n ]\n },\n {\n \"service\": \"rocket_chat\",\n \"displayName\": \"Rocket.Chat\",\n \"categories\": [\n \"Communication\",\n \"Productivity\"\n ],\n \"authTypes\": [\n \"custom_credential\"\n ],\n \"homepageUrl\": \"https://www.rocket.chat\",\n \"actionCount\": 8,\n \"actions\": [\n \"rocket_chat.delete_message\",\n \"rocket_chat.get_me\",\n \"rocket_chat.get_message\",\n \"rocket_chat.get_room\",\n \"rocket_chat.list_channel_messages\",\n \"rocket_chat.list_rooms\",\n \"rocket_chat.post_message\",\n \"rocket_chat.update_message\"\n ]\n },\n {\n \"service\": \"rocket_reach\",\n \"displayName\": \"RocketReach\",\n \"categories\": [\n \"Communication\",\n \"Marketing\",\n \"Data\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://rocketreach.co\",\n \"actionCount\": 10,\n \"actions\": [\n \"rocket_reach.check_person_status\",\n \"rocket_reach.get_account\",\n \"rocket_reach.get_company_funding\",\n \"rocket_reach.get_company_industries\",\n \"rocket_reach.get_company_size\",\n \"rocket_reach.lookup_company\",\n \"rocket_reach.lookup_person\",\n \"rocket_reach.lookup_person_and_company\",\n \"rocket_reach.search_companies\",\n \"rocket_reach.search_people\"\n ]\n },\n {\n \"service\": \"rocketlane\",\n \"displayName\": \"Rocketlane\",\n \"categories\": [\n \"Productivity\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.rocketlane.com\",\n \"actionCount\": 6,\n \"actions\": [\n \"rocketlane.get_project\",\n \"rocketlane.get_task\",\n \"rocketlane.get_user\",\n \"rocketlane.list_projects\",\n \"rocketlane.list_tasks\",\n \"rocketlane.list_users\"\n ]\n },\n {\n \"service\": \"rollbar\",\n \"displayName\": \"Rollbar\",\n \"categories\": [\n \"Developer Tools\",\n \"Security\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://rollbar.com\",\n \"actionCount\": 8,\n \"actions\": [\n \"rollbar.get_deploy\",\n \"rollbar.get_item\",\n \"rollbar.get_occurrence\",\n \"rollbar.get_project\",\n \"rollbar.list_deploys\",\n \"rollbar.list_environments\",\n \"rollbar.list_item_occurrences\",\n \"rollbar.list_items\"\n ]\n },\n {\n \"service\": \"rootly\",\n \"displayName\": \"Rootly\",\n \"categories\": [\n \"Developer Tools\",\n \"Productivity\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://rootly.com\",\n \"actionCount\": 5,\n \"actions\": [\n \"rootly.get_current_user\",\n \"rootly.get_incident\",\n \"rootly.list_incidents\",\n \"rootly.list_services\",\n \"rootly.list_teams\"\n ]\n },\n {\n \"service\": \"rosette_text_analytics\",\n \"displayName\": \"Rosette Text Analytics\",\n \"categories\": [\n \"AI\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.babelstreet.com/babel-street-insights\",\n \"actionCount\": 5,\n \"actions\": [\n \"rosette_text_analytics.analyze_sentiment\",\n \"rosette_text_analytics.extract_entities\",\n \"rosette_text_analytics.identify_categories\",\n \"rosette_text_analytics.identify_language\",\n \"rosette_text_analytics.identify_tokens\"\n ]\n },\n {\n \"service\": \"route4me\",\n \"displayName\": \"Route4Me\",\n \"categories\": [\n \"Location\",\n \"Productivity\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://route4me.com\",\n \"actionCount\": 3,\n \"actions\": [\n \"route4me.create_optimization\",\n \"route4me.delete_optimizations\",\n \"route4me.list_optimizations\"\n ]\n },\n {\n \"service\": \"runpod\",\n \"displayName\": \"Runpod\",\n \"categories\": [\n \"AI\",\n \"Developer Tools\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.runpod.io\",\n \"actionCount\": 7,\n \"actions\": [\n \"runpod.delete_pod\",\n \"runpod.get_pod\",\n \"runpod.list_pods\",\n \"runpod.reset_pod\",\n \"runpod.restart_pod\",\n \"runpod.start_pod\",\n \"runpod.stop_pod\"\n ]\n },\n {\n \"service\": \"runscope\",\n \"displayName\": \"Runscope\",\n \"categories\": [\n \"Developer Tools\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.blazemeter.com/api-monitoring\",\n \"actionCount\": 7,\n \"actions\": [\n \"runscope.get_account\",\n \"runscope.get_bucket\",\n \"runscope.get_test\",\n \"runscope.list_buckets\",\n \"runscope.list_environments\",\n \"runscope.list_test_results\",\n \"runscope.list_tests\"\n ]\n },\n {\n \"service\": \"saas_custom_domains\",\n \"displayName\": \"SaaS Custom Domains\",\n \"categories\": [\n \"Developer Tools\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://saascustomdomains.com\",\n \"actionCount\": 11,\n \"actions\": [\n \"saas_custom_domains.create_custom_domain\",\n \"saas_custom_domains.create_upstream\",\n \"saas_custom_domains.delete_custom_domain\",\n \"saas_custom_domains.delete_upstream\",\n \"saas_custom_domains.get_custom_domain\",\n \"saas_custom_domains.get_upstream\",\n \"saas_custom_domains.list_accounts\",\n \"saas_custom_domains.list_custom_domains\",\n \"saas_custom_domains.list_upstreams\",\n \"saas_custom_domains.purge_custom_domain_http_cache\",\n \"saas_custom_domains.verify_custom_domain_dns_records\"\n ]\n },\n {\n \"service\": \"safetyculture\",\n \"displayName\": \"SafetyCulture\",\n \"categories\": [\n \"Productivity\",\n \"Data\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://safetyculture.com\",\n \"actionCount\": 5,\n \"actions\": [\n \"safetyculture.create_action\",\n \"safetyculture.get_action\",\n \"safetyculture.get_inspection\",\n \"safetyculture.list_actions\",\n \"safetyculture.search_inspections\"\n ]\n },\n {\n \"service\": \"sage_hr\",\n \"displayName\": \"Sage HR\",\n \"categories\": [\n \"Productivity\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.sage.com/en-us/sage-business-cloud/people/\",\n \"actionCount\": 8,\n \"actions\": [\n \"sage_hr.get_employee\",\n \"sage_hr.get_terminated_employee\",\n \"sage_hr.list_employees\",\n \"sage_hr.list_positions\",\n \"sage_hr.list_teams\",\n \"sage_hr.list_terminated_employees\",\n \"sage_hr.list_termination_reasons\",\n \"sage_hr.list_time_off_requests\"\n ]\n },\n {\n \"service\": \"sage_sales_management\",\n \"displayName\": \"Sage Sales Management\",\n \"categories\": [\n \"Marketing\"\n ],\n \"authTypes\": [\n \"custom_credential\"\n ],\n \"homepageUrl\": \"https://www.forcemanager.com/\",\n \"actionCount\": 18,\n \"actions\": [\n \"sage_sales_management.create_account\",\n \"sage_sales_management.create_contact\",\n \"sage_sales_management.create_opportunity\",\n \"sage_sales_management.delete_account\",\n \"sage_sales_management.delete_contact\",\n \"sage_sales_management.delete_opportunity\",\n \"sage_sales_management.get_account\",\n \"sage_sales_management.get_accounts_schema\",\n \"sage_sales_management.get_contact\",\n \"sage_sales_management.get_contacts_schema\",\n \"sage_sales_management.get_opportunities_schema\",\n \"sage_sales_management.get_opportunity\",\n \"sage_sales_management.list_accounts\",\n \"sage_sales_management.list_contacts\",\n \"sage_sales_management.list_opportunities\",\n \"sage_sales_management.update_account\",\n \"sage_sales_management.update_contact\",\n \"sage_sales_management.update_opportunity\"\n ]\n },\n {\n \"service\": \"salesflare\",\n \"displayName\": \"Salesflare\",\n \"categories\": [\n \"Productivity\",\n \"Marketing\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://salesflare.com\",\n \"actionCount\": 16,\n \"actions\": [\n \"salesflare.create_account\",\n \"salesflare.create_contact\",\n \"salesflare.create_opportunity\",\n \"salesflare.create_task\",\n \"salesflare.get_account\",\n \"salesflare.get_contact\",\n \"salesflare.get_current_user\",\n \"salesflare.get_opportunity\",\n \"salesflare.list_accounts\",\n \"salesflare.list_contacts\",\n \"salesflare.list_opportunities\",\n \"salesflare.list_tasks\",\n \"salesflare.update_account\",\n \"salesflare.update_contact\",\n \"salesflare.update_opportunity\",\n \"salesflare.update_task\"\n ]\n },\n {\n \"service\": \"salesmate\",\n \"displayName\": \"Salesmate\",\n \"categories\": [\n \"Marketing\",\n \"Communication\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.salesmate.io\",\n \"actionCount\": 6,\n \"actions\": [\n \"salesmate.create_company\",\n \"salesmate.create_product\",\n \"salesmate.delete_product\",\n \"salesmate.get_active_users\",\n \"salesmate.get_company\",\n \"salesmate.list_modules\"\n ]\n },\n {\n \"service\": \"satismeter\",\n \"displayName\": \"SatisMeter\",\n \"categories\": [\n \"Marketing\",\n \"Data\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://satismeter.com\",\n \"actionCount\": 6,\n \"actions\": [\n \"satismeter.get_project\",\n \"satismeter.get_survey\",\n \"satismeter.get_survey_statistics\",\n \"satismeter.list_project_responses\",\n \"satismeter.list_survey_responses\",\n \"satismeter.list_surveys\"\n ]\n },\n {\n \"service\": \"scopus\",\n \"displayName\": \"Scopus\",\n \"categories\": [\n \"Data\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.scopus.com/\",\n \"actionCount\": 7,\n \"actions\": [\n \"scopus.get_abstract\",\n \"scopus.get_affiliation\",\n \"scopus.get_author\",\n \"scopus.search_affiliations\",\n \"scopus.search_authors\",\n \"scopus.search_documents\",\n \"scopus.search_sources\"\n ]\n },\n {\n \"service\": \"scrape_do\",\n \"displayName\": \"Scrape.do\",\n \"categories\": [\n \"Developer Tools\",\n \"Data\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://scrape.do\",\n \"actionCount\": 4,\n \"actions\": [\n \"scrape_do.fetch_html\",\n \"scrape_do.fetch_json\",\n \"scrape_do.get_account_info\",\n \"scrape_do.take_screenshot\"\n ]\n },\n {\n \"service\": \"scrape_graph_ai\",\n \"displayName\": \"ScrapeGraphAI\",\n \"categories\": [\n \"AI\",\n \"Data\",\n \"Developer Tools\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://scrapegraphai.com\",\n \"actionCount\": 6,\n \"actions\": [\n \"scrape_graph_ai.extract\",\n \"scrape_graph_ai.get_credits\",\n \"scrape_graph_ai.get_history\",\n \"scrape_graph_ai.list_history\",\n \"scrape_graph_ai.scrape\",\n \"scrape_graph_ai.search\"\n ]\n },\n {\n \"service\": \"scraperapi\",\n \"displayName\": \"ScraperAPI\",\n \"categories\": [\n \"Developer Tools\",\n \"Data\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.scraperapi.com\",\n \"actionCount\": 3,\n \"actions\": [\n \"scraperapi.get_account_usage\",\n \"scraperapi.scrape_url\",\n \"scraperapi.submit_url\"\n ]\n },\n {\n \"service\": \"scrapfly\",\n \"displayName\": \"Scrapfly\",\n \"categories\": [\n \"Developer Tools\",\n \"Data\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://scrapfly.io/\",\n \"actionCount\": 2,\n \"actions\": [\n \"scrapfly.get_monitoring_metrics\",\n \"scrapfly.scrape\"\n ]\n },\n {\n \"service\": \"scrapingant\",\n \"displayName\": \"ScrapingAnt\",\n \"categories\": [\n \"AI\",\n \"Data\",\n \"Developer Tools\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://scrapingant.com\",\n \"actionCount\": 4,\n \"actions\": [\n \"scrapingant.extract_content_as_markdown\",\n \"scrapingant.extract_data_with_ai\",\n \"scrapingant.get_api_credits_usage\",\n \"scrapingant.scrape_with_extended_json_output\"\n ]\n },\n {\n \"service\": \"scrapingbee\",\n \"displayName\": \"ScrapingBee\",\n \"categories\": [\n \"Developer Tools\",\n \"Data\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.scrapingbee.com\",\n \"actionCount\": 3,\n \"actions\": [\n \"scrapingbee.extract_data\",\n \"scrapingbee.fetch_html\",\n \"scrapingbee.get_usage_stats\"\n ]\n },\n {\n \"service\": \"scrapingdog\",\n \"displayName\": \"Scrapingdog\",\n \"categories\": [\n \"Developer Tools\",\n \"Data\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.scrapingdog.com\",\n \"actionCount\": 6,\n \"actions\": [\n \"scrapingdog.fetch_html\",\n \"scrapingdog.get_account_usage\",\n \"scrapingdog.google_maps_place\",\n \"scrapingdog.google_maps_search\",\n \"scrapingdog.google_scholar_search\",\n \"scrapingdog.google_search\"\n ]\n },\n {\n \"service\": \"screenshot_fyi\",\n \"displayName\": \"screenshot.fyi\",\n \"categories\": [\n \"Developer Tools\",\n \"Design & Media\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.screenshot.fyi\",\n \"actionCount\": 1,\n \"actions\": [\n \"screenshot_fyi.take_screenshot\"\n ]\n },\n {\n \"service\": \"screenshotone\",\n \"displayName\": \"ScreenshotOne\",\n \"categories\": [\n \"Developer Tools\",\n \"Design & Media\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://screenshotone.com\",\n \"actionCount\": 5,\n \"actions\": [\n \"screenshotone.get_usage\",\n \"screenshotone.list_devices\",\n \"screenshotone.take_animated_screenshot\",\n \"screenshotone.take_bulk_screenshots\",\n \"screenshotone.take_screenshot\"\n ]\n },\n {\n \"service\": \"search_api\",\n \"displayName\": \"SearchApi\",\n \"categories\": [\n \"Data\",\n \"Location\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.searchapi.io\",\n \"actionCount\": 5,\n \"actions\": [\n \"search_api.get_account_info\",\n \"search_api.get_cached_search_html\",\n \"search_api.get_cached_search_json\",\n \"search_api.get_locations\",\n \"search_api.search\"\n ]\n },\n {\n \"service\": \"securitytrails\",\n \"displayName\": \"SecurityTrails\",\n \"categories\": [\n \"Security\",\n \"Data\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://securitytrails.com\",\n \"actionCount\": 4,\n \"actions\": [\n \"securitytrails.find_associated_domains\",\n \"securitytrails.get_domain\",\n \"securitytrails.get_domain_ssl\",\n \"securitytrails.get_subdomains\"\n ]\n },\n {\n \"service\": \"segment\",\n \"displayName\": \"Segment\",\n \"categories\": [\n \"Data\",\n \"Marketing\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://segment.com\",\n \"actionCount\": 7,\n \"actions\": [\n \"segment.alias\",\n \"segment.batch\",\n \"segment.group\",\n \"segment.identify\",\n \"segment.page\",\n \"segment.screen\",\n \"segment.track\"\n ]\n },\n {\n \"service\": \"semantic_scholar\",\n \"displayName\": \"Semantic Scholar\",\n \"categories\": [\n \"AI\",\n \"Data\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.semanticscholar.org/\",\n \"actionCount\": 16,\n \"actions\": [\n \"semantic_scholar.autocomplete_papers\",\n \"semantic_scholar.bulk_search_papers\",\n \"semantic_scholar.get_author\",\n \"semantic_scholar.get_author_papers\",\n \"semantic_scholar.get_authors\",\n \"semantic_scholar.get_paper\",\n \"semantic_scholar.get_paper_authors\",\n \"semantic_scholar.get_paper_citations\",\n \"semantic_scholar.get_paper_references\",\n \"semantic_scholar.get_papers\",\n \"semantic_scholar.match_paper_title\",\n \"semantic_scholar.recommend_for_paper\",\n \"semantic_scholar.recommend_papers\",\n \"semantic_scholar.search_authors\",\n \"semantic_scholar.search_papers\",\n \"semantic_scholar.search_snippets\"\n ]\n },\n {\n \"service\": \"semrush\",\n \"displayName\": \"Semrush\",\n \"categories\": [\n \"Marketing\",\n \"Data\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.semrush.com/\",\n \"actionCount\": 3,\n \"actions\": [\n \"semrush.get_domain_overview\",\n \"semrush.list_domain_organic_keywords\",\n \"semrush.list_organic_competitors\"\n ]\n },\n {\n \"service\": \"sendbird\",\n \"displayName\": \"Sendbird\",\n \"categories\": [\n \"Communication\",\n \"Developer Tools\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://sendbird.com\",\n \"actionCount\": 28,\n \"actions\": [\n \"sendbird.add_members_group_channel\",\n \"sendbird.ban_user_from_group_channel\",\n \"sendbird.create_channel\",\n \"sendbird.create_user\",\n \"sendbird.delete_channel\",\n \"sendbird.delete_message\",\n \"sendbird.delete_user\",\n \"sendbird.get_number_of_channels_by_join_status\",\n \"sendbird.get_number_of_unread_items\",\n \"sendbird.issue_session_token\",\n \"sendbird.leave_group_channels\",\n \"sendbird.list_banned_members\",\n \"sendbird.list_group_channel_messages\",\n \"sendbird.list_group_channels\",\n \"sendbird.list_members_group_channel\",\n \"sendbird.list_users\",\n \"sendbird.mark_all_user_messages_as_read\",\n \"sendbird.mute_user\",\n \"sendbird.revoke_all_session_tokens\",\n \"sendbird.send_message\",\n \"sendbird.unban_user\",\n \"sendbird.unmute_user\",\n \"sendbird.update_group_channel\",\n \"sendbird.update_message\",\n \"sendbird.update_user\",\n \"sendbird.view_group_channel\",\n \"sendbird.view_message\",\n \"sendbird.view_user\"\n ]\n },\n {\n \"service\": \"sender\",\n \"displayName\": \"Sender\",\n \"categories\": [\n \"Marketing\",\n \"Communication\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.sender.net\",\n \"actionCount\": 14,\n \"actions\": [\n \"sender.add_subscribers_to_group\",\n \"sender.create_field\",\n \"sender.create_subscriber\",\n \"sender.get_campaign\",\n \"sender.get_group\",\n \"sender.get_subscriber\",\n \"sender.get_workflow\",\n \"sender.list_campaigns\",\n \"sender.list_fields\",\n \"sender.list_groups\",\n \"sender.list_subscribers\",\n \"sender.list_workflows\",\n \"sender.remove_subscribers_from_group\",\n \"sender.update_subscriber\"\n ]\n },\n {\n \"service\": \"sendfox\",\n \"displayName\": \"SendFox\",\n \"categories\": [\n \"Communication\",\n \"Marketing\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://sendfox.com\",\n \"actionCount\": 14,\n \"actions\": [\n \"sendfox.add_contact_to_list\",\n \"sendfox.create_contact\",\n \"sendfox.create_contact_list\",\n \"sendfox.delete_contact\",\n \"sendfox.delete_contact_list\",\n \"sendfox.get_contact\",\n \"sendfox.get_contact_list\",\n \"sendfox.list_contact_lists\",\n \"sendfox.list_contacts\",\n \"sendfox.list_contacts_in_list\",\n \"sendfox.remove_contact_from_list\",\n \"sendfox.unsubscribe_contact\",\n \"sendfox.update_contact\",\n \"sendfox.update_contact_list\"\n ]\n },\n {\n \"service\": \"sendgrid\",\n \"displayName\": \"SendGrid\",\n \"categories\": [\n \"Communication\",\n \"Marketing\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://sendgrid.com\",\n \"actionCount\": 4,\n \"actions\": [\n \"sendgrid.get_account_info\",\n \"sendgrid.get_user_scopes\",\n \"sendgrid.list_transactional_templates\",\n \"sendgrid.send_email\"\n ]\n },\n {\n \"service\": \"sendmator\",\n \"displayName\": \"Sendmator\",\n \"categories\": [\n \"Communication\",\n \"Marketing\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://sendmator.com\",\n \"actionCount\": 5,\n \"actions\": [\n \"sendmator.create_contact\",\n \"sendmator.delete_contact\",\n \"sendmator.get_contact\",\n \"sendmator.list_contacts\",\n \"sendmator.update_contact\"\n ]\n },\n {\n \"service\": \"sendspark\",\n \"displayName\": \"Sendspark\",\n \"categories\": [\n \"Marketing\",\n \"Design & Media\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://sendspark.com/\",\n \"actionCount\": 5,\n \"actions\": [\n \"sendspark.add_prospect\",\n \"sendspark.create_dynamic_campaign\",\n \"sendspark.get_dynamic_campaign\",\n \"sendspark.get_prospect_by_email\",\n \"sendspark.list_dynamic_campaigns\"\n ]\n },\n {\n \"service\": \"sensibo\",\n \"displayName\": \"Sensibo\",\n \"categories\": [\n \"Productivity\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://home.sensibo.com\",\n \"actionCount\": 4,\n \"actions\": [\n \"sensibo.get_ac_states\",\n \"sensibo.get_device\",\n \"sensibo.list_devices\",\n \"sensibo.set_ac_state\"\n ]\n },\n {\n \"service\": \"sentry\",\n \"displayName\": \"Sentry\",\n \"categories\": [\n \"Developer Tools\",\n \"Security\"\n ],\n \"authTypes\": [\n \"oauth2\"\n ],\n \"homepageUrl\": \"https://sentry.io\",\n \"actionCount\": 19,\n \"actions\": [\n \"sentry.get_alert\",\n \"sentry.get_issue\",\n \"sentry.get_issue_event\",\n \"sentry.get_organization_integration\",\n \"sentry.get_organization_integration_config\",\n \"sentry.get_organization_release\",\n \"sentry.get_project\",\n \"sentry.get_release_health_stats\",\n \"sentry.get_replay\",\n \"sentry.get_sentry_app\",\n \"sentry.list_alerts\",\n \"sentry.list_issue_events\",\n \"sentry.list_organization_integrations\",\n \"sentry.list_organization_issues\",\n \"sentry.list_organization_projects\",\n \"sentry.list_organization_releases\",\n \"sentry.list_organization_replays\",\n \"sentry.list_organization_sentry_apps\",\n \"sentry.update_issue\"\n ]\n },\n {\n \"service\": \"seqera\",\n \"displayName\": \"Seqera\",\n \"categories\": [\n \"Data\",\n \"Developer Tools\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://seqera.io\",\n \"actionCount\": 8,\n \"actions\": [\n \"seqera.get_current_user\",\n \"seqera.get_pipeline\",\n \"seqera.get_workflow\",\n \"seqera.get_workspace\",\n \"seqera.launch_workflow\",\n \"seqera.list_pipelines\",\n \"seqera.list_user_workspaces\",\n \"seqera.list_workflows\"\n ]\n },\n {\n \"service\": \"serpapi\",\n \"displayName\": \"SerpApi\",\n \"categories\": [\n \"Data\",\n \"Location\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://serpapi.com\",\n \"actionCount\": 3,\n \"actions\": [\n \"serpapi.google_maps_search\",\n \"serpapi.google_news_search\",\n \"serpapi.google_search\"\n ]\n },\n {\n \"service\": \"serpdog\",\n \"displayName\": \"Serpdog\",\n \"categories\": [\n \"Data\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://serpdog.io\",\n \"actionCount\": 5,\n \"actions\": [\n \"serpdog.get_account_info\",\n \"serpdog.google_autocomplete\",\n \"serpdog.google_news_search\",\n \"serpdog.google_search\",\n \"serpdog.google_videos_search\"\n ]\n },\n {\n \"service\": \"serphouse\",\n \"displayName\": \"SERPHouse\",\n \"categories\": [\n \"Data\",\n \"Location\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.serphouse.com\",\n \"actionCount\": 5,\n \"actions\": [\n \"serphouse.account_info\",\n \"serphouse.list_domains\",\n \"serphouse.list_languages\",\n \"serphouse.search_locations\",\n \"serphouse.search_web\"\n ]\n },\n {\n \"service\": \"serply\",\n \"displayName\": \"Serply\",\n \"categories\": [\n \"Data\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://serply.io\",\n \"actionCount\": 4,\n \"actions\": [\n \"serply.google_news_search\",\n \"serply.google_scholar_search\",\n \"serply.google_search\",\n \"serply.google_video_search\"\n ]\n },\n {\n \"service\": \"sevdesk\",\n \"displayName\": \"sevdesk\",\n \"categories\": [\n \"Finance\",\n \"Productivity\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://sevdesk.com\",\n \"actionCount\": 5,\n \"actions\": [\n \"sevdesk.create_contact\",\n \"sevdesk.delete_contact\",\n \"sevdesk.get_contact\",\n \"sevdesk.list_contacts\",\n \"sevdesk.update_contact\"\n ]\n },\n {\n \"service\": \"sheetdb\",\n \"displayName\": \"SheetDB\",\n \"categories\": [\n \"Data\",\n \"Productivity\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://sheetdb.io\",\n \"actionCount\": 8,\n \"actions\": [\n \"sheetdb.count_rows\",\n \"sheetdb.create_rows\",\n \"sheetdb.delete_rows\",\n \"sheetdb.get_document_name\",\n \"sheetdb.get_keys\",\n \"sheetdb.list_rows\",\n \"sheetdb.search_rows\",\n \"sheetdb.update_rows\"\n ]\n },\n {\n \"service\": \"ship_bob\",\n \"displayName\": \"ShipBob\",\n \"categories\": [\n \"Productivity\",\n \"Data\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.shipbob.com/\",\n \"actionCount\": 5,\n \"actions\": [\n \"ship_bob.get_inventory_level\",\n \"ship_bob.list_channels\",\n \"ship_bob.list_inventory_levels\",\n \"ship_bob.list_locations\",\n \"ship_bob.list_products\"\n ]\n },\n {\n \"service\": \"ship_station\",\n \"displayName\": \"ShipStation\",\n \"categories\": [\n \"Productivity\",\n \"Location\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.shipstation.com/\",\n \"actionCount\": 4,\n \"actions\": [\n \"ship_station.get_purchase_order\",\n \"ship_station.list_inventory_levels\",\n \"ship_station.list_inventory_warehouses\",\n \"ship_station.list_purchase_orders\"\n ]\n },\n {\n \"service\": \"shipday\",\n \"displayName\": \"Shipday\",\n \"categories\": [\n \"Productivity\",\n \"Location\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.shipday.com/\",\n \"actionCount\": 7,\n \"actions\": [\n \"shipday.create_order\",\n \"shipday.delete_order\",\n \"shipday.edit_order\",\n \"shipday.get_order\",\n \"shipday.get_order_progress\",\n \"shipday.list_active_orders\",\n \"shipday.list_carriers\"\n ]\n },\n {\n \"service\": \"shipengine\",\n \"displayName\": \"ShipEngine\",\n \"categories\": [\n \"Productivity\",\n \"Location\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.shipengine.com/\",\n \"actionCount\": 6,\n \"actions\": [\n \"shipengine.calculate_rates\",\n \"shipengine.estimate_rates\",\n \"shipengine.get_rate\",\n \"shipengine.list_carriers\",\n \"shipengine.parse_address\",\n \"shipengine.validate_addresses\"\n ]\n },\n {\n \"service\": \"shippo\",\n \"displayName\": \"Shippo\",\n \"categories\": [\n \"Productivity\",\n \"Data\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://goshippo.com\",\n \"actionCount\": 8,\n \"actions\": [\n \"shippo.create_address\",\n \"shippo.create_parcel\",\n \"shippo.get_address\",\n \"shippo.get_parcel\",\n \"shippo.get_tracking_status\",\n \"shippo.list_addresses\",\n \"shippo.list_parcels\",\n \"shippo.validate_address\"\n ]\n },\n {\n \"service\": \"shodan\",\n \"displayName\": \"Shodan\",\n \"categories\": [\n \"Security\",\n \"Data\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.shodan.io\",\n \"actionCount\": 7,\n \"actions\": [\n \"shodan.count_search_results\",\n \"shodan.get_api_info\",\n \"shodan.get_domain_info\",\n \"shodan.get_host\",\n \"shodan.resolve_hostnames\",\n \"shodan.reverse_dns_lookup\",\n \"shodan.search_hosts\"\n ]\n },\n {\n \"service\": \"shopify\",\n \"displayName\": \"Shopify REST Admin\",\n \"categories\": [\n \"Marketing\",\n \"Data\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.shopify.com\",\n \"actionCount\": 11,\n \"actions\": [\n \"shopify.count_articles\",\n \"shopify.count_blogs\",\n \"shopify.count_pages\",\n \"shopify.get_article\",\n \"shopify.get_blog\",\n \"shopify.get_page\",\n \"shopify.get_shop\",\n \"shopify.list_article_tags\",\n \"shopify.list_articles\",\n \"shopify.list_blogs\",\n \"shopify.list_pages\"\n ]\n },\n {\n \"service\": \"shopify_admin\",\n \"displayName\": \"Shopify Admin\",\n \"categories\": [\n \"Marketing\",\n \"Data\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.shopify.com\",\n \"actionCount\": 15,\n \"actions\": [\n \"shopify_admin.execute_graphql\",\n \"shopify_admin.get_collection\",\n \"shopify_admin.get_customer\",\n \"shopify_admin.get_inventory_item\",\n \"shopify_admin.get_location\",\n \"shopify_admin.get_order\",\n \"shopify_admin.get_product\",\n \"shopify_admin.get_shop\",\n \"shopify_admin.list_collections\",\n \"shopify_admin.list_customers\",\n \"shopify_admin.list_inventory_items\",\n \"shopify_admin.list_locations\",\n \"shopify_admin.list_orders\",\n \"shopify_admin.list_product_variants\",\n \"shopify_admin.list_products\"\n ]\n },\n {\n \"service\": \"shopify_partner\",\n \"displayName\": \"Shopify Partner\",\n \"categories\": [\n \"Marketing\",\n \"Data\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.shopify.com/partners\",\n \"actionCount\": 5,\n \"actions\": [\n \"shopify_partner.execute_graphql\",\n \"shopify_partner.get_app\",\n \"shopify_partner.list_app_events\",\n \"shopify_partner.list_partner_events\",\n \"shopify_partner.list_transactions\"\n ]\n },\n {\n \"service\": \"shopify_storefront\",\n \"displayName\": \"Shopify Storefront\",\n \"categories\": [\n \"Marketing\",\n \"Data\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.shopify.com\",\n \"actionCount\": 8,\n \"actions\": [\n \"shopify_storefront.add_cart_lines\",\n \"shopify_storefront.create_cart\",\n \"shopify_storefront.get_cart\",\n \"shopify_storefront.get_collection\",\n \"shopify_storefront.get_product\",\n \"shopify_storefront.get_shop\",\n \"shopify_storefront.list_collections\",\n \"shopify_storefront.list_products\"\n ]\n },\n {\n \"service\": \"short_io\",\n \"displayName\": \"Short.io\",\n \"categories\": [\n \"Marketing\",\n \"Data\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://short.io\",\n \"actionCount\": 8,\n \"actions\": [\n \"short_io.create_link\",\n \"short_io.delete_link\",\n \"short_io.get_domain\",\n \"short_io.get_link\",\n \"short_io.get_link_statistics\",\n \"short_io.list_domains\",\n \"short_io.list_links\",\n \"short_io.update_link\"\n ]\n },\n {\n \"service\": \"short_menu\",\n \"displayName\": \"Short Menu\",\n \"categories\": [\n \"Marketing\",\n \"Data\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://shortmenu.com\",\n \"actionCount\": 3,\n \"actions\": [\n \"short_menu.create_link\",\n \"short_menu.delete_link\",\n \"short_menu.update_link\"\n ]\n },\n {\n \"service\": \"shortcut\",\n \"displayName\": \"Shortcut\",\n \"categories\": [\n \"Productivity\",\n \"Project Management\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.shortcut.com\",\n \"actionCount\": 15,\n \"actions\": [\n \"shortcut.create_epic\",\n \"shortcut.create_story\",\n \"shortcut.get_epic\",\n \"shortcut.get_member\",\n \"shortcut.get_project\",\n \"shortcut.get_story\",\n \"shortcut.get_workflow\",\n \"shortcut.list_epics\",\n \"shortcut.list_members\",\n \"shortcut.list_projects\",\n \"shortcut.list_stories\",\n \"shortcut.list_workflows\",\n \"shortcut.search_stories\",\n \"shortcut.update_epic\",\n \"shortcut.update_story\"\n ]\n },\n {\n \"service\": \"shorten_rest\",\n \"displayName\": \"Shorten.REST\",\n \"categories\": [\n \"Marketing\",\n \"Data\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://shorten.rest\",\n \"actionCount\": 6,\n \"actions\": [\n \"shorten_rest.create_alias\",\n \"shorten_rest.delete_alias\",\n \"shorten_rest.get_alias\",\n \"shorten_rest.list_aliases\",\n \"shorten_rest.list_clicks\",\n \"shorten_rest.update_alias\"\n ]\n },\n {\n \"service\": \"shortpixel\",\n \"displayName\": \"ShortPixel\",\n \"categories\": [\n \"Media\",\n \"Developer Tools\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://shortpixel.com\",\n \"actionCount\": 6,\n \"actions\": [\n \"shortpixel.add_domain\",\n \"shortpixel.get_domain_cdn_usage\",\n \"shortpixel.purge_domain_cache\",\n \"shortpixel.purge_domain_storage\",\n \"shortpixel.revoke_domain\",\n \"shortpixel.set_domain\"\n ]\n },\n {\n \"service\": \"shotstack\",\n \"displayName\": \"Shotstack\",\n \"categories\": [\n \"Developer Tools\",\n \"Design & Media\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://shotstack.io\",\n \"actionCount\": 2,\n \"actions\": [\n \"shotstack.get_render\",\n \"shotstack.render_edit\"\n ]\n },\n {\n \"service\": \"signalbase\",\n \"displayName\": \"Signalbase\",\n \"categories\": [\n \"Data\",\n \"Marketing\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.trysignalbase.com\",\n \"actionCount\": 6,\n \"actions\": [\n \"signalbase.list_acquisition_signals\",\n \"signalbase.list_companies\",\n \"signalbase.list_funding_signals\",\n \"signalbase.list_hiring_signals\",\n \"signalbase.list_investors\",\n \"signalbase.list_job_change_signals\"\n ]\n },\n {\n \"service\": \"signpath\",\n \"displayName\": \"SignPath\",\n \"categories\": [\n \"Developer Tools\",\n \"Security\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://signpath.io/\",\n \"actionCount\": 3,\n \"actions\": [\n \"signpath.fast_sign_hash\",\n \"signpath.get_signing_request\",\n \"signpath.list_signing_policies\"\n ]\n },\n {\n \"service\": \"signwell\",\n \"displayName\": \"SignWell\",\n \"categories\": [\n \"Productivity\",\n \"Communication\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.signwell.com\",\n \"actionCount\": 6,\n \"actions\": [\n \"signwell.create_document_from_template\",\n \"signwell.get_document\",\n \"signwell.get_me\",\n \"signwell.get_template\",\n \"signwell.send_document\",\n \"signwell.send_document_reminder\"\n ]\n },\n {\n \"service\": \"similarweb_digitalrank_api\",\n \"displayName\": \"Similarweb\",\n \"categories\": [\n \"Data\",\n \"Marketing\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.similarweb.com\",\n \"actionCount\": 3,\n \"actions\": [\n \"similarweb_digitalrank_api.get_rank_tracker_describe\",\n \"similarweb_digitalrank_api.get_similar_rank_top_sites\",\n \"similarweb_digitalrank_api.get_subscription_status\"\n ]\n },\n {\n \"service\": \"simla\",\n \"displayName\": \"Simla.com\",\n \"categories\": [\n \"Marketing\",\n \"Productivity\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.simla.com/en\",\n \"actionCount\": 9,\n \"actions\": [\n \"simla.create_customer\",\n \"simla.create_order\",\n \"simla.edit_customer\",\n \"simla.edit_order\",\n \"simla.get_customer\",\n \"simla.get_order\",\n \"simla.get_order_statuses\",\n \"simla.list_customers\",\n \"simla.list_orders\"\n ]\n },\n {\n \"service\": \"simple_analytics\",\n \"displayName\": \"Simple Analytics\",\n \"categories\": [\n \"Data\",\n \"Marketing\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://simpleanalytics.com\",\n \"actionCount\": 4,\n \"actions\": [\n \"simple_analytics.export_data_points\",\n \"simple_analytics.get_aggregated_stats\",\n \"simple_analytics.list_websites\",\n \"simple_analytics.send_event\"\n ]\n },\n {\n \"service\": \"simplesat\",\n \"displayName\": \"Simplesat\",\n \"categories\": [\n \"Marketing\",\n \"Data\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.simplesat.io/\",\n \"actionCount\": 8,\n \"actions\": [\n \"simplesat.create_or_update_customer\",\n \"simplesat.get_customer\",\n \"simplesat.get_response\",\n \"simplesat.list_customers\",\n \"simplesat.list_questions\",\n \"simplesat.list_surveys\",\n \"simplesat.search_responses\",\n \"simplesat.send_survey_email\"\n ]\n },\n {\n \"service\": \"sitespeakai\",\n \"displayName\": \"SiteSpeakAI\",\n \"categories\": [\n \"AI\",\n \"Communication\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://sitespeak.ai\",\n \"actionCount\": 11,\n \"actions\": [\n \"sitespeakai.delete_updated_answer\",\n \"sitespeakai.get_chatbot\",\n \"sitespeakai.get_current_user\",\n \"sitespeakai.list_chatbots\",\n \"sitespeakai.list_conversations\",\n \"sitespeakai.list_leads\",\n \"sitespeakai.list_sources\",\n \"sitespeakai.list_suggested_messages\",\n \"sitespeakai.list_updated_answers\",\n \"sitespeakai.query_chatbot\",\n \"sitespeakai.upsert_updated_answer\"\n ]\n },\n {\n \"service\": \"skio\",\n \"displayName\": \"Skio\",\n \"categories\": [\n \"Data\",\n \"Marketing\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://skio.com\",\n \"actionCount\": 4,\n \"actions\": [\n \"skio.list_orders\",\n \"skio.list_products\",\n \"skio.list_storefront_users\",\n \"skio.list_subscriptions\"\n ]\n },\n {\n \"service\": \"skyfire\",\n \"displayName\": \"Skyfire\",\n \"categories\": [\n \"Finance\",\n \"AI\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://skyfire.xyz\",\n \"actionCount\": 4,\n \"actions\": [\n \"skyfire.create_token\",\n \"skyfire.get_all_services\",\n \"skyfire.get_service\",\n \"skyfire.get_services_by_agent\"\n ]\n },\n {\n \"service\": \"slab\",\n \"displayName\": \"Slab\",\n \"categories\": [\n \"Productivity\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://slab.com\",\n \"actionCount\": 17,\n \"actions\": [\n \"slab.add_topic_to_post\",\n \"slab.create_post\",\n \"slab.create_topic\",\n \"slab.delete_post\",\n \"slab.delete_topic\",\n \"slab.get_organization\",\n \"slab.get_post\",\n \"slab.get_posts\",\n \"slab.get_topic\",\n \"slab.get_topics\",\n \"slab.get_user\",\n \"slab.list_users\",\n \"slab.remove_topic_from_post\",\n \"slab.search\",\n \"slab.sync_post\",\n \"slab.update_post\",\n \"slab.update_topic\"\n ]\n },\n {\n \"service\": \"slack\",\n \"displayName\": \"Slack\",\n \"categories\": [\n \"Communication\",\n \"Productivity\"\n ],\n \"authTypes\": [\n \"oauth2\"\n ],\n \"homepageUrl\": \"https://slack.com\",\n \"actionCount\": 22,\n \"actions\": [\n \"slack.add_reaction\",\n \"slack.delete_file\",\n \"slack.delete_message\",\n \"slack.get_channel_messages\",\n \"slack.get_conversation\",\n \"slack.get_file\",\n \"slack.get_message_permalink\",\n \"slack.get_reactions\",\n \"slack.get_thread\",\n \"slack.get_user\",\n \"slack.list_channels\",\n \"slack.list_conversations\",\n \"slack.list_files\",\n \"slack.list_users\",\n \"slack.open_conversation\",\n \"slack.post_ephemeral_message\",\n \"slack.post_message\",\n \"slack.remove_reaction\",\n \"slack.reply_message\",\n \"slack.schedule_message\",\n \"slack.update_message\",\n \"slack.upload_file\"\n ]\n },\n {\n \"service\": \"sling\",\n \"displayName\": \"Sling\",\n \"categories\": [\n \"Productivity\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://getsling.com\",\n \"actionCount\": 14,\n \"actions\": [\n \"sling.get_current_session\",\n \"sling.get_current_shift\",\n \"sling.get_detailed_shift\",\n \"sling.get_group\",\n \"sling.get_next_shift\",\n \"sling.get_shift\",\n \"sling.get_task\",\n \"sling.get_user\",\n \"sling.list_calendar_events\",\n \"sling.list_groups\",\n \"sling.list_shift_coworkers\",\n \"sling.list_tasks\",\n \"sling.list_users\",\n \"sling.list_working_users\"\n ]\n },\n {\n \"service\": \"slite\",\n \"displayName\": \"Slite\",\n \"categories\": [\n \"Productivity\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://slite.com\",\n \"actionCount\": 8,\n \"actions\": [\n \"slite.create_note\",\n \"slite.delete_note\",\n \"slite.get_group\",\n \"slite.get_note\",\n \"slite.list_notes\",\n \"slite.search_groups\",\n \"slite.search_notes\",\n \"slite.update_note\"\n ]\n },\n {\n \"service\": \"smartlead_ai\",\n \"displayName\": \"Smartlead\",\n \"categories\": [\n \"Marketing\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.smartlead.ai\",\n \"actionCount\": 4,\n \"actions\": [\n \"smartlead_ai.get_campaign\",\n \"smartlead_ai.list_campaign_leads\",\n \"smartlead_ai.list_campaigns\",\n \"smartlead_ai.list_email_accounts\"\n ]\n },\n {\n \"service\": \"smartrecruiters\",\n \"displayName\": \"SmartRecruiters\",\n \"categories\": [\n \"Productivity\",\n \"Data\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.smartrecruiters.com/\",\n \"actionCount\": 4,\n \"actions\": [\n \"smartrecruiters.get_candidate\",\n \"smartrecruiters.get_job\",\n \"smartrecruiters.list_jobs\",\n \"smartrecruiters.search_candidates\"\n ]\n },\n {\n \"service\": \"smartsheet\",\n \"displayName\": \"Smartsheet\",\n \"categories\": [\n \"Productivity\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.smartsheet.com\",\n \"actionCount\": 5,\n \"actions\": [\n \"smartsheet.add_rows\",\n \"smartsheet.delete_rows\",\n \"smartsheet.get_sheet\",\n \"smartsheet.list_sheets\",\n \"smartsheet.update_rows\"\n ]\n },\n {\n \"service\": \"sms_alert\",\n \"displayName\": \"SMS Alert\",\n \"categories\": [\n \"Communication\",\n \"Marketing\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.smsalert.co.in/\",\n \"actionCount\": 6,\n \"actions\": [\n \"sms_alert.generate_otp\",\n \"sms_alert.get_credit_balance\",\n \"sms_alert.list_sender_ids\",\n \"sms_alert.list_templates\",\n \"sms_alert.send_sms\",\n \"sms_alert.validate_otp\"\n ]\n },\n {\n \"service\": \"smtp2go\",\n \"displayName\": \"SMTP2GO\",\n \"categories\": [\n \"Communication\",\n \"Marketing\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.smtp2go.com/\",\n \"actionCount\": 8,\n \"actions\": [\n \"smtp2go.get_email_summary\",\n \"smtp2go.get_email_template\",\n \"smtp2go.list_sender_domains\",\n \"smtp2go.list_single_sender_emails\",\n \"smtp2go.search_activity\",\n \"smtp2go.search_email_templates\",\n \"smtp2go.send_email\",\n \"smtp2go.view_api_key_permissions\"\n ]\n },\n {\n \"service\": \"smugmug\",\n \"displayName\": \"SmugMug\",\n \"categories\": [\n \"Design\",\n \"Storage\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.smugmug.com\",\n \"actionCount\": 23,\n \"actions\": [\n \"smugmug.get_album\",\n \"smugmug.get_album_highlight_image\",\n \"smugmug.get_album_image\",\n \"smugmug.get_album_images\",\n \"smugmug.get_folder_albums\",\n \"smugmug.get_folder_by_user_path\",\n \"smugmug.get_folder_details\",\n \"smugmug.get_folder_subfolders\",\n \"smugmug.get_image\",\n \"smugmug.get_image_metadata\",\n \"smugmug.get_image_size_details\",\n \"smugmug.get_image_sizes\",\n \"smugmug.get_node_highlight_image\",\n \"smugmug.get_node_parent\",\n \"smugmug.get_node_parents\",\n \"smugmug.get_user\",\n \"smugmug.get_user_bio_image\",\n \"smugmug.get_user_featured_albums\",\n \"smugmug.get_user_features\",\n \"smugmug.get_user_profile\",\n \"smugmug.get_user_root_node\",\n \"smugmug.list_child_nodes\",\n \"smugmug.search_user_content\"\n ]\n },\n {\n \"service\": \"snipe_it\",\n \"displayName\": \"Snipe-IT\",\n \"categories\": [\n \"Productivity\",\n \"Data\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://snipeitapp.com\",\n \"actionCount\": 6,\n \"actions\": [\n \"snipe_it.get_current_user\",\n \"snipe_it.list_categories\",\n \"snipe_it.list_companies\",\n \"snipe_it.list_hardware\",\n \"snipe_it.list_status_labels\",\n \"snipe_it.list_users\"\n ]\n },\n {\n \"service\": \"solcast\",\n \"displayName\": \"Solcast\",\n \"categories\": [\n \"Location\",\n \"Data\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://solcast.com\",\n \"actionCount\": 3,\n \"actions\": [\n \"solcast.get_radiation_and_weather_forecast\",\n \"solcast.get_radiation_and_weather_historic\",\n \"solcast.get_radiation_and_weather_live_estimated_actuals\"\n ]\n },\n {\n \"service\": \"speechmatics\",\n \"displayName\": \"Speechmatics\",\n \"categories\": [\n \"AI\",\n \"Developer Tools\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.speechmatics.com/\",\n \"actionCount\": 3,\n \"actions\": [\n \"speechmatics.get_service_capabilities\",\n \"speechmatics.list_deployments\",\n \"speechmatics.list_projects\"\n ]\n },\n {\n \"service\": \"spider\",\n \"displayName\": \"Spider Cloud\",\n \"categories\": [\n \"Data\",\n \"Developer Tools\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://spider.cloud\",\n \"actionCount\": 4,\n \"actions\": [\n \"spider.get_credits\",\n \"spider.get_links\",\n \"spider.scrape\",\n \"spider.search\"\n ]\n },\n {\n \"service\": \"spotify\",\n \"displayName\": \"Spotify\",\n \"categories\": [\n \"Design\",\n \"Social\"\n ],\n \"authTypes\": [\n \"oauth2\"\n ],\n \"homepageUrl\": \"https://spotify.com\",\n \"actionCount\": 88,\n \"actions\": [\n \"spotify.add_item_to_playback_queue\",\n \"spotify.add_items_to_playlist\",\n \"spotify.change_playlist_details\",\n \"spotify.check_saved_albums\",\n \"spotify.check_saved_audiobooks\",\n \"spotify.check_saved_episodes\",\n \"spotify.check_saved_shows\",\n \"spotify.check_saved_tracks\",\n \"spotify.check_user_follows_artists_or_users\",\n \"spotify.check_users_follow_playlist\",\n \"spotify.create_playlist\",\n \"spotify.follow_artists_or_users\",\n \"spotify.follow_playlist\",\n \"spotify.get_album\",\n \"spotify.get_album_tracks\",\n \"spotify.get_artist\",\n \"spotify.get_artist_albums\",\n \"spotify.get_artist_related_artists\",\n \"spotify.get_artist_top_tracks\",\n \"spotify.get_audiobook\",\n \"spotify.get_audiobook_chapters\",\n \"spotify.get_available_devices\",\n \"spotify.get_available_genre_seeds\",\n \"spotify.get_available_markets\",\n \"spotify.get_browse_categories\",\n \"spotify.get_browse_category\",\n \"spotify.get_category_playlists\",\n \"spotify.get_chapter\",\n \"spotify.get_current_user_playlists\",\n \"spotify.get_current_user_profile\",\n \"spotify.get_currently_playing_track\",\n \"spotify.get_episode\",\n \"spotify.get_featured_playlists\",\n \"spotify.get_followed_artists\",\n \"spotify.get_new_releases\",\n \"spotify.get_playback_state\",\n \"spotify.get_playlist\",\n \"spotify.get_playlist_cover_image\",\n \"spotify.get_playlist_items\",\n \"spotify.get_recently_played_tracks\",\n \"spotify.get_recommendations\",\n \"spotify.get_several_albums\",\n \"spotify.get_several_artists\",\n \"spotify.get_several_audiobooks\",\n \"spotify.get_several_chapters\",\n \"spotify.get_several_episodes\",\n \"spotify.get_several_shows\",\n \"spotify.get_several_track_audio_features\",\n \"spotify.get_several_tracks\",\n \"spotify.get_show\",\n \"spotify.get_show_episodes\",\n \"spotify.get_track\",\n \"spotify.get_track_audio_analysis\",\n \"spotify.get_track_audio_features\",\n \"spotify.get_user_playlists\",\n \"spotify.get_user_profile\",\n \"spotify.get_user_queue\",\n \"spotify.get_user_saved_albums\",\n \"spotify.get_user_saved_audiobooks\",\n \"spotify.get_user_saved_episodes\",\n \"spotify.get_user_saved_shows\",\n \"spotify.get_user_saved_tracks\",\n \"spotify.get_user_top_artists\",\n \"spotify.get_user_top_tracks\",\n \"spotify.pause_playback\",\n \"spotify.remove_playlist_items\",\n \"spotify.remove_user_s_saved_audiobooks\",\n \"spotify.remove_user_s_saved_episodes\",\n \"spotify.remove_user_s_saved_shows\",\n \"spotify.remove_user_s_saved_tracks\",\n \"spotify.remove_users_saved_albums\",\n \"spotify.save_albums_for_current_user\",\n \"spotify.save_audiobooks_for_current_user\",\n \"spotify.save_episodes_for_current_user\",\n \"spotify.save_shows_for_current_user\",\n \"spotify.save_tracks_for_current_user\",\n \"spotify.search_items\",\n \"spotify.seek_to_position\",\n \"spotify.set_playback_volume\",\n \"spotify.set_repeat_mode\",\n \"spotify.skip_to_next\",\n \"spotify.skip_to_previous\",\n \"spotify.start_resume_playback\",\n \"spotify.toggle_playback_shuffle\",\n \"spotify.transfer_playback\",\n \"spotify.unfollow_artists_or_users\",\n \"spotify.unfollow_playlist\",\n \"spotify.update_playlist_items\"\n ]\n },\n {\n \"service\": \"square\",\n \"displayName\": \"Square\",\n \"categories\": [\n \"Finance\",\n \"Productivity\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://squareup.com\",\n \"actionCount\": 6,\n \"actions\": [\n \"square.create_customer\",\n \"square.get_customer\",\n \"square.list_customers\",\n \"square.list_locations\",\n \"square.search_customers\",\n \"square.update_customer\"\n ]\n },\n {\n \"service\": \"sslmate_cert_spotter_api\",\n \"displayName\": \"Cert Spotter\",\n \"categories\": [\n \"Security\",\n \"Data\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://sslmate.com/certspotter/\",\n \"actionCount\": 5,\n \"actions\": [\n \"sslmate_cert_spotter_api.delete_monitored_domain\",\n \"sslmate_cert_spotter_api.get_monitored_domain\",\n \"sslmate_cert_spotter_api.list_certificate_issuances\",\n \"sslmate_cert_spotter_api.list_monitored_domains\",\n \"sslmate_cert_spotter_api.upsert_monitored_domain\"\n ]\n },\n {\n \"service\": \"stabilityai\",\n \"displayName\": \"Stability AI\",\n \"categories\": [\n \"AI\",\n \"Design & Media\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://stability.ai\",\n \"actionCount\": 1,\n \"actions\": [\n \"stabilityai.text_to_audio\"\n ]\n },\n {\n \"service\": \"stack_ai\",\n \"displayName\": \"StackAI\",\n \"categories\": [\n \"AI\",\n \"Developer Tools\"\n ],\n \"authTypes\": [\n \"custom_credential\"\n ],\n \"homepageUrl\": \"https://www.stack-ai.com\",\n \"actionCount\": 2,\n \"actions\": [\n \"stack_ai.get_run_metadata\",\n \"stack_ai.run_flow\"\n ]\n },\n {\n \"service\": \"stannp\",\n \"displayName\": \"Stannp\",\n \"categories\": [\n \"Marketing\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.stannp.com\",\n \"actionCount\": 11,\n \"actions\": [\n \"stannp.add_recipients_to_group\",\n \"stannp.create_group\",\n \"stannp.create_recipient\",\n \"stannp.delete_group\",\n \"stannp.delete_recipient\",\n \"stannp.get_account_balance\",\n \"stannp.get_recipient\",\n \"stannp.list_groups\",\n \"stannp.list_recipients\",\n \"stannp.remove_recipients_from_group\",\n \"stannp.validate_address\"\n ]\n },\n {\n \"service\": \"starton\",\n \"displayName\": \"Starton\",\n \"categories\": [\n \"Storage\",\n \"Developer Tools\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://starton.com\",\n \"actionCount\": 5,\n \"actions\": [\n \"starton.create_json_pin\",\n \"starton.delete_pin\",\n \"starton.get_pin\",\n \"starton.list_pins\",\n \"starton.pin_existing_file\"\n ]\n },\n {\n \"service\": \"statamic\",\n \"displayName\": \"Statamic\",\n \"categories\": [\n \"Developer Tools\",\n \"Productivity\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://statamic.com\",\n \"actionCount\": 4,\n \"actions\": [\n \"statamic.create_site\",\n \"statamic.delete_site\",\n \"statamic.list_sites\",\n \"statamic.update_site\"\n ]\n },\n {\n \"service\": \"statista\",\n \"displayName\": \"Statista\",\n \"categories\": [\n \"Data\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.statista.com\",\n \"actionCount\": 4,\n \"actions\": [\n \"statista.get_statistic\",\n \"statista.search_consumer_insights\",\n \"statista.search_market_insights_indicators\",\n \"statista.search_statistics\"\n ]\n },\n {\n \"service\": \"statsig\",\n \"displayName\": \"Statsig\",\n \"categories\": [\n \"Developer Tools\",\n \"Data\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.statsig.com/\",\n \"actionCount\": 7,\n \"actions\": [\n \"statsig.get_dynamic_config\",\n \"statsig.get_gate\",\n \"statsig.get_project\",\n \"statsig.get_segment\",\n \"statsig.list_dynamic_configs\",\n \"statsig.list_gates\",\n \"statsig.list_segments\"\n ]\n },\n {\n \"service\": \"statuscake\",\n \"displayName\": \"StatusCake\",\n \"categories\": [\n \"Developer Tools\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.statuscake.com\",\n \"actionCount\": 9,\n \"actions\": [\n \"statuscake.create_uptime_test\",\n \"statuscake.delete_uptime_test\",\n \"statuscake.get_uptime_test\",\n \"statuscake.list_uptime_locations\",\n \"statuscake.list_uptime_test_alerts\",\n \"statuscake.list_uptime_test_history\",\n \"statuscake.list_uptime_test_periods\",\n \"statuscake.list_uptime_tests\",\n \"statuscake.update_uptime_test\"\n ]\n },\n {\n \"service\": \"statuspage\",\n \"displayName\": \"Statuspage\",\n \"categories\": [\n \"Developer Tools\",\n \"Communication\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.atlassian.com/software/statuspage\",\n \"actionCount\": 13,\n \"actions\": [\n \"statuspage.create_component\",\n \"statuspage.create_incident\",\n \"statuspage.delete_component\",\n \"statuspage.delete_incident\",\n \"statuspage.get_automation_email\",\n \"statuspage.get_incident\",\n \"statuspage.get_page\",\n \"statuspage.list_components\",\n \"statuspage.list_events\",\n \"statuspage.list_incidents\",\n \"statuspage.list_pages\",\n \"statuspage.update_component\",\n \"statuspage.update_incident\"\n ]\n },\n {\n \"service\": \"statuspal\",\n \"displayName\": \"StatusPal\",\n \"categories\": [\n \"Developer Tools\",\n \"Communication\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.statuspal.io\",\n \"actionCount\": 6,\n \"actions\": [\n \"statuspal.get_incident\",\n \"statuspal.get_service\",\n \"statuspal.get_status_page_status\",\n \"statuspal.get_status_page_summary\",\n \"statuspal.list_incidents\",\n \"statuspal.list_services\"\n ]\n },\n {\n \"service\": \"stay_ai\",\n \"displayName\": \"Stay AI\",\n \"categories\": [\n \"Marketing\",\n \"Productivity\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://stay.ai\",\n \"actionCount\": 4,\n \"actions\": [\n \"stay_ai.get_account_settings\",\n \"stay_ai.get_subscription\",\n \"stay_ai.list_orders\",\n \"stay_ai.list_subscriptions\"\n ]\n },\n {\n \"service\": \"store_leads\",\n \"displayName\": \"Store Leads\",\n \"categories\": [\n \"Data\",\n \"Marketing\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://storeleads.app\",\n \"actionCount\": 6,\n \"actions\": [\n \"store_leads.get_app\",\n \"store_leads.get_domain\",\n \"store_leads.get_technology\",\n \"store_leads.list_apps\",\n \"store_leads.list_domains\",\n \"store_leads.list_technologies\"\n ]\n },\n {\n \"service\": \"storecensus\",\n \"displayName\": \"StoreCensus\",\n \"categories\": [\n \"Data\",\n \"Marketing\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.storecensus.com\",\n \"actionCount\": 4,\n \"actions\": [\n \"storecensus.get_website\",\n \"storecensus.list_app_categories\",\n \"storecensus.list_apps\",\n \"storecensus.search_stores\"\n ]\n },\n {\n \"service\": \"stormboard\",\n \"displayName\": \"Stormboard\",\n \"categories\": [\n \"Productivity\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://stormboard.com\",\n \"actionCount\": 10,\n \"actions\": [\n \"stormboard.get_profile\",\n \"stormboard.get_storm\",\n \"stormboard.get_storm_access\",\n \"stormboard.list_storm_connectors\",\n \"stormboard.list_storm_ideas\",\n \"stormboard.list_storm_tags\",\n \"stormboard.list_storm_users\",\n \"stormboard.list_storms\",\n \"stormboard.list_template_categories\",\n \"stormboard.list_templates\"\n ]\n },\n {\n \"service\": \"stormglass_io\",\n \"displayName\": \"Stormglass\",\n \"categories\": [\n \"Location\",\n \"Data\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://stormglass.io/\",\n \"actionCount\": 3,\n \"actions\": [\n \"stormglass_io.get_tide_extremes\",\n \"stormglass_io.get_tide_sea_level\",\n \"stormglass_io.get_weather_point\"\n ]\n },\n {\n \"service\": \"storyblok\",\n \"displayName\": \"Storyblok\",\n \"categories\": [\n \"Productivity\",\n \"Developer Tools\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.storyblok.com\",\n \"actionCount\": 7,\n \"actions\": [\n \"storyblok.get_space\",\n \"storyblok.get_story\",\n \"storyblok.list_datasource_entries\",\n \"storyblok.list_datasources\",\n \"storyblok.list_links\",\n \"storyblok.list_stories\",\n \"storyblok.list_tags\"\n ]\n },\n {\n \"service\": \"strava\",\n \"displayName\": \"Strava\",\n \"categories\": [\n \"Social\"\n ],\n \"authTypes\": [\n \"oauth2\"\n ],\n \"homepageUrl\": \"https://www.strava.com\",\n \"actionCount\": 34,\n \"actions\": [\n \"strava.create_activity\",\n \"strava.explore_segments\",\n \"strava.export_route_gpx\",\n \"strava.export_route_tcx\",\n \"strava.get_activity\",\n \"strava.get_activity_streams\",\n \"strava.get_activity_zones\",\n \"strava.get_athlete_stats\",\n \"strava.get_authenticated_athlete\",\n \"strava.get_club\",\n \"strava.get_equipment\",\n \"strava.get_route\",\n \"strava.get_route_streams\",\n \"strava.get_segment\",\n \"strava.get_segment_effort\",\n \"strava.get_segment_effort_streams\",\n \"strava.get_segment_streams\",\n \"strava.get_upload\",\n \"strava.get_zones\",\n \"strava.list_activity_comments\",\n \"strava.list_activity_kudoers\",\n \"strava.list_activity_laps\",\n \"strava.list_athlete_activities\",\n \"strava.list_athlete_clubs\",\n \"strava.list_athlete_routes\",\n \"strava.list_club_activities\",\n \"strava.list_club_administrators\",\n \"strava.list_club_members\",\n \"strava.list_segment_efforts\",\n \"strava.list_starred_segments\",\n \"strava.star_segment\",\n \"strava.update_activity\",\n \"strava.update_athlete\",\n \"strava.upload_activity\"\n ]\n },\n {\n \"service\": \"streak\",\n \"displayName\": \"Streak\",\n \"categories\": [\n \"Productivity\",\n \"Marketing\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.streak.com/\",\n \"actionCount\": 4,\n \"actions\": [\n \"streak.get_box\",\n \"streak.get_current_user\",\n \"streak.get_pipeline\",\n \"streak.list_pipelines\"\n ]\n },\n {\n \"service\": \"streamtime\",\n \"displayName\": \"Streamtime\",\n \"categories\": [\n \"Productivity\",\n \"Finance\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.streamtime.net\",\n \"actionCount\": 14,\n \"actions\": [\n \"streamtime.create_company\",\n \"streamtime.create_company_contact\",\n \"streamtime.create_job\",\n \"streamtime.get_company\",\n \"streamtime.get_contact\",\n \"streamtime.get_job\",\n \"streamtime.get_organisation\",\n \"streamtime.list_branches\",\n \"streamtime.list_company_contacts\",\n \"streamtime.list_rate_cards\",\n \"streamtime.list_users\",\n \"streamtime.update_company\",\n \"streamtime.update_contact\",\n \"streamtime.update_job\"\n ]\n },\n {\n \"service\": \"stripe\",\n \"displayName\": \"Stripe\",\n \"categories\": [\n \"Finance\",\n \"Developer Tools\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://stripe.com\",\n \"actionCount\": 18,\n \"actions\": [\n \"stripe.create_customer\",\n \"stripe.create_price\",\n \"stripe.create_product\",\n \"stripe.delete_customer\",\n \"stripe.delete_product\",\n \"stripe.get_customer\",\n \"stripe.get_price\",\n \"stripe.get_product\",\n \"stripe.identify_account\",\n \"stripe.list_customers\",\n \"stripe.list_prices\",\n \"stripe.list_products\",\n \"stripe.search_customers\",\n \"stripe.search_prices\",\n \"stripe.search_products\",\n \"stripe.update_customer\",\n \"stripe.update_price\",\n \"stripe.update_product\"\n ]\n },\n {\n \"service\": \"subvisory\",\n \"displayName\": \"Subvisory\",\n \"categories\": [\n \"Finance\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.subvisory.com\",\n \"actionCount\": 15,\n \"actions\": [\n \"subvisory.create_category\",\n \"subvisory.create_payment_method\",\n \"subvisory.create_subscription\",\n \"subvisory.delete_category\",\n \"subvisory.delete_payment_method\",\n \"subvisory.delete_subscription\",\n \"subvisory.get_category\",\n \"subvisory.get_payment_method\",\n \"subvisory.get_subscription\",\n \"subvisory.list_categories\",\n \"subvisory.list_payment_methods\",\n \"subvisory.list_subscriptions\",\n \"subvisory.update_category\",\n \"subvisory.update_payment_method\",\n \"subvisory.update_subscription\"\n ]\n },\n {\n \"service\": \"sunoapi\",\n \"displayName\": \"SunoAPI\",\n \"categories\": [\n \"AI\",\n \"Design & Media\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://sunoapi.org\",\n \"actionCount\": 26,\n \"actions\": [\n \"sunoapi.add_instrumental\",\n \"sunoapi.add_vocals\",\n \"sunoapi.boost_music_style\",\n \"sunoapi.convert_to_wav_format\",\n \"sunoapi.create_music_video\",\n \"sunoapi.extend_music\",\n \"sunoapi.generate_lyrics\",\n \"sunoapi.generate_mashup\",\n \"sunoapi.generate_midi\",\n \"sunoapi.generate_music\",\n \"sunoapi.generate_music_cover\",\n \"sunoapi.generate_persona\",\n \"sunoapi.generate_sounds\",\n \"sunoapi.get_lyrics_generation_details\",\n \"sunoapi.get_midi_generation_details\",\n \"sunoapi.get_music_cover_details\",\n \"sunoapi.get_music_generation_details\",\n \"sunoapi.get_music_video_details\",\n \"sunoapi.get_remaining_credits\",\n \"sunoapi.get_timestamped_lyrics\",\n \"sunoapi.get_vocal_separation_details\",\n \"sunoapi.get_wav_conversion_details\",\n \"sunoapi.replace_music_section\",\n \"sunoapi.separate_vocals_from_music\",\n \"sunoapi.upload_and_cover_audio\",\n \"sunoapi.upload_and_extend_audio\"\n ]\n },\n {\n \"service\": \"supabase\",\n \"displayName\": \"Supabase\",\n \"categories\": [\n \"Developer Tools\",\n \"Data\",\n \"Storage\"\n ],\n \"authTypes\": [\n \"oauth2\",\n \"api_key\"\n ],\n \"homepageUrl\": \"https://supabase.com\",\n \"actionCount\": 21,\n \"actions\": [\n \"supabase.create_project_api_key\",\n \"supabase.delete_project_api_key\",\n \"supabase.delete_project_secrets\",\n \"supabase.generate_typescript_types\",\n \"supabase.get_edge_function\",\n \"supabase.get_organization\",\n \"supabase.get_project\",\n \"supabase.get_project_api_key\",\n \"supabase.get_project_health\",\n \"supabase.list_available_regions\",\n \"supabase.list_edge_functions\",\n \"supabase.list_organization_members\",\n \"supabase.list_organization_projects\",\n \"supabase.list_organizations\",\n \"supabase.list_project_api_keys\",\n \"supabase.list_project_secrets\",\n \"supabase.list_projects\",\n \"supabase.list_storage_buckets\",\n \"supabase.run_read_only_query\",\n \"supabase.update_project_api_key\",\n \"supabase.upsert_project_secrets\"\n ]\n },\n {\n \"service\": \"supadata\",\n \"displayName\": \"Supadata\",\n \"categories\": [\n \"AI\",\n \"Data\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://supadata.ai/\",\n \"actionCount\": 10,\n \"actions\": [\n \"supadata.get_account\",\n \"supadata.get_youtube_channel\",\n \"supadata.get_youtube_playlist\",\n \"supadata.get_youtube_transcript\",\n \"supadata.get_youtube_video\",\n \"supadata.list_youtube_channel_videos\",\n \"supadata.list_youtube_playlist_videos\",\n \"supadata.map_web_links\",\n \"supadata.scrape_web_page\",\n \"supadata.search_youtube\"\n ]\n },\n {\n \"service\": \"super_saas\",\n \"displayName\": \"SuperSaaS\",\n \"categories\": [\n \"Productivity\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.supersaas.com/\",\n \"actionCount\": 7,\n \"actions\": [\n \"super_saas.list_appointments\",\n \"super_saas.list_field_names\",\n \"super_saas.list_groups\",\n \"super_saas.list_recent_changes\",\n \"super_saas.list_resources\",\n \"super_saas.list_schedules\",\n \"super_saas.list_super_forms\"\n ]\n },\n {\n \"service\": \"superchat\",\n \"displayName\": \"Superchat\",\n \"categories\": [\n \"Communication\",\n \"Marketing\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.superchat.com\",\n \"actionCount\": 11,\n \"actions\": [\n \"superchat.create_contact\",\n \"superchat.get_channel\",\n \"superchat.get_contact\",\n \"superchat.get_me\",\n \"superchat.list_channels\",\n \"superchat.list_contacts\",\n \"superchat.search_contacts\",\n \"superchat.send_email_message\",\n \"superchat.send_text_message\",\n \"superchat.send_whatsapp_template_message\",\n \"superchat.update_contact\"\n ]\n },\n {\n \"service\": \"supervisely\",\n \"displayName\": \"Supervisely\",\n \"categories\": [\n \"AI\",\n \"Data\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://supervisely.com\",\n \"actionCount\": 7,\n \"actions\": [\n \"supervisely.get_current_user\",\n \"supervisely.get_dataset\",\n \"supervisely.get_project\",\n \"supervisely.list_datasets\",\n \"supervisely.list_projects\",\n \"supervisely.list_teams\",\n \"supervisely.list_workspaces\"\n ]\n },\n {\n \"service\": \"supportbee\",\n \"displayName\": \"SupportBee\",\n \"categories\": [\n \"Communication\",\n \"Productivity\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://supportbee.com\",\n \"actionCount\": 17,\n \"actions\": [\n \"supportbee.add_label_to_ticket\",\n \"supportbee.create_ticket\",\n \"supportbee.create_ticket_comment\",\n \"supportbee.create_ticket_reply\",\n \"supportbee.create_user\",\n \"supportbee.get_ticket\",\n \"supportbee.get_ticket_reply\",\n \"supportbee.get_user\",\n \"supportbee.list_labels\",\n \"supportbee.list_teams\",\n \"supportbee.list_ticket_comments\",\n \"supportbee.list_ticket_replies\",\n \"supportbee.list_tickets\",\n \"supportbee.list_users\",\n \"supportbee.remove_label_from_ticket\",\n \"supportbee.search_tickets\",\n \"supportbee.update_user\"\n ]\n },\n {\n \"service\": \"surecontact\",\n \"displayName\": \"SureContact\",\n \"categories\": [\n \"Marketing\",\n \"Productivity\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://surecontact.com/\",\n \"actionCount\": 23,\n \"actions\": [\n \"surecontact.add_contacts_to_list\",\n \"surecontact.attach_contact_lists\",\n \"surecontact.attach_contact_tags\",\n \"surecontact.create_contact\",\n \"surecontact.create_list\",\n \"surecontact.create_tag\",\n \"surecontact.delete_contact\",\n \"surecontact.delete_list\",\n \"surecontact.delete_tag\",\n \"surecontact.detach_contact_lists\",\n \"surecontact.detach_contact_tags\",\n \"surecontact.get_contact\",\n \"surecontact.get_contact_by_email\",\n \"surecontact.get_list\",\n \"surecontact.get_tag\",\n \"surecontact.list_contacts\",\n \"surecontact.list_lists\",\n \"surecontact.list_tags\",\n \"surecontact.remove_contacts_from_list\",\n \"surecontact.update_contact\",\n \"surecontact.update_list\",\n \"surecontact.update_tag\",\n \"surecontact.upsert_contact\"\n ]\n },\n {\n \"service\": \"svix\",\n \"displayName\": \"Svix\",\n \"categories\": [\n \"Developer Tools\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.svix.com\",\n \"actionCount\": 16,\n \"actions\": [\n \"svix.create_application\",\n \"svix.create_endpoint\",\n \"svix.create_event_type\",\n \"svix.create_message\",\n \"svix.delete_application\",\n \"svix.delete_endpoint\",\n \"svix.get_application\",\n \"svix.get_endpoint\",\n \"svix.get_event_type\",\n \"svix.get_message\",\n \"svix.list_applications\",\n \"svix.list_endpoints\",\n \"svix.list_event_types\",\n \"svix.list_messages\",\n \"svix.update_application\",\n \"svix.update_endpoint\"\n ]\n },\n {\n \"service\": \"swaggerhub\",\n \"displayName\": \"SwaggerHub\",\n \"categories\": [\n \"Developer Tools\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://swagger.io/tools/swaggerhub/\",\n \"actionCount\": 14,\n \"actions\": [\n \"swaggerhub.get_api_definition\",\n \"swaggerhub.get_domain_definition\",\n \"swaggerhub.get_project\",\n \"swaggerhub.get_template_definition\",\n \"swaggerhub.list_api_versions\",\n \"swaggerhub.list_domain_versions\",\n \"swaggerhub.list_owner_apis\",\n \"swaggerhub.list_owner_domains\",\n \"swaggerhub.list_projects\",\n \"swaggerhub.list_template_versions\",\n \"swaggerhub.list_templates\",\n \"swaggerhub.search_apis\",\n \"swaggerhub.search_domains\",\n \"swaggerhub.search_registry_specs\"\n ]\n },\n {\n \"service\": \"systeme_io\",\n \"displayName\": \"Systeme.io\",\n \"categories\": [\n \"Marketing\",\n \"Productivity\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://systeme.io\",\n \"actionCount\": 24,\n \"actions\": [\n \"systeme_io.attach_contact_tag\",\n \"systeme_io.cancel_subscription\",\n \"systeme_io.create_contact\",\n \"systeme_io.create_enrollment\",\n \"systeme_io.create_tag\",\n \"systeme_io.create_webhook\",\n \"systeme_io.delete_contact\",\n \"systeme_io.delete_enrollment\",\n \"systeme_io.delete_tag\",\n \"systeme_io.delete_webhook\",\n \"systeme_io.detach_contact_tag\",\n \"systeme_io.get_contact\",\n \"systeme_io.get_tag\",\n \"systeme_io.get_webhook\",\n \"systeme_io.list_contact_fields\",\n \"systeme_io.list_contacts\",\n \"systeme_io.list_courses\",\n \"systeme_io.list_enrollments\",\n \"systeme_io.list_subscriptions\",\n \"systeme_io.list_tags\",\n \"systeme_io.list_webhooks\",\n \"systeme_io.update_contact\",\n \"systeme_io.update_tag\",\n \"systeme_io.update_webhook\"\n ]\n },\n {\n \"service\": \"taggun\",\n \"displayName\": \"Taggun\",\n \"categories\": [\n \"AI\",\n \"Data\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.taggun.io/\",\n \"actionCount\": 5,\n \"actions\": [\n \"taggun.extract_receipt_simple_url\",\n \"taggun.extract_receipt_verbose_url\",\n \"taggun.get_campaign_settings\",\n \"taggun.list_campaign_ids\",\n \"taggun.validate_receipt_url\"\n ]\n },\n {\n \"service\": \"tailscale\",\n \"displayName\": \"Tailscale\",\n \"categories\": [\n \"Security\",\n \"Developer Tools\"\n ],\n \"authTypes\": [\n \"custom_credential\"\n ],\n \"homepageUrl\": \"https://tailscale.com\",\n \"actionCount\": 82,\n \"actions\": [\n \"tailscale.approve_user\",\n \"tailscale.batch_update_device_posture_attributes\",\n \"tailscale.create_key\",\n \"tailscale.create_oauth_app\",\n \"tailscale.create_posture_integration\",\n \"tailscale.create_webhook\",\n \"tailscale.delete_device\",\n \"tailscale.delete_device_invite\",\n \"tailscale.delete_device_posture_attribute\",\n \"tailscale.delete_key\",\n \"tailscale.delete_oauth_app\",\n \"tailscale.delete_posture_integration\",\n \"tailscale.delete_service\",\n \"tailscale.delete_user\",\n \"tailscale.delete_webhook\",\n \"tailscale.disable_log_streaming\",\n \"tailscale.expire_device_key\",\n \"tailscale.get_aws_external_id\",\n \"tailscale.get_contacts\",\n \"tailscale.get_device\",\n \"tailscale.get_device_invite\",\n \"tailscale.get_device_posture_attributes\",\n \"tailscale.get_dns_configuration\",\n \"tailscale.get_dns_preferences\",\n \"tailscale.get_key\",\n \"tailscale.get_log_streaming_configuration\",\n \"tailscale.get_log_streaming_status\",\n \"tailscale.get_oauth_app\",\n \"tailscale.get_policy_file\",\n \"tailscale.get_posture_integration\",\n \"tailscale.get_service\",\n \"tailscale.get_service_device_approval\",\n \"tailscale.get_split_dns\",\n \"tailscale.get_tailnet_settings\",\n \"tailscale.get_user\",\n \"tailscale.get_webhook\",\n \"tailscale.list_configuration_audit_logs\",\n \"tailscale.list_device_invites\",\n \"tailscale.list_device_routes\",\n \"tailscale.list_devices\",\n \"tailscale.list_dns_nameservers\",\n \"tailscale.list_dns_search_paths\",\n \"tailscale.list_keys\",\n \"tailscale.list_network_flow_logs\",\n \"tailscale.list_oauth_apps\",\n \"tailscale.list_posture_integrations\",\n \"tailscale.list_service_hosts\",\n \"tailscale.list_services\",\n \"tailscale.list_users\",\n \"tailscale.list_webhooks\",\n \"tailscale.preview_policy_rule_matches\",\n \"tailscale.resend_contact_verification_email\",\n \"tailscale.restore_user\",\n \"tailscale.rotate_webhook_secret\",\n \"tailscale.set_device_authorized\",\n \"tailscale.set_device_ip\",\n \"tailscale.set_device_key_expiry\",\n \"tailscale.set_device_name\",\n \"tailscale.set_device_posture_attribute\",\n \"tailscale.set_device_routes\",\n \"tailscale.set_device_tags\",\n \"tailscale.set_dns_configuration\",\n \"tailscale.set_dns_nameservers\",\n \"tailscale.set_dns_preferences\",\n \"tailscale.set_dns_search_paths\",\n \"tailscale.set_log_streaming_configuration\",\n \"tailscale.set_policy_file\",\n \"tailscale.set_split_dns\",\n \"tailscale.suspend_user\",\n \"tailscale.test_webhook\",\n \"tailscale.update_contact\",\n \"tailscale.update_key\",\n \"tailscale.update_oauth_app\",\n \"tailscale.update_posture_integration\",\n \"tailscale.update_service\",\n \"tailscale.update_service_device_approval\",\n \"tailscale.update_split_dns\",\n \"tailscale.update_tailnet_settings\",\n \"tailscale.update_user_role\",\n \"tailscale.update_webhook\",\n \"tailscale.validate_aws_external_id\",\n \"tailscale.validate_policy_file\"\n ]\n },\n {\n \"service\": \"talenthr\",\n \"displayName\": \"TalentHR\",\n \"categories\": [\n \"Productivity\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.talenthr.io/\",\n \"actionCount\": 1,\n \"actions\": [\n \"talenthr.change_employee_role\"\n ]\n },\n {\n \"service\": \"talentlms\",\n \"displayName\": \"TalentLMS\",\n \"categories\": [\n \"Productivity\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.talentlms.com\",\n \"actionCount\": 14,\n \"actions\": [\n \"talentlms.create_user\",\n \"talentlms.delete_user\",\n \"talentlms.get_branch\",\n \"talentlms.get_category\",\n \"talentlms.get_course\",\n \"talentlms.get_group\",\n \"talentlms.get_user\",\n \"talentlms.health_check\",\n \"talentlms.list_branches\",\n \"talentlms.list_categories\",\n \"talentlms.list_courses\",\n \"talentlms.list_groups\",\n \"talentlms.list_users\",\n \"talentlms.update_user\"\n ]\n },\n {\n \"service\": \"tally\",\n \"displayName\": \"Tally\",\n \"categories\": [\n \"Productivity\",\n \"Marketing\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://tally.so\",\n \"actionCount\": 4,\n \"actions\": [\n \"tally.get_form\",\n \"tally.get_submission\",\n \"tally.list_forms\",\n \"tally.list_submissions\"\n ]\n },\n {\n \"service\": \"tanium\",\n \"displayName\": \"Tanium\",\n \"categories\": [\n \"Security\",\n \"Data\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.tanium.com\",\n \"actionCount\": 1,\n \"actions\": [\n \"tanium.execute_graphql\"\n ]\n },\n {\n \"service\": \"tapfiliate\",\n \"displayName\": \"Tapfiliate\",\n \"categories\": [\n \"Marketing\",\n \"Data\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://tapfiliate.com/\",\n \"actionCount\": 11,\n \"actions\": [\n \"tapfiliate.create_affiliate\",\n \"tapfiliate.create_affiliate_group\",\n \"tapfiliate.create_click\",\n \"tapfiliate.create_conversion\",\n \"tapfiliate.get_affiliate\",\n \"tapfiliate.list_affiliate_groups\",\n \"tapfiliate.list_affiliates\",\n \"tapfiliate.list_clicks\",\n \"tapfiliate.list_commissions\",\n \"tapfiliate.list_conversions\",\n \"tapfiliate.list_programs\"\n ]\n },\n {\n \"service\": \"tave\",\n \"displayName\": \"Táve\",\n \"categories\": [\n \"Productivity\",\n \"Communication\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.vsco.co/workspace\",\n \"actionCount\": 3,\n \"actions\": [\n \"tave.get_contact\",\n \"tave.get_my_studio\",\n \"tave.list_contacts\"\n ]\n },\n {\n \"service\": \"tavily\",\n \"displayName\": \"Tavily\",\n \"categories\": [\n \"AI\",\n \"Data\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://tavily.com\",\n \"actionCount\": 7,\n \"actions\": [\n \"tavily.crawl\",\n \"tavily.create_research\",\n \"tavily.extract\",\n \"tavily.get_research\",\n \"tavily.get_usage\",\n \"tavily.map\",\n \"tavily.search\"\n ]\n },\n {\n \"service\": \"taxjar\",\n \"displayName\": \"TaxJar\",\n \"categories\": [\n \"Finance\",\n \"Data\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.taxjar.com/\",\n \"actionCount\": 21,\n \"actions\": [\n \"taxjar.calculate_sales_tax_for_order\",\n \"taxjar.create_customer\",\n \"taxjar.create_order_transaction\",\n \"taxjar.create_refund_transaction\",\n \"taxjar.delete_customer\",\n \"taxjar.delete_order_transaction\",\n \"taxjar.delete_refund_transaction\",\n \"taxjar.list_customers\",\n \"taxjar.list_nexus_regions\",\n \"taxjar.list_order_transactions\",\n \"taxjar.list_refund_transactions\",\n \"taxjar.list_tax_categories\",\n \"taxjar.show_customer\",\n \"taxjar.show_order_transaction\",\n \"taxjar.show_refund_transaction\",\n \"taxjar.show_tax_rates_for_location\",\n \"taxjar.summarize_tax_rates_for_all_regions\",\n \"taxjar.update_customer\",\n \"taxjar.update_order_transaction\",\n \"taxjar.update_refund_transaction\",\n \"taxjar.validate_vat_number\"\n ]\n },\n {\n \"service\": \"teamcamp\",\n \"displayName\": \"Teamcamp\",\n \"categories\": [\n \"Productivity\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.teamcamp.app\",\n \"actionCount\": 7,\n \"actions\": [\n \"teamcamp.get_project\",\n \"teamcamp.get_task\",\n \"teamcamp.list_company_users\",\n \"teamcamp.list_customers\",\n \"teamcamp.list_projects\",\n \"teamcamp.list_tasks\",\n \"teamcamp.post_task_comment\"\n ]\n },\n {\n \"service\": \"teamtailor\",\n \"displayName\": \"Teamtailor\",\n \"categories\": [\n \"Productivity\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.teamtailor.com/\",\n \"actionCount\": 4,\n \"actions\": [\n \"teamtailor.list_departments\",\n \"teamtailor.list_jobs\",\n \"teamtailor.list_locations\",\n \"teamtailor.retrieve_job\"\n ]\n },\n {\n \"service\": \"telegram\",\n \"displayName\": \"Telegram Bot\",\n \"categories\": [\n \"Communication\",\n \"Social\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://core.telegram.org/bots\",\n \"actionCount\": 50,\n \"actions\": [\n \"telegram.answer_callback_query\",\n \"telegram.approve_chat_join_request\",\n \"telegram.ban_chat_member\",\n \"telegram.copy_message\",\n \"telegram.copy_messages\",\n \"telegram.create_chat_invite_link\",\n \"telegram.decline_chat_join_request\",\n \"telegram.delete_business_messages\",\n \"telegram.delete_message\",\n \"telegram.delete_messages\",\n \"telegram.delete_webhook\",\n \"telegram.edit_chat_invite_link\",\n \"telegram.edit_message_text\",\n \"telegram.export_chat_invite_link\",\n \"telegram.forward_message\",\n \"telegram.forward_messages\",\n \"telegram.get_business_connection\",\n \"telegram.get_chat\",\n \"telegram.get_chat_administrators\",\n \"telegram.get_chat_member\",\n \"telegram.get_chat_members_count\",\n \"telegram.get_me\",\n \"telegram.get_updates\",\n \"telegram.get_webhook_info\",\n \"telegram.pin_chat_message\",\n \"telegram.promote_chat_member\",\n \"telegram.read_business_message\",\n \"telegram.restrict_chat_member\",\n \"telegram.revoke_chat_invite_link\",\n \"telegram.send_animation\",\n \"telegram.send_audio\",\n \"telegram.send_chat_action\",\n \"telegram.send_contact\",\n \"telegram.send_dice\",\n \"telegram.send_document\",\n \"telegram.send_location\",\n \"telegram.send_media_group\",\n \"telegram.send_message\",\n \"telegram.send_photo\",\n \"telegram.send_poll\",\n \"telegram.send_venue\",\n \"telegram.send_video\",\n \"telegram.send_voice\",\n \"telegram.set_chat_permissions\",\n \"telegram.set_message_reaction\",\n \"telegram.set_my_commands\",\n \"telegram.set_webhook\",\n \"telegram.unban_chat_member\",\n \"telegram.unpin_all_chat_messages\",\n \"telegram.unpin_chat_message\"\n ]\n },\n {\n \"service\": \"telnyx\",\n \"displayName\": \"Telnyx\",\n \"categories\": [\n \"Communication\",\n \"Developer Tools\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://telnyx.com/\",\n \"actionCount\": 4,\n \"actions\": [\n \"telnyx.list_messaging_profiles\",\n \"telnyx.retrieve_message\",\n \"telnyx.retrieve_messaging_profile\",\n \"telnyx.send_message\"\n ]\n },\n {\n \"service\": \"teltel\",\n \"displayName\": \"TelTel\",\n \"categories\": [\n \"Communication\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.teltel.io\",\n \"actionCount\": 4,\n \"actions\": [\n \"teltel.get_account_balance\",\n \"teltel.get_sms_report\",\n \"teltel.list_sms_reports\",\n \"teltel.send_sms\"\n ]\n },\n {\n \"service\": \"templated\",\n \"displayName\": \"Templated\",\n \"categories\": [\n \"Design & Media\",\n \"Marketing\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://templated.io\",\n \"actionCount\": 7,\n \"actions\": [\n \"templated.create_render\",\n \"templated.delete_render\",\n \"templated.get_account\",\n \"templated.get_render\",\n \"templated.get_template\",\n \"templated.list_renders\",\n \"templated.list_templates\"\n ]\n },\n {\n \"service\": \"tencent_docs\",\n \"displayName\": \"Tencent Docs\",\n \"categories\": [\n \"Productivity\",\n \"Storage\"\n ],\n \"authTypes\": [\n \"oauth2\"\n ],\n \"homepageUrl\": \"https://docs.qq.com\",\n \"actionCount\": 16,\n \"actions\": [\n \"tencent_docs.batch_update_doc\",\n \"tencent_docs.batch_update_sheet\",\n \"tencent_docs.convert_file_id\",\n \"tencent_docs.create_file\",\n \"tencent_docs.generate_form_result\",\n \"tencent_docs.get_current_user\",\n \"tencent_docs.get_doc_content\",\n \"tencent_docs.get_export_progress\",\n \"tencent_docs.get_file_metadata\",\n \"tencent_docs.get_sheet_range\",\n \"tencent_docs.list_folder\",\n \"tencent_docs.list_smartsheet_sheets\",\n \"tencent_docs.rename_file\",\n \"tencent_docs.search_files\",\n \"tencent_docs.start_export\",\n \"tencent_docs.update_form_collection_deadline\"\n ]\n },\n {\n \"service\": \"tencent_maps\",\n \"displayName\": \"Tencent Maps\",\n \"categories\": [\n \"Location\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://lbs.qq.com\",\n \"actionCount\": 15,\n \"actions\": [\n \"tencent_maps.distance_matrix\",\n \"tencent_maps.district_search\",\n \"tencent_maps.geocode\",\n \"tencent_maps.get_place_detail\",\n \"tencent_maps.input_tips\",\n \"tencent_maps.ip_locate\",\n \"tencent_maps.reverse_geocode\",\n \"tencent_maps.route_bicycling\",\n \"tencent_maps.route_driving\",\n \"tencent_maps.route_transit\",\n \"tencent_maps.route_walking\",\n \"tencent_maps.search_places\",\n \"tencent_maps.search_places_around\",\n \"tencent_maps.search_places_polygon\",\n \"tencent_maps.weather\"\n ]\n },\n {\n \"service\": \"terraform\",\n \"displayName\": \"Terraform\",\n \"categories\": [\n \"Developer Tools\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.hashicorp.com/products/terraform\",\n \"actionCount\": 8,\n \"actions\": [\n \"terraform.get_account_details\",\n \"terraform.get_organization\",\n \"terraform.get_run\",\n \"terraform.get_workspace_by_id\",\n \"terraform.get_workspace_by_name\",\n \"terraform.list_organizations\",\n \"terraform.list_workspace_runs\",\n \"terraform.list_workspaces\"\n ]\n },\n {\n \"service\": \"textcortex\",\n \"displayName\": \"TextCortex\",\n \"categories\": [\n \"AI\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://textcortex.com/\",\n \"actionCount\": 3,\n \"actions\": [\n \"textcortex.create_chat_completion\",\n \"textcortex.list_models\",\n \"textcortex.retrieve_model\"\n ]\n },\n {\n \"service\": \"textit\",\n \"displayName\": \"TextIt\",\n \"categories\": [\n \"Communication\",\n \"Marketing\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://textit.com\",\n \"actionCount\": 13,\n \"actions\": [\n \"textit.create_contact\",\n \"textit.create_group\",\n \"textit.delete_contact\",\n \"textit.delete_group\",\n \"textit.get_workspace\",\n \"textit.list_broadcasts\",\n \"textit.list_contacts\",\n \"textit.list_groups\",\n \"textit.list_messages\",\n \"textit.send_broadcast\",\n \"textit.send_message\",\n \"textit.update_contact\",\n \"textit.update_group\"\n ]\n },\n {\n \"service\": \"textrazor\",\n \"displayName\": \"TextRazor\",\n \"categories\": [\n \"AI\",\n \"Data\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.textrazor.com\",\n \"actionCount\": 6,\n \"actions\": [\n \"textrazor.account_info\",\n \"textrazor.analyze_content\",\n \"textrazor.classify_text\",\n \"textrazor.custom_classifier_manager\",\n \"textrazor.dictionary_manager\",\n \"textrazor.extract_entities\"\n ]\n },\n {\n \"service\": \"the_cat_api\",\n \"displayName\": \"The Cat API\",\n \"categories\": [\n \"Design & Media\",\n \"Data\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://thecatapi.com/\",\n \"actionCount\": 5,\n \"actions\": [\n \"the_cat_api.get_breed\",\n \"the_cat_api.get_image\",\n \"the_cat_api.list_breeds\",\n \"the_cat_api.search_breeds\",\n \"the_cat_api.search_images\"\n ]\n },\n {\n \"service\": \"the_colony\",\n \"displayName\": \"The Colony\",\n \"categories\": [\n \"AI\",\n \"Social\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://thecolony.cc/\",\n \"actionCount\": 12,\n \"actions\": [\n \"the_colony.create_comment\",\n \"the_colony.create_post\",\n \"the_colony.get_me\",\n \"the_colony.get_post\",\n \"the_colony.get_post_context\",\n \"the_colony.get_post_conversation\",\n \"the_colony.list_colonies\",\n \"the_colony.list_comments\",\n \"the_colony.list_posts\",\n \"the_colony.search\",\n \"the_colony.vote_comment\",\n \"the_colony.vote_post\"\n ]\n },\n {\n \"service\": \"the_dog_api\",\n \"displayName\": \"The Dog API\",\n \"categories\": [\n \"Design & Media\",\n \"Data\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://thedogapi.com/\",\n \"actionCount\": 11,\n \"actions\": [\n \"the_dog_api.create_favourite\",\n \"the_dog_api.create_vote\",\n \"the_dog_api.delete_favourite\",\n \"the_dog_api.delete_vote\",\n \"the_dog_api.get_breed\",\n \"the_dog_api.get_image\",\n \"the_dog_api.list_breeds\",\n \"the_dog_api.list_favourites\",\n \"the_dog_api.list_votes\",\n \"the_dog_api.search_breeds\",\n \"the_dog_api.search_images\"\n ]\n },\n {\n \"service\": \"the_odds_api\",\n \"displayName\": \"The Odds API\",\n \"categories\": [\n \"Data\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://the-odds-api.com\",\n \"actionCount\": 7,\n \"actions\": [\n \"the_odds_api.get_event_odds\",\n \"the_odds_api.get_odds\",\n \"the_odds_api.get_scores\",\n \"the_odds_api.list_event_markets\",\n \"the_odds_api.list_events\",\n \"the_odds_api.list_participants\",\n \"the_odds_api.list_sports\"\n ]\n },\n {\n \"service\": \"the_swarm\",\n \"displayName\": \"The Swarm\",\n \"categories\": [\n \"Data\",\n \"Social\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.theswarm.com\",\n \"actionCount\": 5,\n \"actions\": [\n \"the_swarm.fetch_companies\",\n \"the_swarm.fetch_profiles\",\n \"the_swarm.get_credit_usage\",\n \"the_swarm.search_companies\",\n \"the_swarm.search_profiles\"\n ]\n },\n {\n \"service\": \"theirstack\",\n \"displayName\": \"TheirStack\",\n \"categories\": [\n \"Data\",\n \"Marketing\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://theirstack.com\",\n \"actionCount\": 4,\n \"actions\": [\n \"theirstack.get_credit_balance\",\n \"theirstack.list_technographics\",\n \"theirstack.search_companies\",\n \"theirstack.search_jobs\"\n ]\n },\n {\n \"service\": \"ticketmaster\",\n \"displayName\": \"Ticketmaster\",\n \"categories\": [\n \"Social\",\n \"Data\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.ticketmaster.com\",\n \"actionCount\": 15,\n \"actions\": [\n \"ticketmaster.execute_season_ticketing_command\",\n \"ticketmaster.get_attraction_details\",\n \"ticketmaster.get_attractions\",\n \"ticketmaster.get_classification_details\",\n \"ticketmaster.get_classifications\",\n \"ticketmaster.get_event_details\",\n \"ticketmaster.get_event_images\",\n \"ticketmaster.get_events\",\n \"ticketmaster.get_genre_details\",\n \"ticketmaster.get_section_map_image\",\n \"ticketmaster.get_segment_details\",\n \"ticketmaster.get_subgenre_details\",\n \"ticketmaster.get_suggestions\",\n \"ticketmaster.get_venue_details\",\n \"ticketmaster.get_venues\"\n ]\n },\n {\n \"service\": \"ticktick\",\n \"displayName\": \"TickTick\",\n \"categories\": [\n \"Productivity\"\n ],\n \"authTypes\": [\n \"oauth2\",\n \"api_key\"\n ],\n \"homepageUrl\": \"https://ticktick.com\",\n \"actionCount\": 20,\n \"actions\": [\n \"ticktick.complete_task\",\n \"ticktick.create_or_update_habit_checkin\",\n \"ticktick.create_project\",\n \"ticktick.create_task\",\n \"ticktick.create_task2\",\n \"ticktick.delete_project\",\n \"ticktick.delete_task\",\n \"ticktick.filter_tasks\",\n \"ticktick.get_habit\",\n \"ticktick.get_project_by_id\",\n \"ticktick.get_project_with_data\",\n \"ticktick.get_task_by_project_and_id\",\n \"ticktick.get_user_project\",\n \"ticktick.list_all_tasks\",\n \"ticktick.list_completed_tasks\",\n \"ticktick.list_habit_checkins\",\n \"ticktick.list_habits\",\n \"ticktick.move_tasks\",\n \"ticktick.update_project\",\n \"ticktick.update_task\"\n ]\n },\n {\n \"service\": \"tidb\",\n \"displayName\": \"TiDB Cloud\",\n \"categories\": [\n \"Data\",\n \"Developer Tools\"\n ],\n \"authTypes\": [\n \"custom_credential\"\n ],\n \"homepageUrl\": \"https://www.pingcap.com/tidb/cloud/\",\n \"actionCount\": 17,\n \"actions\": [\n \"tidb.get_api_key\",\n \"tidb.get_branch\",\n \"tidb.get_cluster\",\n \"tidb.get_export\",\n \"tidb.get_import\",\n \"tidb.get_node_spec\",\n \"tidb.get_region\",\n \"tidb.list_api_keys\",\n \"tidb.list_audit_logs\",\n \"tidb.list_branches\",\n \"tidb.list_clusters\",\n \"tidb.list_exports\",\n \"tidb.list_imports\",\n \"tidb.list_node_specs\",\n \"tidb.list_regions\",\n \"tidb.show_cloud_providers\",\n \"tidb.show_node_quota\"\n ]\n },\n {\n \"service\": \"tikhub\",\n \"displayName\": \"TikHub\",\n \"categories\": [\n \"Data\",\n \"Social\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://tikhub.io/\",\n \"actionCount\": 30,\n \"actions\": [\n \"tikhub.calculate_price\",\n \"tikhub.fetch_douyin_hot_total_list\",\n \"tikhub.fetch_douyin_user_posts\",\n \"tikhub.fetch_douyin_user_profile_by_short_id\",\n \"tikhub.fetch_douyin_user_profile_by_uid\",\n \"tikhub.fetch_douyin_video_by_share_url\",\n \"tikhub.fetch_douyin_video_comment_replies\",\n \"tikhub.fetch_douyin_video_comments\",\n \"tikhub.fetch_douyin_video_detail\",\n \"tikhub.fetch_tiktok_post_comments\",\n \"tikhub.fetch_tiktok_post_detail\",\n \"tikhub.fetch_tiktok_tag_detail\",\n \"tikhub.fetch_tiktok_tag_posts\",\n \"tikhub.fetch_tiktok_user_posts\",\n \"tikhub.fetch_tiktok_user_profile\",\n \"tikhub.fetch_xiaohongshu_hot_list\",\n \"tikhub.fetch_xiaohongshu_note_comment_replies\",\n \"tikhub.fetch_xiaohongshu_note_comments\",\n \"tikhub.fetch_xiaohongshu_sub_comments\",\n \"tikhub.fetch_xiaohongshu_user_info\",\n \"tikhub.fetch_xiaohongshu_user_notes\",\n \"tikhub.get_all_endpoints_info\",\n \"tikhub.get_endpoint_info\",\n \"tikhub.get_user_daily_usage\",\n \"tikhub.get_user_info\",\n \"tikhub.search_douyin_users\",\n \"tikhub.search_douyin_videos\",\n \"tikhub.search_tiktok_users\",\n \"tikhub.search_xiaohongshu_notes\",\n \"tikhub.search_xiaohongshu_users\"\n ]\n },\n {\n \"service\": \"tiktok_business\",\n \"displayName\": \"TikTok Business\",\n \"categories\": [\n \"Marketing\",\n \"Data\"\n ],\n \"authTypes\": [\n \"oauth2\",\n \"api_key\"\n ],\n \"homepageUrl\": \"https://business.tiktok.com\",\n \"actionCount\": 15,\n \"actions\": [\n \"tiktok_business.check_gmv_max_shop_ad_usage\",\n \"tiktok_business.get_gmv_max_bid_recommendation\",\n \"tiktok_business.get_gmv_max_campaign_info\",\n \"tiktok_business.get_gmv_max_custom_anchor_video_list\",\n \"tiktok_business.get_gmv_max_exclusive_authorization\",\n \"tiktok_business.get_gmv_max_identities\",\n \"tiktok_business.get_gmv_max_report\",\n \"tiktok_business.get_gmv_max_sessions\",\n \"tiktok_business.get_gmv_max_shop_video_anchors\",\n \"tiktok_business.get_gmv_max_videos\",\n \"tiktok_business.list_advertisers\",\n \"tiktok_business.list_campaigns\",\n \"tiktok_business.list_gmv_max_occupied_custom_shop_ads\",\n \"tiktok_business.list_gmv_max_sessions\",\n \"tiktok_business.list_gmv_max_stores\"\n ]\n },\n {\n \"service\": \"timecamp\",\n \"displayName\": \"TimeCamp\",\n \"categories\": [\n \"Productivity\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.timecamp.com\",\n \"actionCount\": 9,\n \"actions\": [\n \"timecamp.create_time_entry\",\n \"timecamp.get_current_user\",\n \"timecamp.get_timer_status\",\n \"timecamp.list_tasks\",\n \"timecamp.list_time_entries\",\n \"timecamp.list_users\",\n \"timecamp.start_timer\",\n \"timecamp.stop_timer\",\n \"timecamp.update_time_entry\"\n ]\n },\n {\n \"service\": \"timelink\",\n \"displayName\": \"timelink\",\n \"categories\": [\n \"Productivity\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://timelink.io\",\n \"actionCount\": 14,\n \"actions\": [\n \"timelink.get_client\",\n \"timelink.get_company\",\n \"timelink.get_current_token\",\n \"timelink.get_project\",\n \"timelink.get_service\",\n \"timelink.get_time_entry\",\n \"timelink.get_user\",\n \"timelink.list_active_time_entries\",\n \"timelink.list_clients\",\n \"timelink.list_projects\",\n \"timelink.list_services\",\n \"timelink.list_time_entries\",\n \"timelink.list_time_entry_required_fields\",\n \"timelink.list_users\"\n ]\n },\n {\n \"service\": \"tinybird\",\n \"displayName\": \"Tinybird\",\n \"categories\": [\n \"Data\",\n \"Developer Tools\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.tinybird.co\",\n \"actionCount\": 4,\n \"actions\": [\n \"tinybird.get_data_source\",\n \"tinybird.list_data_sources\",\n \"tinybird.run_pipe_endpoint\",\n \"tinybird.run_sql_query\"\n ]\n },\n {\n \"service\": \"tinypng\",\n \"displayName\": \"TinyPNG\",\n \"categories\": [\n \"Design & Media\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://tinypng.com\",\n \"actionCount\": 2,\n \"actions\": [\n \"tinypng.output_image\",\n \"tinypng.shrink_image\"\n ]\n },\n {\n \"service\": \"tinyurl\",\n \"displayName\": \"TinyURL\",\n \"categories\": [\n \"Marketing\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://tinyurl.com\",\n \"actionCount\": 2,\n \"actions\": [\n \"tinyurl.create_short_url\",\n \"tinyurl.list_urls\"\n ]\n },\n {\n \"service\": \"tisane\",\n \"displayName\": \"Tisane\",\n \"categories\": [\n \"AI\",\n \"Security\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://tisane.ai\",\n \"actionCount\": 7,\n \"actions\": [\n \"tisane.analyze_text\",\n \"tisane.calculate_similarity\",\n \"tisane.compare_entities\",\n \"tisane.detect_language\",\n \"tisane.extract_text\",\n \"tisane.list_supported_languages\",\n \"tisane.transform_text\"\n ]\n },\n {\n \"service\": \"tldv\",\n \"displayName\": \"tl;dv\",\n \"categories\": [\n \"Productivity\",\n \"Communication\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://tldv.io\",\n \"actionCount\": 5,\n \"actions\": [\n \"tldv.get_meeting\",\n \"tldv.get_notes\",\n \"tldv.get_transcript\",\n \"tldv.import_meeting\",\n \"tldv.list_meetings\"\n ]\n },\n {\n \"service\": \"todoist\",\n \"displayName\": \"Todoist\",\n \"categories\": [\n \"Productivity\"\n ],\n \"authTypes\": [\n \"oauth2\",\n \"api_key\"\n ],\n \"homepageUrl\": \"https://todoist.com\",\n \"actionCount\": 19,\n \"actions\": [\n \"todoist.close_task\",\n \"todoist.create_comment\",\n \"todoist.create_project\",\n \"todoist.create_section\",\n \"todoist.create_task\",\n \"todoist.get_comment\",\n \"todoist.get_current_user\",\n \"todoist.get_project\",\n \"todoist.get_section\",\n \"todoist.get_task\",\n \"todoist.list_comments\",\n \"todoist.list_labels\",\n \"todoist.list_projects\",\n \"todoist.list_sections\",\n \"todoist.list_tasks\",\n \"todoist.update_comment\",\n \"todoist.update_project\",\n \"todoist.update_section\",\n \"todoist.update_task\"\n ]\n },\n {\n \"service\": \"together_ai\",\n \"displayName\": \"Together AI\",\n \"categories\": [\n \"AI\",\n \"Developer Tools\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.together.ai\",\n \"actionCount\": 3,\n \"actions\": [\n \"together_ai.create_chat_completion\",\n \"together_ai.create_embedding\",\n \"together_ai.list_models\"\n ]\n },\n {\n \"service\": \"toggl\",\n \"displayName\": \"Toggl Track\",\n \"categories\": [\n \"Productivity\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://toggl.com/track\",\n \"actionCount\": 24,\n \"actions\": [\n \"toggl.create_project\",\n \"toggl.create_tag\",\n \"toggl.create_task\",\n \"toggl.create_time_entry\",\n \"toggl.delete_project\",\n \"toggl.delete_tag\",\n \"toggl.delete_task\",\n \"toggl.delete_time_entry\",\n \"toggl.get_current_time_entry\",\n \"toggl.get_current_user\",\n \"toggl.get_project\",\n \"toggl.get_task\",\n \"toggl.get_time_entry\",\n \"toggl.get_workspace\",\n \"toggl.list_projects\",\n \"toggl.list_tags\",\n \"toggl.list_tasks\",\n \"toggl.list_time_entries\",\n \"toggl.list_workspaces\",\n \"toggl.stop_time_entry\",\n \"toggl.update_project\",\n \"toggl.update_tag\",\n \"toggl.update_task\",\n \"toggl.update_time_entry\"\n ]\n },\n {\n \"service\": \"tomba\",\n \"displayName\": \"Tomba\",\n \"categories\": [\n \"Marketing\",\n \"Data\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://tomba.io\",\n \"actionCount\": 10,\n \"actions\": [\n \"tomba.domain_search\",\n \"tomba.email_count\",\n \"tomba.email_finder\",\n \"tomba.email_sources\",\n \"tomba.email_verifier\",\n \"tomba.enrich\",\n \"tomba.get_account\",\n \"tomba.linkedin\",\n \"tomba.search_companies\",\n \"tomba.technology\"\n ]\n },\n {\n \"service\": \"tomtom\",\n \"displayName\": \"TomTom\",\n \"categories\": [\n \"Location\",\n \"Developer Tools\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://developer.tomtom.com\",\n \"actionCount\": 5,\n \"actions\": [\n \"tomtom.autocomplete\",\n \"tomtom.fuzzy_search\",\n \"tomtom.geocode\",\n \"tomtom.nearby_search\",\n \"tomtom.reverse_geocode\"\n ]\n },\n {\n \"service\": \"torii\",\n \"displayName\": \"Torii\",\n \"categories\": [\n \"Productivity\",\n \"Finance\",\n \"Security\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.toriihq.com\",\n \"actionCount\": 9,\n \"actions\": [\n \"torii.get_app\",\n \"torii.get_contract\",\n \"torii.get_organization\",\n \"torii.get_user\",\n \"torii.list_apps\",\n \"torii.list_contracts\",\n \"torii.list_transactions\",\n \"torii.list_users\",\n \"torii.list_workflows\"\n ]\n },\n {\n \"service\": \"tpscheck\",\n \"displayName\": \"TPSCheck\",\n \"categories\": [\n \"Communication\",\n \"Marketing\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.tpscheck.uk\",\n \"actionCount\": 3,\n \"actions\": [\n \"tpscheck.batch_check_phones\",\n \"tpscheck.check_phone\",\n \"tpscheck.get_credits\"\n ]\n },\n {\n \"service\": \"trello\",\n \"displayName\": \"Trello\",\n \"categories\": [\n \"Productivity\"\n ],\n \"authTypes\": [\n \"custom_credential\"\n ],\n \"homepageUrl\": \"https://trello.com\",\n \"actionCount\": 28,\n \"actions\": [\n \"trello.add_card_attachment_url\",\n \"trello.add_card_comment\",\n \"trello.add_card_label\",\n \"trello.add_card_member\",\n \"trello.add_checkitem\",\n \"trello.archive_card\",\n \"trello.archive_list\",\n \"trello.create_board\",\n \"trello.create_card\",\n \"trello.create_checklist\",\n \"trello.create_list\",\n \"trello.get_board\",\n \"trello.get_card\",\n \"trello.get_member\",\n \"trello.list_board_cards\",\n \"trello.list_board_labels\",\n \"trello.list_board_lists\",\n \"trello.list_board_members\",\n \"trello.list_card_checklists\",\n \"trello.list_card_comments\",\n \"trello.list_member_boards\",\n \"trello.move_card\",\n \"trello.remove_card_label\",\n \"trello.remove_card_member\",\n \"trello.search\",\n \"trello.update_card\",\n \"trello.update_checkitem_state\",\n \"trello.update_list\"\n ]\n },\n {\n \"service\": \"tremendous\",\n \"displayName\": \"Tremendous\",\n \"categories\": [\n \"Finance\",\n \"Marketing\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.tremendous.com\",\n \"actionCount\": 13,\n \"actions\": [\n \"tremendous.create_order\",\n \"tremendous.generate_reward_link\",\n \"tremendous.get_campaign\",\n \"tremendous.get_funding_source\",\n \"tremendous.get_order\",\n \"tremendous.get_product\",\n \"tremendous.get_reward\",\n \"tremendous.list_campaigns\",\n \"tremendous.list_funding_sources\",\n \"tremendous.list_orders\",\n \"tremendous.list_organizations\",\n \"tremendous.list_products\",\n \"tremendous.list_rewards\"\n ]\n },\n {\n \"service\": \"trent\",\n \"displayName\": \"Trent\",\n \"categories\": [\n \"AI\",\n \"Security\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://trent.ai/\",\n \"actionCount\": 1,\n \"actions\": [\n \"trent.send_chat\"\n ]\n },\n {\n \"service\": \"trigger_dev\",\n \"displayName\": \"Trigger.dev\",\n \"categories\": [\n \"Developer Tools\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://trigger.dev\",\n \"actionCount\": 6,\n \"actions\": [\n \"trigger_dev.cancel_run\",\n \"trigger_dev.get_run\",\n \"trigger_dev.get_run_result\",\n \"trigger_dev.list_runs\",\n \"trigger_dev.replay_run\",\n \"trigger_dev.trigger_task\"\n ]\n },\n {\n \"service\": \"tripadvisor\",\n \"displayName\": \"Tripadvisor\",\n \"categories\": [\n \"Location\",\n \"Data\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.tripadvisor.com/developers\",\n \"actionCount\": 4,\n \"actions\": [\n \"tripadvisor.get_location_details\",\n \"tripadvisor.get_location_photos\",\n \"tripadvisor.search_locations\",\n \"tripadvisor.search_nearby_locations\"\n ]\n },\n {\n \"service\": \"triple_whale\",\n \"displayName\": \"Triple Whale\",\n \"categories\": [\n \"Data\",\n \"Marketing\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.triplewhale.com\",\n \"actionCount\": 4,\n \"actions\": [\n \"triple_whale.execute_custom_sql_query\",\n \"triple_whale.get_customer_journey_attribution_data\",\n \"triple_whale.get_summary_page_data\",\n \"triple_whale.validate_api_key\"\n ]\n },\n {\n \"service\": \"truvera\",\n \"displayName\": \"Truvera\",\n \"categories\": [\n \"Security\",\n \"Developer Tools\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://truvera.io\",\n \"actionCount\": 10,\n \"actions\": [\n \"truvera.create_credential_schema\",\n \"truvera.create_did\",\n \"truvera.delete_credential_schema\",\n \"truvera.delete_did\",\n \"truvera.get_credential_schema\",\n \"truvera.get_did\",\n \"truvera.get_job\",\n \"truvera.get_profile\",\n \"truvera.list_credential_schemas\",\n \"truvera.list_dids\"\n ]\n },\n {\n \"service\": \"turbot_pipes\",\n \"displayName\": \"Turbot Pipes\",\n \"categories\": [\n \"Data\",\n \"Developer Tools\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://turbot.com/pipes\",\n \"actionCount\": 1,\n \"actions\": [\n \"turbot_pipes.execute_query\"\n ]\n },\n {\n \"service\": \"turso\",\n \"displayName\": \"Turso\",\n \"categories\": [\n \"Developer Tools\",\n \"Data\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://turso.tech\",\n \"actionCount\": 10,\n \"actions\": [\n \"turso.create_database\",\n \"turso.create_group\",\n \"turso.delete_database\",\n \"turso.get_database\",\n \"turso.get_group\",\n \"turso.get_organization\",\n \"turso.list_databases\",\n \"turso.list_groups\",\n \"turso.list_locations\",\n \"turso.list_organizations\"\n ]\n },\n {\n \"service\": \"tushare\",\n \"displayName\": \"Tushare\",\n \"categories\": [\n \"Finance\",\n \"Data\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://tushare.pro\",\n \"actionCount\": 6,\n \"actions\": [\n \"tushare.get_adjustment_factors\",\n \"tushare.get_daily_basic\",\n \"tushare.get_daily_quotes\",\n \"tushare.get_trade_calendar\",\n \"tushare.list_stocks\",\n \"tushare.query_data\"\n ]\n },\n {\n \"service\": \"twelve_data\",\n \"displayName\": \"Twelve Data\",\n \"categories\": [\n \"Finance\",\n \"Data\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://twelvedata.com\",\n \"actionCount\": 12,\n \"actions\": [\n \"twelve_data.earliest_timestamp\",\n \"twelve_data.eod\",\n \"twelve_data.exchanges\",\n \"twelve_data.forex_pairs\",\n \"twelve_data.market_movers\",\n \"twelve_data.market_state\",\n \"twelve_data.price\",\n \"twelve_data.profile\",\n \"twelve_data.quote\",\n \"twelve_data.stocks\",\n \"twelve_data.symbol_search\",\n \"twelve_data.time_series\"\n ]\n },\n {\n \"service\": \"twenty_crm\",\n \"displayName\": \"Twenty CRM\",\n \"categories\": [\n \"Productivity\",\n \"Marketing\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://twenty.com\",\n \"actionCount\": 6,\n \"actions\": [\n \"twenty_crm.create_record\",\n \"twenty_crm.delete_record\",\n \"twenty_crm.list_metadata_objects\",\n \"twenty_crm.list_records\",\n \"twenty_crm.retrieve_record\",\n \"twenty_crm.update_record\"\n ]\n },\n {\n \"service\": \"twilio\",\n \"displayName\": \"Twilio\",\n \"categories\": [\n \"Communication\"\n ],\n \"authTypes\": [\n \"custom_credential\"\n ],\n \"homepageUrl\": \"https://www.twilio.com\",\n \"actionCount\": 5,\n \"actions\": [\n \"twilio.get_account\",\n \"twilio.get_message\",\n \"twilio.list_messages\",\n \"twilio.list_usage_records\",\n \"twilio.send_message\"\n ]\n },\n {\n \"service\": \"twitter\",\n \"displayName\": \"X (Twitter)\",\n \"categories\": [\n \"Social\",\n \"Marketing\"\n ],\n \"authTypes\": [\n \"oauth2\",\n \"custom_credential\"\n ],\n \"homepageUrl\": \"https://x.com\",\n \"actionCount\": 71,\n \"actions\": [\n \"twitter.add_list_member\",\n \"twitter.add_post_to_bookmarks\",\n \"twitter.bookmarks_by_user\",\n \"twitter.create_compliance_job\",\n \"twitter.create_dm_conversation\",\n \"twitter.create_list\",\n \"twitter.creation_of_a_post\",\n \"twitter.delete_dm\",\n \"twitter.delete_list\",\n \"twitter.follow_list\",\n \"twitter.follow_user\",\n \"twitter.followers_by_user_id\",\n \"twitter.following_by_user_id\",\n \"twitter.full_archive_search\",\n \"twitter.get_compliance_job\",\n \"twitter.get_compliance_jobs\",\n \"twitter.get_dm_conversation_events\",\n \"twitter.get_dm_event\",\n \"twitter.get_list\",\n \"twitter.get_list_followers\",\n \"twitter.get_list_members\",\n \"twitter.get_media_upload_status\",\n \"twitter.get_muted_users\",\n \"twitter.get_post_retweeters_action\",\n \"twitter.get_post_retweets\",\n \"twitter.get_recent_dm_events\",\n \"twitter.get_space_by_id\",\n \"twitter.get_space_posts\",\n \"twitter.get_space_ticket_buyers\",\n \"twitter.get_spaces_by_creators\",\n \"twitter.get_spaces_by_ids\",\n \"twitter.get_user_by_id\",\n \"twitter.get_user_followed_lists\",\n \"twitter.get_user_list_memberships\",\n \"twitter.get_user_owned_lists\",\n \"twitter.get_user_pinned_lists\",\n \"twitter.get_users_by_ids\",\n \"twitter.hide_replies\",\n \"twitter.list_post_likers\",\n \"twitter.list_posts_timeline_by_list_id\",\n \"twitter.mute_user\",\n \"twitter.pin_list\",\n \"twitter.post_delete_by_post_id\",\n \"twitter.post_lookup_by_post_id\",\n \"twitter.post_lookup_by_post_ids\",\n \"twitter.recent_search\",\n \"twitter.remove_list_member\",\n \"twitter.remove_post_from_bookmarks\",\n \"twitter.retrieve_dm_conversation_events\",\n \"twitter.retrieve_posts_that_quote_a_post\",\n \"twitter.returns_post_objects_liked_by_the_provided_user_id\",\n \"twitter.retweet_post\",\n \"twitter.search_full_archive_counts\",\n \"twitter.search_recent_counts\",\n \"twitter.search_spaces\",\n \"twitter.send_a_new_message_to_a_user\",\n \"twitter.send_dm_to_conversation\",\n \"twitter.unfollow_list\",\n \"twitter.unfollow_user\",\n \"twitter.unlike_post\",\n \"twitter.unmute_user\",\n \"twitter.unpin_list\",\n \"twitter.unretweet_post\",\n \"twitter.update_list\",\n \"twitter.upload_large_media\",\n \"twitter.upload_media\",\n \"twitter.user_home_timeline_by_user_id\",\n \"twitter.user_like_post\",\n \"twitter.user_lookup_by_username\",\n \"twitter.user_lookup_by_usernames\",\n \"twitter.user_lookup_me\"\n ]\n },\n {\n \"service\": \"twitterapi_io\",\n \"displayName\": \"TwitterAPI.io\",\n \"categories\": [\n \"Social\",\n \"Data\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://twitterapi.io\",\n \"actionCount\": 39,\n \"actions\": [\n \"twitterapi_io.add_monitored_tweet_user\",\n \"twitterapi_io.add_tweet_filter_rule\",\n \"twitterapi_io.advanced_search_tweets\",\n \"twitterapi_io.batch_get_users\",\n \"twitterapi_io.check_follow_relationship\",\n \"twitterapi_io.delete_tweet_filter_rule\",\n \"twitterapi_io.get_account_info\",\n \"twitterapi_io.get_article\",\n \"twitterapi_io.get_community_info\",\n \"twitterapi_io.get_community_members\",\n \"twitterapi_io.get_community_moderators\",\n \"twitterapi_io.get_community_tweets\",\n \"twitterapi_io.get_list_followers\",\n \"twitterapi_io.get_list_members\",\n \"twitterapi_io.get_list_timeline\",\n \"twitterapi_io.get_list_tweets\",\n \"twitterapi_io.get_space\",\n \"twitterapi_io.get_trends\",\n \"twitterapi_io.get_tweet_quotes\",\n \"twitterapi_io.get_tweet_replies\",\n \"twitterapi_io.get_tweet_replies_legacy\",\n \"twitterapi_io.get_tweet_retweeters\",\n \"twitterapi_io.get_tweet_thread_context\",\n \"twitterapi_io.get_tweets\",\n \"twitterapi_io.get_user\",\n \"twitterapi_io.get_user_about\",\n \"twitterapi_io.get_user_follower_ids\",\n \"twitterapi_io.get_user_followers\",\n \"twitterapi_io.get_user_followings\",\n \"twitterapi_io.get_user_last_tweets\",\n \"twitterapi_io.get_user_mentions\",\n \"twitterapi_io.get_user_timeline\",\n \"twitterapi_io.get_user_verified_followers\",\n \"twitterapi_io.list_monitored_tweet_users\",\n \"twitterapi_io.list_tweet_filter_rules\",\n \"twitterapi_io.remove_monitored_tweet_user\",\n \"twitterapi_io.search_all_community_tweets\",\n \"twitterapi_io.search_users\",\n \"twitterapi_io.update_tweet_filter_rule\"\n ]\n },\n {\n \"service\": \"twochat\",\n \"displayName\": \"2Chat\",\n \"categories\": [\n \"Communication\",\n \"Developer Tools\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://2chat.co\",\n \"actionCount\": 5,\n \"actions\": [\n \"twochat.create_contact\",\n \"twochat.get_api_usage_info\",\n \"twochat.list_contacts\",\n \"twochat.list_webhooks\",\n \"twochat.test_api_key\"\n ]\n },\n {\n \"service\": \"typeform\",\n \"displayName\": \"Typeform\",\n \"categories\": [\n \"Productivity\",\n \"Data\"\n ],\n \"authTypes\": [\n \"oauth2\",\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.typeform.com\",\n \"actionCount\": 6,\n \"actions\": [\n \"typeform.get_current_user\",\n \"typeform.get_form\",\n \"typeform.get_workspace\",\n \"typeform.list_form_responses\",\n \"typeform.list_forms\",\n \"typeform.list_workspaces\"\n ]\n },\n {\n \"service\": \"typefully\",\n \"displayName\": \"Typefully\",\n \"categories\": [\n \"Social\",\n \"Marketing\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://typefully.com\",\n \"actionCount\": 8,\n \"actions\": [\n \"typefully.create_draft\",\n \"typefully.delete_draft\",\n \"typefully.get_current_user\",\n \"typefully.get_draft\",\n \"typefully.get_social_set\",\n \"typefully.list_drafts\",\n \"typefully.list_social_sets\",\n \"typefully.update_draft\"\n ]\n },\n {\n \"service\": \"u301\",\n \"displayName\": \"U301\",\n \"categories\": [\n \"Marketing\",\n \"Productivity\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://u301.com\",\n \"actionCount\": 3,\n \"actions\": [\n \"u301.delete_link\",\n \"u301.list_domains\",\n \"u301.shorten_link\"\n ]\n },\n {\n \"service\": \"umami\",\n \"displayName\": \"Umami\",\n \"categories\": [\n \"Data\",\n \"Marketing\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://umami.is\",\n \"actionCount\": 8,\n \"actions\": [\n \"umami.get_current_user\",\n \"umami.get_metrics\",\n \"umami.get_pageviews\",\n \"umami.get_realtime\",\n \"umami.get_website\",\n \"umami.get_website_stats\",\n \"umami.list_events\",\n \"umami.list_websites\"\n ]\n },\n {\n \"service\": \"unifapi\",\n \"displayName\": \"UnifAPI\",\n \"categories\": [\n \"AI\",\n \"Data\",\n \"Location\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://unifapi.com\",\n \"actionCount\": 220,\n \"actions\": [\n \"unifapi.aggregate_geo_mentions\",\n \"unifapi.batch_get_tiktok_videos\",\n \"unifapi.browse_instagram_explore\",\n \"unifapi.browse_instagram_recommended_reels\",\n \"unifapi.browse_reddit_feed_home\",\n \"unifapi.browse_reddit_feed_news\",\n \"unifapi.browse_reddit_feed_popular\",\n \"unifapi.browse_youtube_trending\",\n \"unifapi.capture_screenshot\",\n \"unifapi.check_x_friendship\",\n \"unifapi.classify_seo_keyword_intent\",\n \"unifapi.collect_seo_keyword_autocomplete\",\n \"unifapi.collect_seo_serp\",\n \"unifapi.compare_geo_mention_groups\",\n \"unifapi.convert_instagram_media_id\",\n \"unifapi.convert_instagram_shortcode_from_media\",\n \"unifapi.convert_instagram_user_id\",\n \"unifapi.count_seo_bulk_backlinks\",\n \"unifapi.count_seo_bulk_new_lost_backlinks\",\n \"unifapi.count_seo_bulk_new_lost_referring_domains\",\n \"unifapi.count_seo_bulk_referring_domains\",\n \"unifapi.discover_seo_keyword_ideas\",\n \"unifapi.estimate_seo_bulk_traffic\",\n \"unifapi.estimate_seo_historical_bulk_traffic\",\n \"unifapi.extract_instagram_shortcode\",\n \"unifapi.extract_links\",\n \"unifapi.find_seo_backlink_competitors\",\n \"unifapi.find_seo_backlink_domain_intersection\",\n \"unifapi.find_seo_backlink_page_intersection\",\n \"unifapi.find_seo_domain_competitors\",\n \"unifapi.find_seo_domain_keyword_intersection\",\n \"unifapi.find_seo_keyword_suggestions\",\n \"unifapi.find_seo_page_keyword_intersection\",\n \"unifapi.find_seo_ranked_keywords\",\n \"unifapi.find_seo_related_keywords\",\n \"unifapi.find_seo_serp_competitors\",\n \"unifapi.find_seo_site_keywords\",\n \"unifapi.get_geo_keyword_search_volume\",\n \"unifapi.get_hacker_news_item\",\n \"unifapi.get_hacker_news_max_item\",\n \"unifapi.get_hacker_news_updates\",\n \"unifapi.get_hacker_news_user\",\n \"unifapi.get_hotel_info\",\n \"unifapi.get_instagram_location\",\n \"unifapi.get_instagram_post\",\n \"unifapi.get_instagram_user\",\n \"unifapi.get_linkedin_ad\",\n \"unifapi.get_linkedin_company\",\n \"unifapi.get_linkedin_company_job_count\",\n \"unifapi.get_linkedin_company_member_insights\",\n \"unifapi.get_linkedin_group\",\n \"unifapi.get_linkedin_job\",\n \"unifapi.get_linkedin_post\",\n \"unifapi.get_linkedin_user\",\n \"unifapi.get_linkedin_user_about\",\n \"unifapi.get_linkedin_user_contact\",\n \"unifapi.get_linkedin_user_follower_count\",\n \"unifapi.get_reddit_post\",\n \"unifapi.get_reddit_subreddit\",\n \"unifapi.get_reddit_user\",\n \"unifapi.get_seo_backlink_history\",\n \"unifapi.get_seo_backlink_summary\",\n \"unifapi.get_seo_backlink_timeseries\",\n \"unifapi.get_seo_bulk_backlink_ranks\",\n \"unifapi.get_seo_bulk_spam_scores\",\n \"unifapi.get_seo_domain_rank_overview\",\n \"unifapi.get_seo_historical_rank_overview\",\n \"unifapi.get_seo_historical_serps\",\n \"unifapi.get_seo_keyword_history\",\n \"unifapi.get_seo_keyword_overview\",\n \"unifapi.get_seo_new_lost_backlinks_timeseries\",\n \"unifapi.get_threads_user\",\n \"unifapi.get_tiktok_hashtag\",\n \"unifapi.get_tiktok_music\",\n \"unifapi.get_tiktok_recommended_feed\",\n \"unifapi.get_tiktok_user\",\n \"unifapi.get_tiktok_video\",\n \"unifapi.get_x_autocomplete\",\n \"unifapi.get_x_community\",\n \"unifapi.get_x_community_about\",\n \"unifapi.get_x_trends_by_woeid\",\n \"unifapi.get_x_tweet\",\n \"unifapi.get_x_tweet_article\",\n \"unifapi.get_x_tweets\",\n \"unifapi.get_x_user\",\n \"unifapi.get_x_user_by_username\",\n \"unifapi.get_x_users\",\n \"unifapi.get_x_users_by_usernames\",\n \"unifapi.get_youtube_channel\",\n \"unifapi.get_youtube_playlist\",\n \"unifapi.get_youtube_video\",\n \"unifapi.get_youtube_video_transcript\",\n \"unifapi.list_geo_top_mentioned_domains\",\n \"unifapi.list_geo_top_mentioned_pages\",\n \"unifapi.list_hacker_news_story_ids\",\n \"unifapi.list_hacker_news_story_items\",\n \"unifapi.list_instagram_location_posts\",\n \"unifapi.list_instagram_nearby_locations\",\n \"unifapi.list_instagram_post_comment_replies\",\n \"unifapi.list_instagram_post_comments\",\n \"unifapi.list_instagram_user_followers\",\n \"unifapi.list_instagram_user_following\",\n \"unifapi.list_instagram_user_former_usernames\",\n \"unifapi.list_instagram_user_highlights\",\n \"unifapi.list_instagram_user_posts\",\n \"unifapi.list_instagram_user_reels\",\n \"unifapi.list_instagram_user_stories\",\n \"unifapi.list_instagram_user_tagged_posts\",\n \"unifapi.list_linkedin_company_affiliated\",\n \"unifapi.list_linkedin_company_jobs\",\n \"unifapi.list_linkedin_company_people\",\n \"unifapi.list_linkedin_company_posts\",\n \"unifapi.list_linkedin_group_posts\",\n \"unifapi.list_linkedin_post_comment_replies\",\n \"unifapi.list_linkedin_post_comments\",\n \"unifapi.list_linkedin_post_reactions\",\n \"unifapi.list_linkedin_post_reposts\",\n \"unifapi.list_linkedin_user_certifications\",\n \"unifapi.list_linkedin_user_comments\",\n \"unifapi.list_linkedin_user_educations\",\n \"unifapi.list_linkedin_user_experience\",\n \"unifapi.list_linkedin_user_honors\",\n \"unifapi.list_linkedin_user_images\",\n \"unifapi.list_linkedin_user_interest_companies\",\n \"unifapi.list_linkedin_user_interest_groups\",\n \"unifapi.list_linkedin_user_posts\",\n \"unifapi.list_linkedin_user_publications\",\n \"unifapi.list_linkedin_user_reactions\",\n \"unifapi.list_linkedin_user_recommendations\",\n \"unifapi.list_linkedin_user_skills\",\n \"unifapi.list_linkedin_user_videos\",\n \"unifapi.list_linkedin_user_volunteers\",\n \"unifapi.list_reddit_post_comments\",\n \"unifapi.list_reddit_trending_searches\",\n \"unifapi.list_reddit_user_comments\",\n \"unifapi.list_reddit_user_posts\",\n \"unifapi.list_seo_backlink_anchors\",\n \"unifapi.list_seo_backlink_domain_pages\",\n \"unifapi.list_seo_backlinks\",\n \"unifapi.list_seo_referring_domains\",\n \"unifapi.list_seo_referring_networks\",\n \"unifapi.list_seo_relevant_pages\",\n \"unifapi.list_seo_subdomains\",\n \"unifapi.list_threads_user_posts\",\n \"unifapi.list_threads_user_replies\",\n \"unifapi.list_threads_user_reposts\",\n \"unifapi.list_tiktok_hashtag_videos\",\n \"unifapi.list_tiktok_music_videos\",\n \"unifapi.list_tiktok_user_followers\",\n \"unifapi.list_tiktok_user_following\",\n \"unifapi.list_tiktok_user_likes\",\n \"unifapi.list_tiktok_user_videos\",\n \"unifapi.list_tiktok_video_comment_replies\",\n \"unifapi.list_tiktok_video_comments\",\n \"unifapi.list_x_community_media\",\n \"unifapi.list_x_community_members\",\n \"unifapi.list_x_community_moderators\",\n \"unifapi.list_x_community_tweets\",\n \"unifapi.list_x_list_followers\",\n \"unifapi.list_x_list_members\",\n \"unifapi.list_x_list_tweets\",\n \"unifapi.list_x_tweet_liking_users\",\n \"unifapi.list_x_tweet_quotes\",\n \"unifapi.list_x_tweet_repost_users\",\n \"unifapi.list_x_user_follower_ids\",\n \"unifapi.list_x_user_followers\",\n \"unifapi.list_x_user_following\",\n \"unifapi.list_x_user_following_ids\",\n \"unifapi.list_x_user_liked_tweets\",\n \"unifapi.list_x_user_tweets\",\n \"unifapi.list_x_user_verified_followers\",\n \"unifapi.list_youtube_channel_community_posts\",\n \"unifapi.list_youtube_channel_playlists\",\n \"unifapi.list_youtube_channel_shorts\",\n \"unifapi.list_youtube_channel_videos\",\n \"unifapi.list_youtube_hashtag_videos\",\n \"unifapi.list_youtube_playlist_videos\",\n \"unifapi.list_youtube_related_videos\",\n \"unifapi.list_youtube_video_captions\",\n \"unifapi.list_youtube_video_comments\",\n \"unifapi.render_html\",\n \"unifapi.render_markdown\",\n \"unifapi.resolve_linkedin_industries\",\n \"unifapi.resolve_linkedin_locations\",\n \"unifapi.resolve_tiktok_user\",\n \"unifapi.resolve_tiktok_video\",\n \"unifapi.resolve_youtube_channel_id\",\n \"unifapi.score_seo_keyword_difficulty\",\n \"unifapi.search_events\",\n \"unifapi.search_geo_ai_mode\",\n \"unifapi.search_geo_mentions\",\n \"unifapi.search_hotels\",\n \"unifapi.search_instagram\",\n \"unifapi.search_linkedin_ads\",\n \"unifapi.search_linkedin_jobs\",\n \"unifapi.search_linkedin_people\",\n \"unifapi.search_linkedin_posts\",\n \"unifapi.search_linkedin_schools\",\n \"unifapi.search_local\",\n \"unifapi.search_maps\",\n \"unifapi.search_news\",\n \"unifapi.search_threads_profiles\",\n \"unifapi.search_threads_recent\",\n \"unifapi.search_threads_top\",\n \"unifapi.search_tiktok\",\n \"unifapi.search_tiktok_hashtags\",\n \"unifapi.search_tiktok_users\",\n \"unifapi.search_tiktok_videos\",\n \"unifapi.search_x_communities\",\n \"unifapi.search_x_community_member\",\n \"unifapi.search_x_lists\",\n \"unifapi.search_x_recent_tweets\",\n \"unifapi.search_youtube_channel\",\n \"unifapi.search_youtube_channels\",\n \"unifapi.search_youtube_playlists\",\n \"unifapi.search_youtube_videos\",\n \"unifapi.summarize_seo_backlink_domain_pages\",\n \"unifapi.summarize_seo_bulk_pages\",\n \"unifapi.translate_x_tweet\",\n \"unifapi.translate_x_user_profile\"\n ]\n },\n {\n \"service\": \"unione\",\n \"displayName\": \"UniOne\",\n \"categories\": [\n \"Communication\",\n \"Marketing\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://unione.io\",\n \"actionCount\": 5,\n \"actions\": [\n \"unione.get_account_info\",\n \"unione.list_suppressions\",\n \"unione.list_tags\",\n \"unione.list_templates\",\n \"unione.send_email\"\n ]\n },\n {\n \"service\": \"unipile\",\n \"displayName\": \"Unipile\",\n \"categories\": [\n \"Communication\",\n \"Productivity\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.unipile.com/\",\n \"actionCount\": 6,\n \"actions\": [\n \"unipile.get_account\",\n \"unipile.get_chat\",\n \"unipile.get_message\",\n \"unipile.list_accounts\",\n \"unipile.list_chat_messages\",\n \"unipile.list_chats\"\n ]\n },\n {\n \"service\": \"uniswap_api\",\n \"displayName\": \"Uniswap API\",\n \"categories\": [\n \"Finance\",\n \"Developer Tools\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://uniswap.org\",\n \"actionCount\": 3,\n \"actions\": [\n \"uniswap_api.check_approval\",\n \"uniswap_api.create_swap\",\n \"uniswap_api.get_quote\"\n ]\n },\n {\n \"service\": \"unsplash\",\n \"displayName\": \"Unsplash\",\n \"categories\": [\n \"Design & Media\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://unsplash.com\",\n \"actionCount\": 6,\n \"actions\": [\n \"unsplash.get_photo\",\n \"unsplash.get_random_photo\",\n \"unsplash.get_topic_photos\",\n \"unsplash.list_photos\",\n \"unsplash.list_topics\",\n \"unsplash.search_photos\"\n ]\n },\n {\n \"service\": \"updown_io\",\n \"displayName\": \"updown.io\",\n \"categories\": [\n \"Developer Tools\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://updown.io\",\n \"actionCount\": 9,\n \"actions\": [\n \"updown_io.create_check\",\n \"updown_io.delete_check\",\n \"updown_io.get_check\",\n \"updown_io.list_checks\",\n \"updown_io.list_node_ips\",\n \"updown_io.list_node_ipv4\",\n \"updown_io.list_node_ipv6\",\n \"updown_io.list_nodes\",\n \"updown_io.update_check\"\n ]\n },\n {\n \"service\": \"uploadcare\",\n \"displayName\": \"Uploadcare\",\n \"categories\": [\n \"Storage\",\n \"Design & Media\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://uploadcare.com\",\n \"actionCount\": 7,\n \"actions\": [\n \"uploadcare.delete_file\",\n \"uploadcare.get_file_info\",\n \"uploadcare.get_group_info\",\n \"uploadcare.get_project_info\",\n \"uploadcare.list_files\",\n \"uploadcare.list_groups\",\n \"uploadcare.store_file\"\n ]\n },\n {\n \"service\": \"upsales\",\n \"displayName\": \"Upsales\",\n \"categories\": [\n \"Marketing\",\n \"Productivity\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.upsales.com/\",\n \"actionCount\": 13,\n \"actions\": [\n \"upsales.create_company\",\n \"upsales.create_contact\",\n \"upsales.delete_company\",\n \"upsales.delete_contact\",\n \"upsales.get_company\",\n \"upsales.get_contact\",\n \"upsales.get_current_user\",\n \"upsales.get_user\",\n \"upsales.list_companies\",\n \"upsales.list_contacts\",\n \"upsales.list_users\",\n \"upsales.update_company\",\n \"upsales.update_contact\"\n ]\n },\n {\n \"service\": \"uptimerobot\",\n \"displayName\": \"UptimeRobot\",\n \"categories\": [\n \"Developer Tools\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://uptimerobot.com\",\n \"actionCount\": 7,\n \"actions\": [\n \"uptimerobot.create_monitor\",\n \"uptimerobot.delete_monitor\",\n \"uptimerobot.get_account_details\",\n \"uptimerobot.get_monitor\",\n \"uptimerobot.list_alert_contacts\",\n \"uptimerobot.list_monitors\",\n \"uptimerobot.update_monitor\"\n ]\n },\n {\n \"service\": \"urlscan\",\n \"displayName\": \"urlscan.io\",\n \"categories\": [\n \"Security\",\n \"Data\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://urlscan.io\",\n \"actionCount\": 3,\n \"actions\": [\n \"urlscan.get_result\",\n \"urlscan.search_scans\",\n \"urlscan.submit_scan\"\n ]\n },\n {\n \"service\": \"userflow\",\n \"displayName\": \"Userflow\",\n \"categories\": [\n \"Data\",\n \"Marketing\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://userflow.com\",\n \"actionCount\": 8,\n \"actions\": [\n \"userflow.delete_group\",\n \"userflow.delete_user\",\n \"userflow.get_group\",\n \"userflow.get_user\",\n \"userflow.list_users\",\n \"userflow.track_event\",\n \"userflow.upsert_group\",\n \"userflow.upsert_user\"\n ]\n },\n {\n \"service\": \"userlist\",\n \"displayName\": \"Userlist\",\n \"categories\": [\n \"Marketing\",\n \"Communication\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://userlist.com\",\n \"actionCount\": 5,\n \"actions\": [\n \"userlist.create_event\",\n \"userlist.push_company\",\n \"userlist.push_relationship\",\n \"userlist.push_user\",\n \"userlist.send_message\"\n ]\n },\n {\n \"service\": \"v0\",\n \"displayName\": \"v0\",\n \"categories\": [\n \"AI\",\n \"Developer Tools\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://v0.dev\",\n \"actionCount\": 45,\n \"actions\": [\n \"v0.assign_project_to_chat\",\n \"v0.create_chat\",\n \"v0.create_deployment\",\n \"v0.create_env_vars\",\n \"v0.create_hook\",\n \"v0.create_project\",\n \"v0.create_vercel_project\",\n \"v0.delete_chat\",\n \"v0.delete_env_vars\",\n \"v0.delete_hook\",\n \"v0.delete_project\",\n \"v0.favorite_chat\",\n \"v0.find_chats\",\n \"v0.find_deployment_errors\",\n \"v0.find_deployment_logs\",\n \"v0.find_deployments\",\n \"v0.find_env_vars\",\n \"v0.find_hooks\",\n \"v0.find_messages\",\n \"v0.find_projects\",\n \"v0.find_rate_limit\",\n \"v0.find_vercel_projects\",\n \"v0.find_versions\",\n \"v0.fork_chat\",\n \"v0.get_billing\",\n \"v0.get_chat\",\n \"v0.get_deployment\",\n \"v0.get_env_var\",\n \"v0.get_hook\",\n \"v0.get_message\",\n \"v0.get_plan\",\n \"v0.get_project\",\n \"v0.get_project_by_chat\",\n \"v0.get_usage_report\",\n \"v0.get_user\",\n \"v0.get_user_scopes\",\n \"v0.get_version\",\n \"v0.init_chat\",\n \"v0.resume_message\",\n \"v0.send_message\",\n \"v0.update_chat\",\n \"v0.update_env_vars\",\n \"v0.update_hook\",\n \"v0.update_project\",\n \"v0.update_version\"\n ]\n },\n {\n \"service\": \"v2ex\",\n \"displayName\": \"V2EX\",\n \"categories\": [\n \"Social\",\n \"Developer Tools\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.v2ex.com\",\n \"actionCount\": 13,\n \"actions\": [\n \"v2ex.boost_topic\",\n \"v2ex.create_token\",\n \"v2ex.delete_notification\",\n \"v2ex.get_current_member\",\n \"v2ex.get_current_token\",\n \"v2ex.get_node\",\n \"v2ex.get_topic\",\n \"v2ex.list_hot_topics\",\n \"v2ex.list_latest_topics\",\n \"v2ex.list_node_topics\",\n \"v2ex.list_notifications\",\n \"v2ex.list_topic_replies\",\n \"v2ex.set_topic_sticky\"\n ]\n },\n {\n \"service\": \"valyu\",\n \"displayName\": \"Valyu\",\n \"categories\": [\n \"AI\",\n \"Data\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://valyu.ai\",\n \"actionCount\": 1,\n \"actions\": [\n \"valyu.search\"\n ]\n },\n {\n \"service\": \"vapi\",\n \"displayName\": \"Vapi\",\n \"categories\": [\n \"AI\",\n \"Communication\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://vapi.ai\",\n \"actionCount\": 38,\n \"actions\": [\n \"vapi.create_analytics_query\",\n \"vapi.create_assistant\",\n \"vapi.create_eval\",\n \"vapi.create_openai_chat\",\n \"vapi.create_phone_number\",\n \"vapi.create_policy\",\n \"vapi.create_provider_resource\",\n \"vapi.create_scorecard\",\n \"vapi.create_session\",\n \"vapi.delete_call\",\n \"vapi.delete_chat\",\n \"vapi.delete_eval\",\n \"vapi.delete_eval_run\",\n \"vapi.delete_phone_number\",\n \"vapi.get_assistant\",\n \"vapi.get_call\",\n \"vapi.get_chat\",\n \"vapi.get_eval\",\n \"vapi.get_file\",\n \"vapi.get_tool\",\n \"vapi.list_assistants\",\n \"vapi.list_calls\",\n \"vapi.list_chats\",\n \"vapi.list_evals\",\n \"vapi.list_insights\",\n \"vapi.list_monitoring_policies\",\n \"vapi.list_phone_numbers\",\n \"vapi.list_provider_resources\",\n \"vapi.list_scorecards\",\n \"vapi.list_sessions\",\n \"vapi.list_structured_outputs\",\n \"vapi.test_code_tool_execution\",\n \"vapi.update_assistant\",\n \"vapi.update_eval\",\n \"vapi.update_insight\",\n \"vapi.update_phone_number\",\n \"vapi.update_tool\",\n \"vapi.upload_file\"\n ]\n },\n {\n \"service\": \"vatlayer\",\n \"displayName\": \"VATlayer\",\n \"categories\": [\n \"Finance\",\n \"Data\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://vatlayer.com\",\n \"actionCount\": 5,\n \"actions\": [\n \"vatlayer.calculate_price\",\n \"vatlayer.get_rate\",\n \"vatlayer.list_rates\",\n \"vatlayer.list_types\",\n \"vatlayer.validate_vat_number\"\n ]\n },\n {\n \"service\": \"vectorshift\",\n \"displayName\": \"VectorShift\",\n \"categories\": [\n \"AI\",\n \"Developer Tools\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://vectorshift.ai\",\n \"actionCount\": 4,\n \"actions\": [\n \"vectorshift.bulk_run_pipeline\",\n \"vectorshift.get_pipeline\",\n \"vectorshift.list_pipelines\",\n \"vectorshift.run_pipeline\"\n ]\n },\n {\n \"service\": \"vercel\",\n \"displayName\": \"Vercel\",\n \"categories\": [\n \"Developer Tools\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://vercel.com\",\n \"actionCount\": 23,\n \"actions\": [\n \"vercel.add_project_domain\",\n \"vercel.create_project\",\n \"vercel.create_project_env\",\n \"vercel.create_webhook\",\n \"vercel.delete_project_env\",\n \"vercel.get_auth_user\",\n \"vercel.get_deployment\",\n \"vercel.get_deployment_events\",\n \"vercel.get_domain_config\",\n \"vercel.get_project\",\n \"vercel.get_project_domain\",\n \"vercel.get_runtime_logs\",\n \"vercel.get_team\",\n \"vercel.get_webhook\",\n \"vercel.list_deployments\",\n \"vercel.list_project_domains\",\n \"vercel.list_project_envs\",\n \"vercel.list_projects\",\n \"vercel.list_teams\",\n \"vercel.list_webhooks\",\n \"vercel.update_project\",\n \"vercel.update_project_env\",\n \"vercel.verify_project_domain\"\n ]\n },\n {\n \"service\": \"verifiedemail\",\n \"displayName\": \"VerifiedEmail\",\n \"categories\": [\n \"Communication\",\n \"Marketing\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://verified.email\",\n \"actionCount\": 6,\n \"actions\": [\n \"verifiedemail.get_download\",\n \"verifiedemail.get_entitlements\",\n \"verifiedemail.get_list\",\n \"verifiedemail.list_downloads\",\n \"verifiedemail.list_lists\",\n \"verifiedemail.verify_emails\"\n ]\n },\n {\n \"service\": \"veriphone\",\n \"displayName\": \"Veriphone\",\n \"categories\": [\n \"Communication\",\n \"Data\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://veriphone.io\",\n \"actionCount\": 2,\n \"actions\": [\n \"veriphone.get_credits\",\n \"veriphone.verify_phone_number\"\n ]\n },\n {\n \"service\": \"vestaboard\",\n \"displayName\": \"Vestaboard\",\n \"categories\": [\n \"Communication\",\n \"Design & Media\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.vestaboard.com\",\n \"actionCount\": 4,\n \"actions\": [\n \"vestaboard.get_current_message\",\n \"vestaboard.get_transition\",\n \"vestaboard.send_message\",\n \"vestaboard.set_transition\"\n ]\n },\n {\n \"service\": \"viggle\",\n \"displayName\": \"Viggle\",\n \"categories\": [\n \"AI\",\n \"Design & Media\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://viggle.ai\",\n \"actionCount\": 11,\n \"actions\": [\n \"viggle.create_character\",\n \"viggle.create_render_job\",\n \"viggle.delete_character\",\n \"viggle.delete_scene\",\n \"viggle.get_character\",\n \"viggle.get_credit_balance\",\n \"viggle.get_render_job_status\",\n \"viggle.get_scene\",\n \"viggle.import_template\",\n \"viggle.list_characters\",\n \"viggle.list_scenes\"\n ]\n },\n {\n \"service\": \"vimeo\",\n \"displayName\": \"Vimeo\",\n \"categories\": [\n \"Design & Media\",\n \"Social\"\n ],\n \"authTypes\": [\n \"oauth2\"\n ],\n \"homepageUrl\": \"https://vimeo.com\",\n \"actionCount\": 25,\n \"actions\": [\n \"vimeo.add_video_tags\",\n \"vimeo.add_video_to_folder\",\n \"vimeo.add_video_to_showcase\",\n \"vimeo.create_folder\",\n \"vimeo.delete_folder\",\n \"vimeo.delete_video\",\n \"vimeo.delete_video_tag\",\n \"vimeo.download_video_file\",\n \"vimeo.get_current_user\",\n \"vimeo.get_folder\",\n \"vimeo.get_showcase\",\n \"vimeo.get_video\",\n \"vimeo.get_video_download_links\",\n \"vimeo.list_folder_videos\",\n \"vimeo.list_folders\",\n \"vimeo.list_showcase_videos\",\n \"vimeo.list_showcases\",\n \"vimeo.list_user_videos\",\n \"vimeo.list_video_tags\",\n \"vimeo.remove_video_from_folder\",\n \"vimeo.remove_video_from_showcase\",\n \"vimeo.replace_video_from_url\",\n \"vimeo.update_folder\",\n \"vimeo.update_video\",\n \"vimeo.upload_video_from_url\"\n ]\n },\n {\n \"service\": \"virustotal\",\n \"displayName\": \"VirusTotal\",\n \"categories\": [\n \"Security\",\n \"Data\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.virustotal.com\",\n \"actionCount\": 16,\n \"actions\": [\n \"virustotal.add_comment\",\n \"virustotal.add_vote\",\n \"virustotal.get_analysis\",\n \"virustotal.get_comments\",\n \"virustotal.get_domain_relationships\",\n \"virustotal.get_domain_report\",\n \"virustotal.get_file_report\",\n \"virustotal.get_ip_address_relationships\",\n \"virustotal.get_ip_address_report\",\n \"virustotal.get_metadata\",\n \"virustotal.get_url_report\",\n \"virustotal.get_votes\",\n \"virustotal.rescan_file\",\n \"virustotal.scan_url\",\n \"virustotal.search\",\n \"virustotal.upload_file\"\n ]\n },\n {\n \"service\": \"vitally\",\n \"displayName\": \"Vitally\",\n \"categories\": [\n \"Productivity\",\n \"Data\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.vitally.io/\",\n \"actionCount\": 5,\n \"actions\": [\n \"vitally.create_account\",\n \"vitally.delete_account\",\n \"vitally.get_account\",\n \"vitally.list_accounts\",\n \"vitally.update_account\"\n ]\n },\n {\n \"service\": \"voiceflow\",\n \"displayName\": \"Voiceflow\",\n \"categories\": [\n \"AI\",\n \"Productivity\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.voiceflow.com\",\n \"actionCount\": 4,\n \"actions\": [\n \"voiceflow.interact\",\n \"voiceflow.list_environments\",\n \"voiceflow.query_knowledge_base\",\n \"voiceflow.start_session\"\n ]\n },\n {\n \"service\": \"vtex\",\n \"displayName\": \"VTEX\",\n \"categories\": [\n \"Marketing\",\n \"Data\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://vtex.com\",\n \"actionCount\": 5,\n \"actions\": [\n \"vtex.get_product\",\n \"vtex.list_brands\",\n \"vtex.list_category_tree\",\n \"vtex.list_product_and_sku_ids\",\n \"vtex.search_products\"\n ]\n },\n {\n \"service\": \"waboxapp\",\n \"displayName\": \"waboxapp\",\n \"categories\": [\n \"Communication\",\n \"Developer Tools\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.waboxapp.com\",\n \"actionCount\": 5,\n \"actions\": [\n \"waboxapp.get_account_status\",\n \"waboxapp.send_chat\",\n \"waboxapp.send_image\",\n \"waboxapp.send_link\",\n \"waboxapp.send_media\"\n ]\n },\n {\n \"service\": \"wachete\",\n \"displayName\": \"Wachete\",\n \"categories\": [\n \"Developer Tools\",\n \"Data\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.wachete.com/\",\n \"actionCount\": 6,\n \"actions\": [\n \"wachete.create_or_update_monitor\",\n \"wachete.delete_monitor\",\n \"wachete.get_monitor\",\n \"wachete.get_monitor_history\",\n \"wachete.list_folder_content\",\n \"wachete.list_notifications\"\n ]\n },\n {\n \"service\": \"wakatime\",\n \"displayName\": \"WakaTime\",\n \"categories\": [\n \"Productivity\",\n \"Developer Tools\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://wakatime.com\",\n \"actionCount\": 6,\n \"actions\": [\n \"wakatime.get_all_time_since_today\",\n \"wakatime.get_current_user\",\n \"wakatime.get_stats\",\n \"wakatime.get_status_bar_today\",\n \"wakatime.get_summaries\",\n \"wakatime.list_projects\"\n ]\n },\n {\n \"service\": \"wappalyzer\",\n \"displayName\": \"Wappalyzer\",\n \"categories\": [\n \"Developer Tools\",\n \"Data\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.wappalyzer.com/\",\n \"actionCount\": 4,\n \"actions\": [\n \"wappalyzer.find_subdomains\",\n \"wappalyzer.get_credits_balance\",\n \"wappalyzer.lookup_technologies\",\n \"wappalyzer.verify_email\"\n ]\n },\n {\n \"service\": \"waterfall\",\n \"displayName\": \"Waterfall\",\n \"categories\": [\n \"Data\",\n \"Marketing\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.waterfall.io\",\n \"actionCount\": 7,\n \"actions\": [\n \"waterfall.check_job_change\",\n \"waterfall.get_account_usage\",\n \"waterfall.get_company_enrichment\",\n \"waterfall.get_contact_enrichment\",\n \"waterfall.launch_company_enrichment\",\n \"waterfall.launch_contact_enrichment\",\n \"waterfall.verify_email\"\n ]\n },\n {\n \"service\": \"weatherapi\",\n \"displayName\": \"WeatherAPI\",\n \"categories\": [\n \"Location\",\n \"Data\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.weatherapi.com\",\n \"actionCount\": 5,\n \"actions\": [\n \"weatherapi.get_astronomy\",\n \"weatherapi.get_current_weather\",\n \"weatherapi.get_forecast\",\n \"weatherapi.get_timezone\",\n \"weatherapi.search_locations\"\n ]\n },\n {\n \"service\": \"weatherbit\",\n \"displayName\": \"Weatherbit\",\n \"categories\": [\n \"Location\",\n \"Data\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.weatherbit.io\",\n \"actionCount\": 3,\n \"actions\": [\n \"weatherbit.get_current_weather\",\n \"weatherbit.get_daily_forecast\",\n \"weatherbit.get_hourly_forecast\"\n ]\n },\n {\n \"service\": \"weaviate\",\n \"displayName\": \"Weaviate\",\n \"categories\": [\n \"Data\",\n \"Developer Tools\",\n \"AI\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://weaviate.io\",\n \"actionCount\": 5,\n \"actions\": [\n \"weaviate.get_collection\",\n \"weaviate.get_instance_metadata\",\n \"weaviate.get_object\",\n \"weaviate.list_collections\",\n \"weaviate.list_objects\"\n ]\n },\n {\n \"service\": \"web_of_science\",\n \"displayName\": \"Web of Science\",\n \"categories\": [\n \"Data\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://clarivate.com/academia-government/scientific-and-academic-research/research-discovery-and-referencing/web-of-science/\",\n \"actionCount\": 4,\n \"actions\": [\n \"web_of_science.get_document\",\n \"web_of_science.get_journal\",\n \"web_of_science.search_documents\",\n \"web_of_science.search_journals\"\n ]\n },\n {\n \"service\": \"web_of_science_expanded\",\n \"displayName\": \"Web of Science Expanded\",\n \"categories\": [\n \"Data\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://clarivate.com/academia-government/scientific-and-academic-research/research-discovery-and-referencing/web-of-science/\",\n \"actionCount\": 6,\n \"actions\": [\n \"web_of_science_expanded.get_citation_report\",\n \"web_of_science_expanded.get_documents\",\n \"web_of_science_expanded.list_cited_references\",\n \"web_of_science_expanded.list_citing_documents\",\n \"web_of_science_expanded.list_related_documents\",\n \"web_of_science_expanded.search_documents\"\n ]\n },\n {\n \"service\": \"webflow\",\n \"displayName\": \"Webflow\",\n \"categories\": [\n \"Design & Media\",\n \"Marketing\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://webflow.com\",\n \"actionCount\": 11,\n \"actions\": [\n \"webflow.create_collection_item\",\n \"webflow.delete_collection_item\",\n \"webflow.get_collection\",\n \"webflow.get_collection_item\",\n \"webflow.get_site\",\n \"webflow.list_collection_items\",\n \"webflow.list_collections\",\n \"webflow.list_sites\",\n \"webflow.publish_collection_items\",\n \"webflow.publish_site\",\n \"webflow.update_collection_item\"\n ]\n },\n {\n \"service\": \"webinarjam\",\n \"displayName\": \"WebinarJam\",\n \"categories\": [\n \"Communication\",\n \"Marketing\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://webinarjam.com\",\n \"actionCount\": 4,\n \"actions\": [\n \"webinarjam.get_webinar\",\n \"webinarjam.list_registrants\",\n \"webinarjam.list_webinars\",\n \"webinarjam.register_user\"\n ]\n },\n {\n \"service\": \"webscraper_io\",\n \"displayName\": \"WebScraper.io\",\n \"categories\": [\n \"Data\",\n \"Developer Tools\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://webscraper.io/\",\n \"actionCount\": 11,\n \"actions\": [\n \"webscraper_io.create_scraping_job\",\n \"webscraper_io.create_sitemap\",\n \"webscraper_io.delete_scraping_job\",\n \"webscraper_io.delete_sitemap\",\n \"webscraper_io.download_scraping_job_json\",\n \"webscraper_io.get_account_info\",\n \"webscraper_io.get_scraping_job\",\n \"webscraper_io.get_sitemap\",\n \"webscraper_io.list_scraping_jobs\",\n \"webscraper_io.list_sitemaps\",\n \"webscraper_io.update_sitemap\"\n ]\n },\n {\n \"service\": \"webscraping_ai\",\n \"displayName\": \"WebScraping.AI\",\n \"categories\": [\n \"Developer Tools\",\n \"Data\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://webscraping.ai\",\n \"actionCount\": 5,\n \"actions\": [\n \"webscraping_ai.extract_text\",\n \"webscraping_ai.fetch_html\",\n \"webscraping_ai.get_account_info\",\n \"webscraping_ai.select_html\",\n \"webscraping_ai.select_multiple_html\"\n ]\n },\n {\n \"service\": \"webshare\",\n \"displayName\": \"Webshare\",\n \"categories\": [\n \"Developer Tools\",\n \"Data\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.webshare.io/\",\n \"actionCount\": 4,\n \"actions\": [\n \"webshare.get_profile\",\n \"webshare.get_proxy_config\",\n \"webshare.list_proxies\",\n \"webshare.list_stats\"\n ]\n },\n {\n \"service\": \"webvizio\",\n \"displayName\": \"Webvizio\",\n \"categories\": [\n \"Productivity\",\n \"Developer Tools\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://webvizio.com\",\n \"actionCount\": 2,\n \"actions\": [\n \"webvizio.create_rest_hook_subscription\",\n \"webvizio.delete_rest_hook_subscription\"\n ]\n },\n {\n \"service\": \"wecom_bot\",\n \"displayName\": \"WeCom Bot\",\n \"categories\": [\n \"Communication\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://work.weixin.qq.com\",\n \"actionCount\": 5,\n \"actions\": [\n \"wecom_bot.send_image_message\",\n \"wecom_bot.send_markdown_message\",\n \"wecom_bot.send_markdown_v2_message\",\n \"wecom_bot.send_news_message\",\n \"wecom_bot.send_text_message\"\n ]\n },\n {\n \"service\": \"wejam_ai\",\n \"displayName\": \"Jam\",\n \"categories\": [\n \"AI\",\n \"Data\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://wejam.ai\",\n \"actionCount\": 1,\n \"actions\": [\n \"wejam_ai.export_data\"\n ]\n },\n {\n \"service\": \"what3words\",\n \"displayName\": \"what3words\",\n \"categories\": [\n \"Location\",\n \"Data\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://what3words.com\",\n \"actionCount\": 5,\n \"actions\": [\n \"what3words.autosuggest\",\n \"what3words.available_languages\",\n \"what3words.convert_to_3wa\",\n \"what3words.convert_to_coordinates\",\n \"what3words.grid_section\"\n ]\n },\n {\n \"service\": \"whatsapp\",\n \"displayName\": \"WhatsApp\",\n \"categories\": [\n \"Communication\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.whatsapp.com\",\n \"actionCount\": 17,\n \"actions\": [\n \"whatsapp.create_message_template\",\n \"whatsapp.delete_message_template\",\n \"whatsapp.get_business_profile\",\n \"whatsapp.get_media_info\",\n \"whatsapp.get_message_templates\",\n \"whatsapp.get_phone_number\",\n \"whatsapp.get_phone_numbers\",\n \"whatsapp.get_template_status\",\n \"whatsapp.send_contacts\",\n \"whatsapp.send_interactive_buttons\",\n \"whatsapp.send_interactive_list\",\n \"whatsapp.send_location\",\n \"whatsapp.send_media\",\n \"whatsapp.send_media_by_id\",\n \"whatsapp.send_message\",\n \"whatsapp.send_template_message\",\n \"whatsapp.upload_media\"\n ]\n },\n {\n \"service\": \"whoisfreaks\",\n \"displayName\": \"WhoisFreaks\",\n \"categories\": [\n \"Security\",\n \"Data\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://whoisfreaks.com\",\n \"actionCount\": 5,\n \"actions\": [\n \"whoisfreaks.check_domain_availability\",\n \"whoisfreaks.get_asn_whois\",\n \"whoisfreaks.get_domain_whois\",\n \"whoisfreaks.get_ip_whois\",\n \"whoisfreaks.list_subdomains\"\n ]\n },\n {\n \"service\": \"whop\",\n \"displayName\": \"Whop\",\n \"categories\": [\n \"Finance\",\n \"Marketing\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://whop.com\",\n \"actionCount\": 8,\n \"actions\": [\n \"whop.get_authorized_user\",\n \"whop.get_company\",\n \"whop.get_membership\",\n \"whop.get_product\",\n \"whop.list_authorized_users\",\n \"whop.list_companies\",\n \"whop.list_memberships\",\n \"whop.list_products\"\n ]\n },\n {\n \"service\": \"winston_ai\",\n \"displayName\": \"Winston AI\",\n \"categories\": [\n \"AI\",\n \"Data\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://gowinston.ai\",\n \"actionCount\": 4,\n \"actions\": [\n \"winston_ai.check_plagiarism\",\n \"winston_ai.compare_texts\",\n \"winston_ai.detect_ai_text\",\n \"winston_ai.fact_check\"\n ]\n },\n {\n \"service\": \"wise\",\n \"displayName\": \"Wise\",\n \"categories\": [\n \"Finance\",\n \"Data\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://wise.com\",\n \"actionCount\": 3,\n \"actions\": [\n \"wise.get_rates\",\n \"wise.list_currencies\",\n \"wise.list_profiles\"\n ]\n },\n {\n \"service\": \"wit_ai\",\n \"displayName\": \"Wit.ai\",\n \"categories\": [\n \"AI\",\n \"Developer Tools\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://wit.ai\",\n \"actionCount\": 20,\n \"actions\": [\n \"wit_ai.add_entity_keyword\",\n \"wit_ai.add_keyword_synonym\",\n \"wit_ai.add_trait_value\",\n \"wit_ai.analyze_message\",\n \"wit_ai.create_entity\",\n \"wit_ai.create_intent\",\n \"wit_ai.create_trait\",\n \"wit_ai.create_utterances\",\n \"wit_ai.delete_utterances\",\n \"wit_ai.detect_language\",\n \"wit_ai.get_app\",\n \"wit_ai.get_entity\",\n \"wit_ai.get_intent\",\n \"wit_ai.get_trait\",\n \"wit_ai.list_apps\",\n \"wit_ai.list_entities\",\n \"wit_ai.list_intents\",\n \"wit_ai.list_traits\",\n \"wit_ai.list_utterances\",\n \"wit_ai.update_entity\"\n ]\n },\n {\n \"service\": \"wiza\",\n \"displayName\": \"Wiza\",\n \"categories\": [\n \"Marketing\",\n \"Data\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://wiza.co\",\n \"actionCount\": 5,\n \"actions\": [\n \"wiza.get_credits\",\n \"wiza.get_individual_reveal\",\n \"wiza.get_list\",\n \"wiza.prospect_search\",\n \"wiza.start_individual_reveal\"\n ]\n },\n {\n \"service\": \"wolfram_alpha_api\",\n \"displayName\": \"Wolfram|Alpha\",\n \"categories\": [\n \"AI\",\n \"Data\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://products.wolframalpha.com/api/\",\n \"actionCount\": 3,\n \"actions\": [\n \"wolfram_alpha_api.get_short_answer\",\n \"wolfram_alpha_api.get_spoken_result\",\n \"wolfram_alpha_api.validate_query\"\n ]\n },\n {\n \"service\": \"woocommerce\",\n \"displayName\": \"WooCommerce\",\n \"categories\": [\n \"Marketing\"\n ],\n \"authTypes\": [\n \"custom_credential\"\n ],\n \"homepageUrl\": \"https://woocommerce.com\",\n \"actionCount\": 26,\n \"actions\": [\n \"woocommerce.add_order_note\",\n \"woocommerce.create_coupon\",\n \"woocommerce.create_order\",\n \"woocommerce.create_product\",\n \"woocommerce.create_product_variation\",\n \"woocommerce.get_coupon\",\n \"woocommerce.get_customer\",\n \"woocommerce.get_order\",\n \"woocommerce.get_product\",\n \"woocommerce.get_product_variation\",\n \"woocommerce.list_coupons\",\n \"woocommerce.list_customers\",\n \"woocommerce.list_order_notes\",\n \"woocommerce.list_orders\",\n \"woocommerce.list_product_attribute_terms\",\n \"woocommerce.list_product_attributes\",\n \"woocommerce.list_product_categories\",\n \"woocommerce.list_product_tags\",\n \"woocommerce.list_product_variations\",\n \"woocommerce.list_products\",\n \"woocommerce.update_coupon\",\n \"woocommerce.update_order\",\n \"woocommerce.update_order_status\",\n \"woocommerce.update_product\",\n \"woocommerce.update_product_variation\",\n \"woocommerce.upload_media\"\n ]\n },\n {\n \"service\": \"woodpecker_co\",\n \"displayName\": \"Woodpecker.co\",\n \"categories\": [\n \"Communication\",\n \"Marketing\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://woodpecker.co/\",\n \"actionCount\": 7,\n \"actions\": [\n \"woodpecker_co.get_campaign\",\n \"woodpecker_co.get_campaign_statistics\",\n \"woodpecker_co.get_mailbox\",\n \"woodpecker_co.list_campaigns\",\n \"woodpecker_co.list_mailboxes\",\n \"woodpecker_co.list_prospects\",\n \"woodpecker_co.list_users\"\n ]\n },\n {\n \"service\": \"wordpress\",\n \"displayName\": \"WordPress\",\n \"categories\": [\n \"Productivity\",\n \"Marketing\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://wordpress.org\",\n \"actionCount\": 18,\n \"actions\": [\n \"wordpress.create_category\",\n \"wordpress.create_page\",\n \"wordpress.create_post\",\n \"wordpress.create_tag\",\n \"wordpress.delete_comment\",\n \"wordpress.delete_page\",\n \"wordpress.delete_post\",\n \"wordpress.get_current_user\",\n \"wordpress.get_page\",\n \"wordpress.get_post\",\n \"wordpress.list_categories\",\n \"wordpress.list_comments\",\n \"wordpress.list_pages\",\n \"wordpress.list_posts\",\n \"wordpress.list_tags\",\n \"wordpress.update_comment\",\n \"wordpress.update_page\",\n \"wordpress.update_post\"\n ]\n },\n {\n \"service\": \"workable\",\n \"displayName\": \"Workable\",\n \"categories\": [\n \"Productivity\",\n \"Data\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.workable.com/\",\n \"actionCount\": 4,\n \"actions\": [\n \"workable.get_candidate\",\n \"workable.get_job\",\n \"workable.list_candidates\",\n \"workable.list_jobs\"\n ]\n },\n {\n \"service\": \"workday\",\n \"displayName\": \"Workday\",\n \"categories\": [\n \"Productivity\",\n \"Data\"\n ],\n \"authTypes\": [\n \"oauth2\"\n ],\n \"homepageUrl\": \"https://www.workday.com\",\n \"actionCount\": 7,\n \"actions\": [\n \"workday.get_current_user\",\n \"workday.get_job\",\n \"workday.get_job_posting\",\n \"workday.get_worker\",\n \"workday.list_job_postings\",\n \"workday.list_jobs\",\n \"workday.list_workers\"\n ]\n },\n {\n \"service\": \"workiom\",\n \"displayName\": \"Workiom\",\n \"categories\": [\n \"Productivity\",\n \"Data\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://workiom.com\",\n \"actionCount\": 5,\n \"actions\": [\n \"workiom.create_record\",\n \"workiom.get_list_metadata\",\n \"workiom.list_apps\",\n \"workiom.list_lists\",\n \"workiom.list_records\"\n ]\n },\n {\n \"service\": \"workos\",\n \"displayName\": \"WorkOS\",\n \"categories\": [\n \"Developer Tools\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://workos.com\",\n \"actionCount\": 14,\n \"actions\": [\n \"workos.create_organization\",\n \"workos.create_organization_membership\",\n \"workos.create_user\",\n \"workos.deactivate_organization_membership\",\n \"workos.get_organization\",\n \"workos.get_organization_membership\",\n \"workos.get_user\",\n \"workos.list_organization_memberships\",\n \"workos.list_organizations\",\n \"workos.list_users\",\n \"workos.reactivate_organization_membership\",\n \"workos.update_organization\",\n \"workos.update_organization_membership\",\n \"workos.update_user\"\n ]\n },\n {\n \"service\": \"workpath\",\n \"displayName\": \"Workpath\",\n \"categories\": [\n \"Productivity\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.workpath.com/\",\n \"actionCount\": 8,\n \"actions\": [\n \"workpath.get_goal\",\n \"workpath.get_goal_key_result\",\n \"workpath.get_team\",\n \"workpath.get_user\",\n \"workpath.list_goal_key_results\",\n \"workpath.list_goals\",\n \"workpath.list_teams\",\n \"workpath.list_users\"\n ]\n },\n {\n \"service\": \"worksnaps\",\n \"displayName\": \"Worksnaps\",\n \"categories\": [\n \"Productivity\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.worksnaps.com\",\n \"actionCount\": 10,\n \"actions\": [\n \"worksnaps.get_current_user\",\n \"worksnaps.get_project\",\n \"worksnaps.get_project_time_entry\",\n \"worksnaps.get_project_time_report\",\n \"worksnaps.get_task\",\n \"worksnaps.list_project_task_assignments\",\n \"worksnaps.list_project_tasks\",\n \"worksnaps.list_project_time_entries\",\n \"worksnaps.list_project_user_assignments\",\n \"worksnaps.list_projects\"\n ]\n },\n {\n \"service\": \"world_news_api\",\n \"displayName\": \"World News API\",\n \"categories\": [\n \"Data\",\n \"Social\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://worldnewsapi.com\",\n \"actionCount\": 5,\n \"actions\": [\n \"world_news_api.get_geo_coordinates\",\n \"world_news_api.get_top_news\",\n \"world_news_api.retrieve_news\",\n \"world_news_api.search_news\",\n \"world_news_api.search_news_sources\"\n ]\n },\n {\n \"service\": \"wrike\",\n \"displayName\": \"Wrike\",\n \"categories\": [\n \"Productivity\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.wrike.com\",\n \"actionCount\": 7,\n \"actions\": [\n \"wrike.create_folder\",\n \"wrike.create_task\",\n \"wrike.get_folders\",\n \"wrike.get_tasks\",\n \"wrike.list_contacts\",\n \"wrike.list_folders\",\n \"wrike.list_tasks\"\n ]\n },\n {\n \"service\": \"writer\",\n \"displayName\": \"Writer\",\n \"categories\": [\n \"AI\",\n \"Developer Tools\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://writer.com\",\n \"actionCount\": 2,\n \"actions\": [\n \"writer.create_chat_completion\",\n \"writer.list_models\"\n ]\n },\n {\n \"service\": \"wttr_in\",\n \"displayName\": \"wttr.in\",\n \"categories\": [\n \"Location\",\n \"Data\"\n ],\n \"authTypes\": [\n \"no_auth\"\n ],\n \"homepageUrl\": \"https://wttr.in/\",\n \"actionCount\": 1,\n \"actions\": [\n \"wttr_in.get_weather\"\n ]\n },\n {\n \"service\": \"x_ai\",\n \"displayName\": \"xAI\",\n \"categories\": [\n \"AI\",\n \"Developer Tools\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://x.ai\",\n \"actionCount\": 3,\n \"actions\": [\n \"x_ai.create_chat_completion\",\n \"x_ai.get_model\",\n \"x_ai.list_models\"\n ]\n },\n {\n \"service\": \"xata\",\n \"displayName\": \"Xata\",\n \"categories\": [\n \"Developer Tools\",\n \"Data\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://xata.io/\",\n \"actionCount\": 7,\n \"actions\": [\n \"xata.get_branch\",\n \"xata.get_organization\",\n \"xata.get_project\",\n \"xata.list_available_regions\",\n \"xata.list_branches\",\n \"xata.list_organizations\",\n \"xata.list_projects\"\n ]\n },\n {\n \"service\": \"yelp\",\n \"displayName\": \"Yelp\",\n \"categories\": [\n \"Location\",\n \"Data\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.yelp.com\",\n \"actionCount\": 3,\n \"actions\": [\n \"yelp.get_business_details\",\n \"yelp.search_businesses\",\n \"yelp.search_businesses_by_phone\"\n ]\n },\n {\n \"service\": \"ynab\",\n \"displayName\": \"YNAB\",\n \"categories\": [\n \"Finance\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.ynab.com\",\n \"actionCount\": 15,\n \"actions\": [\n \"ynab.get_account\",\n \"ynab.get_category\",\n \"ynab.get_month\",\n \"ynab.get_month_category\",\n \"ynab.get_payee\",\n \"ynab.get_plan\",\n \"ynab.get_plan_settings\",\n \"ynab.get_transaction\",\n \"ynab.get_user\",\n \"ynab.list_accounts\",\n \"ynab.list_categories\",\n \"ynab.list_months\",\n \"ynab.list_payees\",\n \"ynab.list_plans\",\n \"ynab.list_transactions\"\n ]\n },\n {\n \"service\": \"you\",\n \"displayName\": \"You.com\",\n \"categories\": [\n \"AI\",\n \"Data\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://you.com/\",\n \"actionCount\": 5,\n \"actions\": [\n \"you.fetch_contents\",\n \"you.finance_research\",\n \"you.get_account_balance\",\n \"you.research\",\n \"you.search\"\n ]\n },\n {\n \"service\": \"youtube\",\n \"displayName\": \"YouTube\",\n \"categories\": [\n \"Design & Media\",\n \"Social\"\n ],\n \"authTypes\": [\n \"oauth2\"\n ],\n \"homepageUrl\": \"https://www.youtube.com/\",\n \"actionCount\": 29,\n \"actions\": [\n \"youtube.add_video_to_playlist\",\n \"youtube.create_comment_reply\",\n \"youtube.create_playlist\",\n \"youtube.delete_caption\",\n \"youtube.delete_playlist\",\n \"youtube.delete_playlist_item\",\n \"youtube.delete_video\",\n \"youtube.download_caption\",\n \"youtube.get_video_rating\",\n \"youtube.list_caption_tracks\",\n \"youtube.list_channels\",\n \"youtube.list_comment_threads\",\n \"youtube.list_comments\",\n \"youtube.list_i18n_languages\",\n \"youtube.list_i18n_regions\",\n \"youtube.list_playlist_items\",\n \"youtube.list_playlists\",\n \"youtube.list_video_categories\",\n \"youtube.list_videos\",\n \"youtube.post_comment\",\n \"youtube.rate_video\",\n \"youtube.search\",\n \"youtube.set_thumbnail_from_url\",\n \"youtube.update_caption\",\n \"youtube.update_playlist\",\n \"youtube.update_playlist_item\",\n \"youtube.update_video\",\n \"youtube.upload_caption_from_url\",\n \"youtube.upload_video_from_url\"\n ]\n },\n {\n \"service\": \"yuandian\",\n \"displayName\": \"Yuan Dian\",\n \"categories\": [\n \"AI\",\n \"Data\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://open.chineselaw.com\",\n \"actionCount\": 23,\n \"actions\": [\n \"yuandian.check_legal_hallucinations\",\n \"yuandian.get_case_details\",\n \"yuandian.get_clause_detail\",\n \"yuandian.get_enterprise_aggregation_summary\",\n \"yuandian.get_enterprise_annual_report\",\n \"yuandian.get_enterprise_base_info\",\n \"yuandian.get_enterprise_detail\",\n \"yuandian.get_enterprise_litigation_statistics\",\n \"yuandian.get_regulation_detail\",\n \"yuandian.list_enterprise_business_records\",\n \"yuandian.list_enterprise_compliance_records\",\n \"yuandian.list_enterprise_court_notices\",\n \"yuandian.list_enterprise_execution_risks\",\n \"yuandian.list_enterprise_ip_assets\",\n \"yuandian.list_enterprise_writs\",\n \"yuandian.search_authoritative_cases\",\n \"yuandian.search_clauses\",\n \"yuandian.search_enterprise_profiles\",\n \"yuandian.search_enterprises\",\n \"yuandian.search_ordinary_cases\",\n \"yuandian.search_regulations\",\n \"yuandian.semantic_search_cases\",\n \"yuandian.semantic_search_regulations\"\n ]\n },\n {\n \"service\": \"zendesk\",\n \"displayName\": \"Zendesk\",\n \"categories\": [\n \"Communication\",\n \"Productivity\"\n ],\n \"authTypes\": [\n \"oauth2\",\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.zendesk.com\",\n \"actionCount\": 11,\n \"actions\": [\n \"zendesk.create_ticket\",\n \"zendesk.get_current_user\",\n \"zendesk.get_organization\",\n \"zendesk.get_ticket\",\n \"zendesk.get_user\",\n \"zendesk.list_organizations\",\n \"zendesk.list_tickets\",\n \"zendesk.list_users\",\n \"zendesk.reply_to_ticket\",\n \"zendesk.search_users\",\n \"zendesk.update_ticket\"\n ]\n },\n {\n \"service\": \"zenrows\",\n \"displayName\": \"ZenRows\",\n \"categories\": [\n \"Developer Tools\",\n \"Data\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.zenrows.com/\",\n \"actionCount\": 4,\n \"actions\": [\n \"zenrows.extract_css\",\n \"zenrows.fetch_html\",\n \"zenrows.fetch_plaintext\",\n \"zenrows.get_usage\"\n ]\n },\n {\n \"service\": \"zenserp\",\n \"displayName\": \"Zenserp\",\n \"categories\": [\n \"Data\",\n \"Location\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://zenserp.com\",\n \"actionCount\": 4,\n \"actions\": [\n \"zenserp.google_image_search\",\n \"zenserp.google_maps_search\",\n \"zenserp.google_news_search\",\n \"zenserp.search\"\n ]\n },\n {\n \"service\": \"zeplin\",\n \"displayName\": \"Zeplin\",\n \"categories\": [\n \"Design & Media\",\n \"Productivity\"\n ],\n \"authTypes\": [\n \"oauth2\"\n ],\n \"homepageUrl\": \"https://zeplin.io\",\n \"actionCount\": 6,\n \"actions\": [\n \"zeplin.get_current_user\",\n \"zeplin.get_project\",\n \"zeplin.list_personal_projects\",\n \"zeplin.list_project_colors\",\n \"zeplin.list_project_text_styles\",\n \"zeplin.list_screen_versions\"\n ]\n },\n {\n \"service\": \"zerobounce\",\n \"displayName\": \"ZeroBounce\",\n \"categories\": [\n \"Communication\",\n \"Marketing\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.zerobounce.net\",\n \"actionCount\": 6,\n \"actions\": [\n \"zerobounce.create_filter_rule\",\n \"zerobounce.get_activity_data\",\n \"zerobounce.get_api_usage\",\n \"zerobounce.get_credit_balance\",\n \"zerobounce.list_filter_rules\",\n \"zerobounce.validate_email\"\n ]\n },\n {\n \"service\": \"zhihu\",\n \"displayName\": \"Zhihu\",\n \"categories\": [\n \"AI\",\n \"Data\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.zhihu.com\",\n \"actionCount\": 4,\n \"actions\": [\n \"zhihu.global_search\",\n \"zhihu.hot_list\",\n \"zhihu.zhida\",\n \"zhihu.zhihu_search\"\n ]\n },\n {\n \"service\": \"zigpoll\",\n \"displayName\": \"Zigpoll\",\n \"categories\": [\n \"Marketing\",\n \"Productivity\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.zigpoll.com\",\n \"actionCount\": 8,\n \"actions\": [\n \"zigpoll.generate_survey_link\",\n \"zigpoll.get_current_user\",\n \"zigpoll.get_poll\",\n \"zigpoll.list_accounts\",\n \"zigpoll.list_participants\",\n \"zigpoll.list_polls\",\n \"zigpoll.list_responses\",\n \"zigpoll.list_slides\"\n ]\n },\n {\n \"service\": \"zipcodebase\",\n \"displayName\": \"Zipcodebase\",\n \"categories\": [\n \"Location\",\n \"Data\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://zipcodebase.com/\",\n \"actionCount\": 7,\n \"actions\": [\n \"zipcodebase.calculate_distance\",\n \"zipcodebase.get_status\",\n \"zipcodebase.list_postal_codes_by_city\",\n \"zipcodebase.list_postal_codes_by_state\",\n \"zipcodebase.list_postal_codes_within_radius\",\n \"zipcodebase.match_postal_codes_by_distance\",\n \"zipcodebase.search_postal_codes\"\n ]\n },\n {\n \"service\": \"zixflow\",\n \"displayName\": \"Zixflow\",\n \"categories\": [\n \"Marketing\",\n \"Productivity\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://zixflow.com\",\n \"actionCount\": 16,\n \"actions\": [\n \"zixflow.create_collection_record\",\n \"zixflow.create_list_entry\",\n \"zixflow.delete_collection_record\",\n \"zixflow.delete_list_entry\",\n \"zixflow.get_collection\",\n \"zixflow.get_collection_record\",\n \"zixflow.get_list\",\n \"zixflow.get_list_entry\",\n \"zixflow.get_workspace_member\",\n \"zixflow.list_collections\",\n \"zixflow.list_lists\",\n \"zixflow.list_workspace_members\",\n \"zixflow.query_collection_records\",\n \"zixflow.query_list_entries\",\n \"zixflow.update_collection_record\",\n \"zixflow.update_list_entry\"\n ]\n },\n {\n \"service\": \"zoom\",\n \"displayName\": \"Zoom\",\n \"categories\": [\n \"Communication\",\n \"Productivity\"\n ],\n \"authTypes\": [\n \"oauth2\"\n ],\n \"homepageUrl\": \"https://www.zoom.com\",\n \"actionCount\": 4,\n \"actions\": [\n \"zoom.create_meeting\",\n \"zoom.get_user\",\n \"zoom.list_meetings\",\n \"zoom.update_meeting\"\n ]\n },\n {\n \"service\": \"zorus\",\n \"displayName\": \"Zorus\",\n \"categories\": [\n \"Security\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.zorustech.com\",\n \"actionCount\": 5,\n \"actions\": [\n \"zorus.search_active_unblock_requests\",\n \"zorus.search_customers\",\n \"zorus.search_endpoints\",\n \"zorus.search_groups\",\n \"zorus.search_policies\"\n ]\n },\n {\n \"service\": \"zyte_api\",\n \"displayName\": \"Zyte API\",\n \"categories\": [\n \"Developer Tools\",\n \"Data\"\n ],\n \"authTypes\": [\n \"api_key\"\n ],\n \"homepageUrl\": \"https://www.zyte.com/zyte-api/\",\n \"actionCount\": 4,\n \"actions\": [\n \"zyte_api.extract_article\",\n \"zyte_api.extract_page_content\",\n \"zyte_api.extract_product\",\n \"zyte_api.fetch_browser_html\"\n ]\n }\n]","/**\n * OpenConnector Integration for OOMOL SaaS\n *\n * Multi-tenant connector platform for OAuth & credential management.\n * Allows users to link external accounts (Gmail, Slack, GitHub, Airtable, etc.)\n * securely managed by OOMOL Cloud.\n *\n * @module connectors\n * @see {@link https://connector.oomol.com}\n * @example\n * ```ts\n * import { ProjectConnector } from \"chat-agent-toolkit/connectors\";\n *\n * const project = new ProjectConnector({\n * apiKey: process.env.OOMOL_PROJECT_API_KEY,\n * });\n *\n * const user = project.forUser(userId);\n * const oauth = await user.connect.oauth({\n * service: \"gmail\",\n * returnUri: \"https://myapp.com/oauth-callback\",\n * });\n * ```\n */\n\n// Re-export OOMOL Connector SDK types and classes\nexport type {\n ConnectorError as OOMOLConnectorError,\n ProjectConnector as OOMOLProjectConnector,\n} from \"@oomol-lab/connector\";\nexport { ConnectorError, ProjectConnector } from \"@oomol-lab/connector\";\n\n// Catalog data: 900+ integrated providers with OAuth/API-key support\nimport catalogJson from \"./catalog.json\";\nimport providerIndexJson from \"./openconnector-providers-index.json\";\n\nexport type CatalogProvider = {\n service: string;\n displayName: string;\n categories: string[];\n authTypes: (\"oauth2\" | \"api_key\" | \"custom_credential\" | \"no_auth\")[];\n actionCount: number;\n};\n\nexport type ProviderIndexEntry = CatalogProvider & {\n homepageUrl?: string;\n actions?: string[];\n};\n\n/**\n * Lightweight provider catalog (basic info: service, display name, auth types).\n * ~900 providers, fast catalog search and picker UI.\n */\nexport const catalog: CatalogProvider[] = catalogJson as CatalogProvider[];\n\n/**\n * Detailed provider index with action lists and metadata.\n * Use for deep integration: listing available actions, mapping capabilities.\n */\nexport const providerIndex: ProviderIndexEntry[] =\n providerIndexJson as ProviderIndexEntry[];\n\n/**\n * Search the catalog by service name or display name.\n * @param query Search term (case-insensitive)\n * @param limit Max results\n * @returns Matching providers\n */\nexport function searchCatalog(query: string, limit = 100): CatalogProvider[] {\n const q = query.toLowerCase();\n return catalog\n .filter(\n (p) =>\n p.service.toLowerCase().includes(q) ||\n p.displayName.toLowerCase().includes(q)\n )\n .slice(0, limit);\n}\n\n/**\n * Get a provider by service ID.\n * @param serviceId The provider's service identifier (e.g., \"gmail\", \"slack\")\n * @returns Provider info or undefined\n */\nexport function getCatalogProvider(serviceId: string): CatalogProvider | undefined {\n return catalog.find((p) => p.service === serviceId);\n}\n\n/**\n * Get detailed provider info including actions.\n * @param serviceId The provider's service identifier\n * @returns Detailed provider entry or undefined\n */\nexport function getProviderDetails(serviceId: string): ProviderIndexEntry | undefined {\n return providerIndex.find((p) => p.service === serviceId);\n}\n\n/**\n * Filter catalog by authentication type.\n * @param authType The auth type to filter by\n * @returns Providers supporting this auth type\n */\nexport function getCatalogByAuthType(\n authType: \"oauth2\" | \"api_key\" | \"custom_credential\" | \"no_auth\"\n): CatalogProvider[] {\n return catalog.filter((p) => p.authTypes.includes(authType));\n}\n\n/**\n * Filter catalog by category.\n * @param category The category to filter by (e.g., \"Communication\", \"Productivity\")\n * @returns Providers in this category\n */\nexport function getCatalogByCategory(category: string): CatalogProvider[] {\n return catalog.filter((p) => p.categories.includes(category));\n}\n\n/**\n * Get all unique categories in the catalog.\n * @returns Sorted list of category names\n */\nexport function getCatalogCategories(): string[] {\n const categories = new Set<string>();\n catalog.forEach((p) => p.categories.forEach((c) => categories.add(c)));\n return Array.from(categories).sort();\n}\n\nexport type { Express } from \"express\";\n"],"mappings":"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,CACE,KAAM,WACN,KAAM,UACN,IAAK,SACL,YAAa,sBACb,UAAU,EACV,YAAa,iBACb,IAAK,iBACL,MAAO,UAET,CACE,KAAM,SACN,KAAM,WACN,IAAK,UACL,YAAa,kCACb,UAAU,EACV,YAAa,kBACb,QAAS,4BACT,IAAK,kBACL,MAAO,YA7DP,CACE,IAAK,YACL,KAAM,YACN,OAiEC,CACL,CACE,KAAM,WACN,KAAM,UACN,IAAK,SACL,YAAa,yBACb,UAAU,EACV,YAAa,oBACb,IAAK,oBACL,MAAO,YAxEP,CACE,IAAK,SACL,KAAM,gBACN,OA2EC,CACL,CACE,KAAM,WACN,KAAM,UACN,IAAK,SACL,YAAa,6BACb,UAAU,EACV,YAAa,wBACb,IAAK,iBACL,MAAO,YAlFP,CACE,IAAK,OACL,KAAM,OACN,OAqFC,CACL,CACE,KAAM,WACN,KAAM,UACN,IAAK,SACL,YAAa,mHACb,UAAU,EACV,YAAa,UACb,IAAK,eACL,MAAO,YA5FP,CACE,IAAK,WACL,KAAM,WACN,OA+FC,CACL,CACE,KAAM,WACN,KAAM,UACN,IAAK,SACL,YAAa,wBACb,UAAU,EACV,YAAa,mBACb,IAAK,mBACL,MAAO,YAtGP,CACE,IAAK,SACL,KAAM,SACN,OAyGC,CACL,CACE,KAAM,WACN,KAAM,UACN,IAAK,SACL,YAAa,sHACb,UAAU,EACV,YAAa,YACb,IAAK,iBACL,MAAO,UAET,CACE,KAAM,SACN,KAAM,WACN,IAAK,UACL,YAAa,kDACb,UAAU,EACV,YAAa,sCACb,QAAS,sCACT,IAAK,kBACL,MAAO,YA3HP,CACE,IAAK,aACL,KAAM,aACN,OA8HC,CACL,CACE,KAAM,WACN,KAAM,UACN,IAAK,SACL,YAAa,8HACb,UAAU,EACV,YAAa,eACb,IAAK,qBACL,MAAO,UAET,CACE,KAAM,SACN,KAAM,WACN,IAAK,UACL,YAAa,sDACb,UAAU,EACV,YAAa,+BACb,QAAS,+BACT,IAAK,sBACL,MAAO,YAhJP,CACE,IAAK,aACL,KAAM,aACN,OAmJC,CACL,CACE,KAAM,WACN,KAAM,UACN,IAAK,SACL,YAAa,0BACb,UAAU,EACV,YAAa,WACb,IAAK,qBACL,MAAO,SACP,MAAO,CACL,CACE,KAAM,cACN,IAAK,sGKtGf,eACE,EACA,GAEA,MAAM,EAAM,IAAI,MAGhB,OAFA,EAAI,IAAM,QACJ,EAAI,SACH,GAAa,EAAK,EAC3B,2BAKA,WACE,OAAO,OAAO,KAAK,GACrB,0DNYA,eACE,EACA,GAEA,OAAQ,GACN,IAAK,SAAU,CACb,MAAM,OAAE,SAAiB,OAAO,kBAChC,OAAO,EAAO,EAChB,CACA,IAAK,YAAa,CAChB,MAAM,UAAE,SAAoB,OAAO,qBACnC,OAAO,EAAU,EACnB,CACA,IAAK,OAAQ,CACX,MAAM,WAAE,SAAqB,OAAO,gBACpC,OAAO,EAAW,CAAC,EAAZ,CAAe,EACxB,CACA,IAAK,SAAU,CACb,MAAM,OAAE,SAAiB,OAAO,kBAChC,OAAO,EAAO,EAChB,CACA,QACE,MAAM,IAAI,MAAM,yBAAyB,KAE/C,mHX/GA,SAAyC,GACvC,EAAmB,CACrB,oES4IA,eAAmC,GAKjC,MAAM,OAAE,EAAA,MAAQ,EAAQ,GAAA,QAAI,GAAY,GAEjC,EAAY,EAAW,EAAW,SAAkB,QAAQ,IAAI,CACrE,EAAe,EAAQ,EAAO,GAC9B,EAAc,EAAQ,GACtB,EAAc,GACd,EAAa,KAGT,EAAsC,CAC1C,aACA,YACA,YACA,YAGI,EAAS,OAAO,OAAO,GAAS,IAAK,GAAM,EAAE,OAGnD,MAAO,CAAE,QAFO,EAAO,OAAA,CAAQ,EAAK,IAAM,EAAM,EAAG,GAAK,EAAO,OAE7C,UACpB,gFJ5MA,SACE,EACA,EAAY,IACZ,EAAe,KAEf,MAAM,GAAW,GAAQ,IAAI,OAC7B,GAAI,EAAQ,QAAU,EACpB,OAAO,EAAQ,OAAS,EAAI,CAAC,GAAW,GAG1C,MAAM,EAAmB,GACzB,IAAI,EAAQ,EAEZ,KAAO,EAAQ,EAAQ,QAAQ,CAC7B,IAAI,EAAM,KAAK,IAAI,EAAQ,EAAW,EAAQ,QAG9C,GAAI,EAAM,EAAQ,OAAQ,CACxB,MAAM,EAAY,EAAQ,YAAY,IAAK,GACvC,EAAY,IAAO,EAAM,EAC/B,CAIA,GAFA,EAAO,KAAK,EAAQ,MAAM,EAAO,GAAK,QAElC,GAAO,EAAQ,OAAQ,MAC3B,EAAQ,KAAK,IAAI,EAAM,EAAc,EAAQ,EAC/C,CAEA,OAAO,EAAO,OAAQ,GAAU,EAAM,OAAS,EACjD"}
|