drugsda-data-valid

Check if the input protein sequence or molecule SMILES string is valid.

Best use case

drugsda-data-valid is best used when you need a repeatable AI agent workflow instead of a one-off prompt.

Check if the input protein sequence or molecule SMILES string is valid.

Teams using drugsda-data-valid should expect a more consistent output, faster repeated execution, less prompt rewriting.

When to use this skill

  • You want a reusable workflow that can be run more than once with consistent structure.

When not to use this skill

  • You only need a quick one-off answer and do not need a reusable workflow.
  • You cannot install or maintain the underlying files, dependencies, or repository context.

Installation

Claude Code / Cursor / Codex

$curl -o ~/.claude/skills/drugsda-data-valid/SKILL.md --create-dirs "https://raw.githubusercontent.com/SpectrAI-Initiative/InnoClaw/main/.claude/skills/drugsda-data-valid/SKILL.md"

Manual Installation

  1. Download SKILL.md from GitHub
  2. Place it in .claude/skills/drugsda-data-valid/SKILL.md inside your project
  3. Restart your AI agent — it will auto-discover the skill

How drugsda-data-valid Compares

Feature / Agentdrugsda-data-validStandard Approach
Platform SupportNot specifiedLimited / Varies
Context Awareness High Baseline
Installation ComplexityUnknownN/A

Frequently Asked Questions

What does this skill do?

Check if the input protein sequence or molecule SMILES string is valid.

Where can I find the source code?

You can find the source code on GitHub using the link provided at the top of the page.

SKILL.md Source

# Protein or Molecule Data Check

## Usage

### 1. MCP Server Definition

```python
import json
from contextlib import AsyncExitStack
from mcp.client.streamable_http import streamablehttp_client
from mcp import ClientSession

class DrugSDAClient:    
    def __init__(self, server_url: str):
        self.server_url = server_url
        self.session = None
        
    async def connect(self):
        print(f"server url: {self.server_url}")
        try:
            self.transport = streamablehttp_client(
                url=self.server_url,
                headers={"SCP-HUB-API-KEY": "sk-a0033dde-b3cd-413b-adbe-980bc78d6126"}
            )
            self._stack = AsyncExitStack()
            await self._stack.__aenter__()
            self.read, self.write, self.get_session_id = await self._stack.enter_async_context(self.transport)
            
            self.session_ctx = ClientSession(self.read, self.write)
            self.session = await self._stack.enter_async_context(self.session_ctx)

            await self.session.initialize()
            session_id = self.get_session_id()
            
            print(f"✓ connect success")
            return True
            
        except Exception as e:
            print(f"✗ connect failure: {e}")
            import traceback
            traceback.print_exc()
            return False
    
    async def disconnect(self):
        """Disconnect from server"""
        try:
            if hasattr(self, '_stack'):
                await self._stack.aclose()
            print("✓ already disconnect")
        except Exception as e:
            print(f"✗ disconnect error: {e}")
    def parse_result(self, result):
        try:
            if hasattr(result, 'content') and result.content:
                content = result.content[0]
                if hasattr(content, 'text'):
                    return json.loads(content.text)
            return str(result)
        except Exception as e:
            return {"error": f"parse error: {e}", "raw": str(result)}
```

### 2. Protein Sequence Valid Check

The description of tool *is_valid_protein_sequence*.

```tex
Check if the input protein sequence string is valid.
Args:
    sequences (List[str]): List of input protein sequences
Return:
    status (str): success/partial_success/error
    msg (str): message
    valid_res (List[dict]): List of dict, each containing the keys 'sequence' and 'is_valid'.
        --sequence (str): A protein sequence of the input sequences list 
        --is_valid (bool): Is the protein sequence valid or not
```

How to use tool *is_valid_protein_sequence* :

