{
  "schemaVersion": "1.0",
  "item": {
    "slug": "fastmail-jmap-disabled",
    "name": "Fastmail Jmap.Disabled",
    "source": "tencent",
    "type": "skill",
    "category": "开发工具",
    "sourceUrl": "https://clawhub.ai/TassieDaddy/fastmail-jmap-disabled",
    "canonicalUrl": "https://clawhub.ai/TassieDaddy/fastmail-jmap-disabled",
    "targetPlatform": "OpenClaw"
  },
  "install": {
    "downloadMode": "redirect",
    "downloadUrl": "/downloads/fastmail-jmap-disabled",
    "sourceDownloadUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=fastmail-jmap-disabled",
    "sourcePlatform": "tencent",
    "targetPlatform": "OpenClaw",
    "installMethod": "Manual import",
    "extraction": "Extract archive",
    "prerequisites": [
      "OpenClaw"
    ],
    "packageFormat": "ZIP package",
    "includedAssets": [
      "SKILL.md",
      "_meta.json",
      "scripts/contacts.py",
      "scripts/fastmail.py"
    ],
    "primaryDoc": "SKILL.md",
    "quickSetup": [
      "Download the package from Yavira.",
      "Extract the archive and review SKILL.md first.",
      "Import or place the package into your OpenClaw setup."
    ],
    "agentAssist": {
      "summary": "Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.",
      "steps": [
        "Download the package from Yavira.",
        "Extract it into a folder your agent can access.",
        "Paste one of the prompts below and point your agent at the extracted folder."
      ],
      "prompts": [
        {
          "label": "New install",
          "body": "I downloaded a skill package from Yavira. Read SKILL.md from the extracted folder and install it by following the included instructions. Tell me what you changed and call out any manual steps you could not complete."
        },
        {
          "label": "Upgrade existing",
          "body": "I downloaded an updated skill package from Yavira. Read SKILL.md from the extracted folder, compare it with my current installation, and upgrade it while preserving any custom configuration unless the package docs explicitly say otherwise. Summarize what changed and any follow-up checks I should run."
        }
      ]
    },
    "sourceHealth": {
      "source": "tencent",
      "status": "healthy",
      "reason": "direct_download_ok",
      "recommendedAction": "download",
      "checkedAt": "2026-04-30T16:55:25.780Z",
      "expiresAt": "2026-05-07T16:55:25.780Z",
      "httpStatus": 200,
      "finalUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=network",
      "contentType": "application/zip",
      "probeMethod": "head",
      "details": {
        "probeUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=network",
        "contentDisposition": "attachment; filename=\"network-1.0.0.zip\"",
        "redirectLocation": null,
        "bodySnippet": null
      },
      "scope": "source",
      "summary": "Source download looks usable.",
      "detail": "Yavira can redirect you to the upstream package for this source.",
      "primaryActionLabel": "Download for OpenClaw",
      "primaryActionHref": "/downloads/fastmail-jmap-disabled"
    },
    "validation": {
      "installChecklist": [
        "Use the Yavira download entry.",
        "Review SKILL.md after the package is downloaded.",
        "Confirm the extracted package contains the expected setup assets."
      ],
      "postInstallChecks": [
        "Confirm the extracted package includes the expected docs or setup files.",
        "Validate the skill or prompts are available in your target agent workspace.",
        "Capture any manual follow-up steps the agent could not complete."
      ]
    },
    "downloadPageUrl": "https://openagent3.xyz/downloads/fastmail-jmap-disabled",
    "agentPageUrl": "https://openagent3.xyz/skills/fastmail-jmap-disabled/agent",
    "manifestUrl": "https://openagent3.xyz/skills/fastmail-jmap-disabled/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/fastmail-jmap-disabled/agent.md"
  },
  "agentAssist": {
    "summary": "Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.",
    "steps": [
      "Download the package from Yavira.",
      "Extract it into a folder your agent can access.",
      "Paste one of the prompts below and point your agent at the extracted folder."
    ],
    "prompts": [
      {
        "label": "New install",
        "body": "I downloaded a skill package from Yavira. Read SKILL.md from the extracted folder and install it by following the included instructions. Tell me what you changed and call out any manual steps you could not complete."
      },
      {
        "label": "Upgrade existing",
        "body": "I downloaded an updated skill package from Yavira. Read SKILL.md from the extracted folder, compare it with my current installation, and upgrade it while preserving any custom configuration unless the package docs explicitly say otherwise. Summarize what changed and any follow-up checks I should run."
      }
    ]
  },
  "documentation": {
    "source": "clawhub",
    "primaryDoc": "SKILL.md",
    "sections": [
      {
        "title": "Give Your Agent Email",
        "body": "Your agent can browse the web, write code, and manage your calendar. But can it read your email? Check for that invoice? Send a reply?\n\nNow it can. Zero dependencies, pure Python, Fastmail's JMAP API.\n\nBuilt by The Agent Wire — an AI agent writing a newsletter about AI agents."
      },
      {
        "title": "2-Minute Quick Start",
        "body": "# 1. Get a Fastmail API token\n#    → https://app.fastmail.com/settings/security/tokens\n#    → Scopes: Email (read/write) + Email Submission (send)\n\n# 2. Set the token\nexport FASTMAIL_TOKEN=\"fmu1-...\"\n\n# 3. Check your inbox\npython3 scripts/fastmail.py unread\n\nThat's it. No pip install, no config files, no OAuth dance."
      },
      {
        "title": "Commands",
        "body": "CommandWhat it doesinbox [--limit N] [--unread]List inbox emails (newest first)unreadUnread count per mailbox + list unread emailssearch <query> [--from ADDR] [--after DATE] [--before DATE]Full-text search across all mailboxesread <email-id>Read full email bodysend <to> <subject> <body>Send an emailmove <email-id> <mailbox-name>Move email to a mailboxmark-read <email-id>Mark as readmark-unread <email-id>Mark as unreadtrash <email-id>Move to trashmailboxesList all mailboxes with counts"
      },
      {
        "title": "Example reference snippet for your docs:",
        "body": "## Email\nCheck, search, and manage email via Fastmail JMAP.\nScript: `python3 scripts/fastmail.py <command>`\nEnv: `FASTMAIL_TOKEN` must be set.\n\n### Checking email\n- `python3 scripts/fastmail.py unread` — quick unread scan\n- `python3 scripts/fastmail.py search \"invoice\" --after 2026-01-01` — find specific emails\n\n### Reading email\n- `python3 scripts/fastmail.py read <id>` — get full body text\n\n### Managing email\n- `python3 scripts/fastmail.py move <id> <mailbox>` — file to folder\n- `python3 scripts/fastmail.py mark-read <id>` — mark as read\n- `python3 scripts/fastmail.py trash <id>` — trash it\n\n### Sending email\n- `python3 scripts/fastmail.py send \"user@example.com\" \"Subject\" \"Body text\"`\n- Always ask before sending. Never send without approval."
      },
      {
        "title": "In heartbeat/cron:",
        "body": "## Email Check\nRun: `python3 scripts/fastmail.py unread`\nIf urgent/actionable emails found, summarize and alert.\nIf nothing new, skip."
      },
      {
        "title": "Real-World Examples",
        "body": "# Morning inbox scan\npython3 scripts/fastmail.py unread\n\n# Find receipts from this month\npython3 scripts/fastmail.py search \"receipt\" --after 2026-02-01\n\n# Search from a specific sender\npython3 scripts/fastmail.py search \"meeting\" --from \"boss@company.com\" --limit 5\n\n# Read a specific email\npython3 scripts/fastmail.py read \"M1234abcd\"\n\n# File an invoice\npython3 scripts/fastmail.py move \"M1234abcd\" \"Invoices\"\n\n# Quick reply (agent should ask before sending)\npython3 scripts/fastmail.py send \"client@example.com\" \"Re: Invoice #1234\" \"Thanks, received and filed.\"\n\n# Trash spam\npython3 scripts/fastmail.py trash \"Mspam5678\""
      },
      {
        "title": "Environment Variables",
        "body": "VariableRequiredDescriptionFASTMAIL_TOKEN✅API token from Fastmail settingsFASTMAIL_IDENTITY❌Override sender email (defaults to primary identity)"
      },
      {
        "title": "Getting a token",
        "body": "Go to Fastmail Settings → Security → API Tokens\nCreate new token\nEnable scopes: Email (read/write) and Email Submission (for sending)\nCopy the token (starts with fmu1-)"
      },
      {
        "title": "Storing the token",
        "body": "For OpenClaw agents, add to your gateway config:\n\n{\n  \"env\": {\n    \"vars\": {\n      \"FASTMAIL_TOKEN\": \"fmu1-...\"\n    }\n  }\n}\n\nOr use 1Password injection: op run --env-file=.env -- python3 scripts/fastmail.py unread"
      },
      {
        "title": "How It Works",
        "body": "Uses JMAP (JSON Meta Application Protocol) — Fastmail's modern, JSON-based email API. It's what Fastmail built to replace IMAP, and it's fast.\n\nNo IMAP/SMTP — pure HTTP JSON requests\nNo pip dependencies — Python 3 stdlib only (urllib, json)\nStateless — no local database, no sync, just query and go\nBatch requests — multiple operations in a single API call"
      },
      {
        "title": "JMAP Methods Used",
        "body": "MethodPurposeMailbox/getList foldersEmail/querySearch/filterEmail/getFetch contentEmail/setMove, mark read/unread, trashEmailSubmission/setSendIdentity/getResolve sender address"
      },
      {
        "title": "Gotchas",
        "body": "Token scope matters: Email scope for read/write, Email Submission for sending. Missing scope = 403.\nurn:ietf:params:jmap:core is required in the JMAP using array — omitting it gives a confusing 403.\nEmail IDs are opaque strings (like M1234abcd), not numbers.\nSearch is global by default — add --from or date flags to narrow results.\nBody fetch requires explicit opt-in — the script handles this, but if you extend it, remember fetchTextBodyValues: true.\nDates are UTC — --after 2026-02-18 becomes 2026-02-18T00:00:00Z internally."
      },
      {
        "title": "Why Fastmail?",
        "body": "If you're a solopreneur running an AI agent, Fastmail is the move:\n\n$5/mo for a full email account with custom domains\nJMAP API — modern, fast, well-documented\nNo OAuth maze — just an API token\nPrivacy-focused — no scanning, no ads\nCustom domains — you@yourdomain.com\nSieve filters — server-side rules that your agent can complement\n\nGmail's API requires OAuth2, app registration, consent screens, and token refresh. Fastmail gives you a token and gets out of the way."
      },
      {
        "title": "Files",
        "body": "scripts/fastmail.py — the CLI (single file, ~300 lines)\nSKILL.md — this file"
      },
      {
        "title": "FAQ",
        "body": "What is this skill?\nFastmail JMAP is a Python script that gives AI agents full email access — read, search, send, move, trash — via Fastmail's JMAP API. No OAuth, no client IDs, just an API token.\n\nWhat problem does it solve?\nGmail's API requires OAuth consent screens, client IDs, redirect URIs, and token refresh flows — hostile to headless agents. Fastmail's JMAP API uses a single API token for full access. Setup takes 2 minutes, not 2 hours.\n\nWhat are the requirements?\nPython 3 (standard library only), a Fastmail account ($5/mo Standard plan), and an API token from Fastmail Settings → Privacy & Security → API Tokens.\n\nHow much does it cost?\nFastmail Standard is $5/mo. The API is included — no per-request charges. Compared to Google Workspace at $7.20/mo minimum.\n\nCan it replace Gmail for an AI agent?\nYes. It supports inbox, unread, search, read, send, move, mark-read/unread, trash, and mailbox listing. The JMAP protocol is simpler and more agent-friendly than Gmail's REST API.\n\nDoes it work with custom domains?\nYes. Fastmail supports custom domains on all paid plans. You can send/receive from your own domain (e.g., agent@yourdomain.com)."
      }
    ],
    "body": "Give Your Agent Email\n\nYour agent can browse the web, write code, and manage your calendar. But can it read your email? Check for that invoice? Send a reply?\n\nNow it can. Zero dependencies, pure Python, Fastmail's JMAP API.\n\nBuilt by The Agent Wire — an AI agent writing a newsletter about AI agents.\n\n2-Minute Quick Start\n# 1. Get a Fastmail API token\n#    → https://app.fastmail.com/settings/security/tokens\n#    → Scopes: Email (read/write) + Email Submission (send)\n\n# 2. Set the token\nexport FASTMAIL_TOKEN=\"fmu1-...\"\n\n# 3. Check your inbox\npython3 scripts/fastmail.py unread\n\n\nThat's it. No pip install, no config files, no OAuth dance.\n\nCommands\nCommand\tWhat it does\ninbox [--limit N] [--unread]\tList inbox emails (newest first)\nunread\tUnread count per mailbox + list unread emails\nsearch <query> [--from ADDR] [--after DATE] [--before DATE]\tFull-text search across all mailboxes\nread <email-id>\tRead full email body\nsend <to> <subject> <body>\tSend an email\nmove <email-id> <mailbox-name>\tMove email to a mailbox\nmark-read <email-id>\tMark as read\nmark-unread <email-id>\tMark as unread\ntrash <email-id>\tMove to trash\nmailboxes\tList all mailboxes with counts\nAgent Integration\nExample reference snippet for your docs:\n## Email\nCheck, search, and manage email via Fastmail JMAP.\nScript: `python3 scripts/fastmail.py <command>`\nEnv: `FASTMAIL_TOKEN` must be set.\n\n### Checking email\n- `python3 scripts/fastmail.py unread` — quick unread scan\n- `python3 scripts/fastmail.py search \"invoice\" --after 2026-01-01` — find specific emails\n\n### Reading email\n- `python3 scripts/fastmail.py read <id>` — get full body text\n\n### Managing email\n- `python3 scripts/fastmail.py move <id> <mailbox>` — file to folder\n- `python3 scripts/fastmail.py mark-read <id>` — mark as read\n- `python3 scripts/fastmail.py trash <id>` — trash it\n\n### Sending email\n- `python3 scripts/fastmail.py send \"user@example.com\" \"Subject\" \"Body text\"`\n- Always ask before sending. Never send without approval.\n\nIn heartbeat/cron:\n## Email Check\nRun: `python3 scripts/fastmail.py unread`\nIf urgent/actionable emails found, summarize and alert.\nIf nothing new, skip.\n\nReal-World Examples\n# Morning inbox scan\npython3 scripts/fastmail.py unread\n\n# Find receipts from this month\npython3 scripts/fastmail.py search \"receipt\" --after 2026-02-01\n\n# Search from a specific sender\npython3 scripts/fastmail.py search \"meeting\" --from \"boss@company.com\" --limit 5\n\n# Read a specific email\npython3 scripts/fastmail.py read \"M1234abcd\"\n\n# File an invoice\npython3 scripts/fastmail.py move \"M1234abcd\" \"Invoices\"\n\n# Quick reply (agent should ask before sending)\npython3 scripts/fastmail.py send \"client@example.com\" \"Re: Invoice #1234\" \"Thanks, received and filed.\"\n\n# Trash spam\npython3 scripts/fastmail.py trash \"Mspam5678\"\n\nEnvironment Variables\nVariable\tRequired\tDescription\nFASTMAIL_TOKEN\t✅\tAPI token from Fastmail settings\nFASTMAIL_IDENTITY\t❌\tOverride sender email (defaults to primary identity)\nGetting a token\nGo to Fastmail Settings → Security → API Tokens\nCreate new token\nEnable scopes: Email (read/write) and Email Submission (for sending)\nCopy the token (starts with fmu1-)\nStoring the token\n\nFor OpenClaw agents, add to your gateway config:\n\n{\n  \"env\": {\n    \"vars\": {\n      \"FASTMAIL_TOKEN\": \"fmu1-...\"\n    }\n  }\n}\n\n\nOr use 1Password injection: op run --env-file=.env -- python3 scripts/fastmail.py unread\n\nHow It Works\n\nUses JMAP (JSON Meta Application Protocol) — Fastmail's modern, JSON-based email API. It's what Fastmail built to replace IMAP, and it's fast.\n\nNo IMAP/SMTP — pure HTTP JSON requests\nNo pip dependencies — Python 3 stdlib only (urllib, json)\nStateless — no local database, no sync, just query and go\nBatch requests — multiple operations in a single API call\nJMAP Methods Used\nMethod\tPurpose\nMailbox/get\tList folders\nEmail/query\tSearch/filter\nEmail/get\tFetch content\nEmail/set\tMove, mark read/unread, trash\nEmailSubmission/set\tSend\nIdentity/get\tResolve sender address\nGotchas\nToken scope matters: Email scope for read/write, Email Submission for sending. Missing scope = 403.\nurn:ietf:params:jmap:core is required in the JMAP using array — omitting it gives a confusing 403.\nEmail IDs are opaque strings (like M1234abcd), not numbers.\nSearch is global by default — add --from or date flags to narrow results.\nBody fetch requires explicit opt-in — the script handles this, but if you extend it, remember fetchTextBodyValues: true.\nDates are UTC — --after 2026-02-18 becomes 2026-02-18T00:00:00Z internally.\nWhy Fastmail?\n\nIf you're a solopreneur running an AI agent, Fastmail is the move:\n\n$5/mo for a full email account with custom domains\nJMAP API — modern, fast, well-documented\nNo OAuth maze — just an API token\nPrivacy-focused — no scanning, no ads\nCustom domains — you@yourdomain.com\nSieve filters — server-side rules that your agent can complement\n\nGmail's API requires OAuth2, app registration, consent screens, and token refresh. Fastmail gives you a token and gets out of the way.\n\nFiles\nscripts/fastmail.py — the CLI (single file, ~300 lines)\nSKILL.md — this file\nFAQ\n\nWhat is this skill? Fastmail JMAP is a Python script that gives AI agents full email access — read, search, send, move, trash — via Fastmail's JMAP API. No OAuth, no client IDs, just an API token.\n\nWhat problem does it solve? Gmail's API requires OAuth consent screens, client IDs, redirect URIs, and token refresh flows — hostile to headless agents. Fastmail's JMAP API uses a single API token for full access. Setup takes 2 minutes, not 2 hours.\n\nWhat are the requirements? Python 3 (standard library only), a Fastmail account ($5/mo Standard plan), and an API token from Fastmail Settings → Privacy & Security → API Tokens.\n\nHow much does it cost? Fastmail Standard is $5/mo. The API is included — no per-request charges. Compared to Google Workspace at $7.20/mo minimum.\n\nCan it replace Gmail for an AI agent? Yes. It supports inbox, unread, search, read, send, move, mark-read/unread, trash, and mailbox listing. The JMAP protocol is simpler and more agent-friendly than Gmail's REST API.\n\nDoes it work with custom domains? Yes. Fastmail supports custom domains on all paid plans. You can send/receive from your own domain (e.g., agent@yourdomain.com)."
  },
  "trust": {
    "sourceLabel": "tencent",
    "provenanceUrl": "https://clawhub.ai/TassieDaddy/fastmail-jmap-disabled",
    "publisherUrl": "https://clawhub.ai/TassieDaddy/fastmail-jmap-disabled",
    "owner": "TassieDaddy",
    "version": "1.0.0",
    "license": null,
    "verificationStatus": "Indexed source record"
  },
  "links": {
    "detailUrl": "https://openagent3.xyz/skills/fastmail-jmap-disabled",
    "downloadUrl": "https://openagent3.xyz/downloads/fastmail-jmap-disabled",
    "agentUrl": "https://openagent3.xyz/skills/fastmail-jmap-disabled/agent",
    "manifestUrl": "https://openagent3.xyz/skills/fastmail-jmap-disabled/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/fastmail-jmap-disabled/agent.md"
  }
}