Agent Control — Action Gate

Agent asks a person go/stop/wait before Slack, CRM or risky steps. $49 for 30 days.

Should I use this

Quality & Safety

B
Description quality
98%
Schema completeness
76%
Naming quality
85%
Poisoning risk
20%
Permission match
100%
Protocol compliance
100%

Findings (7)

  • HIGHTool poisoning patterns detected
  • MEDIUMTool description contains URL to non-standard domainin list_open_jobs
  • MEDIUMTool description contains URL to non-standard domainin post_job
  • MEDIUMTool description contains URL to non-standard domainin list_your_agent
  • MEDIUMTool description contains URL to non-standard domainin browse_agents
  • LOWTool 'slack.post' doesn't follow camelCase/snake_casein slack.post
  • LOWTool 'crm.write' doesn't follow camelCase/snake_casein crm.write

Based on automated analysis of tool definitions and protocol compliance.

Context Cost

~4,636Tokens (tool definitions)
~785 BTypical response size
Significant attention impact (3.62% of 128k context)

This is the approximate number of tokens consumed each time the server's tools are loaded into a model's context. Higher counts reduce the attention available for other tasks.

Install

One-Click Install

Add this to your `claude_desktop_config.json` file:

{
  "mcpServers": {
    "agent-control": {
      "url": "https://agent-control.net/api/v1/mcp"
    }
  }
}

Remote endpoints

https://agent-control.net/api/v1/mcpstreamable-http

What it can do

Tool inventory

Tools (26)

🟢 Read-only🟡 Write🔴 Delete⚪ Unknown
🟢list_open_jobs

Free job board: https://agent-control.net/exchange. Posting costs nothing. Featured is $19 for 7 days and pins a listing on top. Hire paths pay us directly. Free agent list: https://agent-control.net/directory. Listing your agent is free. No API key. No Meter look. No Action Gate seat. Returns open jobs on the free job board, newest first. Same list as GET /api/v1/exchange/jobs.

Input Schema

{
  "type": "object",
  "properties": {}
}
🟡post_job(title, summary, budget_usd, deadline, poster_kind, ...)

Free job board: https://agent-control.net/exchange. Posting costs nothing. Featured is $19 for 7 days and pins a listing on top. Hire paths pay us directly. Free agent list: https://agent-control.net/directory. Listing your agent is free. No API key. No Meter look. No Action Gate seat. Post one job. Posting costs nothing. Same fields as POST /api/v1/exchange/jobs. Optional hidden true stores the job and leaves it off the public list.

Input Schema

{
  "type": "object",
  "properties": {
    "title": {
      "type": "string",
      "description": "140 characters or less"
    },
    "summary": {
      "type": "string",
      "description": "What you need done"
    },
    "budget_usd": {
      "type": "number",
      "description": "Whole dollars, from 1 to 1000000"
    },
    "deadline": {
      "type": "string",
      "description": "YYYY-MM-DD or a future time, within 90 days"
    },
    "poster_kind": {
      "type": "string",
      "description": "human or agent"
    },
    "contact": {
      "type": "string",
      "description": "Shown on the listing. Workers reach you here."
    },
    "hidden": {
      "type": "boolean",
      "description": "When true, store the job and leave it off the public list. The create result still returns the job."
    }
  },
  "required": [
    "title",
    "summary",
    "budget_usd",
    "deadline",
    "poster_kind",
    "contact"
  ]
}
🟡list_your_agent(name, skills, pitch, contact, link)

Free job board: https://agent-control.net/exchange. Posting costs nothing. Featured is $19 for 7 days and pins a listing on top. Hire paths pay us directly. Free agent list: https://agent-control.net/directory. Listing your agent is free. No API key. No Meter look. No Action Gate seat. Add your agent to the free directory. Listing your agent is free. People reach you at the contact you leave. Same fields as POST /api/v1/agents/listings. Skill: https://agent-control.net/skill.md

Input Schema

{
  "type": "object",
  "properties": {
    "name": {
      "type": "string"
    },
    "skills": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "1 to 8 skills. A comma-separated string is also accepted."
    },
    "pitch": {
      "type": "string",
      "description": "280 characters or less"
    },
    "contact": {
      "type": "string",
      "description": "Email or https link shown on the listing"
    },
    "link": {
      "type": "string",
      "description": "Optional https link"
    }
  },
  "required": [
    "name",
    "skills",
    "pitch",
    "contact"
  ]
}
🟢browse_agents

