Skip to main content
Glama

Auth Your Agent

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:

Path

What it is

sdk/authyouragent/mcp_server.py

The MCP server (stdio, 22 tools). Entry point authyouragent-mcp.

vault/

The browser vault: broker.py (HTTP API the MCP server calls; drives Chromium, detects sign-in, signs out), egress.py (public-internet-only proxy), screen.py (phone screen stream), seccomp.json, chromium-policy.json, Dockerfile. Details: vault/README.md.

sdk/authyouragent/vault_cli.py

authyouragent vault up/down/status/env: runs the vault with every protection on.

sdk/authyouragent/

Python SDK: agent side (agent.py), website side (site.py), take-over helper for your own Playwright browser (takeover.py).

sdk-js/

JavaScript SDK, and npm-wrapper/ so Node clients can start the MCP server with npx authyouragent-mcp.

Dockerfile

Container for the MCP server alone.

The phone app and the approval service run at authyouragent.com. The agent signs its requests with its own key pair; the service never receives the person's passwords.

Related MCP server: agent-auth

MCP tools

Tool

What it does

navigate, click, type_text, read_page

Drive the vault's browser. Only public websites open. Clicks that submit a form, or whose button says create, send, save, delete, pay and the like, ask the owner's phone first.

list_secrets, fill_secret

Fill a username, password or authenticator code from the owner's Bitwarden or Vaultwarden into the page. The agent never sees the value; it fills only on the item's own site and only the right kind of field.

check_login_wall

Is the page blocked by a password, CAPTCHA, one-time code or sign-in approval? Reads the page's fields and text, so the model needs no vision.

request_takeover

Ask the owner to take over the browser from their phone. Returns done, cancelled, expired, incomplete, or waiting.

wait_for_takeover

Keep waiting after waiting.

request_approval

Ask the owner to approve an action. approved, denied or expired.

notify_owner

A one-way note to the owner's phone: done, stuck, or what failed. Nothing to approve.

submit_plan, plan_status

For a scheduled task: the owner pre-approves its steps once; matching clicks then go through without a card. A step not answered in time is skipped with the steps chained to it; the rest carries on. A repeating task asks for an exact number of runs, a day or a week apart, within 30 days.

end_session

Sign out of every site used, then destroy the browser profile. Reports per site whether sign-out was confirmed. The vault then sends the owner its own summary of the session.

check_agent_status

active or revoked.

report_site

Report a site where take over did not work.

Run it

From PyPI:

pip install "authyouragent[mcp]"
authyouragent vault up --agent-id ag_... --key /path/to/agent-key.pem

From this repository:

git clone https://github.com/kjames2001/authyouragent && cd authyouragent
pip install "./sdk[mcp]"
docker build -f vault/Dockerfile -t authyouragent/vault:local .
authyouragent vault up --agent-id ag_... --key /path/to/agent-key.pem --image authyouragent/vault:local --no-pull

The vault needs Docker. vault up prints the MCP settings to add to your client. (If you skip vault up, the MCP server starts the vault itself the first time the agent needs the browser; AYA_VAULT_AUTOSTART=0 turns that off.)

{
  "mcpServers": {
    "authyouragent": {
      "command": "authyouragent-mcp",
      "env": {
        "AYA_AGENT_ID": "ag_...",
        "AYA_KEY_FILE": "/path/to/agent-key.pem",
        "AYA_VAULT_URL": "http://127.0.0.1:7801",
        "AYA_VAULT_TOKEN_FILE": "~/.authyouragent/vault/token"
      }
    }
  }
}

Node clients can use npx authyouragent-mcp as the command. The agent ID and key come from adding the agent in the phone app (Agents > Add an agent). Without them the server still starts and lists its tools; each tool then says what is missing.

Security

  • Chromium's own sandbox is on (custom seccomp profile, all container capabilities dropped); gVisor is used automatically when Docker has the runsc runtime.

  • The browser can reach only the public internet: loopback, private networks, cloud metadata addresses and the vault's own ports are refused, checked on the resolved address.

  • The agent is disconnected while the owner is in control, and cannot read the browser's cookies.

  • Sign out first, wipe second: at the end of a session, when the agent stops sending heartbeats, or when it is revoked. Sites the vault could not sign out of are reported to the owner, also after a crash.