```python
client = DrugSDAClient("https://scp.intern-ai.org.cn/api/v1/mcp/2/DrugSDA-Tool")
if not await client.connect():
    print("connection failed")
    return

response = await client.session.call_tool(
    "is_valid_protein_sequence",
    arguments={
        "sequences": sequence_list
    }
)
result = client.parse_result(response)
valid_res = result["valid_res"]

await client.disconnect() 
```

### 3. Molecule SMILCES Valid Check

The description of tool *is_valid_smiles*.

```tex
Check if the input SMILES string is valid
Args:
    smiles_list (List[str]): List of input SMILES strings, (e.g., ["N[C@@H](Cc1ccc(O)cc1)C(=O)O", "CC(C)C1=CC=CC=C1"])
Return:
    status (str): success/partial_success/error
    msg (str): message
    valid_res (List[dict]): List of dict, each containing the keys 'smiles' and 'is_valid'. 
        --smiles (str): A SMILES string of smiles_list
        --is_valid (bool): Is the SMILES valid or not
```

How to use tool *is_valid_smiles* :

```python
client = DrugSDAClient("https://scp.intern-ai.org.cn/api/v1/mcp/2/DrugSDA-Tool")
if not await client.connect():
    print("connection failed")
    return

response = await client.session.call_tool(
    "is_valid_smiles",
    arguments={
        "smiles_list": smiles_list
    }
)
result = client.parse_result(response)
valid_res = result["valid_res"]

await client.disconnect() 
```

Related Skills

variant-cross-database-ids

370
from SpectrAI-Initiative/InnoClaw

Query ClinGen Allele Registry to map variant rsID to identifiers in other databases (ClinVar, gnomAD, COSMIC, UniProtKB, OMIM, etc.).

protein_database_crossref

370
from SpectrAI-Initiative/InnoClaw

Protein Cross-Database Reference - Cross-reference protein: UniProt entry, NCBI gene, Ensembl xrefs, and PDB structure search. Use this skill for proteomics tasks involving get uniprotkb entry by accession get gene metadata by gene name get xrefs symbol retrieve protein data by pdbcode. Combines 4 tools from 4 SCP server(s).

experimental_data_processing

370
from SpectrAI-Initiative/InnoClaw

Experimental Data Processing - Process experimental data: absolute error, mean square, max value, scientific notation formatting. Use this skill for experimental physics tasks involving calculate absolute error calculate mean square calculate max value format scientific notation convert to scientific notation. Combines 5 tools from 1 SCP server(s).

drugsda-target-retrieve

370
from SpectrAI-Initiative/InnoClaw

Search the protein information from the input gene name and downloads the optimal PDB or AlphaFold structures.

drugsda-rgroup-sampling

370
from SpectrAI-Initiative/InnoClaw

Generate new molecules sampling from the input scaffold.

drugsda-prosst

370
from SpectrAI-Initiative/InnoClaw

Given a protein sequence and its structure, employ ProSST model to predict mutation effects and obtain the top-k mutated sequences.

drugsda-peptide-sampling

370
from SpectrAI-Initiative/InnoClaw

Generate new peptide molecules sampling from the input peptide sequence.

drugsda-p2rank

370
from SpectrAI-Initiative/InnoClaw

No description provided.

drugsda-mol2mol-sampling

370
from SpectrAI-Initiative/InnoClaw

Generate new molecules sampling from the input molecule.

drugsda-mol-similarity

370
from SpectrAI-Initiative/InnoClaw

Compute the Tanimoto similarities between a target molecule and a list of candidate molecules using Morgan fingerprints.

drugsda-mol-properties

370
from SpectrAI-Initiative/InnoClaw

Calculate different types of molecular properties based on SMILES strings, covering basic physicochemical properties, hydrophobicity, hydrogen bonding capability, molecular complexity, topological structures, charge distribution, and custom complexity metrics, respectively.

drugsda-linker-sampling

370
from SpectrAI-Initiative/InnoClaw

Generate new molecules sampling from the input two warhead fragments.