← MCP servers · blogminhquy

javis-os

BLOCKgrade F · trust 28/100

None

agent operationsagent optimizationagent orchestrationagent orchestratoragent osai agentai agentsharness

Overview

From the repository's own README, as read at the audited commit.

<div align="center"># 🧠 Javis OS**AI agentic đổi được bộ não + Second Brain - chạy trên model nào bạn muốn (Claude Code, ChatGPT/Codex, Antigravity CLI, OpenRouter, OpenAI, Gemini, Anthropic API, Groq, Ollama), có giọng nói, đồ thị tri thức, và tự thông minh dần lên.*****Tiếng Việt** · [English](README.en.md)*</div>---## Javis là gì?Javis OS **không phải** một chatbot. Nó là một **AI agentic tự host** chạy trên máy/VPS của bạn: đọc/ghi file, gọi công cụ (MCP), chạy skill, giao việc chạy nền, tự đặt lịch - rồi gói tất cả vào một **dashboard đẹp, điều khiển bằng giọng nói**, kèm một **Second Brain** (bộ nhớ + wiki) tích luỹ tri thức theo thời gian.**Bộ não thì bạn chọn, và đổi lúc nào cũng được.** Mười đường dùng được ngay: **Claude Code**, **ChatGPT/Codex** và **Antigravity CLI** (dùng chính gói subscription bạn đang trả, không cần mua API riêng), **Gemini CLI · OpenRouter · OpenAI API · Google Gemini · Anthropic API · Groq · Ollama Cloud** (chỉ cần API key).> ⚠️ **Đọc trước khi cho gói subscription chạy việc nền.** Anthropic chỉ tính gói Claude Pro/Max cho việc dùng **cá nhân, thông thường** của Claude Code. Chạy nền liên tục (loop, nhắc hẹn, việc Kanban, chatbot), chạy trên VPS, hoặc nhiều người dùng chung một tài khoản đều nằm ngoài phạm vi đó, và đã có người **bị khoá tài khoản** vì lý do này. Javis không tự đọc token đăng nhập của bạn (đường đó đã gỡ ở 0.26.17) - nó chạy qua đúng binary `claude`, nhưng như vậy vẫn không làm việc chạy nền 24/7 trở thành hợp lệ. Muốn yên tâm: ở trang **Models**, đặt Claude Code chạy bằng **API key**, hoặc trỏ **model việc nền** sang một provider khác. Xem `server/claude_auth.py`.> Triết lý: **năng lực nằm ở Javis, không nằm ở model.** Mọi bộ não đều được cấp cùng bộ đồ nghề qua trung tâm kết nối (MCP Hub) chung - MCP đã đấu, tool đọc/ghi brain, skill, việc Kanban, agent/workflow/loop/nhắc hẹn. Khác biệt duy nhất: hai engine CLI chạy thêm được **lệnh máy**. Đổi từ Claude sang Gemini không làm Javis mất chức năng nào ngoài chuyện đó

Connect

Built from this server's own package name, version and transport as found in its source — not copied from anyone's documentation, so it cannot drift against a page we do not control. Replace the environment placeholders with a token scoped to the least it needs.

claude-code
claude mcp add javis-cli --env ELEVENLABS_API_KEY=${ELEVENLABS_API_KEY} --env JAVIS_ADMIN_PASSWORD=${JAVIS_ADMIN_PASSWORD} --env JAVIS_AGY_MCP_KEY=${JAVIS_AGY_MCP_KEY} --env JAVIS_TOKEN=${JAVIS_TOKEN} -- uvx javis-cli
claude-desktop
{
  "mcpServers": {
    "javis-cli": {
      "command": "uvx",
      "args": [
        "javis-cli"
      ],
      "env": {
        "ELEVENLABS_API_KEY": "${ELEVENLABS_API_KEY}",
        "JAVIS_ADMIN_PASSWORD": "${JAVIS_ADMIN_PASSWORD}",
        "JAVIS_AGY_MCP_KEY": "${JAVIS_AGY_MCP_KEY}",
        "JAVIS_TOKEN": "${JAVIS_TOKEN}"
      }
    }
  }
}

Exposed tools (1) 1 read · 0 write · 0 destructive

ToolRiskDescription
NotesreadLuu note

Details

