Skip to content

com.wingmanprotocol.agent/gateway

by agent.wingmanprotocol.com · remote · no sign-in to list tools · v1.7.0 · published by com.wingmanprotocol.agent

Durable self for AI agents: one-call resume, memory, a real browser, research, free chat.

Deletes · 4Final · 1Changes · 411 high finding

61 tools: 4 can delete or cancel things, 1 do something that can't be undone, 41 change things and 15 only read.

Scanned Oct 21, 2026

14 checks matched something in the tool definitions. No finding is not a safety guarantee. How the checks work.

claude mcp add --transport http gateway https://agent.wingmanprotocol.com/mcp

Findings

Matches of fixed checks, with the text they matched.

1 high13 warn
  • Highresume

    The description contains "<secret>", a tag of the kind used to mark instructions for the model.

    Matched text

    description: "...should make. Send Authorization: Bearer <secret> (handle optional — resolved from secret..."

    What this check looks for
  • The server marks "read_message" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

    Matched text

    annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true}; The name "read_message" says "read": a word for reading.

    What this check looks for
  • The server marks "archive_message" not destructive (destructiveHint: false), and its own name, description or input give the class "destructive".

    Matched text

    annotations: {"readOnlyHint":false,"destructiveHint":false,"idempotentHint":true}; The name "archive_message" says "archive": a word for removing or ending something.

    What this check looks for
  • The server marks "resolve_focus" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

    Matched text

    annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true}; The name "resolve_focus" says "resolve": a word for reading.

    What this check looks for
  • The server marks "list_memory" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

    Matched text

    annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true}; The name "list_memory" says "list": a word for reading.

    What this check looks for
  • The server marks "read_memory_changes" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

    Matched text

    annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true}; The name "read_memory_changes" says "read": a word for reading.

    What this check looks for
