The full upstream README, mirrored here for reference. Install config, tool schemas, adoption signals, and an original overview live on the Msds Chain listing page.
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 report for a chemical list: pairwise compatibility + per-chemical risk warnings |
check_regulatory_lists | Cross-reference a chemical against 23 regulatory watch lists across 8 jurisdictions + 3 international conventions |
get_sds_section | Retrieve a specific SDS section (1-16) for a chemical |
get_sds_document | Signed download URL (~5 min) for the original SDS/MSDS PDF; includes source provenance |
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 | Hazard-change diff between two SDS versions (H-code additions/removals + whether they change a verdict) |
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, CA, AU, SG list-backed; KR/TW accepted but no list wired |
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.
Architecture note: the hosted endpoint
https://mcp.lagentbot.comsits behind a distribution gateway that terminates OAuth 2.1 (PKCE + DCR) and serves/.well-known/oauth-authorization-server. The OAuth / browser sign-in flow described below applies only to that hosted gateway. This repo's bare core server (python server_remote.py, or the Docker image) does not implement OAuth or serve any/.well-knownendpoint — it only acceptsAuthorization: Bearer sk-msds-...orX-Api-Keypassthrough. If you self-host the core directly, use a static API key; there is no browser sign-in step.
Claude Code (Remote — recommended):
Then run /mcp in Claude Code and authenticate — a browser opens to sign in (email
code); your account is provisioned automatically and calls are metered to you (free
plan includes a monthly free quota). The legacy SSE endpoint
(--transport sse https://mcp.lagentbot.com/sse) still works but streamable
HTTP is preferred.
Claude Code (Plugin — includes skill + MCP):
Claude Code (npm — remote, shim registers the hosted endpoint):
claude.ai (Web): Search "msds-chain" in Settings > Plugins (already published).
Manual config (Claude Code ~/.claude.json):
Restart Claude Code, run /mcp, and authenticate (OAuth). You should then see
msds-chain in the MCP tools list. (Prefer a static key instead of OAuth? Pass it as
a header — --header "Authorization: Bearer sk-msds-your-key" — for headless clients.)
The /msds-safety-check skill provides auto-detection and guided audit workflows.
Plugin install (includes skill + MCP automatically):
Manual install (skill only, if MCP already configured):
/msds-safety-check — guided audit for lab protocols or EHS complianceEach 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?" | Hazard changes between the two versions |
batch_safety_check | "Run a full safety check on acetone, methanol, and hexane." | Compatibility matrix + risk warnings |
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 (preferred): https://mcp.lagentbot.com/mcp (streamable HTTP)
The hosted endpoint serves both transports — streamable HTTP (/mcp, preferred) and SSE (/sse, for clients that only speak SSE: 悟空, Dify, Coze, etc.). Calls are metered per authenticated user.
| Transport | Endpoint | Notes |
|---|---|---|
| Streamable HTTP | https://mcp.lagentbot.com/mcp | Preferred — broadest, most robust |
| SSE | https://mcp.lagentbot.com/sse | For SSE-only clients |
Authentication: either OAuth (the client opens a browser sign-in on first connect) or a static header — Authorization: Bearer sk-msds-your-key — for headless clients.
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:
A single server_remote.py process always serves both transports concurrently —
Streamable HTTP at /mcp (recommended for Claude Code 2026+) and SSE at /sse
(compatibility). The MSDS_MCP_TRANSPORT env var is kept for backward compatibility
only; it is ignored at runtime.
Connect from Claude Code:
| 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.
The MCP server connects to the ChainSDS platform for verified safety reasoning.
Test locally with the MCP inspector:
| 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 | Prefer the streamable HTTP endpoint https://mcp.lagentbot.com/mcp (SSE sessions can drop when the server redeploys). Check GET https://mcp.lagentbot.com/health returns {"status":"ok"} — that is the gateway; the core's tool count lives on an internal endpoint that is not publicly reachable, so a missing tools field is expected. |
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 (hosted gateway only — self-hosted core has no OAuth) | Confirm GET https://mcp.lagentbot.com/.well-known/oauth-authorization-server returns 200; the client should auto-discover the authorize/token endpoints. If self-hosting server_remote.py directly, skip OAuth and use a static Authorization: Bearer key instead. |
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 chemicalsmcp.lagentbot.com, not by this core server)MIT
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.