[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6DJ60FSXYFFMPTPFXKABT5K":3,"skill-same:01M6DJ60FSXYFFMPTPFXKABT5K":58},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":16,"categories":17,"keywords":23,"publishedAt":28,"linkOnly":29,"markdownContent":30,"markdownBody":31,"frontMatter":32,"refName":36,"commitSha":37,"skillDirectory":38,"forksCount":39,"repositoryHtmlUrl":40,"repositoryHomepageUrl":6,"ownerHtmlUrl":41,"ownerBlogUrl":6,"ownerDescription":42,"updatedAt":43,"install":44,"resources":57},"01M6DJ60FSXYFFMPTPFXKABT5K","molecular-similarity-search",null,"Search for similar molecules using Tanimoto similarity with Morgan fingerprints to identify structurally related compounds.","InternScience\u002FDrClaw","InternScience","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F154449623?v=4","01M6DHY1ZF02QASNAVMNPT7NP6","Intern Science","01M6DHY2523FY56Q5572NKAAD0",172,"MIT","https:\u002F\u002Fgithub.com\u002FInternScience\u002FDrClaw\u002Fblob\u002Fmain\u002Fdrclaw\u002Fagent_hub\u002Ftemplates\u002Fchemistry\u002Fskills\u002Fmolecular-similarity-search\u002FSKILL.md",[18],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000023","Skill与智能体开发","SCENARIO","使用场景",[24,25,26,27],"search","Similarity Search","molecular","molecular similarity search","2026-11-10 10:12:30",false,"---\nname: molecular-similarity-search\ndescription: Search for similar molecules using Tanimoto similarity with Morgan fingerprints to identify structurally related compounds.\nlicense: MIT license\nmetadata:\n    skill-author: PJLab\n---\n\n# Molecular Similarity Search\n\n## Usage\n\n### 1. MCP Server Definition\n\n```python\nimport asyncio\nimport json\nfrom mcp.client.streamable_http import streamablehttp_client\nfrom mcp import ClientSession\n\nclass DrugSDAClient:\n    \"\"\"DrugSDA-Tool MCP Client\"\"\"\n\n    def __init__(self, server_url: str, api_key: str):\n        self.server_url = server_url\n        self.api_key = api_key\n        self.session = None\n\n    async def connect(self):\n        \"\"\"Establish connection and initialize session\"\"\"\n        print(f\"server url: {self.server_url}\")\n        try:\n            self.transport = streamablehttp_client(\n                url=self.server_url,\n                headers={\"SCP-HUB-API-KEY\": self.api_key}\n            )\n            self.read, self.write, self.get_session_id = await self.transport.__aenter__()\n\n            self.session_ctx = ClientSession(self.read, self.write)\n            self.session = await self.session_ctx.__aenter__()\n\n            await self.session.initialize()\n            session_id = self.get_session_id()\n\n            print(f\"✓ connect success\")\n            return True\n\n        except Exception as e:\n            print(f\"✗ connect failure: {e}\")\n            return False\n\n    async def disconnect(self):\n        \"\"\"Disconnect from server\"\"\"\n        try:\n            if self.session:\n                await self.session_ctx.__aexit__(None, None, None)\n            if hasattr(self, 'transport'):\n                await self.transport.__aexit__(None, None, None)\n            print(\"✓ already disconnect\")\n        except Exception as e:\n            print(f\"✗ disconnect error: {e}\")\n\n    def parse_result(self, result):\n        \"\"\"Parse MCP tool call result\"\"\"\n        try:\n            if hasattr(result, 'content') and result.content:\n                content = result.content[0]\n                if hasattr(content, 'text'):\n                    return json.loads(content.text)\n            return str(result)\n        except Exception as e:\n            return {\"error\": f\"parse error: {e}\", \"raw\": str(result)}\n```\n\n### 2. Molecular Similarity Search Workflow\n\nThis workflow searches for similar molecules using Tanimoto similarity calculated from Morgan fingerprints.\n\n**Workflow Steps:**\n\n1. **Define Target Molecule** - Specify the query SMILES\n2. **Define Candidate Molecules** - Provide list of candidate SMILES\n3. **Calculate Similarity** - Compute Tanimoto scores for all candidates\n4. **Rank Results** - Sort by similarity score to find most similar molecules\n\n**Implementation:**\n\n```python\n## Initialize client\nclient = DrugSDAClient(\n    \"https:\u002F\u002Fscp.intern-ai.org.cn\u002Fapi\u002Fv1\u002Fmcp\u002F2\u002FDrugSDA-Tool\",\n    \"\u003Cyour-api-key>\"\n)\n\nif not await client.connect():\n    print(\"connection failed\")\n    exit()\n\n## Input: Target molecule and candidate library\ntarget = \"CCO\"  # Ethanol\ncandidates = [\n    \"CCCO\",      # Propanol\n    \"CCCCO\",     # Butanol\n    \"CC(C)O\",    # Isopropanol\n    \"CCC(C)O\",   # sec-Butanol\n    \"C1CC1\",     # Cyclopropane\n    \"CC=O\",      # Acetaldehyde\n    \"CCCOO\"      # Propanoic acid\n]\n\n## Execute similarity calculation\nresult = await client.session.call_tool(\n    \"calculate_smiles_similarity\",\n    arguments={\n        \"target_smiles\": target,\n        \"candidate_smiles_list\": candidates\n    }\n)\n\nresult_data = client.parse_result(result)\nsimilarities = result_data['similarities']\n\n## Sort and display top 3 most similar molecules\ntop3_smiles = sorted(similarities, key=lambda x: x['score'], reverse=True)[:3]\n\nprint(f\"Target molecule: {target}\\n\")\nprint(\"Top 3 most similar molecules:\")\nfor i, item in enumerate(top3_smiles, 1):\n    print(f\"{i}. {item['smiles']} - Tanimoto score: {item['score']:.4f}\")\n\nawait client.disconnect()\n```\n\n### Tool Descriptions\n\n**DrugSDA-Tool Server:**\n- `calculate_smiles_similarity`: Compute molecular similarity using Morgan fingerprints\n  - Args:\n    - `target_smiles` (str): Query molecule SMILES string\n    - `candidate_smiles_list` (list): List of candidate molecule SMILES strings\n  - Returns:\n    - `similarities` (list): List of similarity scores\n      - `smiles` (str): Candidate SMILES string\n      - `score` (float): Tanimoto similarity (0-1)\n\n### Input\u002FOutput\n\n**Input:**\n- `target_smiles`: SMILES string of the query molecule\n- `candidate_smiles_list`: List of SMILES strings to compare against\n\n**Output:**\n- List of similarity results:\n  - `smiles`: Candidate molecule SMILES\n  - `score`: Tanimoto similarity coefficient (0-1)\n    - 1.0 = identical molecules\n    - >0.7 = highly similar\n    - 0.4-0.7 = moderately similar\n    - \u003C0.4 = dissimilar\n\n### Similarity Interpretation\n\n- **Score > 0.85**: Very high similarity, likely same scaffold\n- **Score 0.7-0.85**: High similarity, similar pharmacophore\n- **Score 0.5-0.7**: Moderate similarity, related structures\n- **Score \u003C 0.5**: Low similarity, different chemical space\n\n### Use Cases\n\n- Virtual screening and library filtering\n- Scaffold hopping in drug design\n- Chemical space exploration\n- Lead compound identification\n- Analog searching in compound databases\n- Structure-activity relationship studies\n\n### Performance Notes\n\n- **Execution time**: \u003C1 second for up to 1000 candidates\n- **Fingerprint**: Morgan fingerprint (radius 2, 2048 bits)\n- **Algorithm**: Tanimoto coefficient for binary fingerprints\n- **Scalability**: Efficient for large compound libraries\n","# Molecular Similarity Search\n\n## Usage\n\n### 1. MCP Server Definition\n\n```python\nimport asyncio\nimport json\nfrom mcp.client.streamable_http import streamablehttp_client\nfrom mcp import ClientSession\n\nclass DrugSDAClient:\n    \"\"\"DrugSDA-Tool MCP Client\"\"\"\n\n    def __init__(self, server_url: str, api_key: str):\n        self.server_url = server_url\n        self.api_key = api_key\n        self.session = None\n\n    async def connect(self):\n        \"\"\"Establish connection and initialize session\"\"\"\n        print(f\"server url: {self.server_url}\")\n        try:\n            self.transport = streamablehttp_client(\n                url=self.server_url,\n                headers={\"SCP-HUB-API-KEY\": self.api_key}\n            )\n            self.read, self.write, self.get_session_id = await self.transport.__aenter__()\n\n            self.session_ctx = ClientSession(self.read, self.write)\n            self.session = await self.session_ctx.__aenter__()\n\n            await self.session.initialize()\n            session_id = self.get_session_id()\n\n            print(f\"✓ connect success\")\n            return True\n\n        except Exception as e:\n            print(f\"✗ connect failure: {e}\")\n            return False\n\n    async def disconnect(self):\n        \"\"\"Disconnect from server\"\"\"\n        try:\n            if self.session:\n                await self.session_ctx.__aexit__(None, None, None)\n            if hasattr(self, 'transport'):\n                await self.transport.__aexit__(None, None, None)\n            print(\"✓ already disconnect\")\n        except Exception as e:\n            print(f\"✗ disconnect error: {e}\")\n\n    def parse_result(self, result):\n        \"\"\"Parse MCP tool call result\"\"\"\n        try:\n            if hasattr(result, 'content') and result.content:\n                content = result.content[0]\n                if hasattr(content, 'text'):\n                    return json.loads(content.text)\n            return str(result)\n        except Exception as e:\n            return {\"error\": f\"parse error: {e}\", \"raw\": str(result)}\n```\n\n### 2. Molecular Similarity Search Workflow\n\nThis workflow searches for similar molecules using Tanimoto similarity calculated from Morgan fingerprints.\n\n**Workflow Steps:**\n\n1. **Define Target Molecule** - Specify the query SMILES\n2. **Define Candidate Molecules** - Provide list of candidate SMILES\n3. **Calculate Similarity** - Compute Tanimoto scores for all candidates\n4. **Rank Results** - Sort by similarity score to find most similar molecules\n\n**Implementation:**\n\n```python\n## Initialize client\nclient = DrugSDAClient(\n    \"https:\u002F\u002Fscp.intern-ai.org.cn\u002Fapi\u002Fv1\u002Fmcp\u002F2\u002FDrugSDA-Tool\",\n    \"\u003Cyour-api-key>\"\n)\n\nif not await client.connect():\n    print(\"connection failed\")\n    exit()\n\n## Input: Target molecule and candidate library\ntarget = \"CCO\"  # Ethanol\ncandidates = [\n    \"CCCO\",      # Propanol\n    \"CCCCO\",     # Butanol\n    \"CC(C)O\",    # Isopropanol\n    \"CCC(C)O\",   # sec-Butanol\n    \"C1CC1\",     # Cyclopropane\n    \"CC=O\",      # Acetaldehyde\n    \"CCCOO\"      # Propanoic acid\n]\n\n## Execute similarity calculation\nresult = await client.session.call_tool(\n    \"calculate_smiles_similarity\",\n    arguments={\n        \"target_smiles\": target,\n        \"candidate_smiles_list\": candidates\n    }\n)\n\nresult_data = client.parse_result(result)\nsimilarities = result_data['similarities']\n\n## Sort and display top 3 most similar molecules\ntop3_smiles = sorted(similarities, key=lambda x: x['score'], reverse=True)[:3]\n\nprint(f\"Target molecule: {target}\\n\")\nprint(\"Top 3 most similar molecules:\")\nfor i, item in enumerate(top3_smiles, 1):\n    print(f\"{i}. {item['smiles']} - Tanimoto score: {item['score']:.4f}\")\n\nawait client.disconnect()\n```\n\n### Tool Descriptions\n\n**DrugSDA-Tool Server:**\n- `calculate_smiles_similarity`: Compute molecular similarity using Morgan fingerprints\n  - Args:\n    - `target_smiles` (str): Query molecule SMILES string\n    - `candidate_smiles_list` (list): List of candidate molecule SMILES strings\n  - Returns:\n    - `similarities` (list): List of similarity scores\n      - `smiles` (str): Candidate SMILES string\n      - `score` (float): Tanimoto similarity (0-1)\n\n### Input\u002FOutput\n\n**Input:**\n- `target_smiles`: SMILES string of the query molecule\n- `candidate_smiles_list`: List of SMILES strings to compare against\n\n**Output:**\n- List of similarity results:\n  - `smiles`: Candidate molecule SMILES\n  - `score`: Tanimoto similarity coefficient (0-1)\n    - 1.0 = identical molecules\n    - >0.7 = highly similar\n    - 0.4-0.7 = moderately similar\n    - \u003C0.4 = dissimilar\n\n### Similarity Interpretation\n\n- **Score > 0.85**: Very high similarity, likely same scaffold\n- **Score 0.7-0.85**: High similarity, similar pharmacophore\n- **Score 0.5-0.7**: Moderate similarity, related structures\n- **Score \u003C 0.5**: Low similarity, different chemical space\n\n### Use Cases\n\n- Virtual screening and library filtering\n- Scaffold hopping in drug design\n- Chemical space exploration\n- Lead compound identification\n- Analog searching in compound databases\n- Structure-activity relationship studies\n\n### Performance Notes\n\n- **Execution time**: \u003C1 second for up to 1000 candidates\n- **Fingerprint**: Morgan fingerprint (radius 2, 2048 bits)\n- **Algorithm**: Tanimoto coefficient for binary fingerprints\n- **Scalability**: Efficient for large compound libraries\n",{"name":5,"license":33,"metadata":34,"description":7},"MIT license",{"skill-author":35},"PJLab","main","4f96df0d9df0eae24a992afabe08edec5fc575f0","drclaw\u002Fagent_hub\u002Ftemplates\u002Fchemistry\u002Fskills\u002Fmolecular-similarity-search",10,"https:\u002F\u002Fgithub.com\u002FInternScience\u002FDrClaw","https:\u002F\u002Fgithub.com\u002FInternScience","Shanghai Artificial Intelligence Laboratory","2026-03-20 17:06:10",{"source":8,"skillName":5,"commands":45,"prompt":55,"zipAvailable":56},[46,49,52],{"tool":47,"command":48},"npx","npx skills add InternScience\u002FDrClaw --skill molecular-similarity-search",{"tool":50,"command":51},"bunx","bunx skills add InternScience\u002FDrClaw --skill molecular-similarity-search",{"tool":53,"command":54},"pnpm","pnpm dlx skills add InternScience\u002FDrClaw --skill molecular-similarity-search","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002FInternScience\u002FDrClaw\u002Fblob\u002Fmain\u002Fdrclaw\u002Fagent_hub\u002Ftemplates\u002Fchemistry\u002Fskills\u002Fmolecular-similarity-search\u002FSKILL.md",true,[],[59,94,117,132,150,165],{"skillNo":60,"name":61,"nameZh":6,"description":62,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":63,"categories":64,"keywords":73,"publishedAt":28},"01M6DMQESTSBW8VJW03QWHMT85","scientific-critical-thinking","Evaluate scientific claims and evidence quality. Use for assessing experimental design validity, identifying biases and confounders, applying evidence grading frameworks (GRADE, Cochrane Risk of Bias), or teaching critical analysis. Best for understanding evidence quality, identifying flaws. For formal peer review writing use peer-review.","https:\u002F\u002Fgithub.com\u002FInternScience\u002FDrClaw\u002Fblob\u002Fmain\u002Fdrclaw\u002Flocal_skill_hub\u002Fthinking\u002Fscientific-critical-thinking\u002FSKILL.md",[65,68],{"categoryNo":66,"categoryName":67,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000015","视觉设计",{"categoryNo":69,"categoryName":70,"taxonomyType":71,"taxonomyTypeDesc":72},"01JBSEEDCAT000000000000032","设计师","PROFESSION","适用职业",[74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93],"critical","scientific critical thinking","thinking","design","writing","review","risk","analysis","peer review","Bash","quality","read","write","edit","use","evidence","peer","frameworks","teaching","bias",{"skillNo":95,"name":96,"nameZh":6,"description":97,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":98,"categories":99,"keywords":100,"publishedAt":28},"01M6DMQ77Z121463E049G2DG8K","scientific-brainstorming","Creative research ideation and exploration. Use for open-ended brainstorming sessions, exploring interdisciplinary connections, challenging assumptions, or identifying research gaps. Best for early-stage research planning when you do not have specific observations yet. For formulating testable hypotheses from data use hypothesis-generation.","https:\u002F\u002Fgithub.com\u002FInternScience\u002FDrClaw\u002Fblob\u002Fmain\u002Fdrclaw\u002Flocal_skill_hub\u002Fthinking\u002Fscientific-brainstorming\u002FSKILL.md",[],[101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,88],"brainstorming","scientific brainstorming","research ideation","stage","connections","generation","exploration","do","planning","creative","ideation","research","sessions","data","hypothesis","open",{"skillNo":118,"name":119,"nameZh":6,"description":120,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":121,"categories":122,"keywords":127,"publishedAt":28},"01M6DMPV4AMCCTWARGPSFHDWJB","scientific-literature-search","Search scientific literature and research papers using FlowSearch to find relevant academic articles and publications.","https:\u002F\u002Fgithub.com\u002FInternScience\u002FDrClaw\u002Fblob\u002Fmain\u002Fdrclaw\u002Flocal_skill_hub\u002Fsearch\u002Fscientific-literature-search\u002FSKILL.md",[123,126],{"categoryNo":124,"categoryName":125,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000021","资料检索与研究",{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},[24,128,112,129,130,131],"scientific literature search","find","Academic","搜索",{"skillNo":133,"name":134,"nameZh":6,"description":135,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":136,"categories":137,"keywords":144,"publishedAt":28},"01M6DMPQJP8HVFV54V05D6K9HA","pubmed-article-search","Search PubMed database for scientific articles and publications to retrieve biomedical literature.","https:\u002F\u002Fgithub.com\u002FInternScience\u002FDrClaw\u002Fblob\u002Fmain\u002Fdrclaw\u002Flocal_skill_hub\u002Fsearch\u002Fpubmed-article-search\u002FSKILL.md",[138,141],{"categoryNo":139,"categoryName":140,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000018","写作与文案",{"categoryNo":142,"categoryName":143,"taxonomyType":71,"taxonomyTypeDesc":72},"01JBSEEDCAT000000000000036","内容创作者",[145,146,24,131,147,148,149],"pubmed article search","article","database","pubmed database","biomedical",{"skillNo":151,"name":152,"nameZh":6,"description":153,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":154,"categories":155,"keywords":157,"publishedAt":28},"01M6DMPK4H3JQ185M97BRB9KQJ","biomedical-web-search","Search biomedical literature and web content using Tavily search engine for research and clinical information.","https:\u002F\u002Fgithub.com\u002FInternScience\u002FDrClaw\u002Fblob\u002Fmain\u002Fdrclaw\u002Flocal_skill_hub\u002Fsearch\u002Fbiomedical-web-search\u002FSKILL.md",[156],{"categoryNo":124,"categoryName":125,"taxonomyType":21,"taxonomyTypeDesc":22},[158,149,159,24,160,161,112,162,163,131,164],"biomedical web search","web search","web","tavily","content","engine","clinical",{"skillNo":166,"name":167,"nameZh":6,"description":168,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":169,"categories":170,"keywords":172,"publishedAt":28},"01M6DMNNJH9V1S5PQHZRX0N934","uniprot-protein-retrieval","Retrieve protein sequences and functional information from UniProt database by protein name, enabling protein analysis and bioinformatics workflows.","https:\u002F\u002Fgithub.com\u002FInternScience\u002FDrClaw\u002Fblob\u002Fmain\u002Fdrclaw\u002Flocal_skill_hub\u002Fscience\u002Fprotein\u002Funiprot-protein-retrieval\u002FSKILL.md",[171],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},[173,147,81,174,175,176,177],"uniprot protein retrieval","uniprot database","bioinformatics","name","workflows"]