Skip to content

Server API

The main AgentServer class and factory function.

createAgentServer

Creates a new agent server instance.

typescript
import { createAgentServer } from '@cognipeer/agent-server';

const agentServer = createAgentServer(config);

Parameters

config

typescript
interface AgentServerConfig {
  // Base path for all routes (e.g., '/api/agents')
  basePath: string;

  // Storage provider for persistence
  storage: StorageProvider;

  // Swagger UI configuration
  swagger?: {
    enabled: boolean;
    path?: string;        // Default: '/docs'
    title?: string;
    version?: string;
    description?: string;
  };

  // Authentication configuration
  auth?: {
    enabled: boolean;
    provider?: AuthProvider;
    headerName?: string;  // Default: 'Authorization'
    tokenPrefix?: string; // Default: 'Bearer '
    excludeRoutes?: string[];
    resolveUserId?: (ctx: ResolveContext) => Promise<string | undefined>;
  };

  // CORS configuration
  cors?: {
    enabled: boolean;
    origins?: string[];
    methods?: string[];
    headers?: string[];
  };
}

Returns

AgentServer - The agent server instance.

AgentServer

The main server class.

Methods

registerSDKAgent

Register an agent created with @cognipeer/agent-sdk.

typescript
agentServer.registerSDKAgent(id, agent, info?);
ParameterTypeDescription
idstringUnique agent identifier
agentSmartAgentAgent from agent-sdk
infoPartial<AgentInfo>Optional agent metadata
typescript
import { createSmartAgent } from '@cognipeer/agent-sdk';

const assistant = createSmartAgent({
  name: 'Assistant',
  model: myModel,
});

agentServer.registerSDKAgent('assistant', assistant, {
  description: 'A helpful assistant',
  version: '1.0.0',
});

registerCustomAgent

Register a custom agent handler.

typescript
agentServer.registerCustomAgent(id, handler, info?);
ParameterTypeDescription
idstringUnique agent identifier
handlerAgentHandlerCustom handler object
infoPartial<AgentInfo>Optional agent metadata
typescript
agentServer.registerCustomAgent('echo', {
  processMessage: async ({ message }) => ({
    content: `Echo: ${message}`,
  }),
}, {
  name: 'Echo Bot',
  description: 'Echoes messages',
});

getAgent

Get a registered agent by ID.

typescript
const agent = agentServer.getAgent(id);

Returns AgentRegistration | undefined.

listAgents

List all registered agents.

typescript
const agents = agentServer.listAgents();

Returns AgentInfo[].

handleRequest

Process an HTTP request (used by adapters).

typescript
const result = await agentServer.handleRequest(method, path, context);
ParameterTypeDescription
methodstringHTTP method
pathstringRequest path
contextRouteContextRequest context

Returns Promise<RouteResult>.

getOpenAPISpec

Get the OpenAPI specification.

typescript
const spec = agentServer.getOpenAPISpec();

Returns the OpenAPI 3.0 specification object.

Properties

storage

Access the storage provider.

typescript
const storage = agentServer.storage;

config

Access the server configuration.

typescript
const config = agentServer.config;

AgentInfo

Agent metadata interface.

typescript
interface AgentInfo {
  // Unique identifier
  id: string;

  // Display name
  name: string;

  // Description
  description?: string;

  // Version string
  version?: string;

  // Custom metadata
  metadata?: Record<string, unknown>;
}

AgentHandler

Custom agent handler interface.

typescript
interface AgentHandler {
  processMessage(params: ProcessMessageParams): Promise<ProcessMessageResult>;
}

ProcessMessageParams

typescript
interface ProcessMessageParams {
  // Conversation ID
  conversationId: string;

  // User message
  message: string;

  // Attached files
  files?: FileAttachment[];

  // Conversation state
  state?: Record<string, unknown>;

  // Request metadata
  metadata?: Record<string, unknown>;
}

ProcessMessageResult

typescript
interface ProcessMessageResult {
  // Response content
  content: string;

  // Response files
  files?: FileAttachment[];

  // Updated state
  state?: Record<string, unknown>;

  // Response metadata
  metadata?: Record<string, unknown>;

  // Token usage
  usage?: {
    inputTokens?: number;
    outputTokens?: number;
    totalTokens?: number;
  };
}

RouteContext

Request context passed to handlers.

typescript
interface RouteContext {
  // Authenticated user (from auth provider)
  user?: AuthUser;

  // URL parameters (e.g., { id: '123' })
  params: Record<string, string>;

  // Query parameters
  query: Record<string, string | string[] | undefined>;

  // Request body
  body?: unknown;
}

RouteResult

Handler response object.

typescript
interface RouteResult<T = unknown> {
  // HTTP status code
  status: number;

  // Response body
  body?: T;

  // Response headers
  headers?: Record<string, string>;

  // Raw buffer (for file downloads)
  raw?: Buffer;

  // SSE stream generator
  stream?: AsyncGenerator<string, void, unknown>;
}

Example Usage

typescript
import express from 'express';
import {
  createAgentServer,
  createPostgresProvider,
  createTokenAuthProvider,
  createExpressMiddleware,
} from '@cognipeer/agent-server';
import { createSmartAgent, fromLangchainModel } from '@cognipeer/agent-sdk';
import { ChatOpenAI } from '@langchain/openai';

// Storage
const storage = createPostgresProvider({
  connectionString: process.env.DATABASE_URL,
});

// Auth
const auth = createTokenAuthProvider({
  tokens: { [process.env.API_KEY]: 'admin' },
});

// Server
const agentServer = createAgentServer({
  basePath: '/api/agents',
  storage,
  auth: { enabled: true, provider: auth },
  swagger: { enabled: true },
});

// SDK Agent
const assistant = createSmartAgent({
  name: 'Assistant',
  model: fromLangchainModel(new ChatOpenAI()),
});

agentServer.registerSDKAgent('assistant', assistant);

// Custom Agent
agentServer.registerCustomAgent('echo', {
  processMessage: async ({ message }) => ({
    content: `Echo: ${message}`,
  }),
});

// Express
const app = express();
app.use(express.json());

await storage.connect();
app.use(createExpressMiddleware(agentServer));

app.listen(3000);

Studio · Pulse · Console · Agent SDK and more — the Cognipeer documentation hub