PlatformFramework adapters
Astro
KavachOS adapter for Astro.
kavachAstro(kavach, options?) returns named route handlers { GET, POST, PATCH, DELETE, OPTIONS, ALL }. Mount them in a catch-all API page so all KavachOS paths are handled. Use individual named exports or the ALL catch-all handler.
Install
pnpm add kavachos @kavachos/astroSetup
Create the kavach instance
// src/lib/kavach.ts
import { createKavach, createMcpModule } from 'kavachos';
export const kavach = createKavach({
database: { provider: 'postgres', url: import.meta.env.DATABASE_URL },
baseUrl: import.meta.env.AUTH_BASE_URL,
mcp: {
issuer: import.meta.env.AUTH_BASE_URL,
audience: import.meta.env.MCP_BASE_URL,
},
});
export const mcp = createMcpModule(kavach);Create the catch-all route
Create src/pages/api/kavach/[...path].ts. The [...path] spread catches every sub-path under /api/kavach/.
// src/pages/api/kavach/[...path].ts
import { kavachAstro } from '@kavachos/astro';
import { kavach, mcp } from '@/lib/kavach';
const handlers = kavachAstro(kavach, { mcp });
export const GET = handlers.GET;
export const POST = handlers.POST;
export const PATCH = handlers.PATCH;
export const DELETE = handlers.DELETE;
export const OPTIONS = handlers.OPTIONS;Or use the ALL handler to catch every HTTP method in one export:
export const ALL = handlers.ALL;Astro requires output: 'server' or output: 'hybrid' in astro.config.mjs to enable API routes. Static output mode does not support server-side route handlers.
Options
interface KavachAstroOptions {
mcp?: McpAuthModule; // enables MCP OAuth 2.1 endpoints
basePath?: string; // defaults to '/api/kavach'
}MCP endpoints
When mcp is passed, the MCP OAuth 2.1 endpoints are available at:
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/tokenEndpoint reference
| Method | Path | Description |
|---|---|---|
POST | /agents | Create an agent |
GET | /agents | List agents |
GET | /agents/:id | Get an agent |
PATCH | /agents/:id | Update an agent |
DELETE | /agents/:id | Revoke an agent |
POST | /agents/:id/rotate | Rotate token |
POST | /authorize | Authorize by agent ID |
POST | /authorize/token | Authorize by bearer token |
POST | /delegations | Create delegation |
GET | /delegations/:agentId | List delegation chains |
DELETE | /delegations/:id | Revoke delegation |
GET | /audit | Query audit logs |
GET | /audit/export | Export audit logs |
Full example
// src/pages/api/kavach/[...path].ts
import { createKavach, createMcpModule } from 'kavachos';
import { kavachAstro } from '@kavachos/astro';
const kavach = createKavach({
database: { provider: 'postgres', url: import.meta.env.DATABASE_URL },
baseUrl: import.meta.env.AUTH_BASE_URL,
mcp: {
issuer: import.meta.env.AUTH_BASE_URL,
audience: import.meta.env.MCP_BASE_URL,
},
});
const mcp = createMcpModule(kavach);
const handlers = kavachAstro(kavach, { mcp });
export const GET = handlers.GET;
export const POST = handlers.POST;
export const PATCH = handlers.PATCH;
export const DELETE = handlers.DELETE;
export const OPTIONS = handlers.OPTIONS;