/**
* codify-mcp
* Standalone MCP server library for executing Apify Agent tools
*
* Usage:
* npx codify-mcp '{"name":"tool1",...}' '{"name":"tool2",...}'
*
* Requires:
* - APIFY_TOKEN env var OR ~/.apify/auth.json
*/
const { getToken } = require('./mcp/auth');
const { fixModulePaths } = require('./mcp/resolver');
const { setupServer } = require('./mcp/server_setup');
/**
* Parse tools from process.argv
* @returns {Array} Array of tool objects
*/
const parseToolsFromArgv = () => {
const tools = [];
const toolJsonArgs = process.argv.slice(2);
for (const arg of toolJsonArgs) {
try {
const tool = JSON.parse(arg);
tools.push(tool);
console.error('[MCP Parser] Loaded tool:', tool.name || 'unnamed');
} catch (e) {
console.error('[MCP Parser] Failed to parse tool arg:', e.message);
}
}
if (tools.length === 0) {
console.error('[MCP Error] No valid tools in arguments. Expected JSON strings.');
process.exit(1);
}
return tools;
};
/**
* Start the MCP server with tools from argv
* Initializes everything and connects to MCP client via stdio
*/
const start = async () => {
try {
// 1. Fix module paths for npx environments
fixModulePaths();
// 2. Get Apify token
const apifyToken = getToken();
if (!apifyToken) {
console.error('[Auth Error] No Apify token found.');
console.error('Set APIFY_TOKEN env var or run: apify login');
process.exit(1);
}
// 3. Parse tools from command-line arguments
const tools = parseToolsFromArgv();
// 4. Setup and start MCP server
await setupServer({ tools, apifyToken });
} catch (e) {
console.error('[MCP Fatal Error]', e);
process.exit(1);
}
};
module.exports = { start, parseToolsFromArgv };