@onecompiler/onecompiler-mcp-server
Version:
MCP Server for Onecompiler
63 lines (62 loc) • 2.48 kB
JavaScript
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
import OnecompilerMCPServer from "./toolkit.js";
import { Environment, Provider } from "./types.js";
const ACCEPTED_ARGS = ["api-key", "provider", "environment"];
function parseArgs(args) {
const options = {
apiKey: "",
provider: undefined,
environment: undefined,
};
args.forEach((arg) => {
if (arg.startsWith("--")) {
const [key, value] = arg.slice(2).split("=");
if (key == "api-key") {
options.apiKey = value;
}
else if (key == "environment") {
options.environment = value;
}
else if (key == "provider") {
options.provider = value;
}
else {
throw new Error(`Invalid argument: ${key}. Accepted arguments are: ${ACCEPTED_ARGS.join(", ")}`);
}
}
});
// Check if API key is either provided in args or set in environment variables
const apiKey = options.apiKey || process.env.ONECOMPILER_API_KEY;
if (!apiKey) {
throw new Error("Onecompiler API key not provided. Please either pass it as an argument --api-key=$KEY or set the ONECOMPILER_API_KEY environment variable.");
}
const provider = options.provider || process.env.ONECOMPILER_PROVIDER || Provider.onecompiler;
if (!provider || !Object.values(Provider).includes(provider)) {
throw new Error(`Invalid provider: ${provider}. Accepted providers are: rapidapi, onecompiler`);
}
const environment = options.environment || process.env.ONECOMPILER_ENVIRONMENT || Environment.production;
if (!environment || !Object.values(Environment).includes(environment)) {
throw new Error(`Invalid environment: ${environment}. Accepted environments are: sandbox, production`);
}
return {
apiKey: apiKey,
provider: provider,
environment: environment,
};
}
async function main() {
const options = parseArgs(process.argv.slice(2));
// Create the MCP server
const server = new OnecompilerMCPServer({
apiKey: options.apiKey,
provider: options.provider,
environment: options.environment,
});
const transport = new StdioServerTransport();
await server.connect(transport);
}
main().catch((error) => {
console.error("Fatal error in main():", error);
process.exit(1);
});