octowatch-mcp
Read-only MCP server for OctoWatch DLP Cloud.
Ask Claude / Cursor / ChatGPT in plain language:
- “Which Risks in the last day?”
- “Who was idle the longest yesterday?”
- “Productivity summary for Accounting”
- “Show Monitoring keystrokes for Emily”
- “List users and groups”
Python MCP SDK v2 (MCPServer). Built for SecOps and managers — and as open-source PR for octowatchdlp.com.
Security: defaults use the public demo account.
Do not put production passwords in MCP config or git. Use env vars and a least-privilege console operator.
No writes, no screenshot/video binary downloads.
Status
Alpha (v0.4.0): read-only coverage of Cloud console APIs (analytics, monitoring lists, dashboard, chrono, directory, account Gets). See docs/API.md gap matrix or tool list_api_coverage.
Core tools
| Tool | API | Notes |
|---|---|---|
octowatch_whoami |
Access/login-jwt |
Account / host (no password) |
list_users_groups |
Edit/GetUsersGroups2 |
Tree: Type 0 root, 1 group, 2 user |
list_risks |
Analytics/Overall + Risks/Overall2 |
Default mode=summary |
list_anomalies |
Alerts/Overall2 |
Formal deviations (not idle) |
get_idle_summary |
Productivity/Overall3 |
Rank by InactiveTime |
get_activity_summary |
Activity/Overall2 |
Top apps/sites |
get_timesheet |
TimeSheet/Overall2 |
Worked vs expected hours |
get_productivity_summary |
Overall3 + stats + analytics |
Per-user rollup |
list_reports |
GetReports + GetProcessingTasks |
ReportTypes labeled |
Console coverage tools
| Tool | API | Notes |
|---|---|---|
get_analytics |
Analytics/* |
view=overall|disciplina|activity|productivity |
get_dashboard |
Dashboard/Get* + metric1 |
Widgets; blobs stripped |
get_chrono |
Chrono/Overall2 |
Timeline |
get_day_structure |
DayStructureList / GetDayStructure |
|
list_monitoring |
Monitoring/{kind} |
19 kinds; compact by default |
search_monitoring |
Tools Search fan-out | filter_key across 13 kinds |
get_activity_detail |
ActivityWindow / CategoryWindow |
Drill-down |
list_online |
Live/Overall2 |
Presence only |
list_stream_meta |
Stream meta Gets | No video download |
list_directory |
Edit Get* directory | users/groups/computers/… |
get_user_info |
GetUserData2 / tooltip / … |
|
get_account_readonly |
Account/Edit Get* | No Set*/PIN |
list_api_coverage |
(static matrix) | Gap summary |
Quick start
From PyPI
pip install octowatch-mcp
octowatch-mcp
# or: python -m octowatch_mcp
Demo defaults work without a .env. For Cursor/Claude after install, merge examples/cursor-mcp-pypi.json or examples/claude-desktop-pypi.json (command octowatch-mcp, no repo cwd).
From source
git clone https://github.com/extralabs/octowatch-mcp-server.git
cd octowatch-mcp-server
python -m venv .venv
# Windows:
.venv\Scripts\activate
# macOS/Linux:
# source .venv/bin/activate
pip install -e .
cp .env.example .env # optional; demo defaults work without it
python -m octowatch_mcp
Merge examples/cursor-mcp.json / examples/claude-desktop.json into MCP settings (fix cwd / use python from the venv). Restart and try: “List OctoWatch risks for the last week.”
Release (maintainers)
CI runs unit tests and live demo smoke on main. Publishing to PyPI uses Trusted Publisher on a version tag:
# version in pyproject.toml must match the tag (e.g. 0.4.0 → v0.4.0)
git tag v0.4.0
git push origin v0.4.0
Configuration
| Env | Default | Meaning |
|---|---|---|
OCTOWATCH_API_BASE |
https://cloud.octowatchdlp.com |
API host from spm-config.json → serverBase |
OCTOWATCH_EMAIL |
demo@octowatchdlp.com |
Console admin / operator |
OCTOWATCH_PASSWORD |
demo |
Demo only |
OCTOWATCH_DEFAULT_DAYS |
1 |
Lookback when tool omits dates/period |
Periods & filters
Prefer period=today|yesterday|last_7_days|last_30_days, or date_from / date_to.
- Date-only values cover the full calendar day (
date_to→23:59:59). - Optional
user_id(AliasID) andgroup_idon most read tools. - POST body
TreeviewUsers: all →NodeType=-666666; group →NodeType=14; user →NodeType=1.
Auth & period calls (API)
GET /api/Access/login-jwt?email=…&password=…→Token,RefreshToken,PublicID- Later requests:
Authorization: Bearer <Token> - Period POSTs need headers
DateFrom/DateToasyyyy-MM-dd HH:mm:ss - Body (users/groups filter):
[{ "NodeType": -666666, "UserID": -666666 }]
Marketing / interactive docs: app.octowatchdlp.com/api/.
Help catalog: https://cloud.octowatchdlp.com/Help.
Product docs: octowatchdlp.com/docs/.
Coverage audit: docs/API.md.
Roadmap
- Date-only full-day fix + relative
period - Risks summary + idle helper + compact formatters
- Correct TreeviewUsers NodeType (group=14, user=1)
- Console read-only coverage (Monitoring, Dashboard, Chrono, Account Gets)
- Report generator queue (
Edit/QueueReportEmail) as optional write-opt-in - PyPI publish + GitHub Action smoke against demo
- TypeScript port (optional)
License
MIT — see LICENSE.
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 octowatch_mcp-0.4.0.tar.gz.
File metadata
- Download URL: octowatch_mcp-0.4.0.tar.gz
- Upload date:
- Size: 35.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
af2d172e20668d741cebd020b1b14adcf799f68d00fa08a59b811a51c99ca072
|
|
| MD5 |
bdb7db0c19293884240b5649d44baf0d
|
|
| BLAKE2b-256 |
89bcffe965651fe1fd163f785e5282edf929b8719768776c436466a9493739d6
|
Provenance
The following attestation bundles were made for octowatch_mcp-0.4.0.tar.gz:
Publisher:
publish.yml on extralabs/octowatch-mcp-server
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
octowatch_mcp-0.4.0.tar.gz -
Subject digest:
af2d172e20668d741cebd020b1b14adcf799f68d00fa08a59b811a51c99ca072 - Sigstore transparency entry: 2615445901
- Sigstore integration time:
-
Permalink:
extralabs/octowatch-mcp-server@3de7b06c88db619b8ff0965d7c9444dc21dbca59 -
Branch / Tag:
refs/tags/v0.4.0 - Owner: https://github.com/extralabs
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@3de7b06c88db619b8ff0965d7c9444dc21dbca59 -
Trigger Event:
push
-
Statement type:
File details
Details for the file octowatch_mcp-0.4.0-py3-none-any.whl.
File metadata
- Download URL: octowatch_mcp-0.4.0-py3-none-any.whl
- Upload date:
- Size: 31.4 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
19c693c12151f14c0c1c44317c967f7e5e83ce0fa12bf266fcbf6018643a7478
|
|
| MD5 |
bc260c518cc20ef49e6ce61369856ef9
|
|
| BLAKE2b-256 |
85bfc00fe4daa166df325b6a2e8a42d91debee59a2aead7cc4d7fc80438154df
|
Provenance
The following attestation bundles were made for octowatch_mcp-0.4.0-py3-none-any.whl:
Publisher:
publish.yml on extralabs/octowatch-mcp-server
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
octowatch_mcp-0.4.0-py3-none-any.whl -
Subject digest:
19c693c12151f14c0c1c44317c967f7e5e83ce0fa12bf266fcbf6018643a7478 - Sigstore transparency entry: 2615445964
- Sigstore integration time:
-
Permalink:
extralabs/octowatch-mcp-server@3de7b06c88db619b8ff0965d7c9444dc21dbca59 -
Branch / Tag:
refs/tags/v0.4.0 - Owner: https://github.com/extralabs
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@3de7b06c88db619b8ff0965d7c9444dc21dbca59 -
Trigger Event:
push
-
Statement type: