Skip to main content
Glama
eyeot-mcp

eyeot-mcp

by Termi24

eyeot-mcp

Plug Claude Desktop into your ERP.

Official stdio ↔ HTTP bridge for the eyeot ERP MCP server. ~600 business tools, one pip install.

PyPI version Python License: MIT MCP

Dependencies LOC Auditable Auth

Landing page · Docs · PyPI · Issues


⚡ 60-second install

pip install eyeot-mcp        # 1.  install the bridge
eyeot-mcp login              # 2.  authenticate via browser (OAuth Device Flow)

Then paste into your Claude Desktop config:

{
  "mcpServers": {
    "eyeot": {
      "command": "eyeot-mcp"
    }
  }
}

Restart Claude Desktop. Done. Ask: "List my last 5 invoices."

Config location · macOS ~/Library/Application Support/Claude/claude_desktop_config.json · Windows %APPDATA%\Claude\claude_desktop_config.json

Related MCP server: Odoo MCP Server

🧩 What is this?

The eyeot ERP exposes ~600 business actions — CRM, sales, stock, maintenance, HR, finance, IT service management, GED, RGPD compliance, plus 6 V2 marketplace modules (POS, delivery & routing, recruitment, BPM, field service, supply chain) — as MCP tools over HTTPS.

But Claude Desktop, Cursor, and most local agents only speak MCP over stdio.

eyeot-mcp is the missing piece between them.

flowchart LR
    A["🤖 Claude Desktop<br/>Cursor / custom agent"] -- "JSON-RPC<br/>over stdio" --> B["📦 eyeot-mcp<br/>(this package)"]
    B -- "HTTPS POST<br/>Bearer token" --> C["🏢 eyeot ERP<br/>(your tenant)"]
    C -. "Auth · RBAC · audit<br/>multi-tenant isolation<br/>license guard" .-> C

    style A fill:#eef2ff,stroke:#6366f1,color:#1e293b
    style B fill:#f0fdf4,stroke:#10b981,color:#065f46
    style C fill:#fef3c7,stroke:#f59e0b,color:#78350f

Zero business logic in the bridge. Everything happens server-side — auth, RBAC, audit logging, license enforcement, multi-tenant isolation, idempotency. The CLI is ~290 lines of Python standard library. You can audit it in 10 minutes.

🎯 What can your agent do?

After install, your MCP client gets access to actions like:

Domain

Try saying…

💼 CRM

"Create a quote for ACME — 10 units of PROD-001 at standard tariff."

📊 Sales

"List my last 5 invoices and their payment status."

📦 Stock

"Which products in Lyon site are below the critical threshold?"

🔧 Maintenance

"Which equipment is overdue for preventive maintenance this week?"

👥 HR

"Show me pending leave requests for my team."

💰 Finance

"What's the revenue forecast for Q3 by business unit?"

🎫 IT support

"Open a ticket: VPN is down for the marketing team, P1."

📄 GED

"Find all signed NDAs for partner XYZ."

🧠 Intelligence

"Customer-health distribution across all active accounts."

🧾 POS / Caisse

"Today's Z-report total for the Lyon register."

🚚 Delivery

"Optimize today's route for vehicle TL-204 and notify recipients."

🧑‍💼 Recruitment

"Shortlist candidates for the senior developer posting."

⚙️ Process / BPM

"Which approval tasks are pending in my inbox?"

🏗️ Field service

"Schedule a site intervention for client XYZ next Tuesday."

🔩 Supply chain

"Run MRP and list the components to reorder this week."

…and ~590 more, auto-generated from the OpenAPI spec.

🔐 Authentication

Two modes, same Bearer header on the wire, same Authorization decorator server-side.

🤖 OAuth 2.1 (humans)

🔑 API key (services)

For Claude Desktop, Cursor, personal agents.

eyeot-mcp login

Opens browser → approve → done. Credentials saved to ~/.eyeot-mcp/config.json (mode 0600).

  • Token format: eya_<base64> access + eyr_<base64> refresh

  • Lifetime: 1 h access / 30 d refresh

  • PKCE S256 mandatory (public clients)

  • Refresh rotation with replay detection — a stolen refresh kills the whole token family

  • The CLI auto-refreshes the access token (proactively before expiry + on a 401) — stay connected for the full 30-day refresh window without re-running login

For CI/CD agents, batch jobs, server-to-server.

