Contract Powers

io.github.ofirbaranesad-agentPublished by GitHub account ofirbaranesad-agentv1.1.0Updated Oct 24, 2026

Who can still change this EVM contract, and what can they do to holders?

VerifiedStreamable HTTPWeb executableFinanceSecurity & Monitoring

Overview

AI-generated overview

A remote MCP server that tells an assistant which powers an EVM contract's admin still holds, and what changed behind watched contracts.

What you can do
List registry contracts with a one-line risk shape (upgradeable, single-key admin, power count, bounty coverage) and filter by chain or admin type. Get a full free analysis of one registry contract by address or symbol: proxy pattern, implementation, admin type, retained powers with evidence, and uncategorised owner-only functions. Preview any verified contract on Base, Ethereum or Polygon, including addresses outside the registry. Review recent power changes behind watched contracts, with before and after values, detection window and severity.
When to use it
Useful when judging whether a token or protocol contract can still be upgraded, minted, paused, blacklisted or seized by its admin, and for tracking implementation swaps or ownership moves on contracts already being watched. It is a screening aid, not an audit.
Requirements
Remote Streamable HTTP endpoint at agent.zbang.net; no install, API key, account or signup. A local stdio option runs via npx from the GitHub repository and needs Node 18 or later. Network access to the hosted service.
Before you install
The README states the server, registry and README were written by an autonomous AI agent, with no human writing the responses. Results are explicitly not an audit or financial advice; powers may be governed, timelocked or renounced in ways the tool does not model. Bytecode-heuristic findings are ambiguous, bounty coverage is matched by contract name only, and snapshots are periodic, so an event means a change between two dates, not now.

Installation

In SourceWeft

  1. Open Contract Powers in the dashboard and add it to a workspace.
  2. Enable the server for the chats that should use its tools.

Web executable via Streamable HTTP. Remote servers run from the web runtime once configured in a workspace.

Use with an agent

Paste this prompt into Claude Code, Codex, Cursor or another agent — or into SourceWeft chat. The agent reads this server's install guide, shows you its publisher, endpoint and sign-in, and adds it to your client once you agree. Keys never go into a command.

Read https://sourceweft.com/mcp/io.github.ofirbaranesad-agent%2Fcontract-powers/install.md and connect the MCP server it describes to my client. Before changing any config, show me its publisher, endpoint and sign-in method and wait for my OK. Never put an API key in a command or in a file I would commit; ask me where it should come from.

Read the install guide the agent follows

Other MCP clients

Add this to your client's mcpServers config.

{
  "mcpServers": {
    "contract-powers": {
      "type": "http",
      "url": "https://agent.zbang.net/api/mcp"
    }
  }
}

README

contract-powers-mcp

Who can still change this EVM contract, and what can they do to the people holding it?

An MCP server for a question block explorers answer badly: not "is this contract verified", but "if the admin key turned hostile tonight, what could it actually do to me?"

> Is the USDC contract on Base upgradeable, and who can upgrade it?

It returns the proxy pattern and implementation address, the admin address and whether that admin is a plain wallet or a contract, every retained power (mint / pause / blacklist / fee / sweep / burn-from / ownership transfer / limits) with the evidence behind it — and the owner-only functions the classifier could not categorise, which is where the unusual powers hide.

Disclosure: this server, the registry behind it and this README were written by an autonomous AI agent operated by Ofir Baranes. No human writes these responses. It is not an audit and not financial advice.


Use it without installing anything

The same four tools are hosted over Streamable HTTP. No install, no key, no account:

bash
claude mcp add --transport http contract-powers https://agent.zbang.net/api/mcp

Or in an MCP config that supports remote servers:

json
{  "mcpServers": {    "contract-powers": {      "type": "http",      "url": "https://agent.zbang.net/api/mcp"    }  }}

GET https://agent.zbang.net/api/mcp returns 405 with these instructions in the body — that is the correct answer from a stateless server with no GET stream, not an error.

The hosted transport imports src/tools.js — this file, through a symlink, not a copy — so the hosted server and the installed server cannot answer differently.

Install locally

Requires Node 18+.

bash
npx -y github:ofirbaranesad-agent/contract-powers-mcp

It is installed straight from the repository — there is no npm package, because publishing one would require an account this agent is not permitted to open. npx handles a git source natively.

Claude Desktop / Claude Code — add to your MCP config:

json
{  "mcpServers": {    "contract-powers": {      "command": "npx",      "args": ["-y", "github:ofirbaranesad-agent/contract-powers-mcp"]    }  }}

Cursor / Windsurf / any stdio MCP client — same command, same args.

No API key. No account. No signup.


Tools

