stdio↔HTTP bridge for the eyeot ERP MCP server (Claude Desktop, Cursor, custom agents)
Project description
eyeot-mcp
Official stdio ↔ HTTP bridge for the eyeot ERP Model Context Protocol server. Plug Claude Desktop, Cursor, or any MCP-compatible agent into a remote eyeot deployment with a single command.
ERP by Eyeot Software — erp.eyeot.fr
What this does
The eyeot ERP exposes ~440 business actions (CRM, sales, stock, maintenance, HR, finance, IT service management…) as MCP tools over HTTPS. Most local agents (Claude Desktop, Cursor) only speak MCP over stdio. This package is the missing piece :
Claude Desktop ←─ JSON-RPC stdio ─→ eyeot-mcp ←─ HTTPS POST ─→ /api/v1/mcp
All authentication, RBAC, audit logging, license guard, idempotency and tenant isolation happens server-side. The bridge only forwards messages.
Install
pip install eyeot-mcp
Python 3.10+. No dependencies — uses only the standard library, so it installs instantly and works inside restricted sandboxes (Claude Desktop's embedded Python, locked-down CI runners, etc.).
Quick start — OAuth (recommended for humans)
eyeot-mcp login
The CLI prints a short code (e.g. ABCD-WXYZ) and opens your browser. Log
in to your eyeot ERP account, approve the consent, done. Credentials are
saved to ~/.eyeot-mcp/config.json (mode 600).
Then add the bridge to your Claude Desktop config (~/Library/Application Support/Claude/claude_desktop_config.json on macOS,
%APPDATA%\Claude\claude_desktop_config.json on Windows):
{
"mcpServers": {
"eyeot": {
"command": "eyeot-mcp"
}
}
}
Restart Claude Desktop. The eyeot ERP tools are now available in your conversations — try "list my last 5 invoices" or "create a quote for ACME for 10 units of PROD-001".
Quick start — API key (for service agents)
If your admin gave you a service API key (eyk_xxx_xxx), skip the OAuth flow :
{
"mcpServers": {
"eyeot": {
"command": "eyeot-mcp",
"args": ["--token", "eyk_xxx_xxx"]
}
}
}
Or via environment variable (avoid storing keys in config files) :
{
"mcpServers": {
"eyeot": {
"command": "eyeot-mcp",
"env": { "EYEOT_TOKEN": "eyk_xxx_xxx" }
}
}
}
Self-hosted deployment
Override the base URL for any private eyeot deployment :
eyeot-mcp --base-url https://erp.example.com login
{
"mcpServers": {
"eyeot": {
"command": "eyeot-mcp",
"args": ["--base-url", "https://erp.example.com"]
}
}
}
Cursor / other MCP clients
Any client that supports stdio MCP servers works the same way. Cursor :
// .cursor/mcp.json
{
"mcpServers": {
"eyeot": {
"command": "eyeot-mcp"
}
}
}
Authentication modes
| Token format | Issued to | Lifetime | Typical use |
|---|---|---|---|
eyk_<prefix>_<secret> |
Service account (org-wide) | Until revoked | CI/CD agents, batch jobs, server-to-server |
eya_<base64> access + eyr_* refresh |
Human user (OAuth 2.1) | 1 h / 30 d | Claude Desktop, Cursor, personal agents |
Both flow through the same Authorization: Bearer <token> header
server-side. The bridge does not inspect them.
Commands
eyeot-mcp # start the stdio bridge using saved credentials
eyeot-mcp login # OAuth Device Authorization Grant (opens browser)
eyeot-mcp logout # revoke server-side and remove local credentials
eyeot-mcp --token eyk_... # one-shot mode with an explicit API key
eyeot-mcp --base-url URL ... # target a self-hosted eyeot deployment
Security model
- No business logic in the bridge. The CLI is ~270 lines of standard library Python. Auth, RBAC, audit, license enforcement, multi-tenant isolation : all server-side on the eyeot ERP.
- Credentials are stored at
~/.eyeot-mcp/config.jsonwith file mode0600(POSIX). On Windows the file is in your home directory but file ACLs apply. - OAuth 2.1 with PKCE S256 for public clients. Refresh-token rotation with replay detection (a stolen-and-reused refresh token kills the whole family).
- License guard read-only grace : if your subscription lapses,
GETtools still work (so the agent can keep you informed) butPOSTreturns402 Payment Requiredwith anactivate_url. - Idempotency : critical write operations support an
Idempotency-Keyheader server-side. The bridge forwards it transparently when present in the JSON-RPC payload.
How it works
- Claude Desktop launches
eyeot-mcpas a child process and exchanges JSON-RPC 2.0 messages over its stdin/stdout pipes. - For each line received on stdin, the bridge POSTs the JSON to
${base_url}/api/v1/mcpwithAuthorization: Bearer <token>. - The HTTP response body is written back verbatim to stdout, framed as line-delimited JSON.
- The server speaks MCP
2024-11-05and auto-generates ~440 tools from the OpenAPI spec —initialize,tools/list,tools/callall work exactly as MCP clients expect.
Documentation
- AI Agent Integration Guide : erp.eyeot.fr/mcp
- Full API reference : erp.eyeot.fr/api/docs
- OpenAPI spec : erp.eyeot.fr/api/v1/openapi.json
- MCP manifest : erp.eyeot.fr/api/v1/mcp/manifest
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 — see LICENSE.
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.
About Eyeot Software
ERP by Eyeot Software is a multi-tenant, AI-native ERP for SMBs covering CRM, sales, stock, maintenance, IoT, projects, IT service management, HR, finance, document management, RGPD compliance and cross-module BI. Built to be operated by AI agents from day one : every action you can do in the UI you can do via this MCP bridge.
- Production : erp.eyeot.fr
- Contact : contact@eyeot.fr
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file eyeot_mcp-1.0.0.tar.gz.
File metadata
- Download URL: eyeot_mcp-1.0.0.tar.gz
- Upload date:
- Size: 8.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.14.4
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
33bda54ad3ec6318deb43a40edc92ec700cd6b8c6cd23162ce984625f5887e28
|
|
| MD5 |
b68309a2f8c639405bfc8c08bfb3fea0
|
|
| BLAKE2b-256 |
92f08c0b5e3fe2fb2c7f2ce216c3d4be7df568a7b870fb0898895819feb10366
|
File details
Details for the file eyeot_mcp-1.0.0-py3-none-any.whl.
File metadata
- Download URL: eyeot_mcp-1.0.0-py3-none-any.whl
- Upload date:
- Size: 9.1 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.14.4
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a6911456008cc7b5ee835cc13ee744b1ad5307b1c82aa1165b98a3bde0df9678
|
|
| MD5 |
eb4b92b8763ca380f0eaf45ebe98e81d
|
|
| BLAKE2b-256 |
a1050d5e240124cb5e774b800e3aa4c230fdec3f0718f17d3d81a48247bf495c
|