search-design-tokens
Search design tokens by name or value within Visa's Product Design System to quickly locate specific resources and streamline design development.
Instructions
Search design tokens by name or value
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | Search query for token names or values |
Implementation Reference
- src/mcp-server.ts:133-146 (registration)Tool definition and registration in getToolDefinitions(), including schema for input validation{ name: 'search-design-tokens', description: 'Search design tokens by name or value', inputSchema: { type: 'object', properties: { query: { type: 'string', description: 'Search query for token names or values' } }, required: ['query'] } },
- src/mcp-server.ts:365-392 (handler)Handler function that processes the tool call, validates arguments, delegates to DesignTokenService.searchTokens, and returns formatted JSON response/** * Handle search-design-tokens tool call */ private async handleSearchDesignTokens(args: Record<string, any>): Promise<CallToolResult> { const { query } = args; if (!query || typeof query !== 'string') { throw new McpError( ErrorCode.InvalidParams, 'Query parameter is required and must be a string' ); } const tokens = await this.designTokenService.searchTokens(query); return { content: [ { type: 'text', text: JSON.stringify({ tokens, count: tokens.length, query }, null, 2) } ] }; }
- Core implementation of token search logic in DesignTokenService, filtering tokens by query matching name, value, description, usage, or aliases/** * Search design tokens by various criteria */ async searchTokens(query: string): Promise<DesignToken[]> { if (!query || typeof query !== 'string') { throw this.createError('INVALID_QUERY', 'Search query must be a non-empty string'); } const cachedData = this.dataManager.getCachedData(); if (!cachedData) { throw this.createError('NO_DATA', 'No design token data available'); } const searchTerm = query.toLowerCase(); return cachedData.designTokens.filter(token => { // Search in name if (token.name.toLowerCase().includes(searchTerm)) { return true; } // Search in value (convert to string for search) if (String(token.value).toLowerCase().includes(searchTerm)) { return true; } // Search in description if (token.description?.toLowerCase().includes(searchTerm)) { return true; } // Search in usage array if (token.usage?.some(usage => usage.toLowerCase().includes(searchTerm) )) { return true; } // Search in aliases if (token.aliases?.some(alias => alias.toLowerCase().includes(searchTerm) )) { return true; } return false; }); }