Skip to main content
Glama

ServeMyAPI

by Jktfe
cli.js5.09 kB
#!/usr/bin/env node import { Client } from '@modelcontextprotocol/sdk/client'; import { StdioClientTransport } from '@modelcontextprotocol/sdk/client/stdio.js'; import { spawn } from 'child_process'; import path from 'path'; import { fileURLToPath } from 'url'; // Create an MCP client that connects to the ServeMyAPI server // Usage: // - list: List all API keys // - get <name>: Get a specific API key // - set <name> <value>: Set an API key // - delete <name>: Delete an API key async function main() { // Start the server process const __dirname = path.dirname(fileURLToPath(import.meta.url)); const serverPath = path.join(__dirname, 'server.js'); console.log('Starting ServeMyAPI server...'); // We'll let the StdioClientTransport handle the process management // No need to spawn the process manually // Create a transport that connects to the local server process const transport = new StdioClientTransport({ command: 'node', args: [serverPath] }); // Create a new MCP client with name and version const client = new Client("ServeMyAPIClient", "1.0.0"); try { // Connect to the server using the transport await client.connect(transport); console.log('Connected to ServeMyAPI server'); // Parse command line arguments const args = process.argv.slice(2); const command = args[0] || 'list'; let result; switch(command) { case 'list': console.log('Listing all API keys...'); result = await client.callTool({ name: 'list-api-keys', arguments: {} }); break; case 'get': const keyName = args[1]; if (!keyName) { console.error('Error: Key name is required for get command'); process.exit(1); } console.log(`Getting API key: ${keyName}`); result = await client.callTool({ name: 'get-api-key', arguments: { name: keyName } }); break; case 'store': const setKeyName = args[1]; const keyValue = args[2]; if (!setKeyName || !keyValue) { console.error('Error: Both key name and value are required for store command'); process.exit(1); } console.log(`Setting API key: ${setKeyName}`); result = await client.callTool({ name: 'store-api-key', arguments: { name: setKeyName, key: keyValue } }); break; case 'delete': const deleteKeyName = args[1]; if (!deleteKeyName) { console.error('Error: Key name is required for delete command'); process.exit(1); } console.log(`Deleting API key: ${deleteKeyName}`); result = await client.callTool({ name: 'delete-api-key', arguments: { name: deleteKeyName } }); break; default: console.error(`Unknown command: ${command}`); console.log('Available commands: list, get <name>, store <name> <value>, delete <name>'); process.exit(1); } // Display the results // Display the results based on the command if (result.content && result.content.length > 0) { const textContent = result.content.find(item => item.type === 'text'); if (textContent && textContent.text) { if (command === 'list') { console.log('\nAvailable API Keys:'); if (textContent.text === 'No API keys found') { console.log('No API keys found'); } else { // Split the keys by newline and display them const keys = textContent.text.replace('Available API keys:\n', '').split('\n'); keys.forEach(key => { console.log(`- ${key}`); }); } } else { // For other commands, just display the text content console.log(`\nResult: ${textContent.text}`); } } } else { console.log('No data returned from the server'); } } catch (error) { console.error('Error:', error.message); process.exit(1); } finally { // Disconnect from the server await client.disconnect(); // Transport will handle closing the server process } } // Display usage information function printUsage() { console.log(` ServeMyAPI CLI Usage: node cli.js [command] [options] Commands: list List all API keys (default) get <name> Get the value of a specific API key store <name> <value> Set the value of an API key delete <name> Delete an API key Examples: node cli.js list node cli.js get myApiKey node cli.js store myApiKey abc123def456 node cli.js delete myApiKey `); } // Check if help flag is present if (process.argv.includes('--help') || process.argv.includes('-h')) { printUsage(); process.exit(0); } // Run the main function main();

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/Jktfe/serveMyAPI'

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