/** * MCP Client Store * * Persists Dynamic Client Registration (RFC 7591) records in the Harper * `harper_oauth_mcp_clients` table. Clients survive Harper restarts so MCP * clients (Claude Desktop, Cursor, mcp-remote) that cache their issued * client_id continue to authenticate after a deploy. * * Array-valued fields (redirect_uris, contacts, grant_types, response_types) * are JSON-encoded on write and decoded on read, matching the * csrf_tokens.data pattern already used in this plugin. */ import type { Logger, MCPClientRecord } from '../../types.ts'; /** * Reset the cached table reference (for testing only) * @internal */ export declare function resetMCPClientsTableCache(): void; export declare class MCPClientStore { private logger?; constructor(logger?: Logger); /** * Persist a client registration. Overwrites any existing record with the * same client_id (RFC 7591 registration is idempotent at the storage layer; * the registration endpoint allocates a fresh client_id per request). */ set(record: MCPClientRecord): Promise; /** * Look up a client by client_id. Returns null if not found or on read error * (errors logged; we don't surface storage failures to OAuth clients). */ get(clientId: string): Promise; /** * Remove a client registration. */ delete(clientId: string): Promise; }