Best use case
ews-calendar is best used when you need a repeatable AI agent workflow instead of a one-off prompt.
Extract calendar events from Microsoft Exchange via EWS API
Teams using ews-calendar should expect a more consistent output, faster repeated execution, less prompt rewriting.
When to use this skill
- You want a reusable workflow that can be run more than once with consistent structure.
When not to use this skill
- You only need a quick one-off answer and do not need a reusable workflow.
- You cannot install or maintain the underlying files, dependencies, or repository context.
Installation
Claude Code / Cursor / Codex
Manual Installation
- Download SKILL.md from GitHub
- Place it in
.claude/skills/ews-skill/SKILL.mdinside your project - Restart your AI agent — it will auto-discover the skill
How ews-calendar Compares
| Feature / Agent | ews-calendar | Standard Approach |
|---|---|---|
| Platform Support | Not specified | Limited / Varies |
| Context Awareness | High | Baseline |
| Installation Complexity | Unknown | N/A |
Frequently Asked Questions
What does this skill do?
Extract calendar events from Microsoft Exchange via EWS API
Where can I find the source code?
You can find the source code on GitHub using the link provided at the top of the page.
Related Guides
Top AI Agents for Productivity
See the top AI agent skills for productivity, workflow automation, operational systems, documentation, and everyday task execution.
AI Agents for Marketing
Discover AI agents for marketing workflows, from SEO and content production to campaign research, outreach, and analytics.
AI Agents for Startups
Explore AI agent skills for startup validation, product research, growth experiments, documentation, and fast execution with small teams.
SKILL.md Source
## Purpose
Fetch calendar events from Microsoft Exchange Web Services (EWS) and return them as structured JSON.
## When to Use
- User asks about their calendar events ("What's on my calendar today?")
- Need to retrieve meetings for today, tomorrow, or a specific date
- Extracting meeting details: subject, time, location, organizer, body text, links
## Security Model
**Credentials are stored in OS keyring, NOT in config files:**
- **macOS**: Keychain Access (encrypted, OS-managed)
- **Linux**: libsecret / gnome-keyring (encrypted, OS-managed)
Only `EWS_URL` and `EWS_USER` are stored in OpenClaw config (non-secret). The password is retrieved securely at runtime.
## Setup
### 1. Install keyring tools (Linux only)
```bash
# Debian/Ubuntu
sudo apt install libsecret-tools gnome-keyring
# Fedora
sudo dnf install libsecret gnome-keyring
# Arch
sudo pacman -S libsecret gnome-keyring
```
macOS has Keychain built-in.
### 2. Store credentials in keyring
```bash
{baseDir}/ews-calendar-setup.sh --user "DOMAIN\\username"
```
You will be prompted for your password. This stores it securely in the OS keyring.
### 3. Configure OpenClaw
Add to `~/.openclaw/openclaw.json`:
```json5
{
skills: {
entries: {
"ews-calendar": {
enabled: true,
env: {
EWS_URL: "https://outlook.company.com/EWS/Exchange.asmx",
EWS_USER: "DOMAIN\\username"
}
}
}
}
}
```
Replace with your actual Exchange URL and username.
## Usage
The skill runs `{baseDir}/ews-calendar-secure.sh` which:
1. Retrieves `EWS_PASS` from OS keyring
2. Calls the main script with all credentials in environment
3. Returns JSON output
### Command Syntax
```bash
{baseDir}/ews-calendar-secure.sh --date <DATE> [--output <FILE>] [--verbose]
```
### Parameters
- `--date` (required): Date filter
- `YYYY-MM-DD` — specific date (e.g., `2026-03-03`)
- `today` — today's date
- `tomorrow` — tomorrow's date
- `--output <FILE>`: Write JSON to file instead of stdout
- `--verbose`: Enable debug logging
- `--debug-xml <FILE>`: Save raw XML response for debugging
### Output Format
Returns JSON array of calendar events:
```json
[
{
"subject": "Team Standup",
"start": "2026-03-03T10:00:00Z",
"end": "2026-03-03T10:30:00Z",
"location": "Conference Room A",
"organizer": "manager@company.com",
"body": "Weekly sync meeting to discuss sprint progress...",
"links": ["https://zoom.us/j/12345", "https://confluence.example.com/doc"]
}
]
```
Returns empty array `[]` if no events found.
## Example Invocations
**Get today's events:**
```bash
{baseDir}/ews-calendar-secure.sh --date today
```
**Get tomorrow's events to file:**
```bash
{baseDir}/ews-calendar-secure.sh --date tomorrow --output /tmp/tomorrow.json
```
**Get specific date with debug:**
```bash
{baseDir}/ews-calendar-secure.sh --date 2026-03-03 --verbose --debug-xml /tmp/debug.xml
```
## Troubleshooting
### Password not found in keyring
```
[ERROR] Password not found in keyring for user: DOMAIN\username
[HINT] Run: ./ews-calendar-setup.sh to store credentials
```
**Solution:** Run the setup script to store your password:
```bash
{baseDir}/ews-calendar-setup.sh --user "DOMAIN\\username"
```
### Linux: secret-tool not found
```
[ERROR] 'secret-tool' not found. Install: apt install libsecret-tools
```
**Solution:** Install libsecret tools:
```bash
sudo apt install libsecret-tools gnome-keyring
```
### Linux: Keyring locked
On Linux, the keyring may be locked after login.
**Solution:** Unlock your keyring (usually happens automatically on desktop login). For headless servers, you may need to set up a keyring daemon.
### HTTP request failed
```
[ERROR] HTTP request failed with status: 401
```
**Possible causes:**
- Incorrect username or password
- Password changed — re-run setup script
- Account locked or expired
### SOAP Fault
```
[ERROR] SOAP Fault detected
Fault code: a:ErrorInvalidRequest
Fault string: The request is invalid.
```
**Possible causes:**
- Invalid EWS URL (check `EWS_URL` in config)
- Date format issue (use `YYYY-MM-DD`)
- Exchange server configuration issue
## Credential Management
### Update password (after password change)
```bash
{baseDir}/ews-calendar-setup.sh --user "DOMAIN\\username"
```
The script will overwrite the existing entry.
### Remove credentials
```bash
{baseDir}/ews-calendar-setup.sh --user "DOMAIN\\username" --delete
```
Or manually:
**macOS:**
```bash
security delete-generic-password -a "DOMAIN\\username" -s "ews-calendar"
```
**Linux:**
```bash
secret-tool clear service "ews-calendar" user "DOMAIN\\username"
```
### View stored credentials (macOS only)
```bash
security find-generic-password -a "DOMAIN\\username" -s "ews-calendar" -w
```
## Files in This Skill
```
{baseDir}/
├── SKILL.md # This file
├── ews-calendar.sh # Main script (reads from env or .env)
├── ews-calendar-secure.sh # Wrapper that gets password from keyring
├── ews-calendar-setup.sh # Store credentials in keyring
├── templates/
│ ├── find-items.xml # SOAP template for finding calendar items
│ └── get-item.xml # SOAP template for getting item details
└── .env.example # Example config for standalone usage
```
## Alternative: Standalone Usage (without keyring)
For development or testing, you can run `ews-calendar.sh` directly with a `.env` file:
1. Copy `.env.example` to `.env`
2. Fill in your credentials
3. Run: `./ews-calendar.sh --date today`
**Warning:** This stores password in plaintext. Use keyring for production.Related Skills
afrexai-email-to-calendar
Extract calendar events, deadlines, action items, and follow-ups from emails. Works with any calendar provider (Google, Outlook, Apple, Notion, etc.). No external dependencies — pure agent intelligence. Use when the user forwards an email, asks to check inbox for events, or wants to extract structured scheduling data from any text.
calendar-optimizer
Analyzes and rewrites calendar events into clear, actionable tasks. Removes meeting fluff and converts vague descriptions into specific deliverables with deadlines.
calendar
Query and manage the operator's calendar — check availability and create new entries
feishu-calendar
Manage Feishu (Lark) Calendars. Use this skill to list calendars, check schedules, and sync events.
caldav-calendar
Sync and query CalDAV calendars (iCloud, Google, Fastmail, Nextcloud, etc.) using vdirsyncer + khal. Works on Linux.
ms-graph-calendar
Find available meeting times and free/busy slots for company employees using Microsoft Graph API. Use when user asks to schedule a meeting, find a free slot, check when employees are available, or look up someone's calendar availability.
anime-calendar
国内动漫每周更新日历。用于查询动漫更新时间、本周新番列表、追番日历。当用户询问动漫更新时间表、本周更新、追番日历、新番列表时触发此技能。
justcalendar
Use this skill when a user needs to install, authenticate, or operate the Just Calendar CLI against https://justcalendar.ai, including generating an agent token in the web UI and performing calendar/day-data management from terminal commands.
google-calendar
Interact with Google Calendar via the Google Calendar API – list upcoming events, create new events, update or delete them. Use this skill when you need programmatic access to your calendar from OpenClaw.
calendar-reminders
Calendar reminders pipeline: config-driven wrapper around gcalcli (Google Calendar) plus optional CalDAV source via vdirsyncer+khal, and a reminder planner that outputs a JSON plan for one-shot OpenClaw reminders.
doro-email-to-calendar
Extract calendar events from emails and create calendar entries. Supports two modes: (1) Direct inbox monitoring - scans all emails for events, or (2) Forwarded emails - processes emails you forward to a dedicated address. Features smart onboarding, event tracking, pending invite reminders, undo support, silent activity logging, deadline detection with separate reminder events, email notifications for action-required items, and provider abstraction for future extensibility.
feishu-calendar-scheduler
飞书智能日历调度器 - 自动推荐最佳会议时间,批量管理日程,生成会议报表