Server data from the Official MCP Registry
Chemical safety intelligence — 21 tools: compatibility, hazards, PPE, compliance, audit reports
Chemical safety intelligence — 21 tools: compatibility, hazards, PPE, compliance, audit reports
This MCP server implements chemical safety tools with reasonable architecture and input validation, but has moderate security concerns that users should understand. The server requires API key authentication for most operations, properly avoids hardcoding secrets, and implements fire-and-forget logging. However, there are unvalidated external API calls, insufficient input sanitization on user-supplied chemical names, missing timeout/rate-limiting on some endpoints, and concerning logging practices that could expose sensitive experiment details. Supply chain analysis found 5 known vulnerabilities in dependencies (0 critical, 4 high severity). Package verification found 1 issue.
4 files analyzed · 12 issues found
Security scores are indicators to help you make informed decisions, not guarantees. Always review permissions before connecting any MCP server.
This plugin requests these system permissions. Most are normal for its category.
Set these up before or after installing:
Environment variable: MSDS_API_KEY
Add this to your MCP configuration file:
{
"mcpServers": {
"io-github-littleblakew-msds-chain": {
"env": {
"MSDS_API_KEY": "your-msds-api-key-here"
},
"args": [
"-y",
"msds-chain-mcp"
],
"command": "npx"
}
}
}From the project's GitHub README.
Chemical safety intelligence for AI-assisted experiment design.
Powered by ChainSDS — a verified, always-current chemical safety database. Verified. Current. Growing.
An MCP server that gives AI agents (Claude Code, Cursor, Copilot, pi, etc.) access to chemical safety reasoning — compatibility checks, hazard analysis, regulatory compliance, PPE recommendations, storage guidance, and more.
Built for researchers who design experiments with AI and need safety verification integrated into their workflow.
When you use Claude to plan a synthesis route or set up an Opentrons protocol, safety validation shouldn't be a separate step. This MCP server lets your AI assistant automatically:
| Tool | Description |
|---|---|
batch_safety_check | One-call comprehensive report: compatibility + PPE + storage grouping for a chemical list |
check_regulatory_lists | Cross-reference a chemical against 23 regulatory watch lists across 10 regions |
get_sds_section | Retrieve a specific SDS section (1-16) for a chemical |
get_chemical_alternatives | Safer substitutes for restricted or high-risk chemicals |
validate_protocol_chemicals | Extract & validate chemical names from protocol text or code |
check_mixing_order | Safe addition sequence for reagent pairs (e.g., acid into water) |
get_waste_disposal | Waste classification, container type, and disposal procedures |
upload_msds_pdf | Upload MSDS PDF for AI-powered parsing and data extraction (requires API key) |
compare_sds_versions | Structured 7-dimension diff between SDS versions of a chemical |
check_chemical_compatibility | Pairwise compatibility for 2+ chemicals |
get_chemical_risk_warnings | GHS classification, H-codes, signal words, flash point |
get_ppe_recommendation | Gloves, eye protection, respiratory, body protection |
get_storage_guidance | Storage class, cabinet type, temperature, isolation rules |
get_emergency_response | Spill, fire, or exposure emergency procedures |
get_exposure_limits | OEL/TLV/PEL/MAC across US, EU, JP, CN, INT |
get_transport_classification | UN number, hazard class, packing group, ADR/IATA/IMDG |
check_regulatory_compliance | Multi-region: EU, US, CN, JP, KR, CA, AU, TW, SG |
search_chemical_database | Look up chemicals by name, synonym, or CAS number |
ask_chemical_safety | Natural language catch-all for any safety question |
create_audit_session | Full audit with signed PDF report (requires API key) |
get_audit_report | Download link for the signed audit PDF |
Sign up at msdschain.lagentbot.com → API Keys tab → create a key.
git clone https://github.com/littleblakew/msds-chain-mcp.git
cd msds-chain-mcp
pip install -r requirements.txt
Claude Code (Remote — recommended):
claude mcp add msds-chain --transport sse --url https://mcp.lagentbot.com/sse
Claude Code (Plugin — includes skill + MCP):
/plugin install https://github.com/littleblakew/msds-chain-mcp.git
Claude Code (npm — local):
claude mcp add msds-chain -- npx -y msds-chain-mcp@latest
claude.ai (Web): Search "msds-chain" in Settings > Plugins (already published).
Manual config (Claude Code ~/.claude.json):
{
"mcpServers": {
"msds-chain": {
"type": "sse",
"url": "https://mcp.lagentbot.com/sse",
"env": {
"MSDS_API_KEY": "sk-msds-your-key-here"
}
}
}
}
Restart Claude Code. You should see msds-chain in the MCP tools list.
The /msds-safety-check skill provides auto-detection and guided audit workflows.
Plugin install (includes skill + MCP automatically):
/plugin install https://github.com/littleblakew/msds-chain-mcp.git
Manual install (skill only, if MCP already configured):
git clone https://github.com/littleblakew/msds-chain-mcp.git /tmp/msds-chain-mcp
cp -r /tmp/msds-chain-mcp/skills/msds-safety-check .agents/skills/msds-safety-check
ln -s ../../.agents/skills/msds-safety-check .claude/skills/msds-safety-check
/msds-safety-check — guided audit for lab protocols or EHS complianceUser: I'm planning a Grignard reaction with magnesium turnings, diethyl ether,
and bromobenzene. Check if this setup is safe.
Claude:
→ calls batch_safety_check(["magnesium", "diethyl ether", "bromobenzene"])
→ Returns: compatibility matrix, PPE requirements, storage grouping
User: My Opentrons deck has these in different slots:
Slot 1: Acetone, Slot 3: Concentrated H2SO4, Slot 5: Methanol,
Slot 7: Sodium borohydride. Any safety issues?
Claude:
→ calls check_chemical_compatibility(["acetone", "sulfuric acid", "methanol", "sodium borohydride"])
→ ⚠️ INCOMPATIBLE: Sodium borohydride + sulfuric acid (violent reaction, H2 gas evolution)
→ ⚠️ CAUTION: Acetone + sulfuric acid (exothermic)
→ Recommendation: Move sodium borohydride to maximum distance from acids
User: We need to ship toluene and dichloromethane to our Japan lab.
What transport regulations apply?
Claude:
→ calls get_transport_classification(["toluene", "dichloromethane"])
→ calls check_regulatory_compliance(["toluene", "dichloromethane"], regions=["JP"])
→ Returns: UN numbers, IATA packing instructions, Japan-specific regulations
User: Create a safety audit report for our quarterly review.
Chemicals: acetone, methanol, ethanol, isopropanol, hexane.
Claude:
→ calls create_audit_session("Q2 2026 Solvent Cabinet Review", ["acetone", "methanol", "ethanol", "isopropanol", "hexane"])
→ calls get_audit_report("SESSION-ID")
→ Returns: Signed PDF URL (Ed25519 signature, suitable for GLP/GMP compliance)
Each prompt reliably triggers the named tool. Use them to evaluate the connector end-to-end.
| Tool | Example prompt | What a good response shows |
|---|---|---|
search_chemical_database | "Look up the chemical with CAS 67-64-1." | Acetone identified with synonyms + CAS |
ask_chemical_safety | "Is it safe to store bleach next to ammonia?" | Plain-language hazard answer (toxic chloramine gas) |
check_chemical_compatibility | "Are acetone and hydrogen peroxide compatible?" | Pairwise verdict + reaction risk |
get_chemical_risk_warnings | "What are the GHS hazards of toluene?" | H-codes, signal word, flash point |
get_ppe_recommendation | "What PPE do I need to handle concentrated sulfuric acid?" | Gloves/eye/respiratory/body guidance |
get_storage_guidance | "How should I store sodium hydroxide and nitric acid?" | Storage class, cabinet, isolation rules |
get_emergency_response | "What do I do if I spill chloroform?" | Step-by-step spill procedure |
get_exposure_limits | "What's the OEL for benzene in the EU?" | OEL/TLV/PEL values by region |
get_transport_classification | "How is acetone classified for air freight?" | UN number, hazard class, packing group |
check_regulatory_compliance | "Is dichloromethane restricted in Japan and the EU?" | Per-region compliance status |
check_regulatory_lists | "Which regulatory watch lists include formaldehyde?" | Matched lists across regions |
get_waste_disposal | "How do I dispose of waste acetonitrile?" | Waste class, container, procedure |
check_mixing_order | "What's the safe order to mix sulfuric acid and water?" | Correct addition sequence + why |
get_chemical_alternatives | "Is there a safer substitute for hexane in extraction?" | Lower-hazard alternatives |
validate_protocol_chemicals | "Validate the chemicals in this protocol: [paste text]" | Extracted + verified chemical list |
get_sds_section | "Show me section 4 (first aid) of the SDS for methanol." | Requested SDS section content |
compare_sds_versions | "What changed between SDS versions for acetone?" | 7-dimension structured diff |
batch_safety_check | "Run a full safety check on acetone, methanol, and hexane." | Compatibility + PPE + storage report |
upload_msds_pdf | "Parse this MSDS PDF and extract its hazard data." (API key) | Structured extraction from the PDF |
create_audit_session | "Create a signed audit report for our solvent cabinet." (API key) | Audit session + signed PDF |
get_audit_report | "Give me the download link for that audit report." (API key) | Signed PDF URL |
upload_msds_pdf, create_audit_session, get_audit_report) associate activity with your account for audit traceability.Connect to the hosted MSDS Chain MCP server from any AI platform that supports MCP.
Server URL: https://mcp.lagentbot.com/sse
The hosted server uses the SSE transport for broad client compatibility (Claude.ai, Claude Code, pi, 悟空, Dify, Coze, etc.). Streamable HTTP is supported by the code for self-hosting (see Remote Mode) but is not enabled on the hosted endpoint.
| Transport | Endpoint | Notes |
|---|---|---|
| SSE | https://mcp.lagentbot.com/sse | Hosted endpoint — use this |
| Streamable HTTP | self-hosted only | Run your own server with MSDS_MCP_TRANSPORT=streamable-http |
Authentication: Add an HTTP header — Authorization: Bearer sk-msds-your-key
msds-chainhttps://mcp.lagentbot.com/sseAuthorization : Bearer sk-msds-your-keyGeneral steps:
https://mcp.lagentbot.com/sseAuthorization: Bearer sk-msds-your-keyGet an API key: Sign up at msdschain.lagentbot.com → API Keys tab → Create Key.
For cloud deployment or shared team access, run as an HTTP server:
# Streamable HTTP (recommended for Claude Code 2026+)
MSDS_API_KEY=sk-msds-xxx python server_remote.py
# Or SSE mode
MSDS_MCP_TRANSPORT=sse MSDS_API_KEY=sk-msds-xxx python server_remote.py
Connect from Claude Code:
claude mcp add msds-chain --transport http https://your-server.example.com/mcp
docker build -t msds-chain-mcp .
docker run -p 8080:8080 -e MSDS_API_KEY=sk-msds-xxx msds-chain-mcp
| Variable | Default | Description |
|---|---|---|
MSDS_API_KEY | (required) | API key from the MSDS Chain dashboard |
MSDS_API_URL | Production URL | For development use only |
MSDS_LANG | en | Response language: en, zh, ja, de, id |
Industry-sourced, AI-verified, and cryptographically signed.
Your AI Agent MSDS Chain MCP Server
┌──────────────────┐ ┌─────────────────────────┐
│ Claude Code │ │ 21 Safety Tools │
│ Cursor / pi │──MCP────▶│ ↓ │
│ Any MCP client │ │ ChainSDS Platform │
└──────────────────┘ └─────────────────────────┘
The MCP server connects to the ChainSDS platform for verified safety reasoning.
Test locally with the MCP inspector:
export MSDS_API_KEY=sk-msds-your-key
npx @modelcontextprotocol/inspector python server.py
| Symptom | Likely cause | Fix |
|---|---|---|
401 Unauthorized on connect | Missing or invalid API key | Verify the Authorization: Bearer sk-msds-... header (or MSDS_API_KEY env var). Generate a fresh key at msdschain.lagentbot.com → API Keys. |
| Tools don't appear in the client | MCP server not loaded | Fully restart the client after adding the server. Confirm msds-chain shows in the MCP/tools list. |
| Connection drops or times out | Wrong transport / endpoint | Use the SSE endpoint https://mcp.lagentbot.com/sse. Check GET /health returns {"status":"ok"}. |
Quota exceeded / 429 | Monthly call limit hit | Free keys are limited; upgrade your plan or wait for the monthly reset. |
| Empty results for a known chemical | Name not matched | Retry with the CAS number or a common synonym; search_chemical_database accepts name, synonym, or CAS. |
| OAuth login fails in a browser client | OAuth metadata unreachable | Confirm GET /.well-known/oauth-authorization-server returns 200; the client should auto-discover the authorize/token endpoints. |
Still stuck? Email contact@lagentbot.com or open an issue at github.com/littleblakew/msds-chain-mcp/issues.
get_waste_disposal — waste classification and disposal guidancecheck_mixing_order — safe addition sequence for reagent pairsget_chemical_alternatives — safer substitutes for restricted chemicalsMIT
Built by LAgentBot — AI-powered chemical safety infrastructure.
Part of the MSDS Chain platform — the world's first AI Agent-driven chemical safety data trust network, powered by ChainSDS: verified, current, and growing.
Be the first to review this server!
by Modelcontextprotocol · Developer Tools
Read, search, and manipulate Git repositories programmatically
by Modelcontextprotocol · Developer Tools
Web content fetching and conversion for efficient LLM usage
by Toleno · Developer Tools
Toleno Network MCP Server — Manage your Toleno mining account with Claude AI using natural language.