/**
 * Derive MCP tool input schemas from a Harper Resource's `Table.attributes`.
 *
 * Harper attribute types map to JSON Schema's primitive types; nested
 * `properties[]` and array `elements` map recursively. `attribute_permissions`
 * (per role, per table) narrows the schema by removing attributes the user
 * can't read (for `get_*`/`search_*`) or write (for `create_*`/`update_*`).
 *
 * Runtime enforcement still happens in `Table.allowUpdate` /
 * `Table.allowCreate` — the schema narrowing here is a UX layer (so the LLM
 * doesn't waste tokens on fields it can't write), NOT a security boundary.
 */
export interface HarperAttribute {
    name: string;
    type?: string;
    description?: string;
    hidden?: boolean;
    nullable?: boolean;
    isPrimaryKey?: boolean;
    properties?: HarperAttribute[];
    elements?: HarperAttribute;
    computed?: unknown;
    computedFromExpression?: string;
    assignCreatedTime?: boolean;
    assignUpdatedTime?: boolean;
    expiresAt?: boolean;
}
export interface AttributePermissionEntry {
    attribute_name: string;
    read?: boolean;
    insert?: boolean;
    update?: boolean;
}
export declare function deriveGetSchema(attributes: HarperAttribute[], _permissions: AttributePermissionEntry[] | undefined): object;
export declare function deriveSearchSchema(attributes: HarperAttribute[], permissions: AttributePermissionEntry[] | undefined): object;
export declare function deriveCreateSchema(attributes: HarperAttribute[], permissions: AttributePermissionEntry[] | undefined): object;
export declare function deriveUpdateSchema(attributes: HarperAttribute[], permissions: AttributePermissionEntry[] | undefined): object;
export declare function deriveDeleteSchema(attributes: HarperAttribute[], _permissions: AttributePermissionEntry[] | undefined): object;
export declare function deriveGetOutputSchema(attributes: HarperAttribute[], permissions: AttributePermissionEntry[] | undefined): object;
export declare function deriveCreateOutputSchema(attributes: HarperAttribute[], permissions: AttributePermissionEntry[] | undefined): object;
export declare function deriveUpdateOutputSchema(attributes: HarperAttribute[], permissions: AttributePermissionEntry[] | undefined): object;
export declare function derivePatchOutputSchema(attributes: HarperAttribute[], permissions: AttributePermissionEntry[] | undefined): object;
/**
 * Output schema for delete responses. Table.delete returns Promise<boolean>;
 * makeDeleteHandler wraps it as wrapResult(data ?? { ok: true }) — so on
 * success the MCP response carries a text content of "true" with no
 * structuredContent. Advertise the actual contract (boolean) rather than a
 * synthesized object envelope the handler never produces.
 */
export declare function deriveDeleteOutputSchema(_attributes: HarperAttribute[]): object;
