Skip to main content
Glama
ampcome-mcps

Apify Model Context Protocol Server

by ampcome-mcps
helpers.ts4.47 kB
import { Client } from '@modelcontextprotocol/sdk/client/index.js'; import { SSEClientTransport } from '@modelcontextprotocol/sdk/client/sse.js'; import { StdioClientTransport } from '@modelcontextprotocol/sdk/client/stdio.js'; import { StreamableHTTPClientTransport } from '@modelcontextprotocol/sdk/client/streamableHttp.js'; import { expect } from 'vitest'; import { HelperTools } from '../src/const.js'; export interface McpClientOptions { actors?: string[]; enableAddingActors?: boolean; enableBeta?: boolean; // Optional, used for beta features } export async function createMcpSseClient( serverUrl: string, options?: McpClientOptions, ): Promise<Client> { if (!process.env.APIFY_TOKEN) { throw new Error('APIFY_TOKEN environment variable is not set.'); } const url = new URL(serverUrl); const { actors, enableAddingActors, enableBeta } = options || {}; if (actors) { url.searchParams.append('actors', actors.join(',')); } if (enableAddingActors !== undefined) { url.searchParams.append('enableAddingActors', enableAddingActors.toString()); } if (enableBeta !== undefined) { url.searchParams.append('beta', enableBeta.toString()); } const transport = new SSEClientTransport( url, { requestInit: { headers: { authorization: `Bearer ${process.env.APIFY_TOKEN}`, }, }, }, ); const client = new Client({ name: 'sse-client', version: '1.0.0', }); await client.connect(transport); return client; } export async function createMcpStreamableClient( serverUrl: string, options?: McpClientOptions, ): Promise<Client> { if (!process.env.APIFY_TOKEN) { throw new Error('APIFY_TOKEN environment variable is not set.'); } const url = new URL(serverUrl); const { actors, enableAddingActors, enableBeta } = options || {}; if (actors) { url.searchParams.append('actors', actors.join(',')); } if (enableAddingActors !== undefined) { url.searchParams.append('enableAddingActors', enableAddingActors.toString()); } if (enableBeta !== undefined) { url.searchParams.append('beta', enableBeta.toString()); } const transport = new StreamableHTTPClientTransport( url, { requestInit: { headers: { authorization: `Bearer ${process.env.APIFY_TOKEN}`, }, }, }, ); const client = new Client({ name: 'streamable-http-client', version: '1.0.0', }); await client.connect(transport); return client; } export async function createMcpStdioClient( options?: McpClientOptions, ): Promise<Client> { if (!process.env.APIFY_TOKEN) { throw new Error('APIFY_TOKEN environment variable is not set.'); } const { actors, enableAddingActors, enableBeta } = options || {}; const args = ['dist/stdio.js']; if (actors) { args.push('--actors', actors.join(',')); } if (enableAddingActors !== undefined) { args.push('--enable-adding-actors', enableAddingActors.toString()); } if (enableBeta !== undefined) { args.push('--beta', enableBeta.toString()); } const transport = new StdioClientTransport({ command: 'node', args, env: { APIFY_TOKEN: process.env.APIFY_TOKEN as string, }, }); const client = new Client({ name: 'stdio-client', version: '1.0.0', }); await client.connect(transport); return client; } /** * Adds an Actor as a tool using the ADD_ACTOR helper tool. * @param client - MCP client instance * @param actor - Actor ID or full name in the format "username/name", e.g., "apify/rag-web-browser". */ export async function addActor(client: Client, actor: string): Promise<void> { await client.callTool({ name: HelperTools.ACTOR_ADD, arguments: { actor, }, }); } /** * Asserts that two arrays contain the same elements, regardless of order. * @param array - The array to test * @param values - The expected values */ export function expectArrayWeakEquals(array: unknown[], values: unknown[]): void { expect(array.length).toBe(values.length); for (const value of values) { expect(array).toContainEqual(value); } }

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/ampcome-mcps/apify-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server