import type { Modules, UID } from '@strapi/types';
import type { GetMetadataOptions } from '../services/document-metadata';
/**
 * Converts a Strapi content-type UID into a safe MCP tool-name segment.
 * `api::article.article` → `article`; `plugin::i18n.locale` → `plugin-i18n_locale`.
 */
export declare const slugifyUidForMcpToolName: (uid: string) => string;
type McpPermissionChecker = {
    sanitizeOutput: (doc: unknown) => Promise<Record<string, unknown>>;
};
/**
 * Output chokepoint for MCP handlers returning `{ data, meta }`.
 * Order matters — calculate, then strip:
 * 1. permission-based sanitization,
 * 2. formatDocumentWithMetadata — computes `data.status` and `localizations[].status`
 *    from `publishedAt`/`updatedAt`, which relation shaping removes,
 * 3. relation shaping on the formatted `data` (identity-only relations; the
 *    freshly-computed `localizations[].status` survives via RelationIdentity).
 *
 * Handlers that do NOT attach metadata (delete, list) compose
 * `permissionChecker.sanitizeOutput` + `shapeRelationsForMcp` directly instead.
 */
export declare const sanitizeFormatShape: (permissionChecker: McpPermissionChecker, uid: UID.ContentType, doc: unknown, opts?: GetMetadataOptions) => Promise<Record<string, unknown>>;
/** Wraps a plain object into the dual-representation MCP tool return value (text + structuredContent). */
export declare const ok: (structuredContent: Record<string, unknown>) => Modules.MCP.McpToolHandlerReturn;
/**
 * Generates the `title` and `description` metadata for a derived MCP tool.
 * Appends operation-specific notes for write/publish/unpublish/discard_draft operations.
 */
export declare const describeTool: (params: {
    apiID: string;
    uid: string;
    operation: string;
}) => {
    title: string;
    description: string;
};
export {};
//# sourceMappingURL=utils.d.ts.map