advanced_search
Refine protein data queries using multiple filters like tissue specificity, subcellular location, cancer prognosis, and antibody reliability to access Human Protein Atlas insights in JSON or TSV format.
Instructions
Perform advanced search with multiple filters and criteria
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
| antibodyReliability | No | Antibody reliability filter | |
| cancerPrognostic | No | Cancer prognostic filter | |
| chromosome | No | Chromosome filter | |
| columns | No | Specific columns to include in results | |
| format | No | Output format (default: json) | |
| maxResults | No | Maximum number of results (1-10000, default: 100) | |
| proteinClass | No | Protein class filter | |
| query | No | Base search query | |
| subcellularLocation | No | Subcellular localization filter | |
| tissueSpecific | No | Tissue-specific expression filter |
Implementation Reference
- src/index.ts:1166-1217 (handler)The handler function for the 'advanced_search' tool. Validates input arguments using isValidAdvancedSearchArgs, constructs a complex Lucene-style search query by combining multiple optional filters (tissue, subcellular location, prognostic, protein class, chromosome, antibody reliability), performs the search via searchProteins helper, and returns formatted results or error.private async handleAdvancedSearch(args: any) { if (!isValidAdvancedSearchArgs(args)) { throw new McpError(ErrorCode.InvalidParams, 'Invalid advanced search arguments'); } try { let searchQuery = args.query || ''; if (args.tissueSpecific) { searchQuery += (searchQuery ? ' AND ' : '') + `tissue:"${args.tissueSpecific}"`; } if (args.subcellularLocation) { searchQuery += (searchQuery ? ' AND ' : '') + `location:"${args.subcellularLocation}"`; } if (args.cancerPrognostic) { searchQuery += (searchQuery ? ' AND ' : '') + `prognostic:"${args.cancerPrognostic}"`; } if (args.proteinClass) { searchQuery += (searchQuery ? ' AND ' : '') + `class:"${args.proteinClass}"`; } if (args.chromosome) { searchQuery += (searchQuery ? ' AND ' : '') + `chromosome:"${args.chromosome}"`; } if (args.antibodyReliability) { searchQuery += (searchQuery ? ' AND ' : '') + `reliability:"${args.antibodyReliability}"`; } if (!searchQuery) { searchQuery = '*'; // Search for everything if no criteria specified } const result = await this.searchProteins(searchQuery, args.format || 'json', args.columns, args.maxResults); return { content: [ { type: 'text', text: typeof result === 'object' ? JSON.stringify(result, null, 2) : String(result), }, ], }; } catch (error) { return { content: [ { type: 'text', text: `Error in advanced search: ${error instanceof Error ? error.message : 'Unknown error'}`, }, ], isError: true, }; } }
- src/index.ts:87-115 (schema)Type guard function that validates the input arguments for the advanced_search tool, defining the expected optional parameters and their types/constraints.const isValidAdvancedSearchArgs = ( args: any ): args is { query?: string; tissueSpecific?: string; subcellularLocation?: string; cancerPrognostic?: string; proteinClass?: string; chromosome?: string; antibodyReliability?: string; format?: string; columns?: string[]; maxResults?: number; } => { return ( typeof args === 'object' && args !== null && (args.query === undefined || typeof args.query === 'string') && (args.tissueSpecific === undefined || typeof args.tissueSpecific === 'string') && (args.subcellularLocation === undefined || typeof args.subcellularLocation === 'string') && (args.cancerPrognostic === undefined || typeof args.cancerPrognostic === 'string') && (args.proteinClass === undefined || typeof args.proteinClass === 'string') && (args.chromosome === undefined || typeof args.chromosome === 'string') && (args.antibodyReliability === undefined || ['approved', 'enhanced', 'supported', 'uncertain'].includes(args.antibodyReliability)) && (args.format === undefined || ['json', 'tsv'].includes(args.format)) && (args.columns === undefined || Array.isArray(args.columns)) && (args.maxResults === undefined || (typeof args.maxResults === 'number' && args.maxResults > 0 && args.maxResults <= 10000)) ); };
- src/index.ts:605-620 (schema)JSON Schema definition for the 'advanced_search' tool input parameters, used in tool listing and validation.inputSchema: { type: 'object', properties: { query: { type: 'string', description: 'Base search query' }, tissueSpecific: { type: 'string', description: 'Tissue-specific expression filter' }, subcellularLocation: { type: 'string', description: 'Subcellular localization filter' }, cancerPrognostic: { type: 'string', description: 'Cancer prognostic filter' }, proteinClass: { type: 'string', description: 'Protein class filter' }, chromosome: { type: 'string', description: 'Chromosome filter' }, antibodyReliability: { type: 'string', enum: ['approved', 'enhanced', 'supported', 'uncertain'], description: 'Antibody reliability filter' }, format: { type: 'string', enum: ['json', 'tsv'], description: 'Output format (default: json)' }, columns: { type: 'array', items: { type: 'string' }, description: 'Specific columns to include in results' }, maxResults: { type: 'number', description: 'Maximum number of results (1-10000, default: 100)', minimum: 1, maximum: 10000 }, }, required: [], },
- src/index.ts:602-621 (registration)Tool registration in the ListToolsRequestSchema handler, defining name, description, and input schema for discovery.{ name: 'advanced_search', description: 'Perform advanced search with multiple filters and criteria', inputSchema: { type: 'object', properties: { query: { type: 'string', description: 'Base search query' }, tissueSpecific: { type: 'string', description: 'Tissue-specific expression filter' }, subcellularLocation: { type: 'string', description: 'Subcellular localization filter' }, cancerPrognostic: { type: 'string', description: 'Cancer prognostic filter' }, proteinClass: { type: 'string', description: 'Protein class filter' }, chromosome: { type: 'string', description: 'Chromosome filter' }, antibodyReliability: { type: 'string', enum: ['approved', 'enhanced', 'supported', 'uncertain'], description: 'Antibody reliability filter' }, format: { type: 'string', enum: ['json', 'tsv'], description: 'Output format (default: json)' }, columns: { type: 'array', items: { type: 'string' }, description: 'Specific columns to include in results' }, maxResults: { type: 'number', description: 'Maximum number of results (1-10000, default: 100)', minimum: 1, maximum: 10000 }, }, required: [], }, },
- src/index.ts:698-699 (registration)Dispatch/registration in the CallToolRequestSchema switch statement, routing calls to the handleAdvancedSearch method.case 'advanced_search': return this.handleAdvancedSearch(args);