Skip to main content
Glama
Augmented-Nature

Unofficial PubChem MCP Server

search_similar_compounds

Find chemically similar compounds from PubChem using Tanimoto similarity. Input a SMILES string to retrieve molecules matching your similarity threshold and quantity preferences.

Instructions

Find chemically similar compounds using Tanimoto similarity

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
smilesYesSMILES string of the query molecule
thresholdNoSimilarity threshold (0-100, default: 90)
max_recordsNoMaximum number of results (1-10000, default: 100)

Implementation Reference

  • The handler function that validates input using isValidSmilesArgs and performs a PubChem API POST request to /compound/similarity/smiles/JSON for Tanimoto similarity search based on SMILES, returning the JSON results.
    private async handleSearchSimilarCompounds(args: any) { if (!isValidSmilesArgs(args)) { throw new McpError(ErrorCode.InvalidParams, 'Invalid similarity search arguments'); } try { const threshold = args.threshold || 90; const maxRecords = args.max_records || 100; const response = await this.apiClient.post('/compound/similarity/smiles/JSON', { smiles: args.smiles, Threshold: threshold, MaxRecords: maxRecords, }); return { content: [ { type: 'text', text: JSON.stringify(response.data, null, 2), }, ], }; } catch (error) { throw new McpError( ErrorCode.InternalError, `Failed to search similar compounds: ${error instanceof Error ? error.message : 'Unknown error'}` ); } }
  • Input schema definition for the search_similar_compounds tool, specifying required SMILES and optional threshold/max_records with validation constraints.
    inputSchema: { type: 'object', properties: { smiles: { type: 'string', description: 'SMILES string of the query molecule' }, threshold: { type: 'number', description: 'Similarity threshold (0-100, default: 90)', minimum: 0, maximum: 100 }, max_records: { type: 'number', description: 'Maximum number of results (1-10000, default: 100)', minimum: 1, maximum: 10000 }, }, required: ['smiles'], },
  • src/index.ts:442-453 (registration)
    Tool registration in the ListToolsRequestSchema response, defining name, description, and input schema.
    name: 'search_similar_compounds', description: 'Find chemically similar compounds using Tanimoto similarity', inputSchema: { type: 'object', properties: { smiles: { type: 'string', description: 'SMILES string of the query molecule' }, threshold: { type: 'number', description: 'Similarity threshold (0-100, default: 90)', minimum: 0, maximum: 100 }, max_records: { type: 'number', description: 'Maximum number of results (1-10000, default: 100)', minimum: 1, maximum: 10000 }, }, required: ['smiles'], }, },
  • src/index.ts:754-755 (registration)
    Switch case in CallToolRequestSchema handler that routes calls to the specific handler function.
    case 'search_similar_compounds': return await this.handleSearchSimilarCompounds(args);
  • Validation helper function used by the handler to check input arguments match the schema.
    const isValidSmilesArgs = ( args: any ): args is { smiles: string; threshold?: number; max_records?: number } => { return ( typeof args === 'object' && args !== null && typeof args.smiles === 'string' && args.smiles.length > 0 && (args.threshold === undefined || (typeof args.threshold === 'number' && args.threshold >= 0 && args.threshold <= 100)) && (args.max_records === undefined || (typeof args.max_records === 'number' && args.max_records > 0 && args.max_records <= 10000)) ); };

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/Augmented-Nature-PubChem-MCP-Server'

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