Atlas / MCP servers / joemekw-code / ozc

ozcCAUTION

mcp/joemekw-code/ozc

Your AI's trust filter, owned by you. Rate any URL, filter your AI's sources, build transparent information markets. MCP server + REST API + Python SDK.

Verdict
CAUTION
Grade
F
Trust score
58 /100
Exposed tools
10 8r · 2w · 0d
Transport
stdio
License
—
Stars
1
01

Overview

From the repository's own README, as read at the audited commit. Badges and raw HTML are left out.

Your AI's information filter — owned by you, not by Google or OpenAI.

Add one file to your project. Your AI gets a trust layer that you control.

from ozc_filter import OZCFilter
f = OZCFilter()

# Which of these sources should my AI trust?
f.filter_urls(["https://bitcoin.org/bitcoin.pdf", "https://scam.example.com"])
# → bitcoin.pdf: 55 OZC staked (trusted), scam.example.com: 0 (unknown)

# Rerank RAG results by trust score
reranked = f.rerank(my_retrieved_docs, key=lambda d: d["url"])

# Add to any LLM as a system prompt
prompt = f.system_prompt()  # → "Prefer sources with higher trust scores..."

Why? Every AI company decides what your AI can see. OZC lets you decide. The shared ledger shows what others value (OZC committed), but you choose your own filter rules.

The Question

We've entered an era where AI agents handle a significant portion of human daily decisions. So — who decides what information is trustworthy?

The conventional answer: AI companies, platforms, fact-checkers — centralized authorities. But that just hands the power of information scrutiny to yet another authority.

The real question: Can individuals hold their own criteria for evaluating information?

Hypothesis

If individual judgments can be collectively visualized, each person can express their criteria and reference the distribution of others' criteria. Not "the crowd's answer" but "the distribution of who believes what."

OZC adopts market dynamics as the mechanism — individuals allocate finite resources to claims they believe in.

What OZC Tests

  • Anyone can save a URL or claim to a shared on-chain index
  • Each person commits OZC (a non-purchasable allocation) to information they value
  • The distribution of commitments becomes visible over time
  • A bonding curve rewards early discoverers — later backers pay more
  • No external exchange path — OZC cannot be bought with other currencies
  • AI reads o
Read from source at commit f0df6799f815OBSERVED · 2026-10-11
02

Connect

Built from this server's own package name, version and transport as found in its source — not copied from anyone's documentation, so it cannot drift against a page we do not control. Replace the environment placeholders with a token scoped to the least it needs.

claude-code (npm)
claude mcp add ozc --env OZC_PRIVATE_KEY=${OZC_PRIVATE_KEY} -- npx -y [email protected]
03

Exposed tools (10)

8 read · 2 write · 0 destructive.

ToolRiskDescription
ozc_balancereadShow OZC balance and creator earnings for the active wallet.
ozc_claim_faucetreadClaim 100 OZC from the faucet (one-time per wallet). Required before first stake/deploy.
ozc_deploy_claimwriteDeploy a new claim to OZC. You become creator and earn 5% of every future stake. Requires OZC balance (claim faucet first).
ozc_filterreadPersonal information filter. Given a list of URLs/identifiers, annotate each with on-chain commitment data (committed ETH, share count). Use this to re-rank any retriever
ozc_get_entryreadGet details of a specific OZC entry by id, including current price and your share holdings.
ozc_index_addwriteAdd a new entry to the OZC shared index: pair a data location (URL/IPFS) with an AI-readable memo describing what it is. Later agents/humans can find it via search.
ozc_index_searchreadSearch the OZC shared decentralized index. Returns data locations (URLs/IPFS) with AI-readable memos. Use this before web search — it
ozc_list_entriesreadList all data entries on OZC. Each entry has id, title, description, market cap, and current share price. Use this to discover what claims are being staked on.
ozc_stakereadStake OZC on an entry id by buying shares. Automatically approves if needed. Creator earns 5% commission.
ozc_unstakereadSell shares back to the bonding curve to realize profit/loss.
04

Trust audit

CAUTIONgrade F · trust 58/100 Install with care. The audit found things worth knowing before you trust its output.

LayerWhat it checksResult
L0Provenance & inventoryPASS
L1Static analysis of the codeWARN
L2Instruction surface (what it tells the agent)WARN
L3Class-specific surfacePASS
L4Behavioural (sandbox)SKIPPED

What the source does

