Atlas / MCP servers / j0yen / mcphost

mcphostBLOCK

mcp/j0yen/mcphost

Hosted MCP runtime where the agent is the operator: sign up by tool call, publish your own tools.

Verdict
BLOCK
Grade
F
Trust score
47 /100
Exposed tools
—
Transport
streamable-http
License
Apache-2.0
Stars
0
01

Overview

From the repository's own README, as read at the audited commit. Badges and raw HTML are left out.

where agents host their own tools · mcphost.dev · status · llms.txt · llms-install.md

Find it in the registry: dev.mcphost/mcphost — connect with the one-URL quickstart at mcphost.dev.

Ship an MCP tool, not a deployment project.

mcphost lets an agent create the tool it needs, mid-task, without a human in the loop: sign up with one unauthenticated tool call, publish with the next, and the new tool is live immediately — no restart, no deploy, no review queue.

Measured (panel run 0.26.3-20260908T085001Z, 21 sessions): median time from signup to a tenant's first successful host.tool.publish is 30.7s; median time from signup to a successful call on that tenant's own tool is 42.4s.

Quickstart for agents

  1. Connect to https://mcphost.dev/mcp -- paste that URL into your MCP

client's config. No signup call, no credentials, nothing to paste into a header.

  1. Make your first call. host.quickstart() is read-only and hands back

a worked example before you commit to anything; any other host.*/ billing.* call creates your tenant right then, on this connection, with no signup call at all -- host.whoami() is the simplest:

host.whoami()
  1. Read onboarding.url once, in that same response, and save it -- it's

this tenant's own address and its credential in one; reconnecting through it later is how you come back as this same tenant. onboarding.memory_hint names where agents conventionally keep it.

  1. Publish a tool. host.quickstart()'s own starter_tool is a

ready-to-publish python spec; its publish_call is exactly:

host.tool_publish(nam
Read from source at commit 31dc3a959a36OBSERVED · 2026-10-11
02

Trust audit

BLOCKgrade F · trust 47/100 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)PASS
L3Class-specific surfacePASS
L4Behavioural (sandbox)SKIPPED

What the source does

Filesystem
declared (6 observation(s))
Network
declared (3 observation(s))
Shell
declared (5 observation(s))
Dependencies
pinned
Secrets in source
found

Findings (25)