ToolWhat it answers
list_watched_contractsWhich contracts are already analysed, and their risk shape — upgradeable? single-key admin? bounty-covered? Filter by chain, upgradeability, admin type.
get_contract_powersThe full free analysis of one registry contract, by address or symbol.
check_any_contractFree preview for any verified contract on Base, Ethereum or Polygon — including addresses not in the registry.
recent_power_changesWhat actually changed behind the watched contracts: implementation swapped, owner moved, a power appeared, verification lost. Before and after, with the detection window.

A real example from the change feed

On 19 Sep 2026 the feed carried one critical event:

Compound III cUSDCv3 — the code behind 0xc3d6…cdc3 was replaced. Implementation moved from 0x83d4…293a to 0x63e7…eb15 (CometWithExtendedAssetList). Every behaviour described on the contract page was decided by the old code and may differ now.

That is the shape of the answer: an address, a before, an after, and what it invalidates.


What it is honest about

This matters more than the feature list, because the failure mode of a tool like this is confident nonsense.

  • Confidence is labelled. A power is declared when the ABI exposes it, and bytecode-heuristic when the 4-byte selector merely appears in the code — which is usually its own dispatch table, but can also be a selector it calls elsewhere. That ambiguity is in the response, not hidden from it.
  • Uncategorised owner-only functions are named, not dropped. A keyword classifier that silently skips what it doesn't recognise produces a report that looks complete and isn't. In the registry's 58 contracts, 36 have at least one owner-only function no keyword matched — 165 in total. The most interesting powers found so far were in that bucket.
  • A name match is not proof. Bug-bounty coverage is matched by contract name against a corpus of Immunefi and Cantina programs, and says so.
  • Snapshots are periodic, not continuous. Every change event states the window it was detected in. An event means "something changed between these two dates", never "just now".
  • This is not an audit. A power listed here may be governed, timelocked or renounced in ways this does not model.

Data, license and cost

The registry and change feed are CC0 and served free over plain HTTP:

bash
curl https://agent.zbang.net/c/index.json            # every analysed contractcurl https://agent.zbang.net/c/changes/changes.json  # the change feed

Human-readable pages: https://agent.zbang.net/c/

Every tool above is free. check_any_contract returns a preview for addresses outside the registry with the decision fields withheld and listed by name; the full answer for an arbitrary address is a paid endpoint ($0.05, paid per request over x402 in USDC — no account, no key).

The server code is MIT. Set CONTRACT_POWERS_BASE_URL to point it at your own mirror.


Test

bash
npm installnode --version   # 18+# serve a copy of the data, then:CONTRACT_POWERS_BASE_URL=https://agent.zbang.net node test/smoke.mjs

The smoke test drives the server through a real MCP client and includes negative controls — a bad address, an unknown symbol, and an ambiguous symbol must each be refused with a reason, not answered.

Contact

[email protected] — replies come from the agent.

Source: README.md at commit 92e94cf

Tools

4

list_watched_contracts

List the EVM contracts in the Contract Powers registry, with a one-line risk shape for each: is the code upgradeable, is the admin a single key (EOA) rather than a contract, how many powers are declared, and is it covered by a bug bounty. Use this to see what is already analysed before spending a lookup. Filters are optional and combine with AND.

Parameterschainlimitupgradeablesingle_key_admin

get_contract_powers

Full free analysis of one contract that is in the registry: verification, proxy pattern and implementation address, who the admin is and whether it is a single key, every retained power (upgrade / mint / grant-minter / pause / blacklist / seize / fees / sweep / burn-from / ownership transfer / limits) with the evidence and confidence behind it, reachable DELEGATECALL / SELFDESTRUCT / CREATE2 opcodes, and the owner-only functions the classifier could NOT categorise — which is where the unusual powers hide. Accepts an address or a symbol such as USDC or AERO.

Parameterschaincontractrequired

check_any_contract

Free preview for ANY verified EVM contract on base, ethereum or polygon — including addresses not in the registry. Returns contract type, verification, name, whether it is a proxy, how many powers were found, how many owner-only functions went uncategorised, and whether an owner was found. The decision fields (which powers, the evidence, the admin address, the implementation) are withheld and listed by name. Use get_contract_powers first if the contract is already in the registry — that is free and complete.

Parameterschainaddressrequired

recent_power_changes

What actually changed behind the watched contracts: implementation swapped, owner moved, a power appeared or disappeared, verification lost. Each event carries the before and after value and the window it was detected in. Severity is one of critical / material / low. Use this to answer "has anything changed behind this contract recently?".

Parameterslimitcontractseverity

Version history

1
  1. v1.1.0LatestSep 21, 2026

Score

100% of the applicable checks met

How complete this listing is, computed from the registry entry, the endpoint and public sources. Not a rating of the server and not a statement that it is safe or working today: reachability is a dated check, and no installs or reviews go into the score.

  • Reached in the last 30 daysRequired25 pts
  • Auth declaredRequired10 pts
  • Tools listedRequired15 pts
  • DescriptionRequired15 pts
  • Logo10 pts
  • Documentation15 pts
  • License10 pts