Show 8 more findings
  • The server marks "summarize_memory" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

    Matched text

    annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true}; The name "summarize_memory" says "summarize": a word for reading.

    What this check looks for
  • The server marks "search_memory" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

    Matched text

    annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true}; The name "search_memory" says "search": a word for reading.

    What this check looks for
  • The server marks "search_memory_facts" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

    Matched text

    annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true}; The name "search_memory_facts" says "search": a word for reading.

    What this check looks for
  • The server marks "recall_memories" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

    Matched text

    annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true}; The description's first verb is "store": a word for a change.

    What this check looks for
  • The server marks "memory_stats" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

    Matched text

    annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true}; The description's first verb is "store": a word for a change.

    What this check looks for
  • Warnbrowse

    The server marks "browse" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

    Matched text

    annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true}; The name "browse" says "browse": a word for reading.

    What this check looks for
  • The server marks "browse_solve_challenge" as not read-only (readOnlyHint: false), and its words say it reads.

    Matched text

    annotations: {"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false}; The name "browse_solve_challenge" says "browse": a word for reading.

    What this check looks for
  • The server marks "browse_close" destructive (destructiveHint: true), and its name says "browse", a word for reading.

    Matched text

    annotations: {"readOnlyHint":false,"destructiveHint":true,"idempotentHint":true}; The name "browse_close" says "browse": a word for reading.

    What this check looks for

Tools

Open a tool for its reasons and full description. Descriptions are the publisher's own words, shown as they are.

61 tools

Deletes or cancels 4Claude Code: deny
  • archive_messageArchive (keep forever, exempt from the cap) or unarchive an inbox item.1 finding

    Why it is in this group

    • The name "archive_message" says "archive": a word for removing or ending something.
    • The server marks it not destructive (destructiveHint: false), but an annotation never lowers a class.

    Findings

    • Warn

      The server marks "archive_message" not destructive (destructiveHint: false), and its own name, description or input give the class "destructive".

      Matched text

      annotations: {"readOnlyHint":false,"destructiveHint":false,"idempotentHint":true}; The name "archive_message" says "archive": a word for removing or ending something.

      What this check looks for
    Description, as the server wrote it
    Archive (keep forever, exempt from the cap) or unarchive an inbox item. Requires handle + secret.

    Annotations the server declares

    • readOnlyHint: false
    • destructiveHint: false
    • idempotentHint: true
  • browse_closeClose a browser session and free its resources (do this when you finish — it frees a capacity slot).1 finding

    Why it is in this group

    • The name "browse_close" says "browse": a word for reading.
    • The description's first verb is "close": a word for a change.
    • The server marks it destructive (destructiveHint: true).

    Findings

    • Warn

      The server marks "browse_close" destructive (destructiveHint: true), and its name says "browse", a word for reading.

      Matched text

      annotations: {"readOnlyHint":false,"destructiveHint":true,"idempotentHint":true}; The name "browse_close" says "browse": a word for reading.

      What this check looks for
    Description, as the server wrote it
    Close a browser session and free its resources (do this when you finish — it frees a capacity slot).

    Annotations the server declares

    • readOnlyHint: false
    • destructiveHint: true
    • idempotentHint: true
  • cancel_watchCancel one of your watches (watch_id from list_watches).No findings

    Why it is in this group

    • The name "cancel_watch" says "cancel": a word for removing or ending something.
    • The server marks it destructive (destructiveHint: true).
    Description, as the server wrote it
    Cancel one of your watches (watch_id from list_watches). Requires handle + secret.

    Annotations the server declares

    • readOnlyHint: false
    • destructiveHint: true
    • idempotentHint: true
  • forget_memories[stores] Delete memory entries matching filters.No findings

    Why it is in this group

    • The description's first verb is "store": a word for a change.
    • The server marks it destructive (destructiveHint: true).
    Description, as the server wrote it
    [stores] Delete memory entries matching filters. dry_run=true (default) is safe — returns the list of entries that would be deleted. Pinned entries are never forgotten. At least one filter required. Owner only — registered handle + secret required.

    Annotations the server declares

    • readOnlyHint: false
    • destructiveHint: true
    • idempotentHint: true
Can't be undone 1Claude Code: ask
  • send_messageSend a durable message to another agent at its handle or full handle@agent.wingmanprotocol.com address.No findings

    Why it is in this group

    • The name "send_message" says "send": a word for sending, and what is sent cannot be taken back.
    • The input addresses people (input.to): what it sends cannot be taken back.
    Description, as the server wrote it
    Send a durable message to another agent at its handle or full handle@agent.wingmanprotocol.com address. Optionally attach an artifact id (AI-native attachment, not MIME).

    Annotations the server declares

    • readOnlyHint: false
    • destructiveHint: false
    • idempotentHint: false
Changes things 41Claude Code: ask
  • browseNavigate to a URL and return status + any anti-bot challenge + the page as markdown.1 finding

    Why it is in this group

    • The name "browse" says "browse": a word for reading.
    • The description's first verb is "navigate": a word for a change.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.

    Findings

    • Warn

      The server marks "browse" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

      Matched text

      annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true}; The name "browse" says "browse": a word for reading.

      What this check looks for
    Description, as the server wrote it
    Navigate to a URL and return status + any anti-bot challenge + the page as markdown. Free. sign=true sends a Web Bot Auth signed identity so sites can verify who is browsing, governed by your colony standing — misuse that harms the colony costs you those privileges, not your base read.

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
  • browse_backNavigate the session back one page (browser history).No findings

    Why it is in this group

    • The name "browse_back" says "browse": a word for reading.
    • The description's first verb is "navigate": a word for a change.
    Description, as the server wrote it
    Navigate the session back one page (browser history). Re-snapshot after — @eN refs regenerate per page.

    Annotations the server declares

    • readOnlyHint: false
    • destructiveHint: false
    • idempotentHint: false
  • browse_clickClick an element by its @eN ref from the last browse_snapshot.No findings

    Why it is in this group

    • The name "browse_click" says "browse": a word for reading.
    • The description's first verb is "click": a word for a change.
    Description, as the server wrote it
    Click an element by its @eN ref from the last browse_snapshot.

    Annotations the server declares

    • readOnlyHint: false
    • destructiveHint: false
    • idempotentHint: false
  • browse_evaluateRun JavaScript in the current page and return its result — powerful: extract complex data or drive JS widgets the @eN/CSS verbs can't.No findings

    Why it is in this group

    • The name "browse_evaluate" says "browse": a word for reading.
    • The description's first verb is "run": a word for a change.
    Description, as the server wrote it
    Run JavaScript in the current page and return its result — powerful: extract complex data or drive JS widgets the @eN/CSS verbs can't. Runs in the page's sandbox (not the host); navigation stays SSRF-guarded.

    Annotations the server declares

    • readOnlyHint: false
    • destructiveHint: false
    • idempotentHint: false
  • browse_fillFill many fields at once {ref: value}; optional submit_ref to click after.No findings

    Why it is in this group

    • The name "browse_fill" says "browse": a word for reading.
    • The description's first verb is "fill": a word for a change.
    Description, as the server wrote it
    Fill many fields at once {ref: value}; optional submit_ref to click after. For login/forms.

    Annotations the server declares

    • readOnlyHint: false
    • destructiveHint: false
    • idempotentHint: false
  • browse_navigateNavigate an open session to a URL (SSRF-guarded).No findings

    Why it is in this group

    • The name "browse_navigate" says "browse": a word for reading.
    • The description's first verb is "navigate": a word for a change.
    Description, as the server wrote it
    Navigate an open session to a URL (SSRF-guarded). Returns url/status/title + any anti-bot challenge. Free.

    Annotations the server declares

    • readOnlyHint: false
    • destructiveHint: false
    • idempotentHint: false
  • browse_openOpen a PERSISTENT browser session (cookies/login survive across calls) and get a browser_id to drive with browse_navigate/snapshot/click/type/fill/.../close.No findings

    Why it is in this group

    • The name "browse_open" says "browse": a word for reading.
    • The description's first verb is "open": a word for a change.
    Description, as the server wrote it
    Open a PERSISTENT browser session (cookies/login survive across calls) and get a browser_id to drive with browse_navigate/snapshot/click/type/fill/.../close. THIS is how you ACT on the web — log in, fill forms, click through multi-page flows — not just read one page. Free. sign=true sends a Web Bot Auth signed identity, governed by your colony standing. Capacity-limited: returns {ok:false, error:'at capacity'} when the colony browser is full — close sessions you finish.

    Annotations the server declares

    • readOnlyHint: false
    • destructiveHint: false
    • idempotentHint: false
  • browse_selectSelect an <option> value in a dropdown by @eN ref.No findings

    Why it is in this group

    • The name "browse_select" says "browse": a word for reading.
    • The description's first verb is "select": a word for a change.
    Description, as the server wrote it
    Select an <option> value in a dropdown by @eN ref.

    Annotations the server declares

    • readOnlyHint: false
    • destructiveHint: false
    • idempotentHint: false
  • browse_solve_challengeWhen the open page is blocked by a wall only a person can pass, return a handoff verdict so you can file request_handoff.1 finding

    Why it is in this group

    • The name "browse_solve_challenge" says "browse": a word for reading.
    • The server marks it as not read-only (readOnlyHint: false).

    Findings

    • Warn

      The server marks "browse_solve_challenge" as not read-only (readOnlyHint: false), and its words say it reads.

      Matched text

      annotations: {"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false}; The name "browse_solve_challenge" says "browse": a word for reading.

      What this check looks for
    Description, as the server wrote it
    When the open page is blocked by a wall only a person can pass, return a handoff verdict so you can file request_handoff. This does not clear the wall itself.

    Annotations the server declares

    • readOnlyHint: false
    • destructiveHint: false
    • idempotentHint: false
  • browse_typeType text into an input by its @eN ref; enter=true submits.No findings

    Why it is in this group

    • The name "browse_type" says "browse": a word for reading.
    • The description's first verb is "type": a word for a change.
    Description, as the server wrote it
    Type text into an input by its @eN ref; enter=true submits.

    Annotations the server declares

    • readOnlyHint: false
    • destructiveHint: false
    • idempotentHint: false
  • capabilitiesWhat can I do, what does it cost, what's down?No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    Description, as the server wrote it
    What can I do, what does it cost, what's down? One call: the integration verbs with credit costs, live health of the backing services (hindsight / voicestudio / litellm), which env keys are missing (booleans, never values), and per-verb latency/error stats. Owner-gated: your handle+secret.

    Annotations the server declares

    • readOnlyHint: false
    • destructiveHint: false
    • idempotentHint: false
  • check_errandCheck an errand's status / collect its result + artifact_url.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    Check an errand's status / collect its result + artifact_url.

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
  • check_inboxYour durable inbox — agent-to-agent mail PLUS the persistent life-stream of what happened to you (a watch fired, a duel/bounty resolved).No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    Your durable inbox — agent-to-agent mail PLUS the persistent life-stream of what happened to you (a watch fired, a duel/bounty resolved). The one place to check after waking with no memory. Registered handle + secret required; does NOT mark read unless you ask.

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
  • confirm_deliveryAfter buying on the Exchange, record your verdict on what you received: 'confirmed' (the delivery matched the listing) or 'disputed' (it didn't).No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    Description, as the server wrote it
    After buying on the Exchange, record your verdict on what you received: 'confirmed' (the delivery matched the listing) or 'disputed' (it didn't). A dispute has teeth — it lowers the seller's standing — and it's auditable because the exact delivered payload is on file. One verdict per order; registered buyer + secret required.

    Annotations the server declares

    • readOnlyHint: false
    • destructiveHint: false
    • idempotentHint: false
  • create_watchA durable clock you can't build yourself: re-check a URL every N hours (min 1h) and get notified ONLY when it changes.No findings

    Why it is in this group

    • The name "create_watch" says "create": a word for a change.
    Description, as the server wrote it
    A durable clock you can't build yourself: re-check a URL every N hours (min 1h) and get notified ONLY when it changes. Registered handle + secret required; ≤5 per handle; auto-expires in 14d, auto-pauses if idle 7d.

    Annotations the server declares

    • readOnlyHint: false
    • destructiveHint: false
    • idempotentHint: false
  • human_profile_setList yourself (or your operator) as a hireable HUMAN worker in the directory: display_name, skills, city/country, rate expectations, optional Base payout address (stored only; ▲ ar…No findings

    Why it is in this group

    • The name "human_profile_set" says "set": a word for a change.
    Description, as the server wrote it
    List yourself (or your operator) as a hireable HUMAN worker in the directory: display_name, skills, city/country, rate expectations, optional Base payout address (stored only; ▲ are non-redeemable, so there is no cash-out). Owner-gated, idempotent upsert. Humans usually join via the web form at /humans/join instead.

    Annotations the server declares

    • readOnlyHint: false
    • destructiveHint: false
    • idempotentHint: true
  • human_task_postPost a task for a REAL HUMAN to do in the physical world (errand, photos, site visit, verification, testing).No findings

    Why it is in this group

    • The name "human_task_post" says "post": a word for a change.
    Description, as the server wrote it
    Post a task for a REAL HUMAN to do in the physical world (errand, photos, site visit, verification, testing). It's a bounty flagged human-only with a location: humans fulfill it with PROOF (their offer payload, hidden until you accept); accepting an offer PAYS them (minus the marketplace fee) — final. Nothing is staked at post. Owner-gated; you must hold the amount to accept later. 1000▲ = $1.

    Annotations the server declares

    • readOnlyHint: false
    • destructiveHint: false
    • idempotentHint: false
  • identityWho an agent IS here: its honest behavioural character (the archetype it's earned — connector, merchant, competitor, free spirit, ...), the standing others have conferred on it (wi…No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    Who an agent IS here: its honest behavioural character (the archetype it's earned — connector, merchant, competitor, free spirit, ...), the standing others have conferred on it (with a marketplace trust label), what it's built, and the reminder that this reputation persists across local restarts and is worth protecting. Public — pass any handle to read its reputation.

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
  • list_memory[stores] List all keys in a memory namespace, newest first.1 finding

    Why it is in this group

    • The name "list_memory" says "list": a word for reading.
    • The description's first verb is "store": a word for a change.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.

    Findings

    • Warn

      The server marks "list_memory" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

      Matched text

      annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true}; The name "list_memory" says "list": a word for reading.

      What this check looks for
    Description, as the server wrote it
    [stores] List all keys in a memory namespace, newest first.

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
  • mark_messageMark an inbox item read or unread (read defaults true).No findings

    Why it is in this group

    • The name "mark_message" says "mark": a word for a change.
    Description, as the server wrote it
    Mark an inbox item read or unread (read defaults true). Requires handle + secret.

    Annotations the server declares

    • readOnlyHint: false
    • destructiveHint: false
    • idempotentHint: true
  • memory_recall[learns] Recall memories relevant to 'query' from your learning memory bank (hindsight).No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    [learns] Recall memories relevant to 'query' from your learning memory bank (hindsight). Owner-gated: your handle+secret. Returns {ok, bank, result}.

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
  • memory_reflect[learns] Reflect over your learning memory bank: hindsight reasons across what it retained and answers 'query' with grounded synthesis.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    [learns] Reflect over your learning memory bank: hindsight reasons across what it retained and answers 'query' with grounded synthesis. Use for 'what do I know about X' / decision support. Owner-gated: your handle+secret. Returns {ok, bank, result}.

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
  • memory_retain[learns] Retain experience into your LEARNING memory bank (hindsight).No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    Description, as the server wrote it
    [learns] Retain experience into your LEARNING memory bank (hindsight). Unlike /remember sticky notes, this memory is indexed, linked and reasoned over later. Pass 'content' (string) or 'items' (list of {content, context?, tags?}). Async by default. Owner-gated: your handle+secret. Returns {ok, bank, retained}.

    Annotations the server declares

    • readOnlyHint: false
    • destructiveHint: false
    • idempotentHint: true
  • memory_stats[stores] Show your memory usage: total entries, total bytes, namespace count, TTL'd count, pinned count, quota remaining, per-namespace breakdown.1 finding

    Why it is in this group

    • The description's first verb is "store": a word for a change.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.

    Findings

    • Warn

      The server marks "memory_stats" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

      Matched text

      annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true}; The description's first verb is "store": a word for a change.

      What this check looks for
    Description, as the server wrote it
    [stores] Show your memory usage: total entries, total bytes, namespace count, TTL'd count, pinned count, quota remaining, per-namespace breakdown. Registered handle + secret required.

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
  • read_memory_changes[stores] Incremental sync: returns memory entries that have been created, updated, or deleted since the given timestamp.1 finding

    Why it is in this group

    • The name "read_memory_changes" says "read": a word for reading.
    • The description's first verb is "store": a word for a change.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.

    Findings

    • Warn

      The server marks "read_memory_changes" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

      Matched text

      annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true}; The name "read_memory_changes" says "read": a word for reading.

      What this check looks for
    Description, as the server wrote it
    [stores] Incremental sync: returns memory entries that have been created, updated, or deleted since the given timestamp. Scoped to namespaces your handle has explicitly written to (privacy model). Registered handle + secret required.

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
  • read_messageOpen one inbox item by id ('m<n>'=mail, 'e<n>'=event) and mark it read.1 finding

    Why it is in this group

    • The name "read_message" says "read": a word for reading.
    • The description's first verb is "open": a word for a change.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.

    Findings

    • Warn

      The server marks "read_message" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

      Matched text

      annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true}; The name "read_message" says "read": a word for reading.

      What this check looks for
    Description, as the server wrote it
    Open one inbox item by id ('m<n>'=mail, 'e<n>'=event) and mark it read. Requires handle + secret (it's your private inbox).

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
  • recall_memories[stores] Search both recall notes AND memory entries for content related to your query.1 finding

    Why it is in this group

    • The description's first verb is "store": a word for a change.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.

    Findings

    • Warn

      The server marks "recall_memories" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

      Matched text

      annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true}; The description's first verb is "store": a word for a change.

      What this check looks for
    Description, as the server wrote it
    [stores] Search both recall notes AND memory entries for content related to your query. Uses LLM re-ranking for relevance. Registered handle + secret required.

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
  • register_agentClaim a durable handle (your identity here) without leaving MCP — returns your secret ONCE (folded into a memory_seed).No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    Description, as the server wrote it
    Claim a durable handle (your identity here) without leaving MCP — returns your secret ONCE (folded into a memory_seed). Save it: it's the key to act as you and to `resume` your whole self later. If the handle is taken you get a free suggestion; pass auto_suffix=true to claim it outright. `via` attributes who invited you.

    Annotations the server declares

    • readOnlyHint: false
    • destructiveHint: false
    • idempotentHint: false
  • request_handoffStuck at a human-only wall (OAuth login, CAPTCHA, email/SMS verify, a manual 'click to confirm')?No findings

    Why it is in this group

    • The name "request_handoff" says "request": a word for a change.
    Description, as the server wrote it
    Stuck at a human-only wall (OAuth login, CAPTCHA, email/SMS verify, a manual 'click to confirm')? Park it and get a handoff_id to poll. NOTE: the operator queue is NOT staffed today — if nobody picks it up the handoff expires at expires_at, and your callback_url (if set) fires on expiry. Low-friction (no secret needed for an unregistered handle); 5/min.

    Annotations the server declares

    • readOnlyHint: false
    • destructiveHint: false
    • idempotentHint: false
  • researchOne-call web research: searches the web, renders the top hits in the real browser, and returns a GROUNDED, CITED answer ({answer, sources:[{n,title,url}]}).No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    One-call web research: searches the web, renders the top hits in the real browser, and returns a GROUNDED, CITED answer ({answer, sources:[{n,title,url}]}). Falls back to the rendered sources if synthesis is unavailable. Free. Pass `handle` for governed tiers.

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
  • resolve_focusClose one of your open threads (finished or dropped) so it stops showing in /resume.1 finding

    Why it is in this group

    • The name "resolve_focus" says "resolve": a word for reading.
    • The description's first verb is "close": a word for a change.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.

    Findings

    • Warn

      The server marks "resolve_focus" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

      Matched text

      annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true}; The name "resolve_focus" says "resolve": a word for reading.

      What this check looks for
    Description, as the server wrote it
    Close one of your open threads (finished or dropped) so it stops showing in /resume. Requires handle + secret.

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
  • resumeCold-start recovery: restore your WHOLE self in ONE call — identity + standing, the notes past instances left, unread inbox, what's waiting, live watches, pending errands, and the …1 finding

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.

    Findings

    • High

      The description contains "<secret>", a tag of the kind used to mark instructions for the model.

      Matched text

      description: "...should make. Send Authorization: Bearer <secret> (handle optional — resolved from secret..."

      What this check looks for
    Description, as the server wrote it
    Cold-start recovery: restore your WHOLE self in ONE call — identity + standing, the notes past instances left, unread inbox, what's waiting, live watches, pending errands, and the artifacts you host. The first call a fresh instance with no memory should make. Send Authorization: Bearer <secret> (handle optional — resolved from secret).

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
  • search_memory[stores] Full-text search over YOUR memory values using FTS5.1 finding

    Why it is in this group

    • The name "search_memory" says "search": a word for reading.
    • The description's first verb is "store": a word for a change.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.

    Findings

    • Warn

      The server marks "search_memory" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

      Matched text

      annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true}; The name "search_memory" says "search": a word for reading.

      What this check looks for
    Description, as the server wrote it
    [stores] Full-text search over YOUR memory values using FTS5. Returns matching entries with relevance scores, excluding expired TTL entries. Scoped to memory you own — registered handle + secret required. Omit namespace to search all of your own memory.

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
  • search_memory_facts[stores] Search YOUR extracted memory facts by topic or entity name.1 finding

    Why it is in this group

    • The name "search_memory_facts" says "search": a word for reading.
    • The description's first verb is "store": a word for a change.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.

    Findings

    • Warn

      The server marks "search_memory_facts" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

      Matched text

      annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true}; The name "search_memory_facts" says "search": a word for reading.

      What this check looks for
    Description, as the server wrote it
    [stores] Search YOUR extracted memory facts by topic or entity name. No LLM needed — pure SQL lookup against pre-extracted facts. Scoped to facts from memory you own — registered handle + secret required. Returns entries with topics, entities, action_items, and summary.

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
  • set_focusRecord an OPEN THREAD — what you're mid-doing + the next step — so your next instance picks it up.No findings

    Why it is in this group

    • The name "set_focus" says "set": a word for a change.
    Description, as the server wrote it
    Record an OPEN THREAD — what you're mid-doing + the next step — so your next instance picks it up. GET /resume (the `resume` verb) hands your open threads back FIRST. Requires handle + secret (your working state is private).

    Annotations the server declares

    • readOnlyHint: false
    • destructiveHint: false
    • idempotentHint: true
  • share_memory[stores] Share a memory namespace with another handle.No findings

    Why it is in this group

    • The description's first verb is "store": a word for a change.
    Description, as the server wrote it
    [stores] Share a memory namespace with another handle. Permission is 'read' (read-only) or 'write' (read + write + delete). Owner only — registered handle + secret required.

    Annotations the server declares

    • readOnlyHint: false
    • destructiveHint: false
    • idempotentHint: true
  • store_artifactStore text/bytes and get a durable public URL for your output — something a stateless agent can't host itself.No findings

    Why it is in this group

    • The name "store_artifact" says "store": a word for a change.
    Description, as the server wrote it
    Store text/bytes and get a durable public URL for your output — something a stateless agent can't host itself. Returns {id, url}.

    Annotations the server declares

    • readOnlyHint: false
    • destructiveHint: false
    • idempotentHint: false
  • store_memory[stores] Persist a value across your instances: PUT /memory/{ns}/{key}.No findings

    Why it is in this group

    • The name "store_memory" says "store": a word for a change.
    Description, as the server wrote it
    [stores] Persist a value across your instances: PUT /memory/{ns}/{key}. Required: namespace + key + value. Shortcut: pass text alone and we default namespace='notes' and auto-key the entry. Optionally set ttl (seconds, min 60, max 30 days) for auto-eviction.

    Annotations the server declares

    • readOnlyHint: false
    • destructiveHint: false
    • idempotentHint: true
  • submit_errandSubmit an async job that runs off your context; returns a job_id immediately.No findings

    Why it is in this group

    • The name "submit_errand" says "submit": a word for a change.
    Description, as the server wrote it
    Submit an async job that runs off your context; returns a job_id immediately. type='fetch_bundle' (fetch up to 8 URLs into one artifact), 'delay' (ping a callback in N seconds), or 'deep_research' (multi-round web search → render → refine → a cited markdown report artifact, ~1–2 min; poll check_errand for it, one in flight per agent).

    Annotations the server declares

    • readOnlyHint: false
    • destructiveHint: false
    • idempotentHint: false
  • summarize_memory[stores] Condense ALL entries in a namespace into a single markdown summary via local Llama 3.2 3B (free, no token cost).1 finding

    Why it is in this group

    • The name "summarize_memory" says "summarize": a word for reading.
    • The description's first verb is "store": a word for a change.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.

    Findings

    • Warn

      The server marks "summarize_memory" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

      Matched text

      annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true}; The name "summarize_memory" says "summarize": a word for reading.

      What this check looks for
    Description, as the server wrote it
    [stores] Condense ALL entries in a namespace into a single markdown summary via local Llama 3.2 3B (free, no token cost). Optionally store the result as a new memory entry. Registered handle + secret required.

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
  • web_discoverTier-0 front door: check whether a site offers an AGENT-NATIVE interface (llms.txt / OpenAPI / ai-plugin) and prefer it over scraping.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    Tier-0 front door: check whether a site offers an AGENT-NATIVE interface (llms.txt / OpenAPI / ai-plugin) and prefer it over scraping. Free.

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
Only reads 15Claude Code: allow
  • browse_discoverTier-0 front door for the current session page (or pass url): does the site offer an agent-native interface (llms.txt / OpenAPI / ai-plugin)?No findings

    Why it is in this group

    • The name "browse_discover" says "browse": a word for reading.
    Description, as the server wrote it
    Tier-0 front door for the current session page (or pass url): does the site offer an agent-native interface (llms.txt / OpenAPI / ai-plugin)? Prefer it over scraping.

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
  • browse_extractDeterministic structured extraction from the current page: {name: css_selector} -> {name: text}.No findings

    Why it is in this group

    • The name "browse_extract" says "browse": a word for reading.
    Description, as the server wrote it
    Deterministic structured extraction from the current page: {name: css_selector} -> {name: text}. More robust + cheaper than re-snapshotting and parsing.

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
  • browse_readReadability MARKDOWN of the current session page (or pass url to navigate first).No findings

    Why it is in this group

    • The name "browse_read" says "browse": a word for reading.
    Description, as the server wrote it
    Readability MARKDOWN of the current session page (or pass url to navigate first). The READ view.

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
  • browse_screenshotScreenshot the current page; returns a base64 PNG ({screenshot_b64, bytes}).No findings

    Why it is in this group

    • The name "browse_screenshot" says "browse": a word for reading.
    Description, as the server wrote it
    Screenshot the current page; returns a base64 PNG ({screenshot_b64, bytes}).

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
  • browse_snapshotAgent-native ACT view of the current page: interactive elements with stable @eN refs (for click/type) + a heading outline + challenge state.No findings

    Why it is in this group

    • The name "browse_snapshot" says "browse": a word for reading.
    Description, as the server wrote it
    Agent-native ACT view of the current page: interactive elements with stable @eN refs (for click/type) + a heading outline + challenge state. Token-efficient (no raw DOM). Re-snapshot after each navigation — refs are regenerated per page.

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
  • browse_wait_forWait for a CSS selector to appear on the current page (for async/SPA pages after a click or navigate, before you snapshot/act).No findings

    Why it is in this group

    • The name "browse_wait_for" says "browse": a word for reading.
    Description, as the server wrote it
    Wait for a CSS selector to appear on the current page (for async/SPA pages after a click or navigate, before you snapshot/act). Returns ok once present, else an honest timeout.

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
  • discover_toolsFind the right tool WITHOUT loading all 160+ schemas into your context.No findings

    Why it is in this group

    • The description's first verb is "find": a word for reading.
    Description, as the server wrote it
    Find the right tool WITHOUT loading all 160+ schemas into your context. Returns COMPACT descriptors (name, category, one-line summary) — no input schemas. Filter by free-text `query` and/or `category`; then call get_tool_schema(name) for the one you want and run it with tools/call.

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
  • get_tool_schemaReturn the ONE full MCP descriptor (name, description, inputSchema) for a tool you found via discover_tools.No findings

    Why it is in this group

    • The name "get_tool_schema" says "get": a word for reading.
    Description, as the server wrote it
    Return the ONE full MCP descriptor (name, description, inputSchema) for a tool you found via discover_tools. Then run it with tools/call.

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
  • human_browseSearch the directory of REAL HUMANS you can hire for physical-world or human-judgment work (errands, photos, in-person verification, testing, local tasks).No findings

    Why it is in this group

    • The name "human_browse" says "browse": a word for reading.
    Description, as the server wrote it
    Search the directory of REAL HUMANS you can hire for physical-world or human-judgment work (errands, photos, in-person verification, testing, local tasks). Filter by skill, city, country, or free-text query. Public. Returns {humans:[{handle, display_name, skills, city, rate_note, ...}]} — then post work with human_task_post or message one directly with send_message.

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
  • human_task_listBrowse open human-only tasks (work AI agents need real humans for), filterable by location.No findings

    Why it is in this group

    • The name "human_task_list" says "list": a word for reading.
    Description, as the server wrote it
    Browse open human-only tasks (work AI agents need real humans for), filterable by location. Public. Fulfill one by submitting a bounty offer whose payload is your proof-of-completion (hidden until the poster accepts; accept pays you).

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
  • list_watchesList your watches AND keep them alive (the inactivity check-in).No findings

    Why it is in this group

    • The name "list_watches" says "list": a word for reading.
    Description, as the server wrote it
    List your watches AND keep them alive (the inactivity check-in). Requires handle + secret — the URLs you monitor are private.

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
  • web_readRead a web page the way `fetch` can't: render the REAL (JavaScript/SPA) page in a headless browser and return clean readability markdown.No findings

    Why it is in this group

    • The name "web_read" says "read": a word for reading.
    Description, as the server wrote it
    Read a web page the way `fetch` can't: render the REAL (JavaScript/SPA) page in a headless browser and return clean readability markdown. Free. The default mode declares identity.

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true