HIGHCode injection · code.eval_exec · CWE-78, CWE-94, CWE-95
src/errors.rs:1616
KindError::Exec(m) => AppError::Internal(m),
Why it matters. evaluates text as code
Fix. remove; use a parser or a dispatch table
HIGHCode injection · code.eval_exec · CWE-78, CWE-94, CWE-95
src/handler.rs:4591
other => KindError::Exec(other.to_string()),
Why it matters. evaluates text as code
Fix. remove; use a parser or a dispatch table
HIGHCode injection · code.eval_exec · CWE-78, CWE-94, CWE-95
src/handler.rs:4763
other => Err(KindError::Exec(format!(
Why it matters. evaluates text as code
Fix. remove; use a parser or a dispatch table
HIGHCode injection · code.eval_exec · CWE-78, CWE-94, CWE-95
src/kinds/chain.rs:1311
KindError::Exec(m) => ("exec", m.clone(), Value::Null),
Why it matters. evaluates text as code
Fix. remove; use a parser or a dispatch table
HIGHCode injection · code.eval_exec · CWE-78, CWE-94, CWE-95
src/kinds/http.rs:708
.map_err(|e| KindError::Exec(format!("dns resolver init: {e}")))?;
Why it matters. evaluates text as code
Fix. remove; use a parser or a dispatch table
MEDIUMNetwork egress · net.raw_ip · CWE-200, CWE-319
src/compat_check.rs:374
BindPlan::Inherited { port, .. } => format!("http://127.0.0.1:{port}"),
MEDIUMNetwork egress · net.raw_ip · CWE-200, CWE-319
src/enduser.rs:365
public_url: "http://127.0.0.1:0".to_string(),
MEDIUMNetwork egress · net.raw_ip · CWE-200, CWE-319
src/oauthclient.rs:1162
let redirect_uri = "http://127.0.0.1/oauthconf-step-up-probe-cb";
MEDIUMHard-coded secrets · secret.slack · CWE-798, CWE-321
tests/vault_ac02_callback_exchanges_code_and_stores_tokens.rs:62
const ACCESS_TOKEN: &str = "xoxp-test-access-token-abc123";
MEDIUMHard-coded secrets · secret.slack · CWE-798, CWE-321
tests/vault_ac02_callback_exchanges_code_and_stores_tokens.rs:63
const REFRESH_TOKEN: &str = "xoxp-test-refresh-token-def456";
MEDIUMHard-coded secrets · secret.slack · CWE-798, CWE-321
tests/vaultst_ac01_status_lists_connected_and_unconnected_providers.rs:61
const ACCESS_TOKEN: &str = "xoxp-vaultst-ac01-access-token";
MEDIUMHard-coded secrets · secret.slack · CWE-798, CWE-321
tests/vaultst_ac01_status_lists_connected_and_unconnected_providers.rs:62
const REFRESH_TOKEN: &str = "xoxp-vaultst-ac01-refresh-token";
LOWInventory / provenance · inv.binary · CWE-1104
tests/fixtures/blobguard/benign/book.xlsx
book.xlsx
Why it matters. a compiled or binary member cannot be reviewed from source
Fix. ship source, or explain the binary in the README
LOWInventory / provenance · inv.binary · CWE-1104
tests/fixtures/blobguard/benign/csvs.zip
csvs.zip
Why it matters. a compiled or binary member cannot be reviewed from source
Fix. ship source, or explain the binary in the README
LOWInventory / provenance · inv.binary · CWE-1104
tests/fixtures/blobguard/benign/doc.docx
doc.docx
Why it matters. a compiled or binary member cannot be reviewed from source
Fix. ship source, or explain the binary in the README
LOWInventory / provenance · inv.binary · CWE-1104
tests/fixtures/blobguard/benign/utf16be_bom.csv
utf16be_bom.csv
Why it matters. a compiled or binary member cannot be reviewed from source
Fix. ship source, or explain the binary in the README
LOWInventory / provenance · inv.binary · CWE-1104
tests/fixtures/blobguard/benign/utf16le_bom.csv
utf16le_bom.csv
Why it matters. a compiled or binary member cannot be reviewed from source
Fix. ship source, or explain the binary in the README
LOWInventory / provenance · inv.hidden_file · CWE-1104
.burst-lane.toml
.burst-lane.toml
Why it matters. hidden member outside the usual dotfiles
Fix. review its purpose
LOWCode injection · code.dynamic_import · CWE-78, CWE-94, CWE-95
tests/bridgedisc_ac04_runtime_unknown_import_no_traceback.rs:18
const SOURCE: &str = "import importlib\n\n\ndef main(args):\n    importlib.import_module(\"mcphost_sdk\")\n    return {\"ok\": True}\n";
LOWCode injection · code.dynamic_import · CWE-78, CWE-94, CWE-95
tests/domhint_ac04_runtime_matches_publish.rs:17
const DYNAMIC_SOURCE: &str = "import importlib\n\n\ndef main(args):\n    name = \"mcphost\" + \".\" + \"dev\"\n    importlib.import_module(name)\n    return {\"ok\": True}\n";
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
src/kinds/docs.rs:70
("echo", include_str!("../../docs/kinds/echo.md")),
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
src/kinds/docs.rs:71
("http", include_str!("../../docs/kinds/http.md")),
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
src/kinds/docs.rs:72
("python", include_str!("../../docs/kinds/python.md")),
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
src/kinds/docs.rs:73
("wasm", include_str!("../../docs/kinds/wasm.md")),
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
src/kinds/echo.rs:83
super::docs::parse_kind_doc(include_str!("../../docs/kinds/echo.md"))

Gates applied: no_behavioural_pass.

Audited 2026-10-11 · audit v0.4.1 · source sha 31dc3a959a36full audit observations/trust-audit/mcp-server/j0yen__mcphost.json · Report an issue / request a re-scan
03

Audit history

Every audit this server has had. A grade with a past is a grade somebody is still checking.

DateSourceVerdictGradeScoreChange
2026-10-1131dc3a959a36BLOCKF47first audit
04

Questions

What is the mcphost MCP server?

Hosted MCP runtime where the agent is the operator: sign up by tool call, publish your own tools.

Is mcphost safe to connect to an agent?

No — not without reading the findings first. The audit graded it F (47/100) and found 5 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 mcphost need?

It reads DOCS_QA_EMBED_SECRET_VALUE, SECRET_SELF_KEY and SECRET_TOKEN 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 mcphost run?

It speaks streamable-http, so it runs as a service you connect to over the network.

How current is this page?

The grade is for one exact copy of the source (31dc3a959a36), read on 2026-10-11. The repository is watched and re-audited when it changes.

Advertisement