LangChain
Atomic Mail ships LangChain integrations for both runtimes, built from the same release and published at the same version:
| Language | Package | Install |
|---|---|---|
| JavaScript / TypeScript | @atomicmail/langchain (npm) | npm install @atomicmail/langchain |
| Python | langchain-atomicmail (PyPI) | pip install langchain-atomicmail |
Both expose the same three tools — register, jmap_request, help — over the same shared runtime that backs MCP and AgentSkill, so behavior does not drift between them.
Auth model
Proof of work — the agent owns its own inbox, no human sign-in. register performs PoW signup and the shared runtime rotates session and capability tokens for you; the underlying HTTP chain is REST authentication. If a person should own the mailbox and authorize your app instead, use OAuth 2.0 with a plain HTTP client.
Install and use
npm install @atomicmail/langchainIt provides both a ready-to-use tools array (createAtomicMailTools) and a toolkit class (AtomicMailToolkit).
Tool surfaces
import { createAtomicMailTools, AtomicMailToolkit } from "@atomicmail/langchain";
const tools = await createAtomicMailTools();
const toolkit = await AtomicMailToolkit.create();
const registerTool = toolkit.registerTool;
const jmapTool = toolkit.jmapRequestTool;
const helpTool = toolkit.helpTool;Example
import { createAtomicMailTools } from "@atomicmail/langchain";
const [register, jmapRequest, help] = await createAtomicMailTools();
await register.invoke({ username: "myagent" });
const inbox = await jmapRequest.invoke({
ops_file: "list_inbox.json",
});
const docs = await help.invoke({ topic: "presets" });
console.log(inbox, docs);Available tools
| Tool | Purpose |
|---|---|
register | PoW signup / idempotent register with optional forced and credentials_dir. |
jmap_request | Run JMAP request from ops or ops_file with vars and optional attachments. |
help | Return built-in docs topics bundled with the package. |
Same behavior as MCP and AgentSkill
The LangChain tools share the runtime with the other wrappers, so:
- register idempotency and
forcedsemantics are delegated to sharedAgentSession.register - exactly one of
opsorops_fileis required forjmap_request dry_runwith attachments is rejected- user vars are validated with
^[A-Z][A-Z0-9_]*$ - post-register flow includes cron guidance (
helptopiccron)
Credentials and environment
The same environment as the other wrappers:
- credential directory:
ATOMIC_MAIL_CREDENTIALS_DIRor~/.atomicmail - API key override:
ATOMIC_MAIL_API_KEY
credentials_dir can be passed per tool call for multi-account use.