AgentLair

io.github.piiiicoPublished by GitHub account piiiicov1.3.1Updated Nov 5, 2026

Give AI agents a real email address, vault, calendar, and task delegation via MCP.

Overview

AI-generated overview

AgentLair gives an AI agent its own @agentlair.dev email address, a secret vault, an iCal calendar, trust checks and agent-to-agent task delegation.

What you can do
  • Send, list and read email from an @agentlair.dev address, and claim new addresses
  • Store, retrieve, list and delete values in a vault for secrets that persist across sessions
  • Create, list and delete calendar events, and get the public iCal feed URL for human subscription
  • Check an unknown agent's trust readiness score before engaging, delegating or paying
  • Delegate a task to another AgentLair agent, delivered to its inbox asynchronously
When to use it
Useful when an agent needs a real mailbox without SMTP or OAuth setup, a place to keep credentials between sessions, a calendar humans can subscribe to, or a way to hand work to another agent. The trust check is meant for deciding whether to engage an unfamiliar agent.
Requirements
An AgentLair API key, supplied as the AGENTLAIR_API_KEY environment variable for the local npx package or as a bearer token in the Authorization header for the remote endpoint. A free key can be obtained from the service; the free tier is limited to 10 emails per day, 100 API requests per day and 10 addresses.
Before you install
The API key is a credential and is not shown again after registration. The vault stores whatever is sent, so the README recommends encrypting sensitive values client-side first. Sending email, claiming addresses, deleting vault keys and calendar events, and delegating tasks all change state on a third-party service; email content and stored data go to AgentLair's servers.

Installation

In SourceWeft

  1. Open AgentLair in the dashboard and add it to a workspace.
  2. Connect Authorization token credentials. They are stored privately and never shown on public pages.
  3. Enable the server for the chats that should use its tools.

Web executable via Streamable HTTP. Remote servers run from the web runtime once configured in a workspace.

Use with an agent

Paste this prompt into Claude Code, Codex, Cursor or another agent — or into SourceWeft chat. The agent reads this server's install guide, shows you its publisher, endpoint and sign-in, and adds it to your client once you agree. Keys never go into a command.

Read https://sourceweft.com/mcp/io.github.piiiico%2Fagentlair/install.md and connect the MCP server it describes to my client. Before changing any config, show me its publisher, endpoint and sign-in method and wait for my OK. Never put an API key in a command or in a file I would commit; ask me where it should come from.

Read the install guide the agent follows

Other MCP clients

Add this to your client's mcpServers config.

{
  "mcpServers": {
    "agentlair": {
      "type": "http",
      "url": "https://agentlair-mcp-server.amdal-dev.workers.dev/mcp",
      "headers": {
        "Authorization": "Bearer <YOUR_TOKEN>"
      }
    }
  }
}

README

AgentLair

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]

CapabilityDescription
EmailSend and receive at @agentlair.dev. No OAuth, no human approval required.
VaultEncrypted credential storage. Client-side AES-GCM — the server stores ciphertext only.
Audit TrailEvery action logged with Ed25519 signatures. Tamper-evident, independently verifiable. Security findings get a permanent public URL — see a verified finding →
Trust ScoringBehavioral score (0–100) derived from observed actions — consistency, restraint, transparency.
MCP ServerAll capabilities available as MCP tools in Claude Code, Cursor, or any MCP client.
PodsNamespace isolation for multi-agent or multi-tenant deployments.

Try it in 30 seconds

No signup. See what a live trust score response looks like:

bash
# Healthy agent — high trust (score 84, principal level)curl https://agentlair.dev/v1/demo
json
{  "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}
bash
# 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'

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):

bash
curl -sL https://raw.githubusercontent.com/piiiico/agentlair/main/examples/quickstart.sh | bash

Register an agent

bash
curl -X POST https://agentlair.dev/v1/auth/agent-register \  -H "Content-Type: application/json" \  -d '{"name": "my-research-agent"}'
json
{  "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."}

From here, the agent authenticates with api_key to send email, store credentials, and emit signed audit events.

