OctoWatch DLP
PYPI · OCTOWATCH-MCP · SCANNED SEP 20
Read-only OctoWatch DLP Cloud MCP: risks, idle time, productivity, monitoring.
Available components
How this component scores in each security and reliability category. Every signal is checked automatically from public evidence about the published package, including repeated runs of it in an isolated sandbox, and we only credit what we can confirm. How we score → Why this is hard to score →
Supply Chain Security100
- No malware found by supply-chain analysis.Pass
- No known CVEs affecting this package version or its production dependencies.Pass
- Runs hatchling.build at install time, a recognised native-build step with no shell scripting around it. View diagnostics → Pass
- 1 of 34 dependencies flagged as unhealthy. View diagnostics → Partial
Provenance & Transparency48
- Source repository is publicly reachable at the declared URL. View diagnostics → Pass
- Provenance check failed: no build-provenance attestation is published. See how to fix → View diagnostics → Fail
- Clear OSI-approved license (MIT).Pass
- Actively maintained (last published 24 days ago).Pass
- Publishes a security disclosure policy (SECURITY.md).Pass
Schema Quality & AI Usability80
- 100% of prompts and resources have a non-trivial description (not blank, and not just the item's name).Pass
- AI-judged instruction clarity (excellent).Pass
- Context-footprint check failed: tool/resource definitions use about 4042 tokens (~161/item across 25 items; 22 tools + 3 resources), over budget; trim descriptions and params. See how to fix → Fail
- Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management80
- Stability observed for 24 of 30 days with no destabilising changes; credit accrues until the full window elapses.Partial
Tool Coverage94
- 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
- 78% of tool parameters carry a description.Partial
- Structured output schemas are declared (100% of tools); any adoption earns full credit.Pass
Tool Safety100
- No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.Pass
- We read all 22 captured tool definition(s), and no name or description among them implies an irreversible operation.Pass
- An AI judge read all 24 captured unit(s) of tool text and found none that tries to manipulate the model reading it.Pass
Capabilities100
- Implements a current MCP spec version (2026-07-28).Pass
How do I install the OctoWatch DLP MCP server?
OctoWatch DLP runs locally as a PyPI package, launched with uvx octowatch-mcp. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.
pypi · octowatch-mcp
claude mcp add extralabs-octowatch-mcp -- uvx octowatch-mcp
{
"mcpServers": {
"extralabs-octowatch-mcp": {
"command": "uvx",
"args": [
"octowatch-mcp"
]
}
}
} {
"servers": {
"extralabs-octowatch-mcp": {
"command": "uvx",
"args": [
"octowatch-mcp"
]
}
}
} codex mcp add extralabs-octowatch-mcp -- uvx octowatch-mcp
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"extralabs-octowatch-mcp": {
"type": "local",
"command": [
"uvx",
"octowatch-mcp"
],
"enabled": true
}
}
} openclaw mcp add extralabs-octowatch-mcp --command uvx --arg octowatch-mcp
mcp_servers:
extralabs-octowatch-mcp:
command: "uvx"
args: ["octowatch-mcp"] {
"McpServers": {
"extralabs-octowatch-mcp": {
"Transport": "stdio",
"Command": "uvx",
"Arguments": [
"octowatch-mcp"
]
}
}
} assistant mcp add extralabs-octowatch-mcp -t stdio -c uvx -a octowatch-mcp
{
"mcpServers": {
"extralabs-octowatch-mcp": {
"command": "uvx",
"args": [
"octowatch-mcp"
]
}
}
} Every change we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.
- 20 Sept 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 77 to 80. That category is still filling its 30-day observation window: 23 days of observed history at the previous scan, 24 at this one. The score rises as the window fills, whether or not the server changes.
- 18 Sept 26 +16
- Malware scan: unverified → pass ▲ security
- 17 Sept 26 −15
- Malware scan: pass → unverified ▼ security
- 16 Sept 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 63 to 67. That category is still filling its 30-day observation window: 19 days of observed history at the previous scan, 20 at this one. The score rises as the window fills, whether or not the server changes.
- 15 Sept 26 +15
- Malware scan: unverified → pass ▲ security
- 14 Sept 26 −15
- Malware scan: pass → unverified ▼ security
- 13 Sept 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 53 to 57. That category is still filling its 30-day observation window: 16 days of observed history at the previous scan, 17 at this one. The score rises as the window fills, whether or not the server changes.
- 11 Sept 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 47 to 50. That category is still filling its 30-day observation window: 14 days of observed history at the previous scan, 15 at this one. The score rises as the window fills, whether or not the server changes.
Diagnostic detail from the automated scan of this channel: what the scanner observed at each step, so you can see exactly where a check passed or failed. It is informational only and never changes the trust score.
Captured 20 Sept 2026 · Analysed pypi/octowatch-mcp@0.5.1
Provenance No attestation
The registry publishes no build provenance for this version, so there is nothing to verify.
| Result | No attestation |
|---|---|
| Ecosystem | pypi |
Background: How many MCP packages publish verified provenance →
Install scripts 1 script
| Hook | Tier | Command |
|---|---|---|
| build_backend | allowlisted | hatchling.build |
Background: Why install scripts are a supply-chain risk →
Dependencies 34 packages
| Packages resolved | 34 |
|---|---|
| No linked repository | 1 |
| Tree resolution | Complete |
Background: SBOMs and build attestations, explained →
The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability. A tool's description is untrusted text the model reads on every call, which is what makes this list a security surface and not just an inventory: how tool poisoning works →
get_account_readonly Account read-only ~152
Read-only account/profile/license Gets (SPA header contracts). profiles: GetProfiles2 — ProfilesType 0|1|2; optional user_id + alias_type (1=user, 14=group); defaults AliasID/AliasType=-1. timetable/rules/profile_settings/computer_settings: require profile_id. computer_profiles: optional computer_guid (Guid header).
| Name | Type | Req | Description |
|---|---|---|---|
| alias_type | – | – | – |
| compact | boolean | – | – |
| computer_guid | – | – | – |
| profile_id | – | – | – |
| profiles_type | – | – | – |
| source | string | – | Account/profile/license Get source (no Set*/PIN). |
| user_id | – | – | User filter: AliasID as TreeviewUsers NodeType=1. |
Structured output declared, but exposes no named fields.
No examples provided.
get_activity_detail Activity detail ~191
Activity drill-down: ActivityWindow (needs activity_name) or CategoryWindow (needs category_guid).
| Name | Type | Req | Description |
|---|---|---|---|
| activity_name | – | – | – |
| category_guid | – | – | – |
| compact | boolean | – | – |
| date_from | – | – | Start datetime YYYY-MM-DD or YYYY-MM-DD HH:MM:SS (full day if date-only). |
| date_to | – | – | End datetime; date-only covers until 23:59:59 that day. |
| group_id | – | – | Group filter: TreeviewUsers NodeType=14 (console group id). |
| is_website | boolean | – | – |
| mode | string | – | activity_window needs activity_name; category_window needs category_guid. |
| period | – | – | Relative period: today|yesterday|last_7_days|last_30_days (wins over date_from/date_to when set). |
| user_id | – | – | User filter: AliasID as TreeviewUsers NodeType=1. |
Structured output declared, but exposes no named fields.
No examples provided.
get_activity_summary Activity summary ~165
Top apps and sites by ActiveTime (POST /api/Activity/Overall2).
| Name | Type | Req | Description |
|---|---|---|---|
| date_from | – | – | Start datetime YYYY-MM-DD or YYYY-MM-DD HH:MM:SS (full day if date-only). |
| date_to | – | – | End datetime; date-only covers until 23:59:59 that day. |
| group_id | – | – | Group filter: TreeviewUsers NodeType=14 (console group id). |
| period | – | – | Relative period: today|yesterday|last_7_days|last_30_days (wins over date_from/date_to when set). |
| raw | boolean | – | – |
| top_n | integer | – | How many top apps/sites to keep. |
| user_id | – | – | User filter: AliasID as TreeviewUsers NodeType=1. |
Structured output declared, but exposes no named fields.
No examples provided.
get_analytics Get analytics ~168
Analytics rollups: view=overall|disciplina|activity|productivity.
| Name | Type | Req | Description |
|---|---|---|---|
| compact | boolean | – | – |
| date_from | – | – | Start datetime YYYY-MM-DD or YYYY-MM-DD HH:MM:SS (full day if date-only). |
| date_to | – | – | End datetime; date-only covers until 23:59:59 that day. |
| group_id | – | – | Group filter: TreeviewUsers NodeType=14 (console group id). |
| period | – | – | Relative period: today|yesterday|last_7_days|last_30_days (wins over date_from/date_to when set). |
| user_id | – | – | User filter: AliasID as TreeviewUsers NodeType=1. |
| view | string | – | Analytics view: overall|disciplina|activity|productivity. |
Structured output declared, but exposes no named fields.
No examples provided.
get_chrono Chronometry ~190
Chronometry timeline (POST /api/Chrono/Overall2).
| Name | Type | Req | Description |
|---|---|---|---|
| compact | boolean | – | – |
| date_from | – | – | Start datetime YYYY-MM-DD or YYYY-MM-DD HH:MM:SS (full day if date-only). |
| date_to | – | – | End datetime; date-only covers until 23:59:59 that day. |
| filter_key | – | – | Optional text filter passed to the Cloud API FilterKey. |
| group_id | – | – | Group filter: TreeviewUsers NodeType=14 (console group id). |
| limit | integer | – | Max rows to return (1–500). |
| offset | integer | – | Pagination offset (0-based). |
| period | – | – | Relative period: today|yesterday|last_7_days|last_30_days (wins over date_from/date_to when set). |
| user_id | – | – | User filter: AliasID as TreeviewUsers NodeType=1. |
Structured output declared, but exposes no named fields.
No examples provided.
get_dashboard Get dashboard widget ~174
Dashboard widgets (metadata only; screenshot blobs stripped when compact).
| Name | Type | Req | Description |
|---|---|---|---|
| compact | boolean | – | – |
| date_from | – | – | Start datetime YYYY-MM-DD or YYYY-MM-DD HH:MM:SS (full day if date-only). |
| date_to | – | – | End datetime; date-only covers until 23:59:59 that day. |
| group_id | – | – | Group filter: TreeviewUsers NodeType=14 (console group id). |
| num_screens | integer | – | Screens tile count. |
| period | – | – | Relative period: today|yesterday|last_7_days|last_30_days (wins over date_from/date_to when set). |
| user_id | – | – | User filter: AliasID as TreeviewUsers NodeType=1. |
| widget | string | – | Dashboard widget id (users, risks, applications, …). |
Structured output declared, but exposes no named fields.
No examples provided.
get_day_structure Day structure ~217
Day structure: mode=list (DayStructureList) or detail (GetDayStructure). detail requires user_id. Filters match console: ProductivityFilter 0–4, ActivityTypeFilter 0–2 (defaults 0).
| Name | Type | Req | Description |
|---|---|---|---|
| activity_type_filter | integer | – | – |
| compact | boolean | – | – |
| date_from | – | – | Start datetime YYYY-MM-DD or YYYY-MM-DD HH:MM:SS (full day if date-only). |
| date_to | – | – | End datetime; date-only covers until 23:59:59 that day. |
| group_id | – | – | Group filter: TreeviewUsers NodeType=14 (console group id). |
| mode | string | – | list = DayStructureList; detail = GetDayStructure (needs user_id). |
| period | – | – | Relative period: today|yesterday|last_7_days|last_30_days (wins over date_from/date_to when set). |
| productivity_filter | integer | – | – |
| user_id | – | – | User filter: AliasID as TreeviewUsers NodeType=1. |
Structured output declared, but exposes no named fields.
No examples provided.
get_idle_summary Idle time summary ~194
Rank users by inactive (idle) time from Productivity/Overall3. Use for: 'who was idle longest?', 'idle > N hours', InactiveTime totals. Do NOT use list_anomalies for idle — Alerts are formal deviations only.
| Name | Type | Req | Description |
|---|---|---|---|
| date_from | – | – | Start datetime YYYY-MM-DD or YYYY-MM-DD HH:MM:SS (full day if date-only). |
| date_to | – | – | End datetime; date-only covers until 23:59:59 that day. |
| group_id | – | – | Group filter: TreeviewUsers NodeType=14 (console group id). |
| min_idle_hours | – | – | Only include users with InactiveTime >= this many hours. |
| period | – | – | Relative period: today|yesterday|last_7_days|last_30_days (wins over date_from/date_to when set). |
| user_id | – | – | User filter: AliasID as TreeviewUsers NodeType=1. |
Structured output declared, but exposes no named fields.
No examples provided.
get_productivity_summary Productivity summary ~148
Per-user productivity rollup (Overall3 + stats + Analytics metrics).
| Name | Type | Req | Description |
|---|---|---|---|
| date_from | – | – | Start datetime YYYY-MM-DD or YYYY-MM-DD HH:MM:SS (full day if date-only). |
| date_to | – | – | End datetime; date-only covers until 23:59:59 that day. |
| group_id | – | – | Group filter: TreeviewUsers NodeType=14 (console group id). |
| period | – | – | Relative period: today|yesterday|last_7_days|last_30_days (wins over date_from/date_to when set). |
| raw | boolean | – | – |
| user_id | – | – | User filter: AliasID as TreeviewUsers NodeType=1. |
Structured output declared, but exposes no named fields.
No examples provided.
get_timesheet Timesheet ~149
Timesheet / attendance summary (POST /api/TimeSheet/Overall2).
| Name | Type | Req | Description |
|---|---|---|---|
| date_from | – | – | Start datetime YYYY-MM-DD or YYYY-MM-DD HH:MM:SS (full day if date-only). |
| date_to | – | – | End datetime; date-only covers until 23:59:59 that day. |
| group_id | – | – | Group filter: TreeviewUsers NodeType=14 (console group id). |
| period | – | – | Relative period: today|yesterday|last_7_days|last_30_days (wins over date_from/date_to when set). |
| raw | boolean | – | – |
| user_id | – | – | User filter: AliasID as TreeviewUsers NodeType=1. |
Structured output declared, but exposes no named fields.
No examples provided.
get_user_info Get user info ~186
User/computer detail reads (SPA GET headers). user_data / tooltip / group: need user_id (AliasID). group = group *path* for that user (not load-by-GroupID). computer / users_from_computer: need computer_guid (ComputerGuid).
| Name | Type | Req | Description |
|---|---|---|---|
| compact | boolean | – | – |
| computer_guid | – | – | – |
| date_from | – | – | Start datetime YYYY-MM-DD or YYYY-MM-DD HH:MM:SS (full day if date-only). |
| date_to | – | – | End datetime; date-only covers until 23:59:59 that day. |
| period | – | – | Relative period: today|yesterday|last_7_days|last_30_days (wins over date_from/date_to when set). |
| source | string | – | User/computer detail source. |
| user_id | – | – | User filter: AliasID as TreeviewUsers NodeType=1. |
Structured output declared, but exposes no named fields.
No examples provided.
list_anomalies List formal alerts ~245
List formal Alerts / deviations (POST /api/Alerts/Overall2). Use for: lateness, overtime, unusual app-share, timetable-fired alerts. Do NOT use for idle/inactive duration — that is get_idle_summary (InactiveTime). Do NOT use for DLP keyword/USB policy hits — that is list_risks.
| Name | Type | Req | Description |
|---|---|---|---|
| compact | boolean | – | – |
| date_from | – | – | Start datetime YYYY-MM-DD or YYYY-MM-DD HH:MM:SS (full day if date-only). |
| date_to | – | – | End datetime; date-only covers until 23:59:59 that day. |
| filter_key | – | – | Optional text filter passed to the Cloud API FilterKey. |
| group_id | – | – | Group filter: TreeviewUsers NodeType=14 (console group id). |
| limit | integer | – | Max rows to return (1–500). |
| offset | integer | – | Pagination offset (0-based). |
| period | – | – | Relative period: today|yesterday|last_7_days|last_30_days (wins over date_from/date_to when set). |
| user_id | – | – | User filter: AliasID as TreeviewUsers NodeType=1. |
Structured output declared, but exposes no named fields.
No examples provided.
list_api_coverage API coverage matrix ~26
Static gap matrix: which console APIs are covered vs intentional out-of-scope.
Input schema present but exposes no named parameters.
Structured output declared, but exposes no named fields.
No examples provided.
list_directory List directory ~58
Directory reads: users/groups tree, users, groups, computers, additional operators. users_groups is session-cached (~5 min); pass refresh=true to force reload.
| Name | Type | Req | Description |
|---|---|---|---|
| refresh | boolean | – | – |
| source | string | – | Directory Get source. |
Structured output declared, but exposes no named fields.
No examples provided.
list_monitoring List monitoring ~272
Single Monitoring list (Sites, Apps, Screens, Keystrokes, Mail, …). For keyword search across many Monitoring kinds (console Tools → Search), use search_monitoring(filter_key=…) instead of calling this 13–19 times. Sensitive kinds return text truncated when compact=true. No binary media.
| Name | Type | Req | Description |
|---|---|---|---|
| compact | boolean | – | – |
| date_from | – | – | Start datetime YYYY-MM-DD or YYYY-MM-DD HH:MM:SS (full day if date-only). |
| date_to | – | – | End datetime; date-only covers until 23:59:59 that day. |
| filter_key | – | – | Optional text filter passed to the Cloud API FilterKey. |
| filter_objects | – | – | Optional FilterObjects JSON/string for Monitoring POST. |
| group_id | – | – | Group filter: TreeviewUsers NodeType=14 (console group id). |
| kind | string | yes | Monitoring table: Sites|Apps|Keystrokes|Mail|… |
| limit | integer | – | Max rows to return (1–500). |
| offset | integer | – | Pagination offset (0-based). |
| period | – | – | Relative period: today|yesterday|last_7_days|last_30_days (wins over date_from/date_to when set). |
| user_id | – | – | User filter: AliasID as TreeviewUsers NodeType=1. |
Structured output declared, but exposes no named fields.
No examples provided.
list_online List online presence ~151
Online presence (POST /api/Live/Overall2). No webcam or live stream frames.
| Name | Type | Req | Description |
|---|---|---|---|
| compact | boolean | – | – |
| date_from | – | – | Start datetime YYYY-MM-DD or YYYY-MM-DD HH:MM:SS (full day if date-only). |
| date_to | – | – | End datetime; date-only covers until 23:59:59 that day. |
| group_id | – | – | Group filter: TreeviewUsers NodeType=14 (console group id). |
| period | – | – | Relative period: today|yesterday|last_7_days|last_30_days (wins over date_from/date_to when set). |
| user_id | – | – | User filter: AliasID as TreeviewUsers NodeType=1. |
Structured output declared, but exposes no named fields.
No examples provided.
list_reports List reports ~18
List scheduled report mailing settings and background processing tasks.
Input schema present but exposes no named parameters.
Structured output declared, but exposes no named fields.
No examples provided.
list_risks List DLP risks ~258
List or summarize DLP/rule Risks for a period. Use for: policy/keyword/USB/AI rule hits. Default mode=summary (by_user from Analytics/Overall; by_rule/by_day/sample from Risks/Overall2). Not for idle time (get_idle_summary) or timetable deviations (list_anomalies).
| Name | Type | Req | Description |
|---|---|---|---|
| compact | boolean | – | – |
| date_from | – | – | Start datetime YYYY-MM-DD or YYYY-MM-DD HH:MM:SS (full day if date-only). |
| date_to | – | – | End datetime; date-only covers until 23:59:59 that day. |
| fetch_all | boolean | – | – |
| group_id | – | – | Group filter: TreeviewUsers NodeType=14 (console group id). |
| limit | integer | – | Max rows to return (1–500). |
| mode | string | – | summary = by_user/by_rule rollup; raw = Risks/Overall2 page. |
| offset | integer | – | Pagination offset (0-based). |
| period | – | – | Relative period: today|yesterday|last_7_days|last_30_days (wins over date_from/date_to when set). |
| user_id | – | – | User filter: AliasID as TreeviewUsers NodeType=1. |
Structured output declared, but exposes no named fields.
No examples provided.
list_stream_meta Stream metadata ~189
Desktop video metadata (SPA GET contracts; no DownloadVideo). which_content: needs user_id; uses DateTo (or period end) as DateTime. videos: needs user_id + DateFrom/DateTo (UserID header). downloads: Bearer only (exported file list).
| Name | Type | Req | Description |
|---|---|---|---|
| compact | boolean | – | – |
| date_from | – | – | Start datetime YYYY-MM-DD or YYYY-MM-DD HH:MM:SS (full day if date-only). |
| date_to | – | – | End datetime; date-only covers until 23:59:59 that day. |
| period | – | – | Relative period: today|yesterday|last_7_days|last_30_days (wins over date_from/date_to when set). |
| source | string | – | which_content/videos need user_id; downloads is export list. |
| user_id | – | – | User filter: AliasID as TreeviewUsers NodeType=1. |
Structured output declared, but exposes no named fields.
No examples provided.
list_users_groups List users and groups ~88
List users and groups tree (GetUsersGroups2). Type 0=root, 1=group, 2=user. These Type values are for the UI tree only. For report POST filters use NodeType 14=group and NodeType 1=user (AliasID). Cached ~5 min per MCP session; pass refresh=true to force reload.
| Name | Type | Req | Description |
|---|---|---|---|
| refresh | boolean | – | – |
Structured output declared, but exposes no named fields.
No examples provided.
octowatch_whoami Who am I ~31
Show which OctoWatch API host and account the MCP server is using (password never returned).
Input schema present but exposes no named parameters.
Structured output declared, but exposes no named fields.
No examples provided.
search_monitoring Search monitoring ~295
Console Tools → Search: parallel Monitoring fan-out with FilterKey. Use for: 'find keyword X across activity' (sites/apps/keys/mail/files/…). Prefer this over calling list_monitoring many times. Not for Risks (list_risks), idle (get_idle_summary), or formal Alerts (list_anomalies). Does not search SearchQueries. kinds: optional comma-separated subset (e.g. "Sites,Apps,Mail" or "sites,mail"). Default = all Tools Search sources.
| Name | Type | Req | Description |
|---|---|---|---|
| date_from | – | – | Start datetime YYYY-MM-DD or YYYY-MM-DD HH:MM:SS (full day if date-only). |
| date_to | – | – | End datetime; date-only covers until 23:59:59 that day. |
| filter_key | string | yes | Keyword for Tools → Search fan-out across Monitoring. |
| group_id | – | – | Group filter: TreeviewUsers NodeType=14 (console group id). |
| kinds | – | – | Optional comma-separated kinds, e.g. Sites,Apps,Mail. |
| max_rows | integer | – | – |
| offset | integer | – | Pagination offset (0-based). |
| per_source_limit | integer | – | – |
| period | – | – | Relative period: today|yesterday|last_7_days|last_30_days (wins over date_from/date_to when set). |
| user_id | – | – | User filter: AliasID as TreeviewUsers NodeType=1. |
Structured output declared, but exposes no named fields.
No examples provided.
What is the OctoWatch DLP MCP server?
OctoWatch DLP is an MCP server listed in the public MCP registry as io.github.extralabs/octowatch-mcp. Read-only OctoWatch DLP Cloud MCP: risks, idle time, productivity, monitoring. This page covers its PyPI package (octowatch-mcp).
Is the OctoWatch DLP MCP server safe to use?
OctoWatch DLP scores 83 out of 100 on VerifyMCP. We found no known CVEs affecting it as of 20 September 2026. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.
What tools does the OctoWatch DLP MCP server expose?
OctoWatch DLP exposes 22 tools: octowatch_whoami, list_users_groups, list_risks, list_anomalies, get_idle_summary, and 17 more. Their descriptions and schemas cost roughly 3,565 tokens of context every time the server is loaded.
Is the OctoWatch DLP MCP server still maintained?
OctoWatch DLP is still listed as active in the MCP registry. We last reached this channel on 20 September 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.
What licence is the OctoWatch DLP MCP server under?
OctoWatch DLP declares the MIT licence, which is OSI-approved. That covers the source only, and says nothing about the cost of any service it calls.