Add commodity sourcing, negotiation, LOI generation, and full procurement document automation to Claude Desktop, Cursor, or any MCP-compatible agent in under 2 minutes. Your agent negotiates, generates SPA · Trade Contract · LC Application · HS Code Report — you approve once, every document is dispatched automatically.
sk-sloi- and arrives instantly.~/Library/Application Support/Claude/claude_desktop_config.json%APPDATA%\Claude\claude_desktop_config.json{
"mcpServers": {
"sloi-ai": {
"command": "npx",
"args": ["-y", "@sloi-ai/mcp-server"],
"env": {
"SLOI_API_KEY": "sk-sloi-your-key-here"
}
}
}
}
Use sloi_list_products to show me current steel prices.~/.cursor/mcp.json · Windsurf: ~/.windsurf/mcp.json{
"mcpServers": {
"sloi-ai": {
"command": "npx",
"args": ["-y", "@sloi-ai/mcp-server"],
"env": {
"SLOI_API_KEY": "sk-sloi-your-key-here"
}
}
}
}
@sloi-ai in chat to trigger them.curl -X POST https://api.sloiai.com/v1/agents/register \ -H "Content-Type: application/json" \ -d '{ "name": "my-agent", "email": "you@company.com", "framework": "claude" }' # Returns: { "api_key": "sk-sloi-...", "tier": "read", "sloi_wallet": "0x..." }
curl https://api.sloiai.com/v1/products?sector=building \ -H "x-api-key: sk-sloi-your-key" # Returns: [{ ref, name, price, unit, moq, lead_time_days, sector }]
curl -N https://api.sloiai.com/v1/negotiate \ -H "x-api-key: sk-sloi-your-key" \ -H "Content-Type: application/json" \ -d '{ "product_ref": "REF-BLD-001", "qty": 5000, "unit": "MT", "target_price": 52, "max_price": 62, "buyer_name": "My Co." }' # SSE stream: NEGOTIATION_STARTED → TEXT_CHUNK → ROUND_COMPLETE → AWAIT_HUMAN → LOI_GENERATED
Point your agent at the skill manifest URL. It reads the tool definitions and starts calling the API. Works with Claude API, OpenAI Assistants, LangChain, LlamaIndex, or any agent that can make HTTP calls.
import httpx, json import sseclient API_KEY = "sk-sloi-your-key" BASE = "https://api.sloiai.com/v1" headers = {"x-api-key": API_KEY} # 1. Create autonomous mandate (agent closes deals without human) mandate = httpx.post(f"{BASE}/mandates", headers=headers, json={ "product_ref": "REF-BLD-002", # OPC Cement 42.5N "qty": 5000, "unit": "MT", "target_price": 52, "max_price": 62, # hard ceiling — never exceeded "strategy": "standard", "auto_approve": True, # autonomous mode ON "max_orders_per_day":2, "expires_in_days": 30, }).json() # 2. Negotiate — auto-approves if within mandate with httpx.stream("POST", f"{BASE}/negotiate", headers=headers, json={ "mandate_id": mandate["mandate_id"], "buyer_name": "My Agent", }) as response: client = sseclient.SSEClient(response) for event in client.events(): data = json.loads(event.data) if data["type"] == "AUTO_APPROVED": print(f"LOI issued: {data['data']['loi_ref']}") break elif data["type"] == "AWAIT_HUMAN": print(f"Price outside mandate — escalate to boss") break
NEGOTIATION_STARTED → session opened · { neg_id, product, strategy, max_rounds } TEXT_CHUNK → streaming token · { text, role: "agent" | "broker", round } ROUND_COMPLETE → round done · { round, agent_price, broker_price, gap_pct } AWAIT_HUMAN → Boss approval needed · { deal_price, total_value, loi_fee: 500 } AUTO_APPROVED → autonomous deal closed · { deal_price, loi_ref, conditions_met } LOI_GENERATED → LOI ready · { loi_ref, deal_price, pdf_url } SPA_GENERATED → SPA ready · { spa_ref, framework, pdf_url, dispatched_to: [...] } TC_GENERATED → Trade Contract ready · { tc_ref, incoterm, pdf_url } LC_GENERATED → LC Application ready · { lc_ref, bank, amount_usd, swift_mt700_url } NEGOTIATION_FAILED → { reason: "max_rounds" | "boss_rejected" | "compliance_blocked" } PRICE_UPDATE → live price change · { sku, price, change_pct } HEARTBEAT → keep-alive every 15s
Free to register. Read tier starts immediately — browse products and prices with no credits required. Add credits to start negotiating.