mcpField
C
Contract Powers

Contract Powers

Remote
agent.zbang.netFinance0Updated 5w ago

About Contract Powers

Contract Powers is an MCP server for people assessing the control risks of EVM contracts. It reports upgrade paths, administrator powers, supporting evidence, and observed changes, while flagging limits such as periodic snapshots and uncategorized functions.

Key features

  1. 01Inspect proxy and implementation details
  2. 02List retained administrator powers with evidence
  3. 03Flag uncategorized owner-only functions
  4. 04Review changes to watched contracts
  5. 05Preview verified contracts on three chains

Use cases

  1. 01Check who can upgrade a token contract
  2. 02Review whether an admin can pause or blacklist holders
  3. 03Track implementation or ownership changes
  4. 04Screen a verified contract outside the registry

MCP support

Exposes four tools to MCP clients for listing watched contracts, analyzing powers, checking contracts, and viewing recent changes. Available through hosted Streamable HTTP or a local stdio setup.

Configuration

Remote servers need no local install. Pick your client, then copy the config or install in one click.

Endpointhttps://agent.zbang.net/api/mcp
Copy install command
Claude CodeTerminal
Cursor.cursor/mcp.json
VS Code.vscode/mcp.json
Claude Desktopclaude_desktop_config.json
Windsurf~/.codeium/windsurf/mcp_config.json

Run commands in a terminal; paste JSON into the client’s MCP config and restart. Servers that need sign-in will prompt on first connect.

Tools

4
ParameterTypeRequiredDescription
chainenumNoRestrict to one chain.base | ethereum | polygon
limitintegerNoDefault 200.
upgradeablebooleanNotrue = only contracts whose code can still be replaced.
single_key_adminbooleanNotrue = only contracts whose admin is a plain wallet (EOA), not a contract/multisig/timelock.

Details

From the project 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:

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

Or in an MCP config that supports remote servers:

{
  "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+.

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:

{
  "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:

curl https://agent.zbang.net/c/index.json            # every analysed contract
curl 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

npm install
node --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.

Comments

Markdown supported

New to MCP?

From what the protocol is to installing your first server, these answers cover most first questions.

An open protocol that defines how AI applications connect to external tools and data in a uniform way. Clients talk to the model; MCP servers provide tools, resources and prompt templates. They exchange standard messages, so one server can be reused by many clients.