OctoNet MCP
1 MCP server, 13 databases, zero config.
OctoNet est un serveur multi-protocole qui expose vos entites de base de donnees
via 11 transports simultanes. Les agents IA (Claude, GPT, etc.) peuvent interagir
avec vos donnees via le protocole MCP (Model Context Protocol).
13 Bases de donnees
PostgreSQL MySQL MariaDB SQLite MongoDB Oracle SQL Server DB2 SAP HANA HSQLDB Sybase CockroachDB Cloud Spanner
11 Transports
| # |
Transport |
Endpoint |
Usage |
| 1 | REST | /api/v1/{collection} | CRUD HTTP standard |
| 2 | GraphQL | /graphql | Queries flexibles + GraphiQL IDE |
| 3 | WebSocket | /ws | Temps reel bidirectionnel |
| 4 | SSE | /events | Streaming serveur → client |
| 5 | JSON-RPC | /rpc | Appels de methodes JSON-RPC 2.0 |
| 6 | MCP | /mcp | Agents IA (Claude, GPT) |
| 7 | gRPC | :50051 | Haute performance, proto auto-genere |
| 8 | tRPC | /trpc/{Entity}.{op} | TypeScript fullstack type-safe |
| 9 | OData | /odata/{Collection} | Filtres OData v4 ($filter, $select) |
| 10 | NATS | mostajs.{Entity}.{op} | Pub/sub messaging |
| 11 | Arrow Flight | /arrow/* | Streaming colonnes haute perf |
15 MCP Tools par entite
findAll findById create update delete count findOne search upsert deleteMany updateMany aggregate addToSet pull increment
4 Prompts MCP
- describe-schema — Decrire toutes les entites, champs, relations
- suggest-query — Aider a construire un filtre
- explain-data — Expliquer les resultats d'une requete
- list-entities — Vue rapide des entites
Liens
Author: Dr Hamid MADANI <drmdh@msn.com>
License: AGPL-3.0-or-later
1. Utiliser le endpoint MCP
Le endpoint MCP permet aux agents IA de decouvrir et appeler les tools automatiquement.
Claude Desktop — mode remote
Ajouter dans claude_desktop_config.json :
{
"mcpServers": {
"octonet": {
"url": "https://mcp.amia.fr/mcp"
}
}
}
Claude Desktop — mode local (npx)
{
"mcpServers": {
"octonet": {
"command": "npx",
"args": ["octonet-mcp", "--dialect=sqlite", "--uri=:memory:"]
}
}
}
Test MCP (curl)
# Initialize
curl -X POST https://mcp.amia.fr/mcp \
-H "Content-Type: application/json" \
-H "Accept: application/json, text/event-stream" \
-d '{"jsonrpc":"2.0","method":"initialize","params":{"protocolVersion":"2024-11-05","capabilities":{},"clientInfo":{"name":"test","version":"1.0"}},"id":1}'
2. Configurer un projet
Chaque projet obtient son propre namespace URL. Tous les transports sont disponibles sous ce namespace.
Creer un projet
Via l'onglet Projects du dashboard, ou via l'API :
curl -X POST https://mcp.amia.fr/api/projects \
-H "Content-Type: application/json" \
-d '{
"name": "myapp",
"dialect": "postgres",
"uri": "postgresql://user:pass@localhost:5432/mydb",
"schemas": [...]
}'
Endpoints du projet
Une fois cree, le projet est accessible via son namespace :
| Transport |
URL |
| REST | https://mcp.amia.fr/myapp/api/v1/users |
| MCP | https://mcp.amia.fr/myapp/mcp |
| GraphQL | https://mcp.amia.fr/myapp/graphql |
| WebSocket | wss://mcp.amia.fr/myapp/ws |
| JSON-RPC | https://mcp.amia.fr/myapp/rpc |
| SSE | https://mcp.amia.fr/myapp/events |
| tRPC | https://mcp.amia.fr/myapp/trpc/ |
| OData | https://mcp.amia.fr/myapp/odata/ |
Claude Desktop — par projet
{
"mcpServers": {
"myapp": {
"url": "https://mcp.amia.fr/myapp/mcp"
}
}
}
Les tools MCP sont alors non-prefixes : User_findAll, Product_create —
pas de collision avec d'autres projets.
3. Utiliser NetClient dans une application
@mostajs/net/client permet de connecter une application Next.js/Node.js a OctoNet
en remplacement d'un acces base de donnees direct.
Installation
npm install @mostajs/net @mostajs/orm
Configuration .env
# Basculer en mode NET (au lieu d'ORM direct)
MOSTA_DATA=net
MOSTA_NET_URL=https://mcp.amia.fr/myapp
MOSTA_NET_TRANSPORT=rest
Code — Data Access Layer
// src/dal/service.ts
import { NetClient, createNetDialectProxy } from '@mostajs/net/client';
import { getDialect } from '@mostajs/orm';
// Mode NET ou ORM direct ?
const isNet = process.env.MOSTA_DATA === 'net';
function getDb() {
if (isNet) {
const client = new NetClient({
url: process.env.MOSTA_NET_URL!, // https://mcp.amia.fr/myapp
});
return createNetDialectProxy(client);
}
return getDialect(); // ORM direct (MongoDB, Postgres, etc.)
}
// Repositories
export const userRepo = () => getDb().getRepository('User');
export const prodRepo = () => getDb().getRepository('Product');
export const orderRepo = () => getDb().getRepository('Order');
Utilisation dans une API route
// src/app/api/users/route.ts
import { userRepo } from '@/dal/service';
export async function GET() {
const users = await userRepo().findAll();
return Response.json(users);
// En mode NET → GET https://mcp.amia.fr/myapp/api/v1/users
// En mode ORM → SELECT * FROM users (direct DB)
}
export async function POST(req: Request) {
const data = await req.json();
const user = await userRepo().create(data);
return Response.json(user, { status: 201 });
}
Schemas par defaut (demo)
Le serveur demarre avec 3 entites de demo :
User { email: string*, name: string*, age: number, active: boolean }
Product { title: string*, price: number*, stock: number, category: string }
Order { userId: string*, total: number*, status: string, createdAt: date }
Pour ajouter vos propres entites, utilisez l'onglet Projects ou editez schemas.json.
4. Architecture
Application (Next.js, PWA, Agent IA)
|
| MOSTA_NET_URL=https://mcp.amia.fr/myapp
| MOSTA_NET_TRANSPORT=rest
v
OctoNet NET ────────────────────────────
| /:project/api/v1/ → REST
| /:project/mcp → MCP
| /:project/graphql → GraphQL
| /:project/ws → WebSocket
| /:project/rpc → JSON-RPC
| /:project/events → SSE
v
@mostajs/mproject (ProjectManager)
| Isole schemas, pool, config par projet
v
@mostajs/orm (Dialect)
| Un dialect isole par projet
v
SGBD (MongoDB, PostgreSQL, SQLite, ...)