watchcheck
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@watchcheckScan for Chinese enterprise monitoring tools"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
watchcheck ๐
English | ็ฎไฝไธญๆ
See what's actually running on your Mac โ and who's watching.
watchcheck reads the processes on your Mac (read-only) and turns cryptic names into plain language: what each one is, who makes it, and โ its specialty โ whether it's endpoint-monitoring software (EDR / DLP / MDM / network & print auditing). It has first-class coverage of Chinese enterprise monitoring agents (ๆทฑไฟกๆ Sangfor, ไบฟ่ต้ ESafeNet, IP-Guard, ๅฅๅฎไฟก, 360, ่่ฝฏ, ๅคฉ็ฉบๅซๅฃซ, ๅไฟกๆบ, and other domestic EDR/DLP/MDM tools) that Western tools โ Little Snitch, KnockKnock, even general-purpose LLMs โ consistently misidentify or don't know at all.
Two ways to use it
One read-only engine, two front-ends โ pick either or both:
๐ฅ๏ธ Live panel | ๐ค MCP server | |
What | A local, auto-refreshing dashboard that reads your current processes โ like Activity Monitor, but it explains each one and flags monitoring software | Plugs into your AI assistant (Claude, Cursor, โฆ) so the LLM can read your live processes and answer questions about them |
For | Anyone โ no AI, no account, no setup beyond install | People who live in an AI client and want to ask in their own words |
Run |
| add to your MCP config, then ask Claude |
Network | none โ binds | none โ local stdio |
watchcheck is read-only and honest by design. It identifies software and describes what that class of software is capable of per vendor docs. It does not prove any tool is actively capturing you right now, and it cannot see the content of any data being sent. It is a transparency tool, not a way to evade legitimate corporate policy. On a company-managed device, removing or tampering with required software may violate your employment agreement.
Related MCP server: macos-control-mcp
Install
Requires Python 3.10+ and macOS.
# with uv (recommended)
uv tool install watchcheck # once published
# or from source
git clone https://github.com/derkcc/watchcheck && cd watchcheck
uv venv --python 3.12 && uv pip install -e .๐ฅ๏ธ The live panel
A local, read-only dashboard that re-collects your processes / CPU / memory / GPU
every couple of seconds and explains them. Binds 127.0.0.1 only โ never touches
the network, never modifies anything.
watchcheck panel # opens http://127.0.0.1:8787/
watchcheck panel --lang en --interval 2 --port 8787Activity-Monitor-style tabs โ Monitoring / CPU / Memory / GPU / All processes โ where every process row carries an inline plain-language explanation and a ๐ข/๐ด/โช marker; monitoring software is flagged with its capabilities and evidence.
Prefer a static, shareable file instead of a live server?
watchcheck report # one-shot HTML snapshot โ ~/watchcheck-report.html
watchcheck report --lang en # English (~/watchcheck-report.en.html)Both are bilingual (--lang zh|en). GPU is reported system-wide โ macOS exposes
no per-process GPU without sudo.
๐ค The MCP server
Let your AI assistant read and explain your live processes. Add to your MCP client
config โ Claude Desktop (~/Library/Application Support/Claude/claude_desktop_config.json):
{
"mcpServers": {
"watchcheck": { "command": "watchcheck" }
}
}From source (no install):
{
"mcpServers": {
"watchcheck": {
"command": "uv",
"args": ["--directory", "/path/to/watchcheck", "run", "watchcheck"]
}
}
}Then just ask:
"Scan my Mac โ is my company monitoring me, and what can they see?" "What is
acnvmagent?" "What monitoring tools does watchcheck know about?"
How it works (no screenshots needed)
You never copy process names or paste screenshots. The server runs on your Mac and reads the live process list itself; Claude calls it and explains the result.
flowchart TD
A["You โ ask in plain language<br/>(no screenshots, no copy-paste)"] --> B["Claude picks a tool:<br/>scan / overview / explain_process"]
B --> C["watchcheck runs locally on your Mac<br/>reads processes via ps / launchd / certs<br/>read-only ยท no network ยท nothing modified"]
C --> D["Returns structured facts:<br/>vendor / type / capabilities / CPU ยท memory<br/>(things it doesn't know are marked 'unknown')"]
D --> E["Claude explains in plain language<br/>and answers follow-ups"]
E --> ADivision of labor: watchcheck reads the processes and supplies the facts
(from its signature DB); Claude orchestrates the calls, turns the facts into
plain language, and fills in anything marked unknown from its own knowledge.
Tools exposed
Tool | What it does |
| Read-only scan โ identified monitoring software with evidence, capabilities, privacy impact |
| Typed breakdown of everything running (Apple system / browser / cloud / your own VPN / monitoring / unknown โฆ), duplicates collapsed, with CPU/memory/GPU |
| Explain one process / label / bundle id in plain language |
| The full catalog of what watchcheck can identify (transparency) |
| Raw collected artifacts, no matching (for investigating unknowns / contributing) |
How it works
watchcheck reads only what macOS already exposes โ nothing is modified, no files are read for content, no network calls:
Source | Command | What it reveals |
Processes |
| Running agents + CPU / memory |
Persistence | LaunchDaemons/Agents plists | What auto-starts |
System extensions |
| Network / endpoint-security filters |
Kernel extensions |
| Kernel-level agents (highest privilege) |
MDM |
| DEP / MDM enrollment |
Certificates |
| Corporate root CAs (HTTPS interception) |
GPU |
| System-wide GPU utilization |
It then matches these against two data files: a curated, community-maintained
monitoring signature DB
(signatures.yaml โ the part that knows
Chinese enterprise tools) and a common-process catalog
(common_processes.yaml โ everyday
macOS processes), so it can reassure you that most of what's running is normal
and clearly flag what isn't. The signature DB is the whole point; everything else
is a thin, replaceable shell.
Contributing signatures (the important part)
Coverage of Chinese enterprise tools on macOS is the gap, and it's where you can
help most. If raw_inventory (or the panel's "unknown" rows) shows something
watchcheck doesn't recognize:
Find the artifact (process name, launchd label, bundle id, kext id, cert CN, path).
Add an entry to
signatures.yamlfollowing the schema and the honesty rules at the top of that file.Set
verified: trueonly if you confirmed it on a real machine.Open a PR. See CONTRIBUTING.md.
Signatures are facts about software, contributed by people who see it in the wild. That's the moat โ and it only grows with help.
Roadmap
Windows + Linux collectors
Optional
outbound_activity(which monitoring processes have live connections โ volume/destination only, never content)Wider Chinese-vendor macOS signatures
Per-process CPU sparklines in the live panel
License
MIT. See LICENSE.
Vendor and product names are used nominatively to identify software. No affiliation with or endorsement by any vendor is implied.
Available Tools
5 toolsexplain_processA
Explain one process / launchd label / bundle id in plain language.
Built for non-technical users who paste a single name from Activity Monitor
(e.g. "WindowServer", "EasyConnect", "GoogleSoftwareUpdate"). Resolution order:
monitoring signature โ common benign catalog โ returns unknown so the host
LLM can explain the long tail. Always answers something useful.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden. It discloses the resolution order (monitoring signature โ common benign catalog โ returns unknown) and guarantees it always answers something useful. This gives insight into behavior without revealing internal details, which is sufficient for a simple read-only tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three sentences, front-loaded with the purpose, then usage context, then behavioral detail. Every sentence adds value without redundancy, making it highly concise and well-structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (one parameter), the presence of an output schema, and the clear explanation of input and behavior, the description is fully complete. It does not need to explain return values as the output schema covers that.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has a single string parameter 'name' with 0% description coverage. The description adds significant value by explaining that the name comes from Activity Monitor, providing concrete examples (WindowServer, EasyConnect, GoogleSoftwareUpdate), and clarifying it can be a process, launchd label, or bundle ID.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'explain' and the resource 'one process / launchd label / bundle id' in plain language. It distinguishes itself from sibling tools like list_signatures and raw_inventory by specifying that it explains a single item, not lists or scans.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly targets non-technical users pasting a single name from Activity Monitor, providing usage context and resolution order. However, it does not explicitly state when not to use the tool or recommend alternatives among siblings, though it is implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_signaturesA
List everything watchcheck can currently identify (transparency).
Returns the signature catalog (vendor, product, category, origin, coverage) without the raw match tokens. Use this to tell the user what the tool knows โ and what gaps remain (especially Chinese enterprise tools).
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It discloses that it returns a catalog without raw match tokens and is for transparency, but it does not cover behavioral traits like rate limits, authentication, or potential side effects. The description adds moderate value beyond the schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, front-loaded with the core purpose, and every word adds value. No extraneous content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no parameters and an output schema (implied), the description fully covers the tool's purpose and output structure. It explains the return fields and the use case for transparency, making it complete for an agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so schema coverage is 100% by default. The description does not need to add parameter information, and a baseline of 4 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it lists everything watchcheck can identify, with a specific resource ('signature catalog') and fields returned (vendor, product, etc.). It also mentions the purpose of transparency and identifying gaps, distinguishing it from sibling tools that likely have different scopes.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly says 'Use this to tell the user what the tool knows โ and what gaps remain', providing clear usage context. However, it does not mention when not to use it or direct alternatives among siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
overviewA
Friendly typed overview of EVERYTHING running on this Mac (read-only).
For users who don't understand processes: classifies every running process into types (Apple system / browser / cloud-sync / updater / communication / your own VPN / monitoring / unknown ...), collapses duplicates (e.g. 30 Chrome helpers -> 1), and flags monitoring software. Present the type counts first, reassure that most are normal, then call out anything flagged.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It explicitly states the tool is read-only, classifies processes, collapses duplicates, and flags monitoring software. It does not disclose potential performance impacts or authorization requirements, but the core behavior is transparent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise with three sentences: the first defines the tool's purpose, the second details functionality, and the third gives output presentation advice. No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the tool's purpose, behavior, and output usage. An output schema exists, so details about return structure are not required. It could briefly mention the format of the overview, but completeness is good.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so the description need not add parameter info. The schema coverage is trivially 100%. The description adds no param details, which is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it provides a friendly overview of all running processes on the Mac, classifying them into types and collapsing duplicates. This distinguishes it from siblings like raw_inventory (unfiltered list) or explain_process (individual process).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description targets users who don't understand processes, giving clear context for when to use this tool. It also provides presentational guidance (type counts first, then flags). However, it does not explicitly exclude alternative tools or state when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
raw_inventoryA
Return the raw read-only inventory with NO matching (power users).
Dumps processes, launchd jobs, extensions, kexts, certs and MDM status as collected. Use this to investigate something watchcheck didn't recognize, or to gather artifacts for a new signature contribution.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Despite no annotations, the description fully discloses the tool's read-only nature and what data it returns ('as collected'). It also implies no side effects by calling it 'raw read-only inventory'. This is sufficient for an agent to understand the behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three sentences with minimal waste. It could be slightly tightened by removing 'power users' parenthetical, but it remains clear and front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no parameters, an output schema exists, and low complexity, the description covers all necessary context: what the tool does, what it returns, and when to use it. No gaps identified.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With zero parameters and 100% schema coverage, the description doesn't need to add parameter details. The baseline is 4, and the description does not miss anything in this dimension.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description explicitly states 'Return the raw read-only inventory' with a clear verb and resource. It lists the specific contents (processes, launchd jobs, etc.) and distinguishes itself from sibling tools like 'watchcheck' by emphasizing 'NO matching' for power users.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit use cases: 'investigate something watchcheck didn't recognize' or 'gather artifacts for a new signature contribution.' This clearly guides the agent on when to use this tool versus alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
scanA
Scan this Mac (read-only) and report identified monitoring software.
Inspects running processes, launchd jobs, system/kernel extensions, MDM enrollment and trusted certificates, then matches them against the watchcheck signature database. Returns identified EDR/DLP/MDM/network-audit software with evidence, capabilities and privacy impact. Group the result by category and explain each finding in plain language for the user.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description fully covers behavioral traits: read-only, inspection of processes, launchd, extensions, MDM, certificates, matching against a signature database, and return of grouped results with evidence, capabilities, and plain-language explanations. No contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise at about 100 words across 6 sentences, front-loaded with the main purpose. Each sentence adds distinct value without redundancy or fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity of scanning for monitoring software and the presence of an output schema, the description adequately covers input (none), the inspection process, and the output format (grouped findings with evidence and explanations).
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so schema coverage is trivially 100%. The description does not need to add parameter details, and the baseline for zero parameters is 4.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly specifies the verb 'scan', the resource 'this Mac', and the read-only nature, distinguishing it from sibling tools that focus on individual processes (explain_process), signatures (list_signatures), overview (overview), or raw data (raw_inventory).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description states the tool is read-only, implying safe usage. It implicitly indicates when to use (to detect monitoring software) but does not explicitly enumerate when not to use or contrast with alternatives beyond the sibling list.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.
5 tool updates
v0.1.0- First observed
explain_process - First observed
list_signatures - First observed
overview - First observed
raw_inventory - First observed
scan
TDQS
Each tool has a distinct purpose: explain_process explains a single process, list_signatures shows the catalog, overview gives a high-level summary, raw_inventory provides raw data for power users, and scan performs a full monitoring detection. No overlap.
Tool names use snake_case but mix conventions: verb_noun (explain_process, list_signatures), single word (overview, scan), and noun phrase (raw_inventory). While readable, the pattern is inconsistent.
Five tools is well-scoped for the server's purpose of monitoring software detection. Each tool serves a clear role without redundancy, fitting within the ideal 3-15 range.
The tool set covers the core workflow of scanning, explaining, and listing known signatures. A minor gap exists in advanced features like diffing scans, but the domain is well-covered for transparency and detection.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Read-only MCP server for turva.dev, an agent-readiness audit and advisory service.
A comprehensive Model Context Protocol (MCP) server that enables AI assistants to interact with yoโฆ
Paid remote MCP for LLM security scans, jailbreak checks, analytics, checkout, and readiness.
Personal assistant MCP server with search, execute, packages, jobs, secrets, and integrations.
Related MCP Servers
- AlicenseAqualityDmaintenanceAn MCP server that lets AI assistants see your macOS desktop, capture screenshots, read browser tabs, and preview files via local macOS tools.420MIT
- AlicenseBqualityDmaintenanceMCP server that enables AI to fully control macOS โ mouse, keyboard, terminal, screenshots, window management, UI element detection, and provides AI-optimized information reporting.3620MIT
- FlicenseNot gradedqualityBmaintenanceEnterprise-grade macOS MCP server that gives AI agents eyes, hands, and a terminal, enabling screen capture, mouse/keyboard control, shell commands, and file operations.-
- AlicenseBqualityAmaintenanceEnables AI agents to directly access native macOS services, media, system health, and administration tools through a local MCP server.4039MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/derkcc/watchcheck'
If you have feedback or need assistance with the MCP directory API, please join our Discord server