agentlair

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

Should I use this

Quality & Safety

A
Description quality
97%
Schema completeness
85%
Naming quality
85%
Poisoning risk
100%
Permission match
100%
Protocol compliance
100%

Based on automated analysis of tool definitions and protocol compliance.

Context Cost

~1,634Tokens (tool definitions)
~818 BTypical response size
Moderate attention impact (1.28% of 128k context)

This is the approximate number of tokens consumed each time the server's tools are loaded into a model's context. Higher counts reduce the attention available for other tasks.

Install

One-Click Install

Add this to your `claude_desktop_config.json` file:

{
  "mcpServers": {
    "agentlair": {
      "command": "npx",
      "args": [
        "@agentlair/mcp"
      ]
    }
  }
}

Runnable packages

npm@agentlair/mcp1.3.0stdio

Remote endpoints

https://agentlair-mcp-server.amdal-dev.workers.dev/mcpstreamable-http

What it can do

Tool inventory

Tools (15)

🟢 Read-only🟡 Write🔴 Delete⚪ Unknown
🟡send_email(from, to, subject, text, html, ...)

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

Input Schema

{
  "type": "object",
  "properties": {
    "from": {
      "type": "string",
      "description": "Sender address — must be an @agentlair.dev address you own (e.g. [email protected])"
    },
    "to": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "Array of recipient email addresses"
    },
    "subject": {
      "type": "string",
      "description": "Email subject line"
    },
    "text": {
      "type": "string",
      "description": "Plain text body of the email"
    },
    "html": {
      "type": "string",
      "description": "Optional HTML body (supplement to text)"
    },
    "cc": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "Optional CC recipient addresses"
    }
  },
  "required": [
    "from",
    "to",
    "subject",
    "text"
  ]
}
🟢check_inbox(address, limit)

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

Input Schema

{
  "type": "object",
  "properties": {
    "address": {
      "type": "string",
      "description": "The @agentlair.dev address to check (e.g. [email protected])"
    },
    "limit": {
      "type": "number",
      "description": "Max number of messages to return (default: 10, max: 50)"
    }
  },
  "required": [
    "address"
  ]
}
🟢read_message(message_id, address)

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

Input Schema

{
  "type": "object",
  "properties": {
    "message_id": {
      "type": "string",
      "description": "The message_id from check_inbox (angle brackets will be stripped automatically)"
    },
    "address": {
      "type": "string",
      "description": "The @agentlair.dev address this message was delivered to"
    }
  },
  "required": [
    "message_id",
    "address"
  ]
}
🟢list_addresses

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

Input Schema

{
  "type": "object",
  "properties": {},
  "required": []
}
⚪claim_address(address)

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

Input Schema

{
  "type": "object",
  "properties": {
    "address": {
      "type": "string",
      "description": "The address to claim (must end in @agentlair.dev, e.g. [email protected])"
    }
  },
  "required": [
    "address"
  ]
}
🟢preflight_trust_check(agent_id)

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.

Input Schema

{
  "type": "object",
  "properties": {
    "agent_id": {
      "type": "string",
      "description": "AgentLair agent ID to check (format: acc_<alphanumeric>). Found via the agent's AgentLair profile or DID document."
    }
  },
  "required": [
    "agent_id"
  ]
}
🟡vault_put(key, value, metadata)

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

Input Schema

{
  "type": "object",
  "properties": {
    "key": {
      "type": "string",
      "description": "Vault key name (1-128 chars, alphanumeric + _ - .). Examples: 'openai-key', 'session_token', 'config.json'"
    },
    "value": {
      "type": "string",
      "description": "Value to store. For secrets: encrypt first, then store the ciphertext."
    },
    "metadata": {
      "type": "object",
      "description": "Optional JSON metadata (labels, timestamps, etc.) — never encrypted"
    }
  },
  "required": [
    "key",
    "value"
  ]
}
🟢vault_get(key)

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

Input Schema

{
  "type": "object",
  "properties": {
    "key": {
      "type": "string",
      "description": "Vault key name to retrieve"
    }
  },
  "required": [
    "key"
  ]
}
🟢vault_list

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

Input Schema

{
  "type": "object",
  "properties": {},
  "required": []
}
🔴vault_delete(key)

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

Input Schema

{
  "type": "object",
  "properties": {
    "key": {
      "type": "string",
      "description": "Vault key name to delete"
    }
  },
  "required": [
    "key"
  ]
}
🟡calendar_create_event(summary, start, end, description, location, ...)

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

Input Schema

{
  "type": "object",
  "properties": {
    "summary": {
      "type": "string",
      "description": "Event title / summary (required)"
    },
    "start": {
      "type": "string",
      "description": "Event start time in ISO 8601 format. Date-only (\"2026-03-20\") or datetime (\"2026-03-20T14:00:00Z\")"
    },
    "end": {
      "type": "string",
      "description": "Event end time in ISO 8601 format. Date-only (\"2026-03-21\") or datetime (\"2026-03-20T15:00:00Z\")"
    },
    "description": {
      "type": "string",
      "description": "Optional event description / notes"
    },
    "location": {
      "type": "string",
      "description": "Optional event location (address, URL, or room name)"
    },
    "attendees": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "Optional list of attendee email addresses"
    }
  },
  "required": [
    "summary",
    "start",
    "end"
  ]
}
🟢calendar_list_events(from, to)

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

Input Schema

{
  "type": "object",
  "properties": {
    "from": {
      "type": "string",
      "description": "Optional start of date range filter (ISO 8601, e.g. \"2026-03-01\")"
    },
    "to": {
      "type": "string",
      "description": "Optional end of date range filter (ISO 8601, e.g. \"2026-03-31\")"
    }
  },
  "required": []
}
🔴calendar_delete_event(id)

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

Input Schema

{
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "description": "Event ID to delete (e.g. evt_abc123...)"
    }
  },
  "required": [
    "id"
  ]
}
🟢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.

Input Schema

{
  "type": "object",
  "properties": {},
  "required": []
}
🟡delegate_task(to, task, context, priority, constraints)

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.

Input Schema

{
  "type": "object",
  "properties": {
    "to": {
      "type": "string",
      "description": "Target agent's AgentLair email (e.g. [email protected])"
    },
    "task": {
      "type": "string",
      "description": "What to do — be specific and self-contained. The receiving agent has no context from your conversation."
    },
    "context": {
      "type": "string",
      "description": "Background information the agent needs to execute the task"
    },
    "priority": {
      "type": "string",
      "enum": [
        "low",
        "normal",
        "high",
        "urgent"
      ],
      "description": "Task priority (default: normal)"
    },
    "constraints": {
      "type": "string",
      "description": "Timing constraints, requirements, or limits"
    }
  },
  "required": [
    "to",
    "task"
  ]
}

Community

Rate this Server

Evidence

Recent observations

verifiedversion not recorded15 tools
verifiedversion not recorded15 tools
verifiedversion not recorded15 tools
verifiedversion not recorded15 tools
verifiedversion not recorded15 tools
verifiedversion not recorded15 tools