Skip to main content
Glama

Exa MCP Server

by joerup
index.ts1.87 kB
#!/usr/bin/env node import { config as loadEnv } from 'dotenv'; // Load environment variables const envResult = loadEnv(); if (envResult.parsed) { const envCount = Object.keys(envResult.parsed).length; console.log(`[dotenv@16.6.1] injecting env (${envCount}) from .env -- tip: 📡 auto-backup env with Radar: https://dotenvx.com/radar`); } import { loadConfig } from './config.js'; import { parseArgs } from './cli.js'; import { ExaServer } from './server.js'; import { runStdioTransport, startHttpTransport } from './transport/index.js'; /** * Main entry point for the Exa MCP Server * * Transport selection logic: * 1. --stdio flag forces STDIO transport * 2. --port flag or PORT env var triggers HTTP transport * 3. Default: STDIO for local development */ async function main() { try { const config = loadConfig(); const cliOptions = parseArgs(); // Determine transport mode const shouldUseHttp = cliOptions.port || (process.env.PORT && !cliOptions.stdio); const port = cliOptions.port || config.port; if (shouldUseHttp) { // HTTP transport for production/cloud deployment startHttpTransport({ apiKey: config.apiKey, port, enabledTools: config.enabledTools, debug: Boolean(cliOptions.debug || config.debug) }); } else { // STDIO transport for local development const server = new ExaServer( config.apiKey, config.enabledTools, Boolean(cliOptions.debug || config.debug) ); await runStdioTransport(server.getServer()); } } catch (error) { console.error("Fatal error running Exa server:", error); process.exit(1); } } // Run the server 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/joerup/exa-mcp'

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