{
  "mcpServers": {
    "eyeot": {
      "command": "eyeot-mcp",
      "env": { "EYEOT_TOKEN": "eyk_xxx_xxx" }
    }
  }
}

Issued by an org admin from the eyeot ERP settings panel.

  • Token format: eyk_<prefix>_<secret>

  • Lifetime: until revoked

  • Scope: org-wide, configurable RBAC

🛡️ Security model

🔒

OAuth 2.1 + PKCE

Public clients use PKCE S256. Refresh rotation with replay detection.

👮

Server-side RBAC

Every tool call goes through the same @permissions_required decorators as the UI.

📝

Full audit trail

Every action logged with user + tenant + IP. RGPD-compliant retention.

💳

License grace

Subscription lapsed? GETs still work so the agent can inform you. POSTs return 402 with activate_url.

Local credentials stored at ~/.eyeot-mcp/config.json with file mode 0600 (POSIX). On Windows, file ACLs apply. No telemetry, no phone-home.

🏗️ Self-hosting

Point the bridge at any eyeot deployment with --base-url:

eyeot-mcp --base-url https://erp.example.com login
{
  "mcpServers": {
    "eyeot": {
      "command": "eyeot-mcp",
      "args": ["--base-url", "https://erp.example.com"]
    }
  }
}

Same protocol, same auth, your infra.

📚 Commands

Command

Description

eyeot-mcp

Start the stdio bridge using saved credentials (default mode — what Claude Desktop runs)

eyeot-mcp login

Browser-based OAuth Device Authorization Grant

eyeot-mcp logout

Revoke refresh token server-side, delete local credentials

eyeot-mcp --token eyk_...

One-shot mode with an explicit API key

eyeot-mcp --base-url URL ...

Target a self-hosted deployment

🔧 How it works (under the hood)

  1. Claude Desktop spawns eyeot-mcp as a child process, exchanges JSON-RPC 2.0 over its stdin/stdout pipes.

  2. For each line received on stdin, the bridge POSTs the JSON to ${base_url}/api/v1/mcp with Authorization: Bearer <token>.

  3. The HTTP response is written verbatim to stdout, framed as line-delimited JSON.

  4. The server speaks MCP 2024-11-05 and auto-generates ~600 tools from the OpenAPI spec — initialize, tools/list, tools/call all work exactly as MCP clients expect.

No state in the bridge. No protocol translation beyond transport. No surprises.

📖 Resources

Landing & install

API

Spec & protocol

🧭 Versioning

  • This package: Semantic Versioning. Major bumps may change CLI flags or the on-disk config schema.

  • MCP protocol: 2024-11-05 (negotiated server-side).

  • ERP API: /api/v1 (stable). Breaking changes ship as /api/v2.

📄 License

MIT — fork it, package it, audit it, build on top of it.

The eyeot ERP backend is a separate, proprietary product of Eyeot Software. This bridge is open-source so anyone can audit it, fork it, package it for their distro, or use it as a reference for building their own MCP clients.


ERP by Eyeot Software

Multi-tenant, AI-native ERP for SMBs. Built to be operated by AI agents from day one.

Every action you can do in the UI, you can do via this bridge.

🌐 erp.eyeot.fr · ✉️ contact@eyeot.fr

Available Tools

33 tools
accept_quoteCInspect

Marquer un devis accepté (par le client)

Inputs: quote_id (required).

convert_opportunity_to_quoteBInspect

Convertir une opportunité en devis

Inputs: opportunity_id (required).

create_clientCInspect

Créer un client

Inputs: body (required).

create_employeeCInspect

Créer un employé

Inputs: no named parameters.

create_invoiceCInspect

Créer une facture

Inputs: no named parameters.

create_opportunityDInspect

Créer une opportunité

Inputs: body (required).

create_orderCInspect

Créer un bon de commande

Inputs: body (required).

create_productCInspect

Créer un produit (catalogue stock)

Inputs: body (required).

create_quoteCInspect

Créer un devis

Inputs: body (required).

create_ticketDInspect

Créer un ticket IT

Inputs: body (required).

dashboard_alertsDInspect

Alertes du dashboard

Inputs: no named parameters.

dashboard_kpisCInspect

KPIs du dashboard principal

Inputs: no named parameters.

eyeot_callAInspect

Exécute une action eyeot ERP par son nom canonique. Format action : <module>.<resource>.<verb> (ex: 'clients.list', 'rh.employes.create', 'quotes.send'). Toujours utiliser eyeot_help d'abord pour connaître l'action + les params attendus. Les params path (ex: id) et le body JSON sont passés dans params.