Known limits are listed in vault/README.md.

Scope: what Auth Your Agent does, and does not do

Auth Your Agent answers one question for a website: who is acting, for whom, with what permission, and can it be withdrawn. A feature belongs here if it grants, limits, proves or withdraws an agent's authority on a site. That covers approvals, sign-in for agents, step-ups in the site's own words, take over at a sign-in wall, signing out, and the vault's own record of what was done with the owner's authority.

It does not do:

  • Conversation with the agent. No multiple-choice or free-text questions, chat or task updates beyond a short note. A card from Auth Your Agent is always about permission, so the owner never learns to tap through it like a chat prompt. Use a tool built for talking to agents (for example Paseo) alongside it.

  • Running or orchestrating agents. It works with whichever agent you use; it does not start, schedule or supervise them.

  • Judging intent with AI. Approval rules are fixed rules the owner can read. No model decides what is safe.

  • Getting past sites' defences. No CAPTCHA solving or bot-detection evasion; the owner takes over instead.

  • Turning websites into tools. Learning a site's API calls as MCP tools is a separate project built on top of the vault.

New features are checked against this list first.

Documentation

Android app

Download from authyouragent.com/download/android.

License

MIT

Available Tools

13 tools
check_agent_statusA

Check whether your agent is still authorized by the owner. The owner can revoke your access at any time from their phone. Call this periodically (e.g. before starting a new task) to verify you are still active. Returns: active / revoked / error.

Inputs: no named parameters. Returns: result

check_login_wallA

Check whether the page is stuck at a sign-in, one-time code (2FA) or sign-in approval step. Reads form fields and page text only.

Inputs: no named parameters. Returns: result

clickA

Click an element on the current page and return the page's URL and title afterwards. If the click would commit something (it submits a form, or the button says create, send, save, delete, pay and the like), the vault first asks the owner to approve it on their phone and waits up to about five minutes; a denial returns an error and nothing is clicked. Sign-in and search forms are not interrupted. selector: a CSS or Playwright selector, e.g. "button[type=submit]" or "text=Add Server".

Inputs: selector (required). Returns: result

end_sessionA

End the owner's session when you are finished with the web: the vault signs out of the sites used, then destroys the browser profile. Always call this when done. (The vault also does it by itself if you stop running or the owner revokes you.)

Inputs: no named parameters. Returns: result

fill_secretA

Fill a field from the owner's password manager. The vault types the value itself; you never see it. It only fills on a site saved with the item, and only the right kind of field: a password into a password field, a totp code into a one-time code field, a username into a text or email field. Then click the sign-in button as usual. selector: the field, e.g. "input[type=password]". name: the item name from list_secrets. field: username, password or totp.

Inputs: name (required), selector (required), field. Returns: result

list_secretsA

List the sign-ins the owner has made available to you from their password manager: each item's name, the sites it may be used on, and which fields it has (username, password, totp). Values are never shown to you.

Inputs: no named parameters. Returns: result

read_pageA

Read the current page: its URL, title and visible text, in reading order. Use it after navigate or click to see what is on screen (no screenshot needed). Text in form fields and hidden elements is not included. max_chars: how much text to return, 200 to 20000 (default 5000).

Inputs: max_chars. Returns: result

report_siteA

Report a site where take over did not work correctly, so the team can improve it. Call this whenever check_login_wall misses a login, takeover fails to complete, the handback does not trigger, or anything else goes wrong on a real site. site: the domain or URL, e.g. "reddit.com". kind: one of: shadow_dom, bot_detection, input_not_detected, takeover_failed, handback_failed, session_not_cleared, oauth_blocked, other. detail: one short line describing what happened (optional). url: the full page URL if known (optional).

Inputs: kind (required), site (required), url, detail. Returns: result

request_approvalA

