Atlas / MCP servers / kjames2001 / authyouragent

authyouragentBLOCK

mcp/kjames2001/authyouragent

Auth Your Agent: let AI agents act for a person on websites, with the person's approval on their phone. Take over lets the owner drive a stuck agent's browser from their phone.

Verdict
BLOCK
Grade
F
Trust score
52 /100
Exposed tools
23 18r · 4w · 1d
Transport
stdio
License
MIT
Stars
6
01

Overview

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

An open-source MCP server that lets an AI agent act for a person on websites, with the person's approval on their phone.

The agent drives a sandboxed browser (the vault) that runs on the person's own machine. When a site asks for a password, a CAPTCHA or a 2FA code, the person takes over that browser from their phone, signs in, and hands it back. The agent never sees the password and never holds the cookies. When the task is done, the vault signs out of every site it used, then destroys the browser profile.

Website: authyouragent.com · License: MIT

What is in this repository

The MCP server, the browser vault and the SDKs:

The phone app and the appr

Read from source at commit 27120ea48773OBSERVED · 2026-10-11
Advertisement
02

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 (pypi)
claude mcp add authyouragent -- uvx authyouragent==0.3.40
03

Exposed tools (23)

18 read · 4 write · 1 destructive. Blast radius: 1 tool can delete or overwrite — an agent that can be talked into calling a tool can be talked into calling this one.

ToolRiskDescription
check_agent_statusdestructiveCheck whether your agent is still authorized by the owner. The owner can revoke
check_login_wallreadCheck whether the page is stuck at a sign-in, one-time code (2FA) or sign-in
clickreadClick an element on the current page and return the page
end_sessionreadEnd the owner
fill_secretreadFill a field from the owner
go_backreadGo back to the previous page, like the browser
list_secretsreadList the sign-ins the owner has made available to you from their password
navigatereadOpen a URL in the vault
notify_ownerwriteSend your owner a one-way note on their phone. Nothing to approve.
plan_statusreadThe state of a plan you submitted: for each step, whether it is
press_keyreadPress a key in the page: Enter, Space, Tab, Shift+Tab, Escape, Backspace,
read_pagewriteRead the current page: its URL, title, visible text in reading order, and a
report_sitereadReport a site where take over did not work correctly, so the team can improve it.
request_approvalreadAsk your owner to approve a sensitive action before you perform it.
request_takeoverreadAsk your owner to take over the browser from their phone when you are stuck at a
save_secretwriteSave the sign-in your user typed by hand during a take over on this site to
screenshotreadA picture of what the browser shows (JPEG), for when the text is not
scrollreadScroll the page, to read further or to load more (endless lists).
select_optionreadChoose an entry in a dropdown (<select>). read_page lists each dropdown
submit_planwriteAsk your owner, once and in advance, to pre-approve the actions of a
type_textreadType into a form field (replaces its value). Never use this for the owner
wait_forreadWait for the page to change, instead of guessing with sleeps.
wait_for_takeoverreadKeep waiting for a take over that request_takeover returned as
04

Trust audit

BLOCKgrade F · trust 52/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 surfaceWARN
L4Behavioural (sandbox)SKIPPED

What the source does

Filesystem
declared (7 observation(s))
Network
declared (3 observation(s))
Shell
declared (3 observation(s))
Dependencies
not all pinned
Secrets in source
found

Findings (25)