Inputs: action (required), params.

eyeot_helpAInspect

Catalog des actions disponibles sur eyeot ERP. Sans argument : liste les modules et compteur d'actions. Avec module='rh' : liste toutes les actions RH (employes, conges, paie, formations…). Avec action='rh.employes.create' : retourne le détail (path, méthode, params, schema body). Avec search='facture' : recherche les actions matchant. Toujours appeler eyeot_help AVANT eyeot_call pour découvrir l'action exacte.

Inputs: action, module, search.

get_clientAInspect

Récupérer un client par id

Inputs: client_id (required).

invoice_from_quoteCInspect

Créer une facture à partir d'un devis

Inputs: quote_id (required).

list_clientsAInspect

Lister les clients (CRM)

Inputs: no named parameters.

list_employeesCInspect

Lister les employés

Inputs: no named parameters.

list_invoicesDInspect

Lister les factures

Inputs: no named parameters.

list_leavesBInspect

Lister les demandes de congés

Inputs: no named parameters.

list_opportunitiesCInspect

Lister les opportunités commerciales

Inputs: no named parameters.

list_ordersBInspect

Lister les bons de commande

Inputs: no named parameters.

list_productsBInspect

Lister les produits / catalogue

Inputs: no named parameters.

list_quotesDInspect

Lister les devis

Inputs: no named parameters.

list_stock_alertsCInspect

Alertes stock bas / rupture

Inputs: no named parameters.

list_suppliersCInspect

Lister les fournisseurs

Inputs: no named parameters.

list_ticketsAInspect

Lister les tickets IT

Inputs: no named parameters.

quote_pdfCInspect

Récupérer le PDF d'un devis

Inputs: quote_id (required).

request_leaveCInspect

Demander un congé

Inputs: body (required).

stock_dashboardCInspect

Dashboard stock (KPIs)

Inputs: no named parameters.

update_clientCInspect

Mettre à jour un client

Inputs: body (required), client_id (required).

whoamiAInspect

Récupérer l'utilisateur authentifié + organisation active + permissions. À APPELER AVANT toute réponse mentionnant l'org/user/plan/role.

Inputs: no named parameters.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

Loading tool schema changelog…

    TDQS

    C2.7/5.0

    Scored across 33 tools

    Disambiguation4/5

    Most tools target distinct resources (client, employee, invoice, quote, etc.), but the presence of generic tools like eyeot_call and eyeot_help could cause slight ambiguity if an agent doesn't use them correctly. However, descriptions clarify their roles.

    Naming Consistency4/5

    The majority follow a verb_noun pattern (e.g., create_client, list_clients), but some deviate (convert_opportunity_to_quote, request_leave, dashboard_kpis). The pattern is mostly consistent with minor exceptions.

    Tool Count3/5

    33 tools is heavy but appropriate for an ERP system covering CRM, HR, IT, stock, and invoicing. It borders on too many, but each tool has a clear resource.

    Completeness4/5

    The tool surface covers essential CRUD operations for multiple business areas, and the generic eyeot_call fills any remaining gaps. Missing updates for a few resources, but overall comprehensive.

    Maintenance

    ActivityInactive
    ResponsivenessNo recent community issues

    Related MCP Connectors

    Related MCP Servers

    • A
      license
      Not graded
      quality
      D
      maintenance
      556-tool MCP server giving AI agents full access to the FutureSense business platform. Covers 10 app domains: invoicing, payroll, accounting, CRM, booking, content creation, website builder, quotations, email, and more. Works with Claude, ChatGPT, Gemini, Cursor, and any MCP-compatible client.
      MIT
    • A
      license
      Not graded
      quality
      D
      maintenance
      An enterprise-grade MCP server for interacting with Odoo ERP through AI assistants, enabling guided workflows, native BI, and deep introspection.
      10
      MIT
    • A
      license
      Not graded
      quality
      C
      maintenance
      MCP server to connect Conta Azul ERP to AI agents, enabling natural language management of clients, products, sales, contracts, finances, and NF-e via OAuth.
      12
      MIT
    • A
      license
      Not graded
      quality
      D
      maintenance
      MCP server that exposes an in-browser AI ERP (CRM, stock, invoices, HR) with role-aware agents, enabling natural language chat and confirm-before-write actions.
      MIT