Ask your owner to approve a sensitive action before you perform it. The owner receives a push notification on their phone showing the site and action. They approve or deny. You should not perform the action until this returns approved. Use this before deleting data, changing settings, making purchases, modifying permissions, or any action that could have irreversible consequences. site: the domain or URL of the site where the action will be performed, e.g. "github.com". action: a short label for the action, e.g. "delete repository", "change password", "purchase subscription". wait_seconds: how long to wait for the owner's response (default 120, max 290). Returns: "approved" or "denied" or "expired" (owner did not respond in time).

Inputs: site (required), action (required), wait_seconds. Returns: result

request_takeoverA

Ask your owner to take over the browser from their phone when you are stuck at a login, 2FA code, CAPTCHA or anything only they can do. You are disconnected from the browser while they are in control, and you never see what they type. Returns result: done / cancelled / expired / incomplete, or result: waiting with a takeover_id for wait_for_takeover. reason: one short line shown to the owner, e.g. "Please sign in to example.com".

Inputs: reason (required), wait_seconds. Returns: result

type_textA

Type into a form field (replaces its value). Never use this for the owner's passwords or codes: use fill_secret if the owner saved the sign-in, otherwise ask for a take over. selector: the field, e.g. "input[name=url]". text: what to type. submit: press Enter afterwards.

Inputs: text (required), selector (required), submit. Returns: result

wait_for_takeoverA

Keep waiting for a take over that request_takeover returned as "waiting". Returns the same results as request_takeover: done (continue on the signed-in page), cancelled or expired (stop and tell your user), incomplete (the page still asks for sign-in), or waiting again with the same takeover_id. takeover_id: the id request_takeover returned, e.g. "tk_...". wait_seconds: how long to wait this time (default as request_takeover).

Inputs: takeover_id (required), wait_seconds. Returns: result

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

Loading tool schema changelog…

    TDQS

    A4.2/5.0

    Scored across 13 tools

    Disambiguation4/5

    Most tools target clearly distinct operations (navigate vs click vs type_text vs read_page vs fill_secret). The takeover cluster (check_login_wall, request_takeover, wait_for_takeover) and the two check_* tools risk minor confusion, but the descriptions explicitly explain how they chain together.

    Naming Consistency4/5

    Strong snake_case, verb-first convention throughout (list_secrets, fill_secret, read_page, end_session, request_approval, request_takeover). Only minor deviations: bare-verb browser tools (navigate, click) and the verb_prep_noun form of wait_for_takeover, which still stay readable and predictable.

    Tool Count5/5

    13 tools is well within the ideal 3-15 range and each one earns its place: browser control, secret filling, the login/takeover lifecycle, approval, session teardown, reporting and status all cover distinct needs without redundancy.

    Completeness4/5

    The set covers the full auth-agent lifecycle: authorization check, browsing actions, secret filling, login-wall detection, owner takeover, approvals, session cleanup and issue reporting. Minor gaps exist (e.g. no explicit scroll, back-navigation or screenshot), but core agent workflows have no dead ends.

    Maintenance

    ActivityNo data
    ResponsivenessSyncing

    Related MCP Connectors

    Related MCP Servers

    • A
      license
      Not graded
      quality
      C
      maintenance
      Lets AI assistants control your real Chrome browser to perform web tasks like reading pages, taking screenshots, clicking, and typing, using your existing logged-in sessions.
      145
      MIT
    • A
      license
      Not graded
      quality
      D
      maintenance
      Zero-knowledge credential injection for AI agents. Your agent authenticates to websites and APIs without ever seeing a password, TOTP code, or API key.
      4 npm
      1
      MIT
    • A
      license
      Not graded
      quality
      C
      maintenance
      Enables AI agents to drive a privacy-first browser via MCP, using diff-based page observation to reduce token consumption, and offering secure autofill from a local vault.
      5,187 npm
      MIT
    • A
      license
      Not graded
      quality
      B
      maintenance
      Lets Claude Code drive a real Google Chrome while you watch a low-latency live view and take over the mouse and keyboard whenever a login, CAPTCHA or payment appears. Sensitive actions pause for phone-based approval, and the agent can be guided by tapping elements or sending short messages without exposing secrets.
      55 npm
      MIT