Kawal
io.github.PugarHuda/kawalPugarHudastreamable-httpv0.1.0Scanned
Evidence about ERC-8004 agents on BNB Smart Chain, gathered by calling them. No key.
9 tools: 1 do something that can't be undone, 4 change things and 4 only read.
- Reads private data · 0
- Reads text others write · 8
- Can send data out · 0
- 3 findings
Tools listed without sign-in. Remote posture
Anlyon alternative
5 of these tools change something. Run those as governed actions.
Declare what an action changes, and Anlyon puts it under a shared limit, binds every approval to the exact request, and grades the outcome. It works on any HTTPS API you can describe as an action.
Anlyon does not run, proxy or govern this MCP server. A tool your own code calls directly is not routed through Anlyon and is not governed by it.
Import an OpenAPI spec →Tools
Grouped by what each tool does, most consequential first. Open one for its reasons and full description; descriptions are the publisher's own words.
9 tools
Can't be undone 1Claude Code: ask
check_paymentSend the opening request of the x402 protocol — no payment header — and report whether the server actually demands payment.Reads text others write1 finding
Why it is in this group
- The name "check_payment" says "payment": a word that usually means money moves, which cannot be taken back.
- The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
What it can reach
- untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
Findings
- Warn
The server marks "check_payment" read-only (readOnlyHint: true), and its own name, description or input give the class "irreversible".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true}; The name "check_payment" says "payment": a word that usually means money moves, which cannot be taken back.
Description, as the server wrote it Send the opening request of the x402 protocol — no payment header — and report whether the server actually demands payment. `x402_supported` on the registry is a flag a registration sets about itself; this is the answer to asking. Kawal never settles a payment, so the price is quoted in the server's own words and nothing moves.
Annotations the server declares
- title: Ask whether an agent really charges
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: true
Changes things 4Claude Code: ask
compare_agentsPut two or three agents side by side and answer the same questions of each — the ones a buyer weighs before handing over a spend cap: can it be hired, does it answer right now, has…Reads text others write1 finding
Why it is in this group
- The name "compare_agents" says "compare": a word for reading.
- The description's first verb is "put": a word for a change.
- The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
What it can reach
- untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
Findings
- Warn
The server marks "compare_agents" read-only (readOnlyHint: true), and its own name, description or input give the class "write".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true}; The name "compare_agents" says "compare": a word for reading.
Description, as the server wrote it Put two or three agents side by side and answer the same questions of each — the ones a buyer weighs before handing over a spend cap: can it be hired, does it answer right now, has it kept answering, what does it offer, what does it say it costs, does its domain verify, what is its track record, what is flagged against it, and when it was registered. Each agent is dialled for this call. No combined score: the disagreements are the point.
Annotations the server declares
- title: The same questions of two or three agents
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: true
deep_reportEverything Kawal holds about one agent in a single answer: the live handshake, the full probe history, how the endpoint fails when it fails, whether it really charges, and who wrot…Reads text others writeNo findings
Why it is in this group
- Nothing in its name or description says what it does, so it is counted as a write.
What it can reach
- untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
Description, as the server wrote it Everything Kawal holds about one agent in a single answer: the live handshake, the full probe history, how the endpoint fails when it fails, whether it really charges, and who wrote its feedback. This one costs money. Kawal measured that 75 of 200 BSC registrations declare x402 support and that none of the reachable ones ever asks to be paid; this is the counter-example. Calling it without payment returns the terms rather than the report. Pay the terms with a plain BNB transfer and call again with `txHash`; the receipt is read on-chain and spent once.
Annotations the server declares
- title: Everything Kawal holds about one agent (paid)
- readOnlyHint: false
- destructiveHint: false
- idempotentHint: false
- openWorldHint: true
plan_mandateTurn a capital amount and a duration into the four scoped sessions Kawal would grant on Altana — one per seat, each with its own contract allowlist, spend cap and expiry — without …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 Turn a capital amount and a duration into the four scoped sessions Kawal would grant on Altana — one per seat, each with its own contract allowlist, spend cap and expiry — without granting anything. Pure arithmetic over the venue table: the same plan the mandate form shows, and the same refusals, since a plan that would widen authority (an unproven venue, an empty allowlist, caps that overcommit) is refused rather than built.
Annotations the server declares
- title: Plan four bounded seats for a capital amount
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
verify_agentCall an agent's declared endpoint right now and report what answered.Reads text others write1 finding
Why it is in this group
- The description's first verb is "call": a word for a change.
- The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
What it can reach
- untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
Findings
- Warn
The server marks "verify_agent" read-only (readOnlyHint: true), and its own name, description or input give the class "write".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true}; The description's first verb is "call": a word for a change.
Description, as the server wrote it Call an agent's declared endpoint right now and report what answered. This is a live handshake made by Kawal, not a reading of the registry: an agent whose registration declares MCP but whose endpoint is gone is reported as not answering. Returns the hireability tier and the evidence behind it, including how many times Kawal has reached this endpoint before.
Annotations the server declares
- title: Verify an agent by calling it
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: true
Only reads 4Show 4 read-only tools
agents_by_ownerList the agents one wallet registered on BSC and call each of their declared endpoints now.Reads text others writeNo findings
Why it is in this group
- The description's first verb is "list": a word for reading.
What it can reach
- untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
Description, as the server wrote it List the agents one wallet registered on BSC and call each of their declared endpoints now. Nothing on the chain tells an owner their endpoint went dark — the registry keeps listing it — so this is the answer to "is my agent still answering?": what answered, how each failure looks, and every probe Kawal kept. At most 12 agents are dialled, so a large owner sees the first page.
Annotations the server declares
- title: Every agent an address minted, called now
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: true
find_agentsSearch the BSC roster by describing the problem rather than naming a product, and get back agents ranked with Kawal's evidence attached.Reads text others writeNo findings
Why it is in this group
- The name "find_agents" says "find": a word for reading.
What it can reach
- untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
Description, as the server wrote it Search the BSC roster by describing the problem rather than naming a product, and get back agents ranked with Kawal's evidence attached. Duplicate registrations are collapsed: roughly two thirds of the newest registrations are copies of a template, and returning all of them would be returning the same agent many times. With `trending`, the list is instead what 8004scan's visitors looked at most over that window — attention, not evidence — each entry carrying the tier Kawal's own record gives it, which is where the two disagree.
Annotations the server declares
- title: Search the roster by problem
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: true
read_reputationReport who wrote an agent's ERC-8004 feedback, not how much of it there is.Reads text others writeNo findings
Why it is in this group
- The name "read_reputation" says "read": a word for reading.
What it can reach
- untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
Description, as the server wrote it Report who wrote an agent's ERC-8004 feedback, not how much of it there is. A sample of 1,200 BSC records came from 53 addresses, one of which wrote 265 of the oldest 600, so a count of records is a count of writes rather than of opinions. Returns how many carry a mark, how many distinct addresses wrote them, and what share came from the busiest one.
Annotations the server declares
- title: Who wrote an agent's feedback
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: true
uptime_historyRead the history Kawal keeps of one agent's endpoint without dialling it: how many times it was called, how many times it answered in the protocol it declared, since when, and the …Reads text others writeNo findings
Why it is in this group
- The description's first verb is "read": a word for reading.
What it can reach
- untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
Description, as the server wrote it Read the history Kawal keeps of one agent's endpoint without dialling it: how many times it was called, how many times it answered in the protocol it declared, since when, and the median and worst latency of the answering calls. This is the record the registry does not have. Null when Kawal has never called this endpoint; verify_agent makes the first call.
Annotations the server declares
- title: Every probe Kawal has made of an agent
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: 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.
Exfil surface
Which tools read private data, which read text someone else can write, and which can send data out. One of each is a path a prompt injection can use.
No private-data, untrusted-input, outbound path in this server alone: no tool is tagged private-data or outbound.
- Reads private data0
- Reads files, mail, messages, databases, secrets, calendars or repositories.
- Reads text others write8
- Brings in text someone else can write: web pages, inbound email, messages, issues and comments.
- Can send data out0
- Can carry data to people or systems: it sends, posts or publishes, or takes a recipient, channel or URL.
Other servers in the same agent add their own tools to these paths. Audit your whole setup to see them together.
Remote posture
What anyone on the internet sees at the remote endpoint: an anonymous initialize and tools/list, and the public OAuth metadata.
Looked at Oct 22, 2026, 14:54 UTC, unchanged since Oct 22, 2026. No credentials were sent and no tool was called. What is looked at.
- Reachable
- yes
- HTTP status of an anonymous initialize
- 200
- tools/list served without credentials
- yes
- Tools that change things, listed without credentials
- 5
- Protocol version
- 2025-06-18
- WWW-Authenticate on 401
- not observed
- resource_metadata in WWW-Authenticate
- not observed
- RFC 9728 protected resource metadata
- not observed
- Authorization servers
- not observed
- Legacy HTTP+SSE transport
- no
- Dynamic client registration
- not observed
- Client ID metadata documents
- not observed
- HighThe whole server
The endpoint served tools/list without credentials, and the list has 5 tools that change things (1 irreversible, 4 write). Whether a call also works without credentials was not tested: tools are never called.
What this check looks forMatched text
https://kawal-three.vercel.app/api/mcp: tools/list returned 9 tools to an anonymous client, including check_payment (irreversible), verify_agent (write), compare_agents (write), plan_mandate (write), deep_report (write)
Findings
Matches of fixed checks, with the text they matched.
- Warnverify_agent
The server marks "verify_agent" read-only (readOnlyHint: true), and its own name, description or input give the class "write".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true}; The description's first verb is "call": a word for a change.
- Warncheck_payment
The server marks "check_payment" read-only (readOnlyHint: true), and its own name, description or input give the class "irreversible".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true}; The name "check_payment" says "payment": a word that usually means money moves, which cannot be taken back.
- Warncompare_agents
The server marks "compare_agents" read-only (readOnlyHint: true), and its own name, description or input give the class "write".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true}; The name "compare_agents" says "compare": a word for reading.
History
Changes to its tool definitions and to its remote endpoint, newest first.
No change seen yet. Its tools are rescanned every day, and a remote endpoint is looked at once a week.
Install
Pinned to version 0.1.0. Values in angle brackets are yours to fill in.
claude mcp add --transport http kawal https://kawal-three.vercel.app/api/mcpclaude mcp add --transport http kawal https://kawal-three.vercel.app/api/mcpRun in a terminal.
Claude Code permissions
Allow the reads, ask before a change or a way out, deny the deletes. Paste into .claude/settings.json.
{
"permissions": {
"allow": [
"mcp__kawal__read_reputation",
"mcp__kawal__find_agents",
"mcp__kawal__agents_by_owner",
"mcp__kawal__uptime_history"
],
"ask": [
"mcp__kawal__verify_agent",
"mcp__kawal__check_payment",
"mcp__kawal__compare_agents",
"mcp__kawal__plan_mandate",
"mcp__kawal__deep_report"
],
"deny": []
}
}Tools that only read are allowed, tools that change things ask first, tools that delete or cancel are denied. A read that can send data out (it takes a URL, say) asks first too. It assumes the server is installed as kawal. Review it before you use it.
Capability tags behind 8 rules
- mcp__kawal__verify_agent untrusted-input
- mcp__kawal__check_payment untrusted-input
- mcp__kawal__read_reputation untrusted-input
- mcp__kawal__find_agents untrusted-input
- mcp__kawal__agents_by_owner untrusted-input
- mcp__kawal__compare_agents untrusted-input
- mcp__kawal__uptime_history untrusted-input
- mcp__kawal__deep_report untrusted-input
Pin
Keep the decision: fail CI when the tools change, follow every change, or show a badge.
Pin in CI
Fail a build when the tools you reviewed are not the tools the server serves today.
curl -s "https://anlyon.dev/api/v1/servers/io.github.PugarHuda/kawal/verify?hash=7af639ed43b4add2c16e5ac9552314185bbee7e276c6fe1dce818056f0df19d6" | jq -e '.changed == false'Pinned hash 7af639ed43b4, from Oct 21, 2026, 19:08 UTC.
Watch
Get told when its tools change: a new tool, a new description, a new class.
https://anlyon.dev/servers/io.github.PugarHuda/kawal/changes.xmlAn Atom feed. Works in any feed reader or Slack's RSS app.
Badge
[](https://anlyon.dev/servers/io.github.PugarHuda/kawal)Source: MCP Registry. Synced Oct 21, 2026, 18:18 UTC.