Skip to main content
Glama
metadataExtractor.ts2.06 kB
import type { RegistryServer } from '@src/domains/registry/types.js'; import type { ArgMetadata, EnvVarMetadata } from '../types.js'; /** * Extract all environment variables with metadata from server packages */ export function extractEnvVarMetadata(server: RegistryServer): EnvVarMetadata[] { const envVars: EnvVarMetadata[] = []; const seen = new Set<string>(); if (server.packages && server.packages.length > 0) { for (const pkg of server.packages) { if (pkg.environmentVariables && Array.isArray(pkg.environmentVariables)) { for (const envVar of pkg.environmentVariables) { // Use 'name' or 'value' field for the environment variable key const key = envVar.name || envVar.value; if (key && !seen.has(key)) { seen.add(key); envVars.push({ key, description: envVar.description, default: envVar.default, isRequired: envVar.isRequired, isSecret: envVar.isSecret, }); } } } } } return envVars; } /** * Extract all runtime arguments with metadata from server packages */ export function extractArgMetadata(server: RegistryServer): ArgMetadata[] { const args: ArgMetadata[] = []; const seen = new Set<string>(); if (server.packages && server.packages.length > 0) { for (const pkg of server.packages) { // Check both packageArguments and runtimeArguments const argSources = [...(pkg.packageArguments || []), ...(pkg.runtimeArguments || [])]; for (const arg of argSources) { const name = arg.name; if (name && !seen.has(name)) { seen.add(name); args.push({ name: arg.name, description: arg.description, default: arg.default, isRequired: arg.isRequired, isSecret: arg.isSecret, type: arg.type, choices: arg.choices, valueHint: arg.valueHint, }); } } } } return args; }

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/1mcp-app/agent'

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