UNPKG

arbitrum-mcp-tools

Version:

A comprehensive collection of Model Context Protocol (MCP) tools for interacting with the Arbitrum blockchain. Enables AI assistants like Claude, Cursor, Windsurf, VS Code, Gemini CLI, and OpenAI Codex to perform blockchain operations including account an

91 lines (90 loc) 2.71 kB
import fs from "fs"; import { ensureDirectoryExists } from "../../utils/paths.js"; export function readJsonConfig(filePath) { try { if (fs.existsSync(filePath)) { const content = fs.readFileSync(filePath, "utf-8"); return JSON.parse(content); } } catch (error) { // File doesn't exist or is invalid, return empty object } return {}; } export function writeJsonConfig(filePath, config) { ensureDirectoryExists(filePath); const content = JSON.stringify(config, null, 2); fs.writeFileSync(filePath, content, "utf-8"); } export function generateMcpServerEntry() { // Use npx to run the MCP server from npm package // This ensures the server is always run from the installed package // // JSON-based platforms (Claude, Cursor, etc.) inherit shell environment // so no need to explicitly pass env vars return { command: "npx", args: ["-y", "arbitrum-mcp-tools", "serve"], }; } export function addArbitrumToJsonConfig(filePath, configKey) { try { const config = readJsonConfig(filePath); // Ensure the config key exists if (!config[configKey]) { config[configKey] = {}; } // Add arbitrum server const servers = config[configKey]; servers["arbitrum"] = generateMcpServerEntry(); writeJsonConfig(filePath, config); return true; } catch (error) { console.error(`Error adding arbitrum to config: ${error}`); return false; } } export function removeArbitrumFromJsonConfig(filePath, configKey) { try { if (!fs.existsSync(filePath)) { return false; } const config = readJsonConfig(filePath); if (!config[configKey]) { return false; } const servers = config[configKey]; if (!servers["arbitrum"]) { return false; } delete servers["arbitrum"]; // Clean up empty configKey if (Object.keys(servers).length === 0) { delete config[configKey]; } writeJsonConfig(filePath, config); return true; } catch (error) { console.error(`Error removing arbitrum from config: ${error}`); return false; } } export function isArbitrumInstalledInJsonConfig(filePath, configKey) { try { if (!fs.existsSync(filePath)) { return false; } const config = readJsonConfig(filePath); if (!config[configKey]) { return false; } const servers = config[configKey]; return !!servers["arbitrum"]; } catch (_a) { return false; } }