Skip to main content
Glama

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
NameRequiredDescriptionDefault
antibodyReliabilityNoAntibody reliability filter
cancerPrognosticNoCancer prognostic filter
chromosomeNoChromosome filter
columnsNoSpecific columns to include in results
formatNoOutput format (default: json)
maxResultsNoMaximum number of results (1-10000, default: 100)
proteinClassNoProtein class filter
queryNoBase search query
subcellularLocationNoSubcellular localization filter
tissueSpecificNoTissue-specific expression filter

Implementation Reference

  • 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, }; } }
  • 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)) ); };
  • 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);

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/Augmented-Nature/ProteinAtlas-MCP-Server'

If you have feedback or need assistance with the MCP directory API, please join our Discord server