A chemistry analysis MCP server for extracting and analyzing SMILES strings and computing molecular properties using RDKit
Two tools with basic schemas and descriptions, but significant gaps in parameter documentation, output schema clarity, and error handling guidance. Tool names follow verb_noun pattern (positive), but descriptions lack actionable context for LLM selection. Parameters have types but minimal guidance on constraints or expected formats. Error handling returns JSON strings but provides no recovery guidance. No tool annotations (readOnlyHint, etc.) despite both being read-only operations.
<smi></smi>タグで囲まれたSMILES文字列をテキストから抽出する。 複数のタグがテキストに含まれる場合も、同時に処理してSMILES文字列のリストが取得できる。 パラメータ: text (str): SMILES文字列を含む可能性のあるテキスト 戻り値: str: 抽出されたSMILESとその特性を含むJSON文字列
SMILES文字列の詳細な化学特性を取得する。 パラメータ: smiles (str): 化合物のSMILES表現 戻り値: str: 詳細な分子特性を含むJSON文字列 出力されるパラメータ: smiles: 化合物のSMILES formula: 分子式 molecular_weight: 分子量 exact_mass: 精密質量 heavy_atoms: 重原子の数 total_atoms: 原子の総数 ring_count: 環の数 rotatable_bonds: 回転可能な結合の数 h_bond_donors: 水素結合供与者の数 h_bond_acceptors: 水素結合受容体の数 logp: 脂溶性、LogP値
Output schemas not formally documented. Both tools return JSON strings, but the structure is inferred from code comments rather than explicit schema definitions. LLMs cannot reliably parse or plan downstream calls without documented output types.
Error handling lacks recovery guidance. Both tools return error JSON (e.g. 'Invalid SMILES string') but do not tell the LLM what to do next: retry, ask user for clarification, or try a different approach. Errors should guide the agent's next step.
Parameter descriptions lack constraint guidance. 'text' and 'smiles' parameters have minimal descriptions. No mention of expected format (e.g. 'SMILES must be a valid chemical notation string'), length limits, or examples of valid/invalid input. LLMs cannot validate input without explicit constraints.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 57 | 2026-07-28+ | v2 |
Tool descriptions lack WHEN-to-use context. Descriptions state WHAT the tools do but not WHEN to call them or how they differ from each other. For example, when should an LLM call extract_and_analyze_smiles vs get_detailed_properties? The descriptions do not clarify the workflow.
No tool annotations despite read-only semantics. Both tools are safe to retry and have no side effects, but lack readOnlyHint annotations. This prevents agents from optimizing retry logic and understanding safety guarantees.