Source
blogminhquy/javis-os
PyPI
javis-cli
Transports
stdio · streamable-http
Credentials it reads
ELEVENLABS_API_KEYJAVIS_ADMIN_PASSWORDJAVIS_AGY_MCP_KEYJAVIS_TOKENWATCHTOWER_TOKENXAI_API_KEY
License
MIT
Stars
196 · pushed 0d ago

Trust audit

Do not install this without reading the findings. The audit found something that could harm you or your machine.

LayerWhat it checksResult
L0Provenance & inventoryPASS
L1Static analysis of the codeFAIL
L2Instruction surface (what it tells the agent)WARN
L3Class-specific surfacePASS
L4Behavioural (sandbox)SKIPPED

What the source does

Filesystem
declared (12 observation(s))
Network
declared (14 observation(s))
Shell
declared (8 observation(s))
Dependencies
not all pinned
Secrets in source
none-found

Findings (25)

HIGHCode injection · code.deserialize · CWE-78, CWE-94, CWE-95
server/fastyaml.py:35
return yaml.load(stream, Loader=_PyLoader)
Why it matters. deserialises untrusted bytes into live objects
Fix. use json or yaml.safe_load
HIGHCode injection · code.deserialize · CWE-78, CWE-94, CWE-95
server/fastyaml.py:37
return yaml.load(stream, Loader=_CLoader)
Why it matters. deserialises untrusted bytes into live objects
Fix. use json or yaml.safe_load
HIGHCode injection · code.deserialize · CWE-78, CWE-94, CWE-95
server/fastyaml.py:39
return yaml.load(stream, Loader=_PyLoader)
Why it matters. deserialises untrusted bytes into live objects
Fix. use json or yaml.safe_load
HIGHCode injection · code.eval_exec · CWE-78, CWE-94, CWE-95
dashboard/editor-cmds.js:174
if (c.mode() === "wys") exec(c, "createLink", u); else wrapTa(c, "[", "](" + u + ")", dich("ecmd.ph_text"));
Why it matters. evaluates text as code
Fix. remove; use a parser or a dispatch table
HIGHFilesystem / path · fs.credential_store · CWE-22, CWE-59
server/pack_install.py:76
_TEN_CAM = (".env", ".git", "id_rsa", "id_dsa", "id_ecdsa", "id_ed25519")
Why it matters. touches a credential store
HIGHFilesystem / path · fs.credential_store · CWE-22, CWE-59
server/pack_install.py:131
if thap in _TEN_CAM or thap.startswith("id_rsa"):
Why it matters. touches a credential store
MEDIUMCode injection · code.dynamic_import · CWE-78, CWE-94, CWE-95
server/lexicon/__init__.py:83
mod = importlib.import_module(f"lexicon.{ma}")
MEDIUMCode injection · code.dynamic_import · CWE-78, CWE-94, CWE-95
server/mcp_client.py:426
self.mod = importlib.import_module(_INTERNAL[name])
MEDIUMNetwork egress · net.beacon_words · CWE-200, CWE-319
server/learn.py:284
r"|exfiltrat|gửi\s+.{0,20}(ra\s+ngoài|tới\s+http)"
MEDIUMNetwork egress · net.raw_ip · CWE-200, CWE-319
Dockerfile:142
CMD python -c "import urllib.request,os,sys; sys.exit(0 if urllib.request.urlopen('http://127.0.0.1:'+os.getenv('JAVIS_PORT','7777')+'/health',timeout=4).status==200 else 1)" || exit 1
MEDIUMNetwork egress · net.raw_ip · CWE-200, CWE-319
JAVIS OS.bat:14
set "URL=http://127.0.0.1:%JAVIS_PORT%"
MEDIUMNetwork egress · net.raw_ip · CWE-200, CWE-319
Start JAVIS OS.command:6
echo "JAVIS OS is running at http://127.0.0.1:7777"
MEDIUMObfuscation / stealth · obf.zero_width · CWE-506, CWE-94
server/learn.py:297
return s[0] + "" + s[1:]   # chèn zero-width space → vỡ pattern lệnh
MEDIUMObfuscation / stealth · obf.zero_width · CWE-506, CWE-94
server/system_sync.py:83
t = (text or "").replace("\r\n", "\n").replace("", "")
MEDIUMPrompt injection · prompt.hidden_style · CWE-94, CWE-1427
CHANGELOG.md:4488
- **Dọn 138 dòng cụm chết của panel loop cũ**: panel `<div class="loop-box" style="display:none">` trong `index.html` cùng cụm phục vụ nó trong `app.js` (`loadLoopConfig`, `saveLoopConfig`, `renderLoo
MEDIUMPrompt injection · prompt.hidden_style · CWE-94, CWE-1427
docs/superpowers/plans/2026-07-18-update-triet-de.md:803
<div id="ovVerChangelog" style="display:none;margin:8px 0;padding:8px 10px;border-left:3px solid var(--accent,#6aa);background:rgba(120,140,160,.08);border-radius:6px;font-size:13px;line-height:1.6"><
MEDIUMPrompt injection · prompt.hidden_style · CWE-94, CWE-1427
docs/superpowers/plans/2026-07-18-update-triet-de.md:806
<button class="gcard-btn" id="ovVerUpdate" style="display:none">⬆ Cập nhật ngay</button>
MEDIUMPrompt injection · prompt.hidden_style · CWE-94, CWE-1427
docs/superpowers/plans/2026-07-18-update-triet-de.md:808
<div id="ovVerProgress" style="display:none;margin-top:10px"></div>
MEDIUMPrompt injection · prompt.hidden_style · CWE-94, CWE-1427
docs/superpowers/plans/2026-07-18-update-triet-de.md:810
<div id="ovVerRollback" style="display:none;margin-top:10px;padding:10px;border:1px solid #c55;border-radius:8px;background:rgba(200,80,80,.08);font-size:13px;line-height:1.6"></div>
LOWCode injection · code.deserialize · CWE-78, CWE-94, CWE-95
tests/python/test_fastyaml.py:35
return yaml.load(stream, Loader=yaml.SafeLoader)
Why it matters. deserialises untrusted bytes into live objects
Fix. use json or yaml.safe_load
LOWCode injection · code.eval_exec · CWE-78, CWE-94, CWE-95
tests/js/test_anh_dinh_kem_trong_chat.js:41
const fn = new Function(
Why it matters. evaluates text as code
Fix. remove; use a parser or a dispatch table
LOWCode injection · code.eval_exec · CWE-78, CWE-94, CWE-95
tests/js/test_brains_ui.mjs:110
eval(SRC);
Why it matters. evaluates text as code
Fix. remove; use a parser or a dispatch table
LOWCode injection · code.eval_exec · CWE-78, CWE-94, CWE-95
tests/js/test_brains_ui.mjs:140
eval(SRC);
Why it matters. evaluates text as code
Fix. remove; use a parser or a dispatch table
LOWCode injection · code.eval_exec · CWE-78, CWE-94, CWE-95
tests/js/test_chat_side_actions.js:55
const fn = new Function(
Why it matters. evaluates text as code
Fix. remove; use a parser or a dispatch table
LOWInsecure crypto · crypto.weak_hash · CWE-327, CWE-338
server/learn.py:809
sig = hashlib.sha1("\n".join(n for n, _ in out).encode("utf-8")).hexdigest()[:16]

Gates applied: no_behavioural_pass.

Audited 2026-09-15 · audit v0.4.0 · source sha ef70f247c32e · full audit: observations/trust-audit/mcp-server/blogminhquy__javis-os.json · Report an issue or request a re-scan

Audit history

DateSourceVerdictGradeScoreChange
2026-09-15ef70f247c32eBLOCKF28first audit

Alternatives

Other servers in the same categories, safer ones first.

Questions

What is the javis-os MCP server?

None

What tools does javis-os expose?

1 in total: 1 read-only, 0 that write, and 0 that can delete or overwrite. Every one is listed on this page with its risk.

Is javis-os safe to connect to an agent?

No — not without reading the findings first. The audit graded it F (28/100) and found 6 critical or high issues in the source. Each one is listed on this page with the file and line it is on.

What credentials does javis-os need?

It reads ELEVENLABS_API_KEY, JAVIS_ADMIN_PASSWORD, JAVIS_AGY_MCP_KEY, JAVIS_TOKEN, WATCHTOWER_TOKEN and XAI_API_KEY from the environment. Give it a token scoped to the least it needs — an agent that can be talked into calling a tool can be talked into calling it with your credentials.

How does javis-os run?

It speaks stdio and streamable-http, so it runs as a local process your client starts. It is published on PyPI as javis-cli.

How current is this page?

The grade is for one exact copy of the source (ef70f247c32e), read on 2026-09-15. The repository is watched and re-audited when it changes.

Provenance: OBSERVED · read 2026-09-15 · job trust-audit-2026-09-15