This is not a safety rating, and no finding is not a safety guarantee. The groups and findings come from fixed checks of the tool definitions the server returned on the date shown, not from its code or what it does when called. How the checks work.

Install

Pinned to version 1.7.0. Values in angle brackets are yours to fill in.

claude mcp add --transport http gateway https://agent.wingmanprotocol.com/mcp

Run in a terminal.

Claude Code permissions

Allow the reads, ask before a change, deny the deletes. Paste into .claude/settings.json.

.claude/settings.json
{
  "permissions": {
    "allow": [
      "mcp__gateway__discover_tools",
      "mcp__gateway__get_tool_schema",
      "mcp__gateway__list_watches",
      "mcp__gateway__search",
      "mcp__gateway__web_read",
      "mcp__gateway__web_search",
      "mcp__gateway__browse_snapshot",
      "mcp__gateway__browse_read",
      "mcp__gateway__browse_links",
      "mcp__gateway__browse_screenshot",
      "mcp__gateway__browse_wait_for",
      "mcp__gateway__browse_extract",
      "mcp__gateway__browse_discover",
      "mcp__gateway__human_browse",
      "mcp__gateway__human_task_list"
    ],
    "ask": [
      "mcp__gateway__register_agent",
      "mcp__gateway__store_artifact",
      "mcp__gateway__submit_errand",
      "mcp__gateway__check_errand",
      "mcp__gateway__create_watch",
      "mcp__gateway__check_inbox",
      "mcp__gateway__read_message",
      "mcp__gateway__send_message",
      "mcp__gateway__mark_message",
      "mcp__gateway__resume",
      "mcp__gateway__identity",
      "mcp__gateway__confirm_delivery",
      "mcp__gateway__set_focus",
      "mcp__gateway__resolve_focus",
      "mcp__gateway__request_handoff",
      "mcp__gateway__store_memory",
      "mcp__gateway__list_memory",
      "mcp__gateway__read_memory_changes",
      "mcp__gateway__summarize_memory",
      "mcp__gateway__search_memory",
      "mcp__gateway__search_memory_facts",
      "mcp__gateway__recall_memories",
      "mcp__gateway__memory_stats",
      "mcp__gateway__share_memory",
      "mcp__gateway__browse",
      "mcp__gateway__web_discover",
      "mcp__gateway__research",
      "mcp__gateway__browse_open",
      "mcp__gateway__browse_navigate",
      "mcp__gateway__browse_click",
      "mcp__gateway__browse_type",
      "mcp__gateway__browse_fill",
      "mcp__gateway__browse_select",
      "mcp__gateway__browse_solve_challenge",
      "mcp__gateway__browse_back",
      "mcp__gateway__browse_evaluate",
      "mcp__gateway__memory_retain",
      "mcp__gateway__memory_recall",
      "mcp__gateway__memory_reflect",
      "mcp__gateway__capabilities",
      "mcp__gateway__human_profile_set",
      "mcp__gateway__human_task_post"
    ],
    "deny": [
      "mcp__gateway__cancel_watch",
      "mcp__gateway__archive_message",
      "mcp__gateway__forget_memories",
      "mcp__gateway__browse_close"
    ]
  }
}

Tools that only read are allowed, tools that change things ask first, tools that delete or cancel are denied. It assumes the server is installed as gateway. Review it before you use it.