kavachOS
Framework adapters

Hono

KavachOS adapter for Hono.

kavachHono(kavach, options?) returns a Hono app instance with all KavachOS routes pre-mounted. Use app.route to attach it to your main app.

Install

pnpm add kavachos @kavachos/hono hono @hono/node-server

Setup

Create the kavach instance

Create this once and reuse it across your app (e.g. lib/kavach.ts):

// lib/kavach.ts
import { createKavach, createMcpModule } from 'kavachos';

export const kavach = createKavach({
  database: { provider: 'sqlite', url: 'kavach.db' },
  baseUrl: process.env.AUTH_BASE_URL!,
  mcp: {
    issuer: process.env.AUTH_BASE_URL!,
    audience: process.env.MCP_BASE_URL!,
  },
});

export const mcp = createMcpModule(kavach);

Mount the adapter

// src/index.ts
import { serve } from '@hono/node-server';
import { Hono } from 'hono';
import { kavachHono } from '@kavachos/hono';
import { kavach, mcp } from './lib/kavach.js';

const app = new Hono();

// Mount all KavachOS routes (agents, permissions, audit, MCP OAuth)
app.route('/api/kavach', kavachHono(kavach, { mcp }));

serve({ fetch: app.fetch, port: 3000 });

MCP endpoints

Pass mcp to enable the full MCP OAuth 2.1 authorization server. All MCP endpoints are mounted under the same /api/kavach prefix alongside the REST API:

app.route('/api/kavach', kavachHono(kavach, { mcp }));
// registers:
// GET  /api/kavach/.well-known/oauth-authorization-server
// GET  /api/kavach/.well-known/oauth-protected-resource
// POST /api/kavach/mcp/register
// GET  /api/kavach/mcp/authorize
// POST /api/kavach/mcp/token

MCP routes include CORS headers (Access-Control-Allow-Origin: *) and respond to OPTIONS preflight requests automatically.

Endpoint reference

MethodPathDescription
POST/agentsCreate an agent
GET/agentsList agents
GET/agents/:idGet an agent
PATCH/agents/:idUpdate an agent
DELETE/agents/:idRevoke an agent
POST/agents/:id/rotateRotate token
POST/authorizeAuthorize by agent ID
POST/authorize/tokenAuthorize by bearer token
POST/delegationsCreate delegation
GET/delegations/:agentIdList delegation chains
DELETE/delegations/:idRevoke delegation
GET/auditQuery audit logs
GET/audit/exportExport audit logs

Full example

import { serve } from '@hono/node-server';
import { Hono } from 'hono';
import { createKavach, createMcpModule } from 'kavachos';
import { kavachHono } from '@kavachos/hono';

const kavach = createKavach({
  database: { provider: 'sqlite', url: 'kavach.db' },
  baseUrl: 'https://auth.yourapp.com',
  mcp: {
    issuer: 'https://auth.yourapp.com',
    audience: 'https://mcp.yourapp.com',
  },
});

const mcp = createMcpModule(kavach);

const app = new Hono();

app.route('/api/kavach', kavachHono(kavach, { mcp }));

app.get('/health', (c) => c.json({ ok: true }));

serve({ fetch: app.fetch, port: 3000 });

On this page