@dollhousemcp/mcp-server
Version:
DollhouseMCP - A Model Context Protocol (MCP) server that enables dynamic AI persona management from markdown files, allowing Claude and other compatible AI assistants to activate and switch between different behavioral personas.
74 lines • 3.31 kB
TypeScript
/**
* SchemaDispatcher - Generic dispatcher for schema-driven operations
*
* This module provides automatic dispatch from operation schemas to handler methods.
* It eliminates the need for manual switch statements in MCPAQLHandler by:
*
* 1. Looking up operation in schema
* 2. Resolving handler from registry
* 3. Building method arguments from params
* 4. Calling the handler method
* 5. Applying field selection/transformation to response (Issue #202)
*
* ARCHITECTURE:
* - SchemaDispatcher.dispatch(operation, params, registry) → Promise<unknown>
* - Uses argBuilder to determine how to pass parameters to handler
* - Validates required parameters before dispatch
* - Provides clear error messages for missing handlers/methods
*
* INPUT NORMALIZATION (Issue #251):
* - Parameters can have multiple sources via `sources` field
* - Resolution order: sources[0], sources[1], ..., params[key]
* - Supports dot notation: 'input.elementType', 'params.type'
* - Operations with `needsFullInput: true` have access to full OperationInput
*
* FIELD SELECTION (Issue #202):
* - When `fields` param is provided, filters response to requested fields only
* - Transforms field names for LLM consistency (name → element_name)
* - Supports preset field sets: 'minimal', 'standard', 'full'
*
* @see Issue #247 - Schema-driven operation definitions
* @see Issue #251 - ElementCRUD input normalization
* @see Issue #202 - GraphQL field selection for response token optimization
*/
import { getOperationSchema, isSchemaOperation } from './OperationSchema.js';
import type { HandlerRegistry } from './MCPAQLHandler.js';
import type { OperationInput } from './types.js';
/**
* Resolve a value from a dot-notation path on an object.
* Example: getNestedValue({ input: { elementType: 'persona' } }, 'input.elementType') => 'persona'
*
* Security: Validates path format and blocks prototype pollution vectors.
*/
declare function getNestedValue(obj: Record<string, unknown>, path: string): unknown;
/**
* SchemaDispatcher - Dispatch operations using schema definitions
*
* This class provides the core dispatch logic for schema-driven operations.
* It replaces the manual dispatch methods in MCPAQLHandler for operations
* that are defined in the schema.
*/
export declare class SchemaDispatcher {
/**
* Check if an operation can be handled by schema dispatch
*/
static canDispatch(operation: string): boolean;
/**
* Dispatch an operation using its schema definition
*
* @param operation - Operation name (e.g., 'browse_collection')
* @param params - Operation parameters
* @param registry - Handler registry with all configured handlers
* @param input - Optional full OperationInput for source resolution
* @returns Promise resolving to operation result
* @throws Error if operation not found, handler missing, or params invalid
*/
static dispatch(operation: string, params: Record<string, unknown>, registry: HandlerRegistry, input?: OperationInput): Promise<unknown>;
}
export { isSchemaOperation, getOperationSchema };
export declare const __test__: {
getNestedValue: typeof getNestedValue;
SAFE_PATH_PATTERN: RegExp;
FORBIDDEN_PATHS: Set<string>;
};
//# sourceMappingURL=SchemaDispatcher.d.ts.map