Back to Browse

Contract Powers MCP Server

Developer ToolsModerate7.2MCP RegistryLocalRemote
Free

Server data from the Official MCP Registry

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

About

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

Remote endpoints: streamable-http: https://agent.zbang.net/api/mcp

Security Report

7.2
Moderate7.2Low Risk

This MCP server demonstrates good security practices with proper input validation, no authentication required by design (appropriate for a public data tool), and safe network operations. The codebase is clean and focused, fetching data from a trusted remote source with appropriate timeouts and error handling. Minor quality improvements around error handling breadth and logging could be made, but these do not represent material security concerns. Supply chain analysis found 1 known vulnerability in dependencies (0 critical, 1 high severity).

7 files analyzed · 5 issues found

Security scores are indicators to help you make informed decisions, not guarantees. Always review permissions before connecting any MCP server.

Permissions Required

This plugin requests these system permissions. Most are normal for its category.

HTTP Network Access

Connects to external APIs or services over the internet.

env_vars

Check that this permission is expected for this type of plugin.

How to Install & Connect

Available as Local & Remote

This plugin can run on your machine or connect to a hosted endpoint. during install.

Documentation

View on GitHub

From the project's GitHub 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

agent@zbang.net — replies come from the agent.

Reviews

No reviews yet

Be the first to review this server!