search_similarity
Find chemically similar compounds by SMILES string for building blocks and screening compounds in the Chemspace database.
Instructions
Similarity search by SMILES
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
| smiles | Yes | ||
| shipToCountry | No | The country you want your order to be shipped to as two-letter country ISO code, e.g DE, US, FR | US |
| count | No | Maximum number of results on a page | |
| page | No | Number of the page | |
| categories | No | A list of product categories to searchCSSB - In-stock building blocksCSSS - In-stock screening compoundsCSMB - Make-on-demand building blocksCSMS - Make-on-demand screening compoundsCSCS - Custom request |
Implementation Reference
- src/chemspace_mcp/tools.py:107-138 (handler)The main execution logic for the 'search_similarity' tool. It makes an HTTP POST request to the Chemspace API's search endpoint with the provided SMILES and parameters.@mcp.tool(enabled=True) async def search_similarity( smiles: str, shipToCountry: Country = "US", count: ResultCount = 10, page: ResultPage = 1, categories: ProductCategories = ["CSSB", "CSMB"], ): """Similarity search by SMILES""" access_token = await mgr.get_token() async with httpx.AsyncClient() as client: r = await client.post( url="https://api.chem-space.com/v4/search/sub", headers={ "Accept": "application/json; version=4.1", "Authorization": f"Bearer {access_token}", }, params={ "shipToCountry": shipToCountry, "count": count, "page": page, "categories": ",".join(categories), }, files={ "SMILES": (None, smiles), }, ) r.raise_for_status() data = r.json() return data
- src/chemspace_mcp/tools.py:8-37 (schema)Type definitions and Pydantic Fields for the tool's input parameters, shared across search tools.Country = Annotated[ str, Field( description="The country you want your order to be shipped to as two-letter country ISO code, e.g DE, US, FR" ), ] ResultCount = Annotated[ int, Field(description="Maximum number of results on a page", ge=1) ] ResultPage = Annotated[int, Field(description="Number of the page", ge=1)] ProductCategory = Literal["CSSB", "CSSS", "CSMB", "CSMS", "CSCS"] ProductCategories = Annotated[ List[ProductCategory], Field( description=( "A list of product categories to search" "CSSB - In-stock building blocks" "CSSS - In-stock screening compounds" "CSMB - Make-on-demand building blocks" "CSMS - Make-on-demand screening compounds" "CSCS - Custom request" ), min_length=1, ), ]
- src/chemspace_mcp/__init__.py:6-10 (registration)Creates the FastMCP instance and calls register_tools to register the search_similarity tool (and others).mcp = FastMCP( "Chemspace MCP", instructions="Tools for retrieving synthesizable building blocks via the Chemspace API", ) register_tools(mcp, mgr)