Skip to main content
Glama

Activepieces MCP Server

by eldoonreval
local-piece-manager.tsβ€’3.82 kB
import { readFile, writeFile } from 'node:fs/promises' import { join, resolve, sep } from 'node:path' import { ApLock, CacheState, filePiecesUtils, memoryLock } from '@activepieces/server-shared' import { assertEqual, assertNotNullOrUndefined, PackageType, PiecePackage } from '@activepieces/shared' import { FastifyBaseLogger } from 'fastify' import { cacheState } from '../cache/cache-state' import { packageManager } from '../cache/package-manager' import { workerMachine } from '../utils/machine' import { PIECES_BUILDER_MUTEX_KEY } from './development/pieces-builder' import { PieceManager } from './piece-manager' export class LocalPieceManager extends PieceManager { protected override async installDependencies( params: InstallParams, ): Promise<void> { let lock: ApLock | undefined try { lock = await memoryLock.acquire(PIECES_BUILDER_MUTEX_KEY) const { projectPath, pieces } = params const basePath = resolve(__dirname.split(`${sep}dist`)[0]) const baseLinkPath = join( basePath, 'dist', 'packages', 'pieces', 'community', ) const packages = workerMachine.getSettings().DEV_PIECES || [] const frameworkPackages = { '@activepieces/pieces-common': `link:${baseLinkPath}/common`, '@activepieces/pieces-framework': `link:${baseLinkPath}/framework`, '@activepieces/shared': `link:${basePath}/dist/packages/shared`, } await linkPackages(projectPath, join(baseLinkPath, 'framework'), '@activepieces/pieces-framework', frameworkPackages, params.log) await linkPackages(projectPath, join(baseLinkPath, 'common'), '@activepieces/pieces-common', frameworkPackages, params.log) for (const piece of pieces) { assertEqual(piece.packageType, PackageType.REGISTRY, 'packageType', `Piece ${piece.pieceName} is not of type REGISTRY`) const directoryPath = await filePiecesUtils(packages, params.log).findDirectoryByPackageName(piece.pieceName) assertNotNullOrUndefined(directoryPath, `directoryPath for ${piece.pieceName} is null or undefined`) await linkPackages(projectPath, directoryPath, piece.pieceName, frameworkPackages, params.log) } } finally { if (lock) { await lock.release() } } } } const linkPackages = async ( projectPath: string, linkPath: string, packageName: string, packages: Record<string, string>, log: FastifyBaseLogger, ): Promise<void> => { const cache = cacheState(projectPath) if (await cache.cacheCheckState(packageName) === CacheState.READY) { return } await updatePackageJson(linkPath, packages) await packageManager(log).link({ packageName, path: projectPath, linkPath, }) await cache.setCache(packageName, CacheState.READY) } const updatePackageJson = async ( directoryPath: string, frameworkPackages: Record<string, string>, ): Promise<void> => { const packageJsonForPiece = join(directoryPath, 'package.json') const packageJson = await readFile(packageJsonForPiece, 'utf-8').then( JSON.parse, ) for (const [key, value] of Object.entries(frameworkPackages)) { if ( packageJson.dependencies && Object.keys(packageJson.dependencies).includes(key) ) { packageJson.dependencies[key] = value } } await writeFile(packageJsonForPiece, JSON.stringify(packageJson, null, 2)) } type InstallParams = { projectPath: string pieces: PiecePackage[] log: FastifyBaseLogger }

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/eldoonreval/activepieces'

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