search_by_localization
Find proteins by their subcellular location such as nucleus or mitochondria using the UniProt MCP Server. Filter results by organism and control output size.
Instructions
Find proteins by subcellular localization
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
| localization | Yes | Subcellular localization (e.g., nucleus, mitochondria) | |
| organism | No | Organism name or taxonomy ID to filter results | |
| size | No | Number of results to return (1-500, default: 25) |
Implementation Reference
- src/index.ts:1490-1529 (handler)The handler function executing the tool: validates input, constructs UniProt search query using subcellular location (cc_subcellular_location), fetches results via API, returns JSON response or error.private async handleSearchByLocalization(args: any) { if (!isValidLocalizationSearchArgs(args)) { throw new McpError(ErrorCode.InvalidParams, 'Invalid localization search arguments'); } try { let query = `reviewed:true AND cc_subcellular_location:"${args.localization}"`; if (args.organism) { query += ` AND organism_name:"${args.organism}"`; } const response = await this.apiClient.get('/uniprotkb/search', { params: { query: query, format: 'json', size: args.size || 25, }, }); return { content: [ { type: 'text', text: JSON.stringify(response.data, null, 2), }, ], }; } catch (error) { return { content: [ { type: 'text', text: `Error searching by localization: ${error instanceof Error ? error.message : 'Unknown error'}`, }, ], isError: true, }; } }
- src/index.ts:595-606 (registration)Tool registration in ListToolsRequestSchema handler, defining name, description, and input schema.name: 'search_by_localization', description: 'Find proteins by subcellular localization', inputSchema: { type: 'object', properties: { localization: { type: 'string', description: 'Subcellular localization (e.g., nucleus, mitochondria)' }, organism: { type: 'string', description: 'Organism name or taxonomy ID to filter results' }, size: { type: 'number', description: 'Number of results to return (1-500, default: 25)', minimum: 1, maximum: 500 }, }, required: ['localization'], }, },
- src/index.ts:221-232 (helper)Helper function validating input arguments for the search_by_localization tool.const isValidLocalizationSearchArgs = ( args: any ): args is { localization: string; organism?: string; size?: number } => { return ( typeof args === 'object' && args !== null && typeof args.localization === 'string' && args.localization.length > 0 && (args.organism === undefined || typeof args.organism === 'string') && (args.size === undefined || (typeof args.size === 'number' && args.size > 0 && args.size <= 500)) ); };
- src/index.ts:763-764 (registration)Dispatch case in CallToolRequestSchema switch statement that routes calls to the handler.case 'search_by_localization': return this.handleSearchByLocalization(args);