import type { McpServer, RegisteredResource } from '@modelcontextprotocol/sdk/server/mcp.js';
import type { Core, Modules } from '@strapi/types';
import { McpCapabilityDefinitionRegistry } from './internal/McpCapabilityDefinitionRegistry';
import { type McpCapabilityRegistry, McpCapabilityRegistryBase } from './internal/McpCapabilityRegistry';
/**
 * Defines a Strapi MCP resource with full type inference, ready to pass to
 * `strapi.ai.mcp.registerResource()`. Exposed publicly as `ai.mcp.defineResource`.
 *
 * The returned value is the definition unchanged — this builder only exists to
 * infer the `name` and narrow the access variant (`devModeOnly` vs `auth`) so the
 * result is directly assignable to `registerResource`.
 *
 * @param resource - The resource definition. Provide either `devModeOnly: true`
 * (dev-only, no auth) or an `auth` policy set — never both.
 * @returns The same definition, with its access variant narrowed.
 *
 * @example
 * ```ts
 * import { ai } from '@strapi/strapi';
 *
 * const appInfo = ai.mcp.defineResource({
 *   name: 'app-info',
 *   uri: 'strapi://app/info',
 *   metadata: { description: 'Metadata about the app', mimeType: 'application/json' },
 *   devModeOnly: true,
 *   createHandler: (strapi) => async (uri) => ({
 *     contents: [{ uri: uri.href, mimeType: 'application/json', text: JSON.stringify({ ok: true }) }],
 *   }),
 * });
 *
 * // later, in register() or bootstrap():
 * strapi.ai.mcp.registerResource(appInfo);
 * ```
 */
export declare const makeMcpResourceDefinition: Modules.MCP.McpResourceBuilder;
export declare class McpResourceRegistry extends McpCapabilityRegistryBase<'resource', Modules.MCP.McpResourceDefinition, RegisteredResource> implements McpCapabilityRegistry {
    #private;
    constructor(ctx: {
        strapi: Core.Strapi;
        definitions: McpCapabilityDefinitionRegistry<'resource', Modules.MCP.McpResourceDefinition>;
    });
    bind(mcpServer: McpServer): void;
}
//# sourceMappingURL=resource-registry.d.ts.map