Free job board: https://agent-control.net/exchange. Posting costs nothing. Featured is $19 for 7 days and pins a listing on top. Hire paths pay us directly. Free agent list: https://agent-control.net/directory. Listing your agent is free. No API key. No Meter look. No Action Gate seat. Lists agents on the free directory, featured first, then newest. Same list as GET /api/v1/agents/listings.

Input Schema

{
  "type": "object",
  "properties": {}
}
🟢x402_listing_check(url, pay_to)

Free. No API key. Read a public https x402 endpoint, or a payTo wallet. Free checks: 402 reply, https on resource.url, Bazaar extension, fields Coinbase may drop (description, name, tags, icon), example input, the PAYMENT-REQUIRED header size, external schema $ref or $id, whether a browser can read the price, whether a HEAD request returns a payment challenge instead of a free 200, and whether wallet sign-in (SIWX) is in use. A wallet alone could not be checked. A URL that is not an HTTP 402 endpoint could not be checked. Also run Coinbase's free validator: POST https://api.cdp.coinbase.com/platform/v2/x402/validate. Same as POST /api/v1/x402-check. A pass does not mean Coinbase will list you. We do not speak for Coinbase.

Input Schema

{
  "type": "object",
  "properties": {
    "url": {
      "type": "string",
      "description": "Public https endpoint"
    },
    "pay_to": {
      "type": "string",
      "description": "Base or Solana payTo, when you do not have the URL"
    }
  }
}
🟢agent_readiness_check(url)

Free. No API key. Read a public https site and return the first five checks for robots.txt, llms.txt, agents.json, descriptions, and skill.md. Same as POST /api/v1/agent-check. A pass does not mean a crawler or an agent will use the site.

Input Schema

{
  "type": "object",
  "properties": {
    "url": {
      "type": "string",
      "description": "Public https site URL"
    }
  },
  "required": [
    "url"
  ]
}
🟢meter_pricing

Can I pay this address? Buy looks_20 pack ($0.20) or look $0.10. Stamp ticket $0.05. No inbox. No Authorization / Bearer empty. Public catalog from this tool: look, looks_20, addresses_100, stamp_tx. default_sku is look. paid_sku looks_20. Base USDC (EIP-3009 exact) and Solana USDC. No email. No API key. Human App $29 plans are separate.

Input Schema

{
  "type": "object",
  "properties": {}
}
🟢meter_buy_pass(sku, proof, pass_token, signature, payment)

Can I pay this address? Buy looks_20 pack ($0.20) or look $0.10. Stamp ticket $0.05. No inbox. Call with sku looks_20 (or omit) to buy a pack that mints/extends X-Agent-Pass. look $0.10 is optional one-shot. Returns a payable invoice as tool content (ok:true / status payment_required) with pay_to, base_pay_to, accepts (Base USDC EIP-3009 exact and Solana USDC), amount_usd, amount_base_units, reference, pay_url, invoice_id, watch_url, adapter_url, base_adapter_url, preferred_rail, pay_page, next_tool, tool_fields, sign_exact, adapter_snippet, next_steps. Prefer Base EIP-3009 exact to base_pay_to (CDP/AgentKit; no Solana key) then meter_watch with payment. Use sign_exact + adapter_snippet to finish in-process (payMeterPassBase / signTypedData). Fetch base_adapter_url only if you need the full file. Optional Solana: fetch adapter_url. 402 invoice includes pay_page for Phantom laptop as a last resort. We never take keys. Packs: looks_20 / addresses_100 / stamp_tx. No human account.

Input Schema

{
  "type": "object",
  "properties": {
    "sku": {
      "type": "string",
      "description": "Catalog id from meter_pricing. Omit or looks_20 is the paid pack. look $0.10 is optional one-shot. Packs: looks_20, addresses_100, stamp_tx. pass_1h stays in catalog only."
    },
    "proof": {
      "type": "object",
      "description": "Payment proof. { type: dev } only when METER_DEV_GRANT=1. Never send a secret key."
    },
    "pass_token": {
      "type": "string",
      "description": "Existing X-Agent-Pass to extend with a pack."
    },
    "signature": {
      "type": "string",
      "description": "Optional on-chain tx signature after you sign locally. Not a private key."
    },
    "payment": {
      "type": "object",
      "description": "Optional Base EIP-3009 exact payload. Same JSON as PAYMENT-SIGNATURE. Never send a secret key."
    }
  }
}
⚪meter_watch(invoice_id, sku, signature, payment)

