# iris MCP server

> Allows AI agents to read Microsoft 365 mail and create drafts in Outlook while maintaining a structural no-send security boundary.

- Repository: https://github.com/SuperAngryMonkey/iris
- Page: https://hostedmcp.org/servers/superangrymonkey/iris
- Transport: stdio
- Stars: 0
- License: MIT
- Latest version: 0.3.0

## Install

### Claude Code

```sh
claude mcp add --env IRIS_CLIENT_ID=<IRIS_CLIENT_ID> iris -- uvx iris-mcp
```

### Cursor (`~/.cursor/mcp.json`)

```json
{
  "mcpServers": {
    "iris": {
      "command": "uvx",
      "args": [
        "iris-mcp"
      ],
      "env": {
        "IRIS_CLIENT_ID": "<IRIS_CLIENT_ID>"
      }
    }
  }
}
```

### VS Code (`.vscode/mcp.json`)

```json
{
  "servers": {
    "iris": {
      "type": "stdio",
      "command": "uvx",
      "args": [
        "iris-mcp"
      ],
      "env": {
        "IRIS_CLIENT_ID": "<IRIS_CLIENT_ID>"
      }
    }
  }
}
```

### Claude Desktop (`claude_desktop_config.json`)

```json
{
  "mcpServers": {
    "iris": {
      "command": "uvx",
      "args": [
        "iris-mcp"
      ],
      "env": {
        "IRIS_CLIENT_ID": "<IRIS_CLIENT_ID>"
      }
    }
  }
}
```

### Codex (`~/.codex/config.toml`)

```toml
[mcp_servers.iris]
command = "uvx"
args = ["iris-mcp"]

[mcp_servers.iris.env]
IRIS_CLIENT_ID = "<IRIS_CLIENT_ID>"
```

### Gemini CLI (`~/.gemini/settings.json`)

```json
{
  "mcpServers": {
    "iris": {
      "command": "uvx",
      "args": [
        "iris-mcp"
      ],
      "env": {
        "IRIS_CLIENT_ID": "<IRIS_CLIENT_ID>"
      }
    }
  }
}
```

## Environment variables

| Name | Required | Secret | Description |
|---|---|---|---|
| `IRIS_CLIENT_ID` | yes | no | Application (client) ID of YOUR OWN Entra app registration. There is no shared app; you register one. |
| `IRIS_ALLOWLIST` | no | no | Path to a recipient allowlist file. If absent or empty, all recipients are permitted. |
| `IRIS_AUDIT_LOG` | no | no |  |
| `IRIS_DISABLE_READ` | no | no | Set to '1' to unregister the read tools (list/search/get messages and threads) for a drafts-only surface. |
| `IRIS_DRAFT_FOLDER` | no | no | Mail folder drafts are written to, created on first use. Defaults to 'AI Drafts'. Empty string uses Drafts. |
| `IRIS_ENABLE_SEND` | no | no | Set to '1' to enable sending. ALSO requires Mail.Send granted on the Entra app and a fresh sign-in. Off by default; when unset, iris cannot send and the send tool is not registered. |
| `IRIS_FLOW_FILE` | no | no |  |
| `IRIS_TENANT_ID` | no | no | Directory (tenant) ID. Defaults to 'organizations'. |
| `IRIS_TOKEN_CACHE` | no | no |  |

## Tools (13)

- `iris_login`
- `iris_login_finish`
- `iris_auth_status`
- `iris_list_folders`
- `iris_list_messages`
- `iris_search_messages`
- `iris_get_message`
- `iris_get_thread`
- `iris_create_draft`
- `iris_list_drafts`
- `iris_update_draft`
- `iris_delete_draft`
- `iris_send_draft`

## FAQ

### Can the AI send emails automatically?

No, sending is disabled by default. Even if enabled via opt-in, every send requires human confirmation and an allowlist check.

### Where are the AI-generated drafts stored?

Drafts are placed in a dedicated folder named 'AI Drafts' by default so they do not clutter your standard Outlook Drafts view.

### Does iris support email attachments?

No, the current implementation does not support attachments.