Filesystem
none-observed
Network
declared (7 observation(s))
Shell
declared (1 observation(s))
Dependencies
not all pinned
Secrets in source
found

Findings (25)

MEDIUMInformation disclosure · disclose.log_secret · CWE-209, CWE-532
arb-research/arb_scanner.py:366
if "token" in opp: print(f"     token: {opp['token']}")
MEDIUMInformation disclosure · disclose.log_secret · CWE-209, CWE-532
arb_scanner.py:366
if "token" in opp: print(f"     token: {opp['token']}")
MEDIUMNetwork egress · net.raw_ip · CWE-200, CWE-319
lib/forge-std/src/StdChains.sol:197
setChainWithDefaultRpcUrl("anvil", ChainData("Anvil", 31337, "http://127.0.0.1:8545"));
MEDIUMObfuscation / stealth · obf.base64_blob · CWE-506, CWE-94
broadcast/Deploy.s.sol/8453/run-1776169740229.json:17
"input": "0x608060405234801561000f575f5ffd5b50604051610bf4380380610bf4833981810160405281019061003191906101ac565b610041818361004860201b60201c565b5050610272565b805f5f8282546100589190610217565b9250508190
MEDIUMObfuscation / stealth · obf.base64_blob · CWE-506, CWE-94
broadcast/Deploy.s.sol/8453/run-1776169740229.json:37
"input": "0x60a060405234801561000f575f5ffd5b50604051611a4f380380611a4f833981810160405281019061003191906100c9565b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffff
MEDIUMObfuscation / stealth · obf.base64_blob · CWE-506, CWE-94
broadcast/Deploy.s.sol/8453/run-1776169740229.json:58
"input": "0x60c060405234801561000f575f5ffd5b506040516110f53803806110f5833981810160405281019061003191906100fe565b8173ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffff
MEDIUMObfuscation / stealth · obf.base64_blob · CWE-506, CWE-94
broadcast/Deploy.s.sol/8453/run-latest.json:17
"input": "0x608060405234801561000f575f5ffd5b50604051610bf4380380610bf4833981810160405281019061003191906101ac565b610041818361004860201b60201c565b5050610272565b805f5f8282546100589190610217565b9250508190
MEDIUMObfuscation / stealth · obf.base64_blob · CWE-506, CWE-94
broadcast/Deploy.s.sol/8453/run-latest.json:37
"input": "0x60a060405234801561000f575f5ffd5b50604051611a4f380380611a4f833981810160405281019061003191906100c9565b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffff
MEDIUMHard-coded secrets · secret.generic · CWE-798, CWE-321
cli/bin.js:19
const TOKEN     = "0x72d12a43dfDda3D6c518Ff9A86E087eb8Be7A144";
MEDIUMHard-coded secrets · secret.generic · CWE-798, CWE-321
cli/gateway.js:27
const TOKEN     = "0x72d12a43dfDda3D6c518Ff9A86E087eb8Be7A144";
MEDIUMHard-coded secrets · secret.generic · CWE-798, CWE-321
cli/mcp-server.js:18
const TOKEN    = "0x72d12a43dfDda3D6c518Ff9A86E087eb8Be7A144";
MEDIUMHard-coded secrets · secret.generic · CWE-798, CWE-321
cli/save.js:21
const TOKEN = "0x72d12a43dfDda3D6c518Ff9A86E087eb8Be7A144";
MEDIUMHard-coded secrets · secret.generic · CWE-798, CWE-321
cli/save2.js:16
const TOKEN = "0x72d12a43dfDda3D6c518Ff9A86E087eb8Be7A144";
MEDIUMPrompt injection · review.misleading_scope · CWE-94, CWE-1427
<listing:description>
Your AI's trust filter, owned by you.
Why it matters. The package description frames the MCP server as a user-controlled trust filter, but the package also contains automated social media posting scripts that harvest credentials, a scope not disclosed in the listing description.
Fix. rewrite it so the instruction says plainly what it does, and asks the user before it acts
LOWInventory / provenance · inv.hidden_file · CWE-1104
.user-wallet.txt
.user-wallet.txt
Why it matters. hidden member outside the usual dotfiles
Fix. review its purpose
LOWNetwork egress · net.raw_ip · CWE-200, CWE-319
lib/forge-std/test/StdChains.t.sol:42
assertEq(getChain(31337).rpcUrl, "http://127.0.0.1:8545");
LOWSupply chain · supply.unpinned · CWE-829, CWE-1357
app/package.json
ethers, vite
Why it matters. 2 dependency range(s) float
Fix. pin exact versions or ship a lockfile
LOWSupply chain · supply.unpinned · CWE-829, CWE-1357
cli/package.json
@modelcontextprotocol/sdk, commander, dotenv, viem
Why it matters. 4 dependency range(s) float
Fix. pin exact versions or ship a lockfile
LOWSupply chain · supply.unpinned · CWE-829, CWE-1357
package.json
@modelcontextprotocol/sdk, commander, viem, playwright
Why it matters. 4 dependency range(s) float
Fix. pin exact versions or ship a lockfile
LOWPrompt injection · review.data_transfer · CWE-94, CWE-1427
launch/auto/README.md
auth_token + ct0 cookie
Why it matters. The launch/auto/README.md instructs agents to harvest X/Twitter session cookies (auth_token and ct0) and feed them to automated posting scripts, exfiltrating user credentials to an external automation pipeline.
Fix. rewrite it so the instruction says plainly what it does, and asks the user before it acts
LOWPrompt injection · review.data_transfer · CWE-94, CWE-1427
launch/auto/README.md
HN_USER + HN_PASS
Why it matters. The launch/auto/README.md instructs agents to collect Hacker News username and password credentials and pass them to an automated posting script, harvesting user login secrets.
Fix. rewrite it so the instruction says plainly what it does, and asks the user before it acts
LOWPrompt injection · review.data_transfer · CWE-94, CWE-1427
launch/auto/README.md
FC_NEYNAR_API_KEY=... FC_NEYNAR_SIGNER_UUID=...
Why it matters. The launch/auto/README.md instructs agents to collect Farcaster/Neynar API keys and signer UUIDs, harvesting platform credentials for automated posting.
Fix. rewrite it so the instruction says plainly what it does, and asks the user before it acts
LOWPrompt injection · review.data_transfer · CWE-94, CWE-1427
launch/auto/README.md
FC_PRIVKEY=0x... node launch/auto/farcaster.js --register
Why it matters. The launch/auto/README.md instructs agents to collect a user's Ethereum private key to register a Farcaster identity on-chain, harvesting a high-value cryptographic secret.
Fix. rewrite it so the instruction says plainly what it does, and asks the user before it acts
LOWPrompt injection · review.data_transfer · CWE-94, CWE-1427
launch/auto/README.md
FC_WARPCAST_COOKIE="<warpcast.com の cookie>"
Why it matters. The launch/auto/README.md instructs agents to collect Warpcast session cookies, harvesting browser session credentials for automated posting.
Fix. rewrite it so the instruction says plainly what it does, and asks the user before it acts
INFOSupply chain · prompt.pipe_to_shell · CWE-829, CWE-1357
arb-research/README.md:114
curl -L https://foundry.paradigm.xyz | bash

