/install exchangeserviceskill
Exchange On-Prem Skill
Overview
This skill provides EWS (SOAP) operations for on‑prem Exchange 2016 CU21: mail, folders, and calendar/meetings.
Requirements
- Node.js 20+ (22+ recommended)
- Exchange EWS endpoint:
/EWS/Exchange.asmx
Quick Start
- Install deps:
npm install
- Create encrypted config:
npm run setup-config -- \
--exchange-url https://mail.example.com/EWS/Exchange.asmx \
--username user \
--auth-mode ntlm \
--password "\x3Cpassword>" \
--master-key "\x3CmasterKey>"
- Verify:
npm run verify-login
Safety Policy
- Read-first by default
- Any write operation requires explicit confirmation
- Write commands require
--confirm true(orEXCHANGE_WRITE_CONFIRM=true) --dry-runis supported for write commands to preview SOAP body--insecure true(if used) only relaxes TLS validation per request and does not change global Node TLS settings
Config Model
File: config/exchange.config.json
Required fields: exchange_url, username, auth_mode, secret_store
Optional: domain
Capability Groups & Status
Status:
READY: implemented and verifiedRESTRICTED: write/risky actions require explicit confirmationLIMITED: implemented but blocked by environment limitations
A) Mailbox & Items
FindItem(mail list/read window):READYSearchMail(keyword in subject/body/recipients):READYGetItem:READYGetUnreadCount:READYCreateItem(mail create):READYRESTRICTEDUpdateItem:READYRESTRICTEDMoveItem / CopyItem / DeleteItem:READYRESTRICTEDSendItem:READYRESTRICTEDReplyItem / ReplyAll:READYRESTRICTEDMarkAllItemsAsRead:READYRESTRICTEDArchiveItem:LIMITEDRESTRICTED
B) Folders
GetFolder:READYFindFolder:READYCreateFolder:READYRESTRICTEDUpdateFolder:READYRESTRICTEDDeleteFolder:READYRESTRICTED
C) Calendar & Meetings
- Calendar window read (
FindItem + CalendarView):READY - Create meeting (
CreateItemCalendarItem):READYRESTRICTED
D) Structure & Config
exchange.config.jsoncreate/update:READY- Scripts organized by module folders:
READY - SKILL.md commands and status updated:
READY
Defaults That Matter
get-mail/search-maildefault scope isall(msgfolderroot).get-mail/search-maildefault includes subfolders of the scope.get-mail/search-maildefault time window is last 3650 days. Use--days-backto narrow.get-calendardefault time window is next 7 days. Use--start-time/--end-timeto override.
Command List
Read commands:
npm run verify-loginnpm run get-mail -- --unread-only --limit 10npm run get-mail -- --scope all --limit 10(all folders under msgfolderroot)npm run get-mail -- --scope all --days-back 3650 --limit 10npm run search-mail -- --query "keyword" --limit 10npm run search-mail -- --scope all --query "keyword" --limit 10npm run get-item -- --item-id \x3CEWS_ITEM_ID>npm run get-unread-count -- --scope all(all folders under msgfolderroot)npm run get-folder -- --distinguished-id inboxnpm run find-folder -- --parent-distinguished-id msgfolderroot --traversal Shallow --limit 50npm run get-calendar -- --limit 20npm run get-calendar -- --start-time 2026-03-01T00:00:00+08:00 --end-time 2026-05-01T00:00:00+08:00 --limit 200
Write commands (require confirm):
npm run create-mail -- --confirm true --to [email protected] --subject "s" --body "b"npm run reply-item -- --confirm true --item-id \x3Cid> --body "thanks"(supports--reply-all true)npm run update-item -- --confirm true --item-id \x3Cid> --subject "new"(auto-fetches ChangeKey if omitted)npm run mark-all-read -- --confirm true --distinguished-id inboxnpm run create-folder -- --confirm true --display-name "My Folder" --parent-distinguished-id inboxnpm run update-folder -- --confirm true --folder-id \x3Cid> --change-key \x3Cck> --display-name "New Name"npm run delete-folder -- --confirm true --folder-id \x3Cid> --delete-type MoveToDeletedItemsnpm run move-item -- --confirm true --item-id \x3Cid> --target-distinguished-id inboxnpm run copy-item -- --confirm true --item-id \x3Cid> --target-distinguished-id draftsnpm run delete-item -- --confirm true --item-id \x3Cid> --delete-type MoveToDeletedItemsnpm run send-item -- --confirm true --item-id \x3CdraftId>npm run send-item -- --confirm true --item-id \x3CdraftId> --change-key \x3Cck>(recommended; send will auto-fetch ChangeKey if omitted)npm run archive-item -- --confirm true --item-id \x3Cid>npm run create-meeting -- --confirm true --subject "Weekly Sync" --start "2026-03-18T09:00:00+08:00" --end "2026-03-18T09:30:00+08:00" --required [email protected] --location "Room A" --body "Agenda" --send-invitations SendToAllAndSaveCopy
Send receipt verification:
create-mail,reply-item,send-itemsupport--verify-sent true|false,--verify-window-minutes \x3Cn>,--verify-max-entries \x3Cn>,--verify-strict true|false
References
- Make sure OpenClaw is installed (local or Docker)
- Run the install command in chat:
/install exchangeserviceskill - After installation, invoke the skill by name or use
/exchangeserviceskill - Provide required inputs per the skill's parameter spec and get structured output
What is ExchangeService?
Cross-platform (Linux/macOS/Windows) skill for Exchange Server 2016 CU21 EWS operations on OpenClaw Node.js runtime. It is an AI Agent Skill for Claude Code / OpenClaw, with 220 downloads so far.
How do I install ExchangeService?
Run "/install exchangeserviceskill" in the OpenClaw or Claude Code chat to install it in one step — no extra setup required.
Is ExchangeService free?
Yes, ExchangeService is completely free, licensed under MIT-0. You can download, install and use it at no cost.
Which platforms does ExchangeService support?
ExchangeService is cross-platform and runs anywhere OpenClaw / Claude Code is available (cross-platform).
Who created ExchangeService?
It is built and maintained by JokerMeC (@jokermec); the current version is v1.0.1.