agentsclimarketplace

Agentmail lite

Skill fnord123/hermes-skills/agentmail-lite

Skills for use with Hermes that work with local models

Install
npx -y skills add fnord123/hermes-skills --skill agentmail-lite

Assembled from the repository path, not quoted from the project. Check it against their README if it does not work.

One thing to look at

  • 1 stars1 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.

What its author says it does

Copied from the file, not written here

Manage an existing AgentMail inbox — read mail, send mail, reply, forward, organize via labels, and trash messages. Use when the user asks to check email, read a message, reply, send a new email, forward, search the inbox, trash/delete an email, mark a message read/unread, or organize via labels. Activate for any mention of agentmail.to or "@agentmail.to" or "the agent's inbox." This skill manages an inbox the user has already created; it does not create or delete inboxes.

The file declares its own license as MIT. That is the author’s claim about this one file, and it is not the same thing as the license GitHub reports for the repository, which is listed with the other numbers below.

SKILL.md

5.6 KB, as published. Nobody here has run it

AgentMail — agent-owned email management

Manage an existing AgentMail inbox via MCP: read threads, send/reply/forward, and organize messages with labels (including trashing).

This skill is NOT for reading the user's personal email (Gmail, Outlook, etc.). For that, use himalaya, Gmail, or similar. AgentMail provides agent-owned inboxes, distinct from the user's personal mail.

Available Tools

All tools are MCP-typed and called via the registered names mcp_agentmail_<name>.

ToolPurpose
list_inboxesList all inboxes available to this API key. Use to discover the user's inbox on first run.
get_inboxGet metadata (email address, display name, timestamps) for one inbox. Rarely needed.
list_threadsList email threads in an inbox. Supports pagination and filters.
get_threadGet a specific thread's full message contents.
get_attachmentDownload an email attachment by ID.
send_messageSend a new email from the agent's inbox.
reply_to_messageReply to an existing message in a thread.
forward_messageForward a message to another address.
update_messageAdd/remove labels on a message. This is also how you trash messages (see below).

Bootstrap procedure (do this on first call)

Whenever this skill activates and the agent does not already know which inbox_id to use:

  1. Call list_inboxes.
  2. If exactly one inbox is returned: use its inbox_id for all subsequent calls. Mention the email address to the user once for confirmation, then proceed.
  3. If more than one inbox is returned: show the user the list and ask which one to use. Cache the choice for the rest of the session.
  4. If zero inboxes are returned: tell the user no inbox exists for this API key, and direct them to https://console.agentmail.to to create one.

Common Operations

All operations below use the typed mcp_agentmail_* tools. Do not substitute curl, fetch, wget, Python requests, or any other HTTP client. The MCP tools are the only sanctioned path; they handle networking, auth, and schema for you.

Read recent mail

list_threads(inbox_id=<id>, limit=20)
→ for any thread the user is interested in:
get_thread(inbox_id=<id>, thread_id=<thread_id>)

Send a new email

send_message(
    inbox_id=<id>,
    to=["[email protected]"],
    subject="...",
    text="...",            # or html="..."
)

Reply to a message

get_thread(inbox_id=<id>, thread_id=<thread_id>)        # find the message_id
reply_to_message(
    inbox_id=<id>,
    message_id=<message_id>,
    text="...",
)

Forward a message

forward_message(
    inbox_id=<id>,
    message_id=<message_id>,
    to=["[email protected]"],
    text="optional cover note",
)

Trash (delete) a message

AgentMail has no delete_message tool. Deletion is achieved by adding the lowercase label trash to the message via update_message:

update_message(
    inbox_id=<id>,
    message_id=<message_id>,
    add_labels=["trash"],
)

The label is lowercase trash — not Trash, not TRASH.

If the message is already in trash and update_message is called again with add_labels=["trash"], AgentMail will permanently delete it server-side. So the first call moves to trash; the second call is the hard delete. For most "delete this email" requests, one call is what the user wants.

To trash an entire thread, fetch its messages with get_thread and apply update_message to each.

Mark unread / starred / custom labels

update_message accepts arbitrary label strings. AgentMail's documented system label is trash; user-defined labels (e.g. processed, archive, important) are arbitrary and case-sensitive. Use remove_labels to strip them.

Notes

  • Never make outbound HTTP requests to AgentMail. No curl, wget, fetch, Python requests, JS fetch, or any other HTTP client. All AgentMail operations go through the registered mcp_agentmail_* tools — those handle auth, pagination, schema, and error mapping for you.
  • Never invoke agentmail-mcp from a terminal/shell tool. It is a stdio MCP server, not a CLI. Running it via terminal would launch a duplicate process with no JSON-RPC peer; it would hang and produce nothing useful. Use the typed mcp_agentmail_* tools instead.
  • Don't guess label names. AgentMail's only documented system label is trash (lowercase). For anything else, use a label the user has explicitly mentioned.
  • trash applied twice = permanent delete. Server-side semantic — useful for cleanup, dangerous if invoked accidentally.
  • Pagination on list_threads. Default page size may not show all recent mail. Increase limit or paginate if the user expects to see something not in the first response.
  • The MCP server registers 4 framework tools (list_resources, read_resource, list_prompts, get_prompt) regardless of --tools. They are inert and safe to ignore.

Keep looking

Skills are one crate of 328,083. Ordering is by how many stacks a row turns up in, so the top of any crate is what has actually been picked rather than what has the most stars.