MCP server for the Check Point Harmony Email & Collaboration API
Project description
Check Point Harmony Email & Collaboration MCP Server
A Model Context Protocol server that exposes the Check Point Harmony Email & Collaboration smart-api (formerly Avanan) to AI assistants. It provides 26 tools across Security Events, Secured Entities, Exceptions, URL Reputation, DLP, and Scopes — full parity with the v1.50 API.
[!IMPORTANT] Unofficial project. This is an independent, community-built MCP server developed against Check Point's published API documentation. It is not an official Check Point product and is not affiliated with, endorsed by, or supported by Check Point Software Technologies. "Check Point", "Harmony", and "Avanan" are trademarks of Check Point Software Technologies. For official support of the Harmony Email & Collaboration platform itself, contact Check Point directly.
[!WARNING] Beta software — not yet recommended for production environments. This project is under active development. The tool surface and individual tool body shapes may still change between minor versions, and not every endpoint has been exhaustively exercised against every tenant configuration. Use against a lab or non-production scope until you're confident in the behavior for your use case.
This server can also perform destructive actions against your Harmony environment. Tools can quarantine and restore real email and modify allow/block-list exceptions. A hallucinated tool argument from your AI assistant could alter your mail flow in ways that affect email security.
Recommended posture:
- Try the server against a non-production or lab scope first.
- Use a Check Point API key scoped to the minimum permissions your use case requires.
- Review every destructive tool call before allowing execution. Claude Desktop requires tool-call approval by default — keep that enabled.
- Treat the API key (Client ID + Secret) with the same care as portal admin credentials, because functionally it is one.
- The HTTP transport binds to
127.0.0.1by default. Do not expose it to the public internet without adding authentication.
Tools
| Area | Count | Tools |
|---|---|---|
| Scopes | 1 | scopes_list |
| Security Events | 5 | events_get_by_id, events_query, events_find, events_action, events_get_task_status |
| Secured Entities | 5 | entities_get_by_id, entities_query, entities_find, entities_action, entities_download |
| Exceptions (Anti-Phishing) | 5 | exceptions_list, exceptions_get, exceptions_create, exceptions_update, exceptions_delete |
| URL Reputation | 5 | urlrep_list, urlrep_get, urlrep_create, urlrep_update, urlrep_delete |
| DLP | 5 | dlp_list, dlp_get, dlp_create, dlp_update, dlp_delete |
26 tools total. Highlights:
- Query tools (
events_query,entities_query) return a compact summary of up tolimitrecords (default 25). Usemax_records(cap 500) to auto-paginate,count_onlyfor a{recordsNumber, histogram}triage view, orfull=truefor raw objects.events_queryrequires a date range (startDate). - Find tools (
events_find,entities_find) locate a specific message/event by sender, recipient, subject, message-ID, or entity-ID. They filter server-side and default to the last 30 days (override withstart_date/end_date), trying an exact match first and falling back tocontains— the result'smatchModesays which hit. Both cap returned matches tolimit(default 25) and settruncatedwhen more exist. Power users can pass a raw server-sideextended_filtertoentities_query. - Action tools (
events_action,entities_action) wait for completion by default and return the final entity state; passwait=falsefor fire-and-forget.entities_actionrequiresentity_type— the target entity'ssaasEntityType(e.g.office365_emails_email), as returned byentities_query/entities_find. exceptions_*(anti-phishing) types arewhitelist,blacklist, andspam_whitelist(case-insensitive). URL-Reputation exception types areallow-url,allow-domain,block-url,block-domain. DLP exception types arehash,text_content,sender_email,recipient_email.entities_downloadreturns the secured entity's message as an.eml(base64-encoded for transport).- Rate limits enforced client-side: Anti-Phishing exception writes are paced to 1 rps; URL-Rep + DLP exception writes to 10 rps, matching the API reference.
events_actionverbs:quarantine,restore,dismiss,severityChange(param{"newSeverity": "Low|Medium|High|Highest"}),senttoadmin.- Server-side filters for
entities_queryviaextended_filter: each entry is{saasAttrName, saasAttrOp, saasAttrValue}; operators areis,contains,startsWith,isEmpty,isNot,notContains,isNotEmpty,greaterThan,lessThan. Use dotted paths likeentityPayload.fromEmail.
[!NOTE]
events_queryandevents_findrequire a date range — includestartDate(and ideallyendDate). Without it the upstream API returns an opaque500.
See docs/ENDPOINTS.md for the full tool ↔ endpoint mapping.
Quick start
Install
# with uv (recommended)
uv tool install checkpoint-harmony-mcp
# or with pip
pip install checkpoint-harmony-mcp
For development from source:
git clone https://github.com/Space-C0wboy/Checkpoint-Harmony-Email-MCP-Server
cd Checkpoint-Harmony-Email-MCP-Server
uv venv && uv pip install -e ".[dev]"
Getting an API key
Generate an account-scoped Infinity Portal API key for the Email & Collaboration service. The easiest path also shows you the exact authentication URL for your region:
- In the Harmony Email & Collaboration console, confirm the correct account / company is selected, then click the Settings gear next to the company name → API Keys. (Equivalently: Infinity Portal Global Settings → API Keys → New Account API key.)
- Click New, choose Service: Email & Collaboration, optionally set an expiration, then Create.
- Copy the Client ID, Secret Key, and Authentication URL it displays — the
secret is shown only once. These map to
CHECKPOINT_CLIENT_ID,CHECKPOINT_SECRET, andCHECKPOINT_AUTH_URL. SetCHECKPOINT_API_URLto your region's gateway +/app/hec-api(see Region gateways below).
No role is requested for Email & Collaboration keys — they are granted Admin access scoped to that single service.
[!WARNING] Use an account API key, not a user key. A user-scoped key (the
/auth/external/userendpoint) is bound to the user's home region and is not accepted by the smart-api — it authenticates successfully but every data call returns an opaque500. If you decode such a token you'll see"authType": "EXTERNAL_USER"; an account key shows"EXTERNAL". Always generate the key via Global Settings → API Keys → New Account API key (or the Harmony console gear → API Keys).
Configuration
Copy .env.example to .env and set:
| Variable | Required | Description |
|---|---|---|
CHECKPOINT_CLIENT_ID |
yes | Infinity Portal API key Client ID |
CHECKPOINT_SECRET |
yes | Infinity Portal API key Secret (accessKey) |
CHECKPOINT_AUTH_URL |
yes | Region gateway + /auth/external |
CHECKPOINT_API_URL |
yes | Region gateway + /app/hec-api |
CHECKPOINT_SCOPE |
no* | Auto-discovered when blank (single tenant); set explicitly only for multi-scope keys |
CHECKPOINT_TIMEOUT |
no | Request timeout in seconds (default 30) |
LOG_LEVEL |
no | default INFO |
MCP_HTTP_HOST / MCP_HTTP_PORT |
no | HTTP transport bind, defaults 127.0.0.1:8765 |
* When blank, the server auto-discovers the scope (single-tenant). Set it explicitly only
if your key has access to multiple scopes; discover values with the scopes_list tool.
Region gateways:
- EU
https://cloudinfra-gw.portal.checkpoint.com - US
https://cloudinfra-gw-us.portal.checkpoint.com - AU
https://cloudinfra-gw.ap.portal.checkpoint.com - IN
https://cloudinfra-gw.in.portal.checkpoint.com
(Auth URL = gateway + /auth/external; API URL = gateway + /app/hec-api.)
Run
- stdio (default):
uv run checkpoint-harmony-mcp(or justcheckpoint-harmony-mcpif installed as a tool) - HTTP:
checkpoint-harmony-mcp --transport http --port 8765
Editor integration
Claude Desktop
Edit claude_desktop_config.json:
- macOS:
~/Library/Application Support/Claude/claude_desktop_config.json - Windows:
%APPDATA%\Claude\claude_desktop_config.json
{
"mcpServers": {
"checkpoint-harmony": {
"command": "checkpoint-harmony-mcp",
"env": {
"CHECKPOINT_CLIENT_ID": "your-client-id",
"CHECKPOINT_SECRET": "your-client-secret",
"CHECKPOINT_AUTH_URL": "https://cloudinfra-gw-us.portal.checkpoint.com/auth/external",
"CHECKPOINT_API_URL": "https://cloudinfra-gw-us.portal.checkpoint.com/app/hec-api"
}
}
}
}
If running from source instead of an installed tool, use uv with --directory:
{
"mcpServers": {
"checkpoint-harmony": {
"command": "uv",
"args": ["run", "--directory", "/absolute/path/to/Checkpoint-Harmony-Email-MCP-Server", "checkpoint-harmony-mcp"],
"env": { "CHECKPOINT_CLIENT_ID": "...", "CHECKPOINT_SECRET": "...", "CHECKPOINT_AUTH_URL": "...", "CHECKPOINT_API_URL": "..." }
}
}
}
Restart Claude Desktop, then confirm checkpoint-harmony appears in the tools menu.
Claude Code
claude mcp add checkpoint-harmony \
--env CHECKPOINT_CLIENT_ID=your-client-id \
--env CHECKPOINT_SECRET=your-client-secret \
--env CHECKPOINT_AUTH_URL=https://cloudinfra-gw-us.portal.checkpoint.com/auth/external \
--env CHECKPOINT_API_URL=https://cloudinfra-gw-us.portal.checkpoint.com/app/hec-api \
-- checkpoint-harmony-mcp
Scope auto-discovery
The Harmony API requires a scopes value on every call, but it isn't shown in the
Infinity Portal. This server resolves it for you: leave CHECKPOINT_SCOPE blank and,
on first use, it calls scopes_list and uses your single scope automatically (logging it
so you can pin it later). Set CHECKPOINT_SCOPE explicitly only if your key spans
multiple scopes — the server will list the available values in an error if so.
[!TIP] For a single-tenant key, just leave
CHECKPOINT_SCOPEunset — there is nothing to look up in the portal. Only multi-scope keys need it set explicitly.
Example prompts
- "How many phishing emails did we get today?" →
events_querywithcount_only. - "Find the email from
scdc205@proton.meto me on June 4th." →entities_find. - "Quarantine event
<id>, then restore it." →events_action(quarantine → restore). - "Block the sender
bad@example.com." / "Remove that block." →exceptions_create/exceptions_delete. - "Show me the full detail for entity
<id>." →entities_get_by_id.
Development
uv run pytest # full suite (HTTP fully mocked with respx; no live calls)
uv run ruff check . # lint
Releases publish to PyPI automatically when a v* tag is pushed (see
.github/workflows/publish.yml).
License
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file checkpoint_harmony_mcp-0.2.4.tar.gz.
File metadata
- Download URL: checkpoint_harmony_mcp-0.2.4.tar.gz
- Upload date:
- Size: 135.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
7c7785c42d9d79dcfa741ffcae70f7197cf3b5d77c62811c9f49ce430df22709
|
|
| MD5 |
9e0beeacdb4758ea5fb91e868ebc4ae9
|
|
| BLAKE2b-256 |
7f6d81041bd15bc4d3b76f83ad61a2ab5a317ee16ff9fc3c366693c3e55ca284
|
Provenance
The following attestation bundles were made for checkpoint_harmony_mcp-0.2.4.tar.gz:
Publisher:
publish.yml on Space-C0wboy/Checkpoint-Harmony-Email-MCP-Server
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
checkpoint_harmony_mcp-0.2.4.tar.gz -
Subject digest:
7c7785c42d9d79dcfa741ffcae70f7197cf3b5d77c62811c9f49ce430df22709 - Sigstore transparency entry: 1741390772
- Sigstore integration time:
-
Permalink:
Space-C0wboy/Checkpoint-Harmony-Email-MCP-Server@8ea1ccb7c2c16753a52f2272756857e02c61c6c1 -
Branch / Tag:
refs/tags/v0.2.4 - Owner: https://github.com/Space-C0wboy
-
Access:
private
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@8ea1ccb7c2c16753a52f2272756857e02c61c6c1 -
Trigger Event:
push
-
Statement type:
File details
Details for the file checkpoint_harmony_mcp-0.2.4-py3-none-any.whl.
File metadata
- Download URL: checkpoint_harmony_mcp-0.2.4-py3-none-any.whl
- Upload date:
- Size: 27.8 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a972e4f708bf6c569626b2fd64c080a5a1a0f1a3ed3b3329a5a7741ddffc5629
|
|
| MD5 |
07cf8bd3094ddbf3e27230ba8df60d20
|
|
| BLAKE2b-256 |
825e43857435b783f2222ab8193f365c7d4cb14e865644c9e4f029bbe455ea03
|
Provenance
The following attestation bundles were made for checkpoint_harmony_mcp-0.2.4-py3-none-any.whl:
Publisher:
publish.yml on Space-C0wboy/Checkpoint-Harmony-Email-MCP-Server
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
checkpoint_harmony_mcp-0.2.4-py3-none-any.whl -
Subject digest:
a972e4f708bf6c569626b2fd64c080a5a1a0f1a3ed3b3329a5a7741ddffc5629 - Sigstore transparency entry: 1741390778
- Sigstore integration time:
-
Permalink:
Space-C0wboy/Checkpoint-Harmony-Email-MCP-Server@8ea1ccb7c2c16753a52f2272756857e02c61c6c1 -
Branch / Tag:
refs/tags/v0.2.4 - Owner: https://github.com/Space-C0wboy
-
Access:
private
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@8ea1ccb7c2c16753a52f2272756857e02c61c6c1 -
Trigger Event:
push
-
Statement type: