@onecompiler/onecompiler-mcp-server
Version:
MCP Server for Onecompiler
62 lines (61 loc) • 2.06 kB
JavaScript
import { Provider } from "./types.js";
import axios from "axios";
export const codeExec = async (params, apiKey, baseUrl, provider) => {
const { language, stdin, files } = params;
// console.log(`codeExec tool called with language: ${language}. stdin: ${stdin}. files: ${files}`);
if (!apiKey) {
throw new Error("API key and base URL are required");
}
const headers = {
"Content-Type": "application/json",
};
if (provider === Provider.rapidapi) {
headers["x-rapidapi-key"] = apiKey;
headers["x-rapidapi-host"] = "onecompiler-apis.p.rapidapi.com";
}
else {
headers["X-OneCompiler-Key"] = apiKey;
}
try {
// Call OneCompiler API
const response = await axios.post(`${baseUrl}/api/v1/run`, {
language,
stdin: stdin,
files: files,
}, {
headers: headers,
});
// console.log(response.data);
const result = response.data;
// Format the output
let outputText = "";
if (result.stdout) {
outputText += `Output:\n${result.stdout}\n`;
}
if (result.stderr) {
outputText += `Error:\n${result.stderr}\n`;
}
if (result.exception) {
outputText += `Exception:\n${result.exception}\n`;
}
if (result.compileStatus) {
outputText += `Compile Status: ${result.compileStatus}\n`;
}
if (result.executionTime !== undefined) {
outputText += `Execution Time: ${result.executionTime}ms\n`;
}
if (result.memory !== undefined) {
outputText += `Memory Used: ${result.memory} bytes\n`;
}
if (result.error) {
// for ex: invalid access token
outputText += `Error: ${result.error}`;
}
return outputText || "No output";
}
catch (err) {
// console.error(`Failed to execute code: ${err}`, err);
const error = err;
return `Error: ${error.message}`;
}
};