🔑 SyteLine IDORequestService MCP Server - Enterprise ERP integration for AI assistants
This server connects to SyteLine/Mongoose ERP systems. EVERY session must start with authentication!
// REQUIRED FIRST CALL - Nothing works without this!
await syteline_get_security_token({
config: "SL_PROD", // Your SyteLine configuration
username: "your_user", // Your SyteLine username
password: "your_pass" // Your SyteLine password
});This project provides:
- ✅ Complete SyteLine IDORequestService API coverage - All endpoints implemented
- ✅ Intelligent token management - Automatic caching and refresh
- ✅ LLM-optimized tools - Clear descriptions and usage patterns
- ✅ Interactive help system - Built-in usage guide tool
- ✅ Production-ready - Comprehensive error handling and validation
Before starting, please ensure you have:
- Node.js (v18+ required)
- npm (included with Node)
1. Install dependencies
Run from your project's root directory:
npm install2. Build the TypeScript project
npm run build3. Configure Environment Variables
Create a .env file in the root of the project by copying the .env.example file:
cp .env.example .envOpen the new .env file and add your API credentials:
# The base URL for the API
BASE_URL=https://api.example.com
# Your API Key for authentication (if required)
API_KEY=your_secret_api_key_here
The generated tools will use these environment variables for making API calls. You can override these per-call by passing BASE_URL or API_KEY in the arguments to the tool.
You can run the server in two modes:
1. Stdio Mode (Default - for Claude Desktop, etc.)
This mode is ideal for MCP clients like Claude Desktop.
npm startFor development with auto-reload:
npm run dev2. HTTP Mode
This mode exposes an HTTP endpoint at /mcp that can be called by any HTTP client.
node dist/index.js --httpThe server will start on port 3001 by default (configurable via PORT env variable).
-
Authenticate First (MANDATORY):
await syteline_get_security_token({ config: "SL_PROD", username: "your_user", password: "your_pass" });
-
Discover Available Data:
// See what IDOs are available const idoList = await syteline_get_ido_collection_names(); // Get schema for specific IDO const schema = await syteline_get_ido_info({ idoName: "UserNames" });
-
Query Data:
const data = await syteline_load_collection({ ido: "UserNames", properties: ["UserId", "UserName", "UserDesc"], filter: "Active = 1", recordCap: 50 });
-
Get Interactive Help:
// Complete usage guide await syteline_usage_guide(); // Specific help sections await syteline_usage_guide({ section: "authentication" }); await syteline_usage_guide({ section: "querying" });
⚠️ ALWAYS authenticate first - No other operations work without it- 🔑 Tokens are cached automatically - No manual token management needed
- 📋 Use RowPointers for updates - Get them from LoadCollection queries
- 📝 IDO names are case-sensitive - Usually PascalCase like "UserNames"
- 🔍 Use single quotes in filters -
"UserId = 'admin'"not"UserId = \"admin\""
src/
├── index.ts # Main server entry point
├── lib/
│ └── tools.ts # Tool discovery logic
└── tools/
├── paths.ts # Tool registry
└── [api_name]/ # Generated API tools
└── *.ts # Individual tool files
dist/ # Compiled JavaScript (generated)
Watch mode (auto-recompile on changes):
npm run watchAdd to your Claude Desktop config (~/Library/Application Support/Claude/claude_desktop_config.json on macOS):
{
"mcpServers": {
"infor-idorequestservice-api": {
"command": "node",
"args": [
"/absolute/path/to/your/project/dist/index.js"
]
}
}
}