MCP, MCP server
io.github.RecallWorks/recall
io.github.RecallWorks/recall, an MCP server listed in the PlugVet directory.
Compatibility: Not stated.
Grade B
Minor issues only, no Medium or High. Worth a quick look at the findings below before installing.
Not a guarantee. A hygiene check of the source at the commit shown, not a security audit.
Rescanned at commit cf6895cbdd2e, unchanged since the check below.
PERMISSION_DELETE_FILES NETWORK_NO_FIXED_HOST SECRETS_PATH_DOTENV SECRETS_ENV_READ
Why this grade
- PERMISSION_DELETE_FILES Low
Contains a call that can delete files.
src/recall/git_sync.py, line 39
proc = subprocess.run( - NETWORK_NO_FIXED_HOST Low
Makes a network call whose host is not written as a fixed address.
clients/typescript/src/client.ts, line 15
/** Custom fetch (for testing). Defaults to global fetch. */ - SECRETS_PATH_DOTENV Low
Mentions a .env file.
src/recall/config.py, line 5
Azure-specific paths. Operators override via env vars or .env file. - SECRETS_ENV_READ Note
Reads an environment variable whose name contains KEY, SECRET, TOKEN, PASSWORD or CREDENTIAL.
examples/python/agent_memory.py, line 19
KEY = os.environ.get("RECALL_KEY", "changeme")
Any High, or two or more Medium findings, give D. One Medium gives C. Low findings or a security Note give B. Each code names a finding behind the letter.
Grades are a hygiene check of the source at the commit shown, on the date checked, not a security audit or a guarantee. The free directory grades are automated. Before release, a PlugVet engineer reviews every paid report and any grade we hold back, including all F grades, against the source code and the evidence we quote.
What was checked
Plain notes from the hygiene checks.
Permissions
Concern
can delete files.
PERMISSION_DELETE_FILES
src/recall/git_sync.py, line 39
proc = subprocess.run(
src/recall/git_sync.py, line 50
shutil.rmtree(str(repo_path), ignore_errors=True)
src/recall/git_sync.py, line 54
shutil.rmtree(str(repo_path), ignore_errors=True)
Show more
src/recall/git_sync.py, line 56
proc = subprocess.run(
src/recall/snapshot.py, line 40
shutil.rmtree(backup_dir, ignore_errors=True)
src/recall/snapshot.py, line 45
shutil.rmtree(backup_dir, ignore_errors=True)
src/recall/snapshot.py, line 49
shutil.rmtree(tmp_dir, ignore_errors=True)
src/recall/tools/maintenance.py, line 49
proc = subprocess.run(
Install and update
Pass
No install-time script found, and dependencies are pinned or absent.
Network
Concern
can reach a host that is not written as a fixed address.
NETWORK_NO_FIXED_HOST
clients/typescript/src/client.ts, line 15
/** Custom fetch (for testing). Defaults to global fetch. */
examples/bash/curl_round_trip.sh, line 14
curl -s "$URL/health"
examples/bash/curl_round_trip.sh, line 18
curl -s -X POST "$URL/tool/remember" \
Show more
examples/bash/curl_round_trip.sh, line 25
curl -s -X POST "$URL/tool/recall" \
examples/python/agent_memory.py, line 25
r = requests.post(f"{URL}/tool/{tool}", headers=H, json=payload, timeout=120)
examples/python/agent_memory.py, line 32
print("server:", requests.get(f"{URL}/health", headers=H, timeout=10).json())
Dockerfile, line 48
CMD python -c "import urllib.request,sys; r=urllib.request.urlopen('http://127.0.0.1:8787/health',timeout=3); sys.exit(0 if r.status==200 else 1)" || exit 1
README.md, line 196
requests.post("http://localhost:8787/tool/remember", headers=h,
README.md, line 198
print(requests.post("http://localhost:8787/tool/recall", headers=h,
docker/single-tenant/Dockerfile, line 57
CMD python -c "import urllib.request,sys; r=urllib.request.urlopen('http://127.0.0.1:8787/health',timeout=3); sys.exit(0 if r.status==200 else 1)" || exit 1
Secrets
Concern
reads a credential or environment file.
SECRETS_ENV_READ SECRETS_PATH_DOTENV
examples/python/agent_memory.py, line 19
KEY = os.environ.get("RECALL_KEY", "changeme")
examples/typescript/agent_memory.ts, line 14
const KEY = process.env.RECALL_KEY ?? "changeme";
src/recall/config.py, line 5
Azure-specific paths. Operators override via env vars or .env file.
Show more
src/recall/config.py, line 70
raw = os.environ.get("API_KEYS", "")
src/recall/config.py, line 71
api_key = os.environ.get("API_KEY", "")
src/recall/config.py, line 93
c.git_token = os.environ.get("GIT_TOKEN", "")
src/recall/embedder.py, line 151
api_key=os.environ.get("RECALL_EMBED_API_KEY") or os.environ.get("OPENAI_API_KEY", ""),
src/recall/embedder.py, line 162
api_key=os.environ.get("RECALL_EMBED_API_KEY") or os.environ.get("VOYAGE_API_KEY", ""),
src/recall/license.py, line 128
key = os.environ.get("RECALL_LICENSE_KEY", "").strip()
.gitignore, line 15
# Secrets
agent-os/.gitignore, line 11
config.json
agent-os/.gitignore, line 12
.env
agent-os/.gitignore, line 14
!.env.example
agent-os/brain/docker-compose.yml, line 25
# - RECALL_API_KEY=set-me-in-.env
Agent instructions
Pass
No instruction to ignore earlier instructions or to hide a step.
Obfuscation
Pass
No encoded or minified payload found.
Licence
Pass
A licence file is present (LICENSE).
Maintainer activity
Pass
The latest commit is within the last 365 days.
Note
Hygiene check of commit cf6895cbdd2e. can delete files. can reach a host that is not written as a fixed address. reads a credential or environment file.
Date and source
Date checked:
github.com
Commit graded: cf6895cbdd2e6a5572770fe764c43e7331442cd9
This link goes to the original host. PlugVet does not host or check what you download from there, and installing it is your own decision and risk.