MCP server · Audited from source
keeper.sh MCP server
by ridafkih/keeper.shAGPL-3.0 licenceAudited 30 Oct 2026 · source 94d29b28ebe4
Is it safe? No — BLOCK, grade F (41/100). It exposes 2 tools: 2 read, 0 write and 0 destructive. The audit recorded 56 findings (0 critical, 2 high, 14 medium, 39 low). Maintainer's description: Calendar sync tool & universal calendar MCP server. Aggregate, sync and control calendars on Google, Outlook, Office 365, iCloud, CalDAV or ICS.
Cite
Cite this page
ModelsAtlas. “keeper.sh MCP server (ridafkih/keeper.sh)”. Retrieved 30 Oct 2026. https://modelsatlas.com/mcp/ridafkih/keeper-sh
Why this is BLOCK. The audit found 0 critical and 2 high findings; the most severe is Inventory / provenance at services/api/src/handlers/websocket-payload.ts. Each finding is listed below with its file and line.
Why this page is still public. People search for this server by name. Hiding it would leave them with the README's word alone; here they see what the code does. We list it so you can decide, and we do not show connect commands for BLOCK servers.
Trust audit
Audit 0.4.1 · full source read 30 Oct 2026
56 findings, listed below with the file and line each was found on. Grade A needs a sandboxed behavioural run too; this audit read the source only.
What the source does
- FilesystemDeclared9 observations
- NetworkDeclared12 observations
- ShellDeclared1 observation
- DependenciesNot pinnedSome ranges float
- SecretsFoundSee the findings
Findings (56)
Sorted by severity · the 25 most severe of 56 are listed
HIGHInventory / provenanceinv.suspicious_name · services/api/src/handlers/websocket-payload.ts
websocket-payload.ts
- Why
- member named after an attack tool
- Fix
- remove or justify
HIGHCode injectioncode.eval_exec · packages/calendar/src/core/utils/redis-rate-limiter.ts:38
eval(script: string, numberOfKeys: number, ...arguments_: string[]): Promise<unknown>;
- Why
- evaluates text as code
- Fix
- remove; use a parser or a dispatch table
MEDIUMNetwork egressnet.raw_ip · docker/services/Dockerfile:72
ENV VITE_API_URL=http://127.0.0.1:3001
- Why
- No further detail recorded for this rule.
- Fix
- —
MEDIUMNetwork egressnet.raw_ip · docker/standalone/Dockerfile:94
ENV VITE_API_URL=http://127.0.0.1:3001
- Why
- No further detail recorded for this rule.
- Fix
- —
MEDIUMObfuscation / stealthobf.zero_width · packages/calendar/src/ics/utils/apply-patches.ts:48
const BYTE_ORDER_MARK = "";
- Why
- No further detail recorded for this rule.
- Fix
- —
MEDIUMHard-coded secretssecret.db_uri · .github/workflows/checks.yml:201
Excerpt withheld: it is a secret, and we never print one.
- Why
- No further detail recorded for this rule.
- Fix
- —
MEDIUMHard-coded secretssecret.db_uri · .github/workflows/checks.yml:268
Excerpt withheld: it is a secret, and we never print one.
- Why
- No further detail recorded for this rule.
- Fix
- —
MEDIUMHard-coded secretssecret.db_uri · README.md:91
Excerpt withheld: it is a secret, and we never print one.
- Why
- No further detail recorded for this rule.
- Fix
- —
MEDIUMHard-coded secretssecret.db_uri · README.md:411
Excerpt withheld: it is a secret, and we never print one.
- Why
- No further detail recorded for this rule.
- Fix
- —
MEDIUMHard-coded secretssecret.db_uri · README.md:540
Excerpt withheld: it is a secret, and we never print one.
- Why
- No further detail recorded for this rule.
- Fix
- —
MEDIUMHard-coded secretssecret.generic · packages/auth/tests/a-microsoft-sign-in-links-only-an-asserted-email.test.ts:14
Excerpt withheld: it is a secret, and we never print one.
- Why
- No further detail recorded for this rule.
- Fix
- —
MEDIUMHard-coded secretssecret.generic · packages/auth/tests/abandoned-unverified-registration-reclaim.test.ts:11
Excerpt withheld: it is a secret, and we never print one.
- Why
- No further detail recorded for this rule.
- Fix
- —
MEDIUMHard-coded secretssecret.generic · packages/auth/tests/an-outlook-sign-in-records-the-email-as-verified.test.ts:8
Excerpt withheld: it is a secret, and we never print one.
- Why
- No further detail recorded for this rule.
- Fix
- —
MEDIUMHard-coded secretssecret.generic · packages/auth/tests/mcp-token-version-flow.test.ts:181
Excerpt withheld: it is a secret, and we never print one.
- Why
- No further detail recorded for this rule.
- Fix
- —
MEDIUMHard-coded secretssecret.generic · packages/auth/tests/mcp-token-version-flow.test.ts:201
Excerpt withheld: it is a secret, and we never print one.
- Why
- No further detail recorded for this rule.
- Fix
- —
MEDIUMAuth / authzmcp.remote_no_auth
streamable-http
- Why
- a network transport with no auth environment variable found
- Fix
- require a token
LOWInventory / provenanceinv.suspicious_name · services/api/tests/handlers/websocket-payload.test.ts
websocket-payload.test.ts
- Why
- member named after an attack tool
- Fix
- remove or justify
LOWCode injectioncode.eval_exec · packages/calendar/tests/core/utils/rate-limiter-abandoned-waiter.test.ts:17
eval(script: string, numberOfKeys: number, ...arguments_: string[]): Promise<unknown>;
- Why
- evaluates text as code
- Fix
- remove; use a parser or a dispatch table
LOWCode injectioncode.eval_exec · packages/calendar/tests/core/utils/rate-limiter-arrival-order.test.ts:11
eval(script: string, numberOfKeys: number, ...arguments_: string[]): Promise<unknown>;
- Why
- evaluates text as code
- Fix
- remove; use a parser or a dispatch table
LOWCode injectioncode.eval_exec · packages/calendar/tests/core/utils/rate-limiter-lost-join-reply.test.ts:12
eval(script: string, numberOfKeys: number, ...arguments_: string[]): Promise<unknown>;
- Why
- evaluates text as code
- Fix
- remove; use a parser or a dispatch table
Tools it exposes
2 declared in source · 0 destructive
| Tool | What it does | Risk |
|---|---|---|
Free | Enough for two calendar accounts and three connections. | read |
Pro | As many calendars as you want, with Google and Outlook changes landing within seconds. | read |
Safer alternatives
All calendar & office servers →conorbronsdon/gws-mcp-server
Curated MCP server for Google Workspace: Gmail, Calendar, Drive, Sheets, Docs, and Tasks via the official gws CLI. 67 focused tools instead of 400, side effects declared on every one. The permissions leg of trust infrastructure for agents.
deciduus/calendar-mcp
Google Calendar MCP server: 23 tools for LLM agents. Install with uvx calendar-mcp-server.
verygoodplugins/mcp-evernote
MCP server for Evernote integration with note management and synchronization
Audit history
- ✕BLOCK F 41 / 100
First audit ·
94d29b28ebe4
README badge
Badges show the current verdict, BLOCK included
A badge cannot be hidden by the maintainer while the verdict is BLOCK. Fix the findings, push, and the re-audit updates it.
Questions about keeper.sh MCP server
What is the keeper.sh MCP server?
What tools does keeper.sh expose?
Is keeper.sh safe to connect to an agent?
What credentials does keeper.sh need?
How does keeper.sh run?
How current is this page?
I already installed keeper.sh. What should I do?
Can the verdict change?
Sources
- ridafkih/keeper.sh on GitHub — the source we read, its licence, stars and activityObserved · 30 Oct 2026
- ModelsAtlas trust audit — BLOCK verdict for commit 94d29b28ebe4Observed · 30 Oct 2026
Spotted something wrong? Report a correction · Methodology
Keep going in your AI
Opens with this page as the source. We add nothing else to the prompt.
- What is the keeper.sh MCP server?
- What tools does keeper.sh expose?
- Is keeper.sh safe to connect to an agent?