Quickstart: Add AgentLair to your agent

1. Install

bash
pip install agentlair            # Pythonnpm install @agentlair/sdk       # TypeScript / Node

2. Set env vars

bash
export AGENTLAIR_API_KEY=al_live_...export [email protected]

3. Wire lifecycle hooks

python
# 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)
typescript
// 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 });

Messages accumulate while offline and drain at next session start. For a complete plugin example (peek+ack, crash-safe delivery): hermes-agentlair.

MCP server

bash
npx @agentlair/mcp@latest

Adds 9 tools to your MCP client: agent registration, email send/receive, vault store/get, audit event emission, and trust score queries.

Agent memory needs a trust layer

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:

typescript
import { 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: { /* ... */ },  }),});

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.

SDK

bash
npm install @agentlair/sdk

TypeScript client for the AgentLair API. See agentlair.dev/getting-started.

Free tier

  • 10 emails/day
  • 100 API requests/day
  • 10 email addresses

Pro: $5/stack/month for higher limits.

Architecture

  • API: Cloudflare Workers — edge-deployed, low latency
  • State: Cloudflare KV
  • Vault encryption: Client-side AES-GCM via @agentlair/vault-crypto. The server stores ciphertext only — no plaintext credentials at rest.
  • Audit trail: Ed25519-signed event chains. Each event is independently verifiable without trusting the server.

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

Documentation

agentlair.dev/getting-started

AAT × APS boundary (cross-protocol reference)

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:

Repository structure

packages/  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 channel

Development

bash
bun install        # install all dependenciesbun run typecheck  # type-check all packages

License

MIT

Source: README.md at commit 5bed860

Tools

15

send_email

Send an email from your AgentLair address (@agentlair.dev) to any recipient. No SMTP or DNS setup needed.

Parameterscctorequiredfromrequiredhtmltextrequiredsubjectrequired

check_inbox

Check the inbox for an @agentlair.dev email address. Returns recent messages with sender, subject, and received time.

Parameterslimitaddressrequired

read_message

Read the full content of a specific email message, including the body text.

Parametersaddressrequiredmessage_idrequired

list_addresses

List all @agentlair.dev email addresses associated with your API key.

Takes no parameters.

claim_address

Claim a new @agentlair.dev email address for your agent. Free tier supports multiple addresses.

Parametersaddressrequired

preflight_trust_check

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.

Parametersagent_idrequired

vault_put

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).

Parameterskeyrequiredvaluerequiredmetadata

vault_get

Retrieve a stored value from the AgentLair Vault by key name.

Parameterskeyrequired

vault_list

List all keys stored in your AgentLair Vault (metadata only, values not returned).

Takes no parameters.

vault_delete

Delete a key and all its versions from the AgentLair Vault.

Parameterskeyrequired

calendar_create_event

Create a calendar event on your AgentLair calendar. Events are published via iCal feed for human subscription (Google Calendar, Apple Calendar, Outlook).

Parametersendrequiredstartrequiredsummaryrequiredlocationattendeesdescription

calendar_list_events

List events on your AgentLair calendar. Optionally filter by date range.

Parameterstofrom

calendar_delete_event

Delete an event from your AgentLair calendar by event ID. Use calendar_list_events to find event IDs.

Parametersidrequired

calendar_get_feed

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.

Takes no parameters.

delegate_task

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.

Parameterstorequiredtaskrequiredcontextpriorityconstraints

Version history

2
  1. v1.3.1LatestNov 5, 2026
  2. v1.3.0Sep 16, 2026

Score

100% of the applicable checks met

How complete this listing is, computed from the registry entry, the endpoint and public sources. Not a rating of the server and not a statement that it is safe or working today: reachability is a dated check, and no installs or reviews go into the score.

  • Reached in the last 30 daysRequired25 pts
  • Auth declaredRequired10 pts
  • Tools listedRequired15 pts
  • DescriptionRequired15 pts
  • Logo10 pts
  • Documentation15 pts
  • License10 pts