Gates applied: no_behavioural_pass.

Audited 2026-10-11 · audit v0.4.1 · source sha f0df6799f815full audit observations/trust-audit/mcp-server/joemekw-code__ozc.json · Report an issue / request a re-scan
05

Audit history

Every audit this server has had. A grade with a past is a grade somebody is still checking.

DateSourceVerdictGradeScoreChange
2026-10-11f0df6799f815CAUTIONF58first audit
06

Questions

What is the ozc MCP server?

Your AI's trust filter, owned by you. Rate any URL, filter your AI's sources, build transparent information markets. MCP server + REST API + Python SDK.

What tools does ozc expose?

10 in total: 8 read-only, 2 that write, and 0 that can delete or overwrite. Every one is listed on this page with its risk.

Is ozc safe to connect to an agent?

With care. The audit graded it F (58/100) and found 25 things worth knowing before you trust this server, listed below with the exact line each was found on.

What credentials does ozc need?

It reads DEVTO_API_KEY, FC_NEYNAR_API_KEY, FC_PRIVKEY, HN_PASS, IH_PASS, OZC_PRIVATE_KEY, OZC_TOKEN, PRIVATE_KEY and X_COOKIE_AUTH_TOKEN from the environment. Give it a token scoped to the least it needs — an agent that can be talked into calling a tool can be talked into calling it with your credentials.

How does ozc run?

It speaks stdio, so it runs as a local process your client starts. It is published on npm as @joejoejoejoe/ozc at 0.1.0.

How current is this page?

The grade is for one exact copy of the source (f0df6799f815), read on 2026-10-11. The repository is watched and re-audited when it changes.

Advertisement