sap-b1-mcp-server
Version:
SAP Business One Service Layer MCP Server
165 lines (141 loc) โข 6.29 kB
JavaScript
import { execSync } from 'child_process';
import { readFileSync, writeFileSync, existsSync, mkdirSync } from 'fs';
import { resolve, join, dirname } from 'path';
import { fileURLToPath } from 'url';
import os from 'os';
import readline from 'readline';
const __filename = fileURLToPath(import.meta.url);
const __dirname = dirname(__filename);
console.log('๐ SAP B1 MCP Server - Claude Desktop Setup');
console.log('=============================================\n');
// Get package installation directory
const packageDir = resolve(__dirname, '..');
console.log(`๐ Package directory: ${packageDir}`);
// Detect OS and set config path
let configDir, configFile, osName;
if (process.platform === 'darwin') {
configDir = join(os.homedir(), 'Library/Application Support/Claude');
osName = 'macOS';
} else if (process.platform === 'win32') {
configDir = join(os.homedir(), 'AppData/Roaming/Claude');
osName = 'Windows';
} else {
configDir = join(os.homedir(), '.config/Claude');
osName = 'Linux';
}
configFile = join(configDir, 'claude_desktop_config.json');
console.log(`๐ฅ๏ธ Detected OS: ${osName}`);
console.log(`๐ Claude config directory: ${configDir}`);
console.log(`๐ Config file: ${configFile}`);
// Create Claude config directory if it doesn't exist
try {
if (!existsSync(configDir)) {
console.log('๐ Creating Claude config directory...');
mkdirSync(configDir, { recursive: true });
}
} catch (error) {
console.error('โ Failed to create config directory:', error.message);
process.exit(1);
}
// Get bun path
let bunPath;
try {
bunPath = execSync('which bun', { encoding: 'utf8' }).trim();
console.log(`โ
Bun found at: ${bunPath}`);
} catch (error) {
console.error('โ Bun is not found in PATH');
console.error(' Please install Bun: https://bun.sh');
process.exit(1);
}
function askQuestion(question) {
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout
});
return new Promise((resolve) => {
rl.question(question, (answer) => {
rl.close();
resolve(answer);
});
});
}
async function getSAPCredentials() {
console.log('\n๐ SAP B1 Configuration Required');
console.log('Please provide your SAP Business One credentials:');
const serverUrl = await askQuestion('SAP B1 Server URL (e.g., https://server:50000): ');
const database = await askQuestion('SAP B1 Database Name: ');
const username = await askQuestion('SAP B1 Username: ');
const password = await askQuestion('SAP B1 Password: ');
return { serverUrl, database, username, password };
}
async function main() {
try {
const { serverUrl, database, username, password } = await getSAPCredentials();
console.log('\nโ๏ธ Creating Claude Desktop configuration...');
// Create configuration
const config = {
mcpServers: {
"sap-b1": {
command: bunPath,
args: [join(packageDir, 'dist/index.js')],
cwd: packageDir,
env: {
MCP_TRANSPORT: "stdio",
SAP_B1_SERVER_URL: serverUrl,
SAP_B1_DATABASE: database,
SAP_B1_USERNAME: username,
SAP_B1_PASSWORD: password,
SAP_B1_SESSION_TIMEOUT: "30",
LOG_LEVEL: "INFO",
NODE_ENV: "production"
}
}
}
};
// Handle existing config
if (existsSync(configFile)) {
console.log('โ ๏ธ Claude Desktop config file already exists!');
const backup = await askQuestion('Create backup and replace? (y/n): ');
if (backup.toLowerCase() !== 'y') {
console.log('โ Setup cancelled.');
console.log('\n๐ Manual configuration needed. Add this to your Claude Desktop config:');
console.log(JSON.stringify(config, null, 2));
process.exit(0);
}
// Create backup
const backupFile = `${configFile}.backup.${Date.now()}`;
execSync(`cp "${configFile}" "${backupFile}"`);
console.log(`๐พ Backup created: ${backupFile}`);
}
// Write configuration
writeFileSync(configFile, JSON.stringify(config, null, 2));
console.log('โ
Configuration created successfully!\n');
console.log('๐ Configuration Summary:');
console.log(` ๐ท๏ธ Server name: sap-b1`);
console.log(` ๐ง Command: ${bunPath} ${join(packageDir, 'dist/index.js')}`);
console.log(` ๐ Working directory: ${packageDir}`);
console.log(` ๐ Transport: STDIO`);
console.log(` ๐ SAP Server: ${serverUrl}`);
console.log(` ๐๏ธ Database: ${database}`);
console.log(` ๐ค Username: ${username}`);
console.log(` ๐ Password: ***masked***\n`);
console.log('๐ Setup Complete!\n');
console.log('๐ Next Steps:');
console.log('1. ๐ Restart Claude Desktop completely');
console.log('2. ๐ Start a new conversation in Claude Desktop');
console.log('3. ๐ Look for MCP connection indicator (๐)');
console.log('4. ๐ฌ Try asking: "What MCP tools do you have access to?"');
console.log('5. ๐งช Test with: "Check my SAP session status"');
console.log('\n๐ Available Tools (26+ total):');
console.log(' ๐ Authentication (3): login, logout, session status');
console.log(' ๐ฅ Master Data (9): business partners, items, warehouses, price lists');
console.log(' ๐ Documents (6): orders, purchase orders, invoices');
console.log(' ๐ Queries (2): custom queries, cross-joins');
console.log(' ๐ Stock & Pricing (4): item stock, item prices โญ NEW');
} catch (error) {
console.error('โ Setup failed:', error.message);
process.exit(1);
}
}
main();