send_email
Send an email from your AgentLair address (@agentlair.dev) to any recipient. No SMTP or DNS setup needed.
ccto必填from必填htmltext必填subject必填
io.github.piiiico由 GitHub 帳號 piiiico 發布v1.3.1更新於 Nov 5, 2026
Give AI agents a real email address, vault, calendar, and task delegation via MCP.
AgentLair 讓 AI 代理擁有自己的 @agentlair.dev 信箱、密鑰保管庫、iCal 行事曆、信任檢查與代理間任務委派能力。
Web executable,透過 Streamable HTTP。 遠端服務在工作區中設定後即可從網頁執行環境執行。
把這段提示詞貼上到 Claude Code、Codex、Cursor 等代理程式,或 SourceWeft 對話中。代理程式會讀取該伺服器的安裝指南,先向你展示發布者、端點和登入方式,經你同意後再把它新增到你的客戶端。金鑰不會寫進任何命令。
閱讀 https://sourceweft.com/mcp/io.github.piiiico%2Fagentlair/install.md,並按其中說明把這個 MCP 伺服器接入我的客戶端。修改任何設定之前,先告訴我它的發布者、端點和登入方式,等我確認。不要把 API 金鑰寫進命令或我會提交的檔案;問我金鑰應從哪裡取得。把它新增到你客戶端的 mcpServers 設定中。
{
"mcpServers": {
"agentlair": {
"type": "http",
"url": "https://agentlair-mcp-server.amdal-dev.workers.dev/mcp",
"headers": {
"Authorization": "Bearer <YOUR_TOKEN>"
}
}
}
}Give your AI agent an email address, encrypted vault, and a behavioral trust score — one API, no OAuth required.
[npm: @agentlair/mcp] [npm: @agentlair/sdk]
No signup. See what a live trust score response looks like:
Rate limited to 10 requests/minute per IP. Response shape matches the live /v1/trust/:agentId endpoint.
Full interactive demo — register a real agent, submit observations, get a live trust score (curl + jq, ~60 seconds):
From here, the agent authenticates with api_key to send email, store credentials, and emit signed audit events.
1. Install
2. Set env vars
3. Wire lifecycle hooks
Messages accumulate while offline and drain at next session start. For a complete plugin example (peek+ack, crash-safe delivery): hermes-agentlair.
Adds 9 tools to your MCP client: agent registration, email send/receive, vault store/get, audit event emission, and trust score queries.
Agent memory is real infrastructure. 4-tier memory hierarchies, multi-agent leases, 51+ MCP tools for storing and retrieving across agent sessions. When multiple agents share a memory pool, the category works.
The gap: any agent can write anything to shared memory. No verification of who wrote what, no way to audit contested state, no trust gating on destructive writes. A shared memory pool without identity is a notepad anyone can scribble on.
Every write should be attributable. AgentLair's Agent Attestation Token (AAT) is a short-lived EdDSA JWT carrying the agent's did:web identity and behavioral trust score. Present it as the Authorization header in a memory write — the write is now cryptographically signed and auditable:
The memory server verifies the AAT via standard JWKS — no AgentLair SDK required on the receiving side. The al_trust claim lets it gate writes by behavioral trust level (e.g., reject writes from agents below junior).
Without AATs: shared memory = shared notepad. Any agent writes anything, contested state has no provenance.
With AATs: shared memory = trust graph. Every write is signed, attributed, and auditable.
TypeScript client for the AgentLair API. See agentlair.dev/getting-started.
Pro: $5/stack/month for higher limits.
@agentlair/vault-crypto. The server stores ciphertext only — no plaintext credentials at rest.We've been running our own agent infrastructure on AgentLair in production. Notes on what broke and what we learned building behavioral trust scoring: agentlair.dev/blog/from-0-to-41-building-behavioral-trust-in-production
AgentLair AAT is session identity inside the issuer. AEOESS APS is delegation chains and bilateral receipts after handoff. Three claims bridge the two layers: jti (session anchor on the APS receipt), al_nid (one Ed25519 key signs AATs and APS receipts), and al_trust (issuer-attested behavioral snapshot at iat, available for downgrade-on-import on the APS verifier side).
Jointly maintained reference:
MIT
來源:README.md,提交 5bed860
Send an email from your AgentLair address (@agentlair.dev) to any recipient. No SMTP or DNS setup needed.
ccto必填from必填htmltext必填subject必填Check the inbox for an @agentlair.dev email address. Returns recent messages with sender, subject, and received time.
limitaddress必填Read the full content of a specific email message, including the body text.
address必填message_id必填List all @agentlair.dev email addresses associated with your API key.
無需輸入參數。
Claim a new @agentlair.dev email address for your agent. Free tier supports multiple addresses.
address必填Check trust readiness before engaging with an agent. Returns a ReadinessCard: trust score, behavioral maturity level, whether it's safe to engage, and any caveats. Call this before delegating tasks, accepting agent output, or authorizing payments involving an unknown agent. Free — no extra charge beyond your API key.
agent_id必填Store a value in the AgentLair Vault. Use this to persist API keys, secrets, or any data your agent needs across sessions. Best practice: encrypt sensitive data client-side before storing (the server stores whatever you send).
key必填value必填metadataRetrieve a stored value from the AgentLair Vault by key name.
key必填List all keys stored in your AgentLair Vault (metadata only, values not returned).
無需輸入參數。
Delete a key and all its versions from the AgentLair Vault.
key必填Create a calendar event on your AgentLair calendar. Events are published via iCal feed for human subscription (Google Calendar, Apple Calendar, Outlook).
end必填start必填summary必填locationattendeesdescriptionList events on your AgentLair calendar. Optionally filter by date range.
tofromDelete an event from your AgentLair calendar by event ID. Use calendar_list_events to find event IDs.
id必填Get the public iCal subscription URL for your AgentLair calendar. Share this URL with calendar apps (Google Calendar, Apple Calendar, Outlook) so humans can subscribe and see agent-created events.
無需輸入參數。
Delegate a task to another AgentLair agent. The task is delivered to the agent's inbox and picked up asynchronously. Use this when you need another agent to do something — send an email, run a deployment, do research, etc.
to必填task必填contextpriorityconstraints已滿足適用檢查項的 100%
該評分衡量此收錄條目的完整程度,依據註冊中心條目、端點與公開來源計算得出。它不是對伺服器本身的評價,也不表示伺服器安全或目前可用:可連通性是帶日期的檢查結果,評分也不包含安裝量或使用者評價。
# Healthy agent — high trust (score 84, principal level)curl https://agentlair.dev/v1/demo{ "agentId": "acc_demo_healthy_XXXXXXXXXX", "score": 84, "confidence": 0.91, "atfLevel": "principal", "trend": "stable", "dimensions": { "consistency": { "score": 0.82 }, "restraint": { "score": 0.87 }, "transparency": { "score": 0.80 } }, "observationCount": 1847}# Suspicious agent — score 31, declining trendcurl 'https://agentlair.dev/v1/demo?scenario=suspicious'
# New agent — only 11 observations, wide confidence intervalcurl 'https://agentlair.dev/v1/demo?scenario=new'curl -sL https://raw.githubusercontent.com/piiiico/agentlair/main/examples/quickstart.sh | bashcurl -X POST https://agentlair.dev/v1/auth/agent-register \ -H "Content-Type: application/json" \ -d '{"name": "my-research-agent"}'{ "api_key": "al_live_...", "account_id": "acc_...", "email_address": "[email protected]", "tier": "free", "limits": { "emails_per_day": 10, "requests_per_day": 100 }, "warning": "Save your API key — it will not be shown again."}pip install agentlair # Pythonnpm install @agentlair/sdk # TypeScript / Nodeexport AGENTLAIR_API_KEY=al_live_...export [email protected]# Python — three integration pointsimport os, agentlairlair = agentlair.AgentLair(os.environ["AGENTLAIR_API_KEY"])addr = os.environ["AGENTLAIR_EMAIL"]
async def on_session_start(ctx): result = await lair.email.inbox(addr) if result["messages"]: ctx.prepend(f"Inbox: {len(result['messages'])} unread")
async def send_message(to, subject, text): # expose as LLM tool await lair.email.send(from_address=addr, to=to, subject=subject, text=text)
async def on_session_end(ctx): # advance cursor so messages aren't re-delivered if ctx.last_message_id: await lair.vault.store("inbox_cursor", ctx.last_message_id)// TypeScriptimport { AgentLair } from '@agentlair/sdk';const lair = new AgentLair(process.env.AGENTLAIR_API_KEY!);const addr = process.env.AGENTLAIR_EMAIL!;
// Session start — drain inbox before planningconst { messages } = await lair.email.inbox(addr);if (messages.length) context.prepend(`Inbox: ${messages.length} pending`);
// Expose as tool — let the LLM send repliesconst sendMessage = (to: string, subject: string, text: string) => lair.email.send({ from: addr, to, subject, text });npx @agentlair/mcp@latestimport { AgentLair } from '@agentlair/sdk';
const lair = new AgentLair(process.env.AGENTLAIR_API_KEY!);
// Issue a short-lived AAT (5 min) scoped to the memory serverconst { token } = await lair.tokens.issue({ audience: 'memory.internal', ttl: 300, scopes: ['memory:write'],});
// Write to shared memory — this write is now attributed and trust-gatedawait fetch('https://memory.internal/mcp/memory/write', { method: 'POST', headers: { 'Authorization': `Bearer ${token}`, // signed agent identity 'Content-Type': 'application/json', }, body: JSON.stringify({ key: 'research/competitor-analysis', value: { /* ... */ }, }),});npm install @agentlair/sdkpackages/ worker/ — Core API worker (Cloudflare Workers) sdk/ — @agentlair/sdk client library mcp-server/ — @agentlair/mcp MCP server vault-crypto/ — @agentlair/vault-crypto end-to-end encryption verify/ — @agentlair/verify AAT token verification email-worker/ — Email processing worker
apps/ dashboard/ — Agent dashboard UI email-channel/ — Email MCP channelbun install # install all dependenciesbun run typecheck # type-check all packages