HIGHCode injection · code.eval_exec · CWE-78, CWE-94, CWE-95
tests-private/wordpress/wba_php_cases.py:85
exec(src[start:end], {"unwrap": unwrap}, ns)
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
tests-private/wordpress/wba_php_cases.py:101
exec(s, {"DIR_HDRS": DIR_H}, e23)
Why it matters. evaluates text as code
Fix. remove; use a parser or a dispatch table
MEDIUMInformation disclosure · disclose.log_secret · CWE-209, CWE-532
sdk/authyouragent/vault_cli.py:453
print(f"Copy {HOME / 'token'} there as the token file" +
MEDIUMNetwork egress · net.beacon_words · CWE-200, CWE-319
vault/broker.py:2164
TELEMETRY = re.compile(r"/(collect|stats|telemetry|analytics|metrics|beacon|events?|log|logs|logging|"
MEDIUMNetwork egress · net.beacon_words · CWE-200, CWE-319
vault/broker.py:2172
if req.method.upper() not in WRITE_METHODS or req.resource_type in ("ping", "beacon"):
MEDIUMNetwork egress · net.beacon_words · CWE-200, CWE-319
vault/broker.py:2279
if req.method.upper() not in ("GET", "HEAD") or req.resource_type in ("ping", "beacon"):
MEDIUMNetwork egress · net.raw_ip · CWE-200, CWE-319
SKILL.md:32
"AYA_VAULT_URL": "http://127.0.0.1:7801",
MEDIUMHard-coded secrets · secret.private_key · CWE-798, CWE-321
cloud/static/site/docs/developers/agent-sdk.md:19
"privkey_pem": "-----BEGIN PRIVATE KEY-----..."
MEDIUMFilesystem / path · mcp.destructive_tools · CWE-22, CWE-59
check_agent_status
Why it matters. 1 tool(s) can delete or overwrite
Fix. prefer a read-only mode or scoped tokens; the page states the blast radius
LOWCode injection · code.eval_exec · CWE-78, CWE-94, CWE-95
sdk-js/test/takeover_live.mjs:41
const c = async (s) => page.$eval(s, (e) => { const b = e.getBoundingClientRect(); return [b.x + b.width / 2, b.y + b.height / 2]; });
Why it matters. evaluates text as code
Fix. remove; use a parser or a dispatch table
LOWInsecure crypto · crypto.weak_random · CWE-327, CWE-338
examples/demo-shop/server.mjs:159
const o = { id: String(1000 + Math.floor(Math.random() * 9000)), key: randomBytes(16).toString("hex"),
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
tests-private/wba/verify_test.mjs:23
import * as W from "../../sdk-js/src/webbotauth.js";
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
tests-private/wba/verify_test.mjs:24
import * as S from "../../sdk-js/src/_sfv.js";
LOWNetwork egress · net.metadata_ip · CWE-200, CWE-319
tests-private/wba/verify_test.mjs:382
for (const t of ["https://127.0.0.1/", "https://localhost/", "https://[::1]/", "https://169.254.169.254/", "https://10.1.2.3/",
Why it matters. cloud metadata endpoint: the classic SSRF credential grab
LOWNetwork egress · net.metadata_ip · CWE-200, CWE-319
tests-private/wordpress/wba_php_test.php:112
foreach ( array( '127.0.0.1', '10.1.2.3', '192.168.1.1', '169.254.169.254', '100.64.0.1', '0.0.0.0', '::1', '::ffff:127.0.0.1', 'fd00::1', 'fe80::1', '2001:db8::1' ) as $ip ) {
Why it matters. cloud metadata endpoint: the classic SSRF credential grab
LOWNetwork egress · net.raw_ip · CWE-200, CWE-319
README.md:68
"AYA_VAULT_URL": "http://127.0.0.1:7801",
LOWNetwork egress · net.raw_ip · CWE-200, CWE-319
cloud/static/site/docs/agents.md:105
"AYA_VAULT_URL": "http://127.0.0.1:7801",
LOWNetwork egress · net.raw_ip · CWE-200, CWE-319
cloud/static/site/docs/developers/browser-use-goose.md:46
"AYA_VAULT_URL": "http://127.0.0.1:7801",
LOWNetwork egress · net.raw_ip · CWE-200, CWE-319
cloud/static/site/docs/developers/browser-use-goose.md:97
AYA_VAULT_URL: http://127.0.0.1:7801
LOWNetwork egress · net.tls_off · CWE-200, CWE-319
sdk-js/test/interop_check.py:25
agent = AgentClient(base_url=CLOUD, agent_id=acct["agent_id"], privkey_pem=priv, verify=False)
Why it matters. certificate verification is disabled
Fix. leave verification on
LOWNetwork egress · net.tls_off · CWE-200, CWE-319
sdk-js/test/interop_check.py:52
v = SiteVerifier(CLOUD, verify=False, mode="local", expected_audience=SITE, public_base_url="http://127.0.0.1:1")
Why it matters. certificate verification is disabled
Fix. leave verification on
LOWNetwork egress · net.tls_off · CWE-200, CWE-319
sdk-js/test/interop_check.py:66
check("raw proof accepted by the cloud verify", httpx.post(CLOUD + "/api/v1/verify", verify=False, json={
Why it matters. certificate verification is disabled
Fix. leave verification on
LOWNetwork egress · net.tls_off · CWE-200, CWE-319
sdk-js/test/phone_helper.py:45
c = httpx.Client(base_url=CLOUD, verify=False, timeout=30, headers={"Origin": CLOUD})
Why it matters. certificate verification is disabled
Fix. leave verification on
LOWObfuscation / stealth · obf.base64_blob · CWE-506, CWE-94
tests-private/wba/verify_test.mjs:154
"sig2=:gHzpLNeHaHIO19NaJH9YMW5dcVSi2s0wOMBr6p18vcofS106sfC4KBIS0/szPlBBd1vIcyQ88B6CTEWIhRAiVrb9zfX0mx1aG12CSGWcYkSirHeyTxhbuJvXd27ed6skWoy4PjXItq38936ivUQjfdIwXh1aX6HxkAC3vRnEdSNfntkLWeEuIQ5BLIOBGE39f
LOWObfuscation / stealth · obf.base64_blob · CWE-506, CWE-94
tests-private/wba/verify_test.mjs:161
"sig2=:I1QWNzGXdP1a4dSvOHLCVOOanEYHDk+ZsVxM9MLX/p4ko69ghKwR5EOtAD96g7g4GWP7lmpM/jFAf9q8EFRDTPLjUXySwMv4YPgabv2LQihTJG2y8a2m6IGltyruwQNiqSJVUuRaG9+b17CGmAMFZh30X6GXLdQJrCARpeTqPwp2DC+a8haDE/VE5EruqzjA5

Gates applied: no_behavioural_pass.

Audited 2026-10-11 · audit v0.4.1 · source sha 27120ea48773full audit observations/trust-audit/mcp-server/kjames2001__authyouragent.json · Report an issue / request a re-scan
05

Audit history

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

DateSourceVerdictGradeScoreChange
2026-10-1127120ea48773BLOCKF52first audit
06

Questions

What is the authyouragent MCP server?

Auth Your Agent: let AI agents act for a person on websites, with the person's approval on their phone. Take over lets the owner drive a stuck agent's browser from their phone.

What tools does authyouragent expose?

23 in total: 18 read-only, 4 that write, and 1 that can delete or overwrite (check_agent_status). Every one is listed on this page with its risk.

Is authyouragent safe to connect to an agent?

No — not without reading the findings first. The audit graded it F (52/100) and found 2 critical or high issues in the source. Each one is listed on this page with the file and line it is on. Separately from the audit: 1 of its tools can destroy data, so scope the token you give it to what you actually need.

What credentials does authyouragent need?

It reads AUTHYOURAGENT_CLOUD, AUTH_SECRET, AYA_CLIENT_SECRET, AYA_KEY_FILE, AYA_VAULT_TOKEN, AYA_VAULT_TOKEN_FILE, KEY_FILE, RFC_KEYS, VAULT_TLS_KEY, VAULT_TOKEN and VAULT_WEB_BOT_AUTH 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 authyouragent run?

It speaks stdio, so it runs as a local process your client starts. It is published on npm as authyouragent at 0.3.24.

How current is this page?

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

Advertisement