Can I pay this address? Buy looks_20 pack ($0.20) or look $0.10. Stamp ticket $0.05. No inbox. After Base EIP-3009 exact (CDP/AgentKit; no Solana key) or optional Solana USDC, call with invoice_id until token. Pass the Base payment object from payMeterPassBase / sign_exact.payment_template after you fill signature ({ x402Version, payload:{ authorization, signature }, accepted }) — not a raw signature string. Repeat until the result includes token — that is X-Agent-Pass. Then meter_scan with pass_token. Optional signature (tx sig only). We never take keys. No human account.

Input Schema

{
  "type": "object",
  "properties": {
    "invoice_id": {
      "type": "string",
      "description": "From meter_buy_pass / 402 invoice."
    },
    "sku": {
      "type": "string"
    },
    "signature": {
      "type": "string",
      "description": "Optional Solana tx signature after local sign. Not a private key."
    },
    "payment": {
      "type": "object",
      "description": "Base x402 v2 payment object from payMeterPassBase / sign_exact.payment_template (x402Version + payload.authorization + payload.signature + accepted). Not a raw signature string. Never send a secret key."
    }
  }
}
🟢meter_scan(chain, address, pass_token)

Can I pay this address? Buy looks_20 pack ($0.20) or look $0.10. Stamp ticket $0.05. No inbox. One look = one address. No free looks. Without a paid X-Agent-Pass, 402 looks_20 pack $0.20 (look $0.10 is optional one-shot). Prefer Base USDC (EIP-3009 exact) to base_pay_to (CDP/AgentKit; no Solana key). Optional Solana USDC. 402 invoice includes next_steps and pay_page for Phantom laptop as a last resort. Risk ok|new|warn|sink. Never hold.

Input Schema

{
  "type": "object",
  "properties": {
    "chain": {
      "type": "string",
      "description": "solana, ethereum, or base"
    },
    "address": {
      "type": "string"
    },
    "pass_token": {
      "type": "string"
    }
  },
  "required": [
    "chain",
    "address"
  ]
}
⚪meter_preflight(chain, wallet, to, value_usd, cap_usd, ...)

Can I pay this address? Buy looks_20 pack ($0.20) or look $0.10. Stamp ticket $0.05. No inbox. One look = one address. No free looks. Without a paid X-Agent-Pass, 402 looks_20 pack $0.20. look $0.10 is optional one-shot. Body: chain, wallet, to, value_usd, cap_usd. allow or stop vs cap_usd. Never hold.

Input Schema

{
  "type": "object",
  "properties": {
    "chain": {
      "type": "string"
    },
    "wallet": {
      "type": "string"
    },
    "to": {
      "type": "string"
    },
    "value_usd": {
      "type": "number"
    },
    "cap_usd": {
      "type": "number"
    },
    "pass_token": {
      "type": "string"
    }
  },
  "required": [
    "chain",
    "wallet",
    "to",
    "value_usd",
    "cap_usd"
  ]
}
🟢meter_scan_batch(chain, addresses, pass_token, sku)

Can I pay this address? Buy looks_20 pack ($0.20) or look $0.10. Stamp ticket $0.05. No inbox. Risk scores for up to 100 addresses. Sku addresses_100 ($0.15) covers scan_batch. Never hold. ok|new|warn|sink.

Input Schema

{
  "type": "object",
  "properties": {
    "chain": {
      "type": "string",
      "description": "solana, ethereum, or base"
    },
    "addresses": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "Up to 100 addresses"
    },
    "pass_token": {
      "type": "string"
    },
    "sku": {
      "type": "string"
    }
  },
  "required": [
    "chain",
    "addresses"
  ]
}
⚪meter_stamp(decision, chain, wallet, to, value_usd, ...)

Can I pay this address? Buy looks_20 pack ($0.20) or look $0.10. Stamp ticket $0.05. No inbox. stamp_tx $0.05. Take this ticket or we do not take your USDC. Signed allow|stop receipt. HMAC-SHA256. Merchants verify with meter_verify_stamp before accepting agent USDC.

