Le Hono pour MCP
Livrez des Serveurs MCP Qui Passent a l'Echelle
Arretez de reinventer l'auth, le rate limiting et les middlewares pour chaque serveur MCP. Un framework, composable par defaut, production-ready des le premier jour.
12 Features incluses
137 Tests au vert
v0.7 Derniere
Tout Inclus
Tout ce qui se passe entre la requete et votre handler -- c'est gere.
- Double Transport STDIO + HTTP Streamable. Meme code.
- Pipeline Middleware Modele onion composable, a la Koa.
- Auth OAuth2 JWT/Bearer + metadonnees RFC 9728.
- Presets OIDC GitHub, Google, Auth0 -- une ligne.
- Config YAML + Env Fichier config, override env au deploy.
- Concurrence Backpressure : sleep, queue ou reject.
- Rate Limiting Fenetre glissante, isolation par client.
- Validation Schema JSON Schema via ajv a l'enregistrement.
- Observabilite Spans OTel + Prometheus /metrics.
- MCP Apps UIs interactives via le scheme ui://.
- Allowlist CORS Allowlist d'origines avec avertissement wildcard.
- Limite Body maxBodyBytes avec erreur 413 JSON-RPC.
- Rate Limit IP 429 par IP + Retry-After sur la couche HTTP.
- Propagation Session sessionId injecte dans le contexte middleware.
- Signature HMAC SHA-256 sign/verify + anti-replay pour PostMessage.
- Injection CSP Content-Security-Policy auto-injecte dans les MCP Apps.
SDK vs Framework
Le SDK officiel donne le protocole. Ceci donne le stack de production.
| SDK Officiel | @casys/mcp-server | |
|---|---|---|
| Protocole MCP | ✓ | ✓ |
| Pipeline middleware | — | ✓ |
| Auth OAuth2 / JWT | — | ✓ |
| Rate limiting | — | ✓ |
| Validation de schema | — | ✓ |
| Streamable HTTP + SSE | Manuel | Integre |
| Controle de concurrence | — | ✓ |
| Tracing OpenTelemetry | — | ✓ |
| Metriques Prometheus | — | ✓ |
| MCP Apps (UI resources) | Manuel | Integre |
| Allowlist CORS | — | ✓ |
| Limite taille body (413) | — | ✓ |
| Rate limit IP (429) | — | ✓ |
| Propagation session | — | ✓ |
| Signature HMAC messages | — | ✓ |
| Injection CSP | — | ✓ |
| Config YAML + Env | — | ✓ |
| Deno + Node.js | Node uniquement | Les deux |
5 Lignes vers la Prod
Pas de boilerplate. Pas de ceremonie de config. Enregistrez un tool, appelez start(), livrez.
import { ConcurrentMCPServer } from "@casys/mcp-server";
const server = new ConcurrentMCPServer({
name: "my-server",
version: "1.0.0",
});
server.registerTool(
{ name: "greet", description: "Greet a user",
inputSchema: { type: "object",
properties: { name: { type: "string" } },
required: ["name"] } },
({ name }) => \`Hello, \${name}!\`,
);
await server.start(); import { ConcurrentMCPServer, createGoogleAuthProvider } from "@casys/mcp-server";
const server = new ConcurrentMCPServer({
name: "my-api", version: "1.0.0",
auth: {
provider: createGoogleAuthProvider({
audience: "https://my-mcp.example.com",
resource: "https://my-mcp.example.com",
}),
},
});
server.registerTool(
{ name: "query", description: "Query the database",
inputSchema: { type: "object",
properties: { sql: { type: "string" } } },
requiredScopes: ["db:read"] },
async ({ sql }) => ({ rows: [] }),
);
// Security-first HTTP defaults
await server.startHttp({
port: 3000,
requireAuth: true,
corsOrigins: ["https://app.example.com"],
maxBodyBytes: 1_048_576, // 1 MB
ipRateLimit: { maxRequests: 60, windowMs: 60_000 },
}); # mcp-server.yaml
auth:
provider: auth0
audience: https://my-mcp.example.com
resource: https://my-mcp.example.com
domain: my-tenant.auth0.com
scopesSupported: [read, write, admin] # Override with env vars in production
MCP_AUTH_AUDIENCE=https://prod.example.com ./my-server --http --port 3000 Votre Serveur, Vos Regles
Chaque requete traverse une chaine middleware composable. Besoin d'auth ? Ajoutez-la. Rate limiting ? Une ligne. Logique custom ? Glissez-la ou vous voulez.
arrow_forward Requete
timer Rate Limit
shield Auth
tune Custom
verified_user Scopes
check_circle Validation
speed Backpressure
play_arrow Handler
Pret Quand Vous l'Etes
Une commande. Compatible Deno et Node.js. Publie sur JSR, le registre JavaScript moderne.
Deno
deno add jsr:@casys/mcp-server npm
npx jsr add @casys/mcp-server