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