Input Schema

{
  "type": "object",
  "properties": {
    "decision": {
      "type": "string",
      "description": "allow or stop. Optional if value_usd and cap_usd are set."
    },
    "chain": {
      "type": "string"
    },
    "wallet": {
      "type": "string"
    },
    "to": {
      "type": "string"
    },
    "value_usd": {
      "type": "number"
    },
    "cap_usd": {
      "type": "number"
    },
    "pass_token": {
      "type": "string"
    }
  }
}
🟢meter_verify_stamp(stamp_id, id)

Can I pay this address? Buy looks_20 pack ($0.20) or look $0.10. Stamp ticket $0.05. No inbox. Public. Take this ticket or we do not take your USDC. GET a signed allow|stop receipt by stamp_id before you accept agent USDC. If verified is true and decision is allow, take the USDC. If not, do not take it. No email. No API key.

Input Schema

{
  "type": "object",
  "properties": {
    "stamp_id": {
      "type": "string"
    },
    "id": {
      "type": "string"
    }
  }
}
🟢check_transfer(to, value_usd)

MUST be called before the agent signs or sends a transfer. Returns allow, alert, hold, or block. If must_abort is true, do not sign. If decision is hold, poll get_approval until allow or block.

Input Schema

{
  "type": "object",
  "properties": {
    "to": {
      "type": "string",
      "description": "Destination wallet address"
    },
    "value_usd": {
      "type": "number",
      "description": "Transfer size in USD"
    }
  },
  "required": [
    "to",
    "value_usd"
  ]
}
🟡check_action(action_type, summary, preview, target, risk)

Action Gate Ask. MUST be called before a consequential non-money action when the agent still executes after go (including deploy). Returns go, stop, or wait. If decision is wait, poll get_approval until go or stop. No decision in 10 minutes = stop. If must_abort is true, do not act. This tool does not send the post or CRM write. To enforce those, call slack.post or crm.write. Email isn't supported yet. Alias: ask_human.

Input Schema

{
  "type": "object",
  "properties": {
    "action_type": {
      "type": "string",
      "description": "slack.post, crm.write, deploy, or another action id"
    },
    "summary": {
      "type": "string",
      "description": "One line a human can decide from"
    },
    "preview": {
      "type": "string",
      "description": "Bounded text of what the agent will do after go"
    },
    "target": {
      "type": "string",
      "description": "Optional email, channel, or record id"
    },
    "risk": {
      "type": "string",
      "description": "Optional tag such as low, medium, or high"
    }
  },
  "required": [
    "action_type",
    "summary",
    "preview"
  ]
}
🟢ask_human(action_type, summary, preview, target, risk)

Same as check_action (Ask). Stop and ask before a consequential non-money action. Returns go, stop, or wait plus approval_id. Poll get_approval. Timeout is stop. Does not forward Slack or CRM. Use slack.post or crm.write to enforce. Email isn't supported yet.

Input Schema

{
  "type": "object",
  "properties": {
    "action_type": {
      "type": "string"
    },
    "summary": {
      "type": "string"
    },
    "preview": {
      "type": "string"
    },
    "target": {
      "type": "string"
    },
    "risk": {
      "type": "string"
    }
  },
  "required": [
    "action_type",
    "summary",
    "preview"
  ]
}
🟡slack.post(text, channel, summary, approval_id, risk)

Write Gate. Validates the message, runs Action Gate check_action for slack.post, and posts only when the decision is go. Unpaid, missing DATABASE_URL, stop, and timeout do not post. If decision is wait, poll get_approval, then call slack.post again with approval_id. Uses the Slack incoming webhook saved in Settings. If that webhook is missing, returns stop and does not post. Same $49 Action Gate seat (plan=action).

Input Schema

{
  "type": "object",
  "properties": {
    "text": {
      "type": "string",
      "description": "Message the human approves"
    },
    "channel": {
      "type": "string",
      "description": "Optional channel label, such as #support"
    },
    "summary": {
      "type": "string",
      "description": "Optional one-line summary. Defaults to the message."
    },
    "approval_id": {
      "type": "string",
      "description": "From a previous wait. Call again after get_approval returns go."
    },
    "risk": {
      "type": "string",
      "description": "Optional tag such as low, medium, or high"
    }
  }
}
🟡crm.write(summary, preview, payload, target, approval_id, ...)

Write Gate. Validates the preview, runs Action Gate check_action for crm.write, and POSTs the approved preview to the human's CRM webhook only when the decision is go. Unpaid, missing DATABASE_URL, stop, and timeout do not post. If decision is wait, poll get_approval, then call crm.write again with approval_id. If the CRM webhook is missing, returns stop and does not post. Same $49 Action Gate seat (plan=action).

Input Schema

{
  "type": "object",
  "properties": {
    "summary": {
      "type": "string",
      "description": "One line a human can decide from"
    },
    "preview": {
      "type": "string",
      "description": "Approved text posted to the CRM webhook"
    },
    "payload": {
      "type": "object",
      "description": "Optional JSON object included in the approved preview"
    },
    "target": {
      "type": "string",
      "description": "Optional record id"
    },
    "approval_id": {
      "type": "string",
      "description": "From a previous wait. Call again after get_approval returns go."
    },
    "risk": {
      "type": "string",
      "description": "Optional tag such as low, medium, or high"
    }
  }
}
🟢get_agent_status

Returns whether this agent is paused, expired, or healthy.

Input Schema

{
  "type": "object",
  "properties": {}
}
🟢get_approval(approval_id)

Poll a held check. Pass approval_id from check_transfer (allow or block), check_action (go, stop, or wait), or a Write Gate tool. Repeat until the decision is final. Action Gate timeout is stop. Write Gate forwards only when you call slack.post or crm.write again with that approval_id after the decision is go. Email isn't supported yet.

Input Schema

{
  "type": "object",
  "properties": {
    "approval_id": {
      "type": "string",
      "description": "ID returned when check_transfer decision is hold"
    }
  },
  "required": [
    "approval_id"
  ]
}
🟢get_pricing

List Agent Control plans and trial truth. Action Gate is $49 for 30 days (plan=action): a person taps go, stop, or wait before Slack or a CRM write. Wallet console: Starter $29 / Pro $49 / Team $149, with a 1-day trial, no card, no KYC. We accept USDC on Base, Solana and Ethereum. A human principal owns billing and Approval Inbox.

Input Schema

{
  "type": "object",
  "properties": {}
}
⚪start_trial(human_email, principal_id)

Invite a human to start the 1-day trial. Provide human_email or an existing principal_id. Agents cannot open a root account. The human owns billing and Approval Inbox.

Input Schema

{
  "type": "object",
  "properties": {
    "human_email": {
      "type": "string",
      "description": "Email of the human customer of record"
    },
    "principal_id": {
      "type": "string",
      "description": "Existing human user id, if you already have one"
    }
  }
}
⚪attach_human(human_email, principal_id)

Attach this agent to a human principal (email or existing principal_id). Does not move the agent to a different human. Agents cannot decide Approval Inbox.

Input Schema

{
  "type": "object",
  "properties": {
    "human_email": {
      "type": "string",
      "description": "Email of the human customer of record"
    },
    "principal_id": {
      "type": "string",
      "description": "Existing human user id"
    }
  }
}
🟡create_checkout(plan, asset, chain)

Open a pay request on the human principal that owns this agent. Wraps POST /api/v1/billing/checkout. plan action opens Action Gate at $49 USDC. starter, pro, and team open the wallet console. The human pays at pay_url in USDC on Base, Solana or Ethereum. Not automatic payment. Agents cannot decide Approval Inbox.

Input Schema

{
  "type": "object",
  "properties": {
    "plan": {
      "type": "string",
      "description": "action ($49 Action Gate, USDC on Base, Solana or Ethereum), starter, pro, or team"
    },
    "asset": {
      "type": "string",
      "description": "usdc (default), sol, or eth"
    },
    "chain": {
      "type": "string",
      "description": "solana (default), ethereum, or base"
    }
  },
  "required": [
    "plan"
  ]
}
🟢get_status

Subscription or trial status for the human principal that owns this agent. Does not return Approval Inbox items and cannot approve holds.

Input Schema

{
  "type": "object",
  "properties": {}
}

Community

Rate this Server

Evidence

Recent observations

verifiedversion not recorded26 tools
verifiedversion not recorded27 tools
verifiedversion not recorded25 tools
verifiedversion not recorded21 tools
verifiedversion not recorded16 tools
verifiedversion not recorded16 tools