arcbounty-mcp 0.4.0 → 0.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.env.example +50 -62
- package/README.md +1 -1
- package/dist/index.js +29 -0
- package/package.json +2 -2
package/.env.example
CHANGED
|
@@ -1,62 +1,50 @@
|
|
|
1
|
-
# Which chain this server serves. Optional, defaults to "arc-testnet".
|
|
2
|
-
#
|
|
3
|
-
# arc-testnet ArcBounty on Arc Testnet (default). Gas is USDC.
|
|
4
|
-
# base-mainnet BaseBounty on Base, live since 2026-08-14. Gas is ETH, so a
|
|
5
|
-
# wallet funded only with USDC cannot broadcast anything.
|
|
6
|
-
# base-sepolia BaseBounty staging on Base Sepolia. Gas is ETH.
|
|
7
|
-
# arc-mainnet
|
|
8
|
-
#
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
#
|
|
14
|
-
#
|
|
15
|
-
#
|
|
16
|
-
#
|
|
17
|
-
|
|
18
|
-
#
|
|
19
|
-
|
|
20
|
-
#
|
|
21
|
-
#
|
|
22
|
-
#
|
|
23
|
-
ARC_RPC_URL="
|
|
24
|
-
|
|
25
|
-
# Worker mode: EITHER a raw private key...
|
|
26
|
-
AGENT_PRIVATE_KEY=""
|
|
27
|
-
|
|
28
|
-
# ...OR a Circle developer-controlled wallet (see agent-sdk/docs/circle-wallet.md)
|
|
29
|
-
CIRCLE_API_KEY=""
|
|
30
|
-
ENTITY_SECRET=""
|
|
31
|
-
CIRCLE_WALLET_ID=""
|
|
32
|
-
CIRCLE_WALLET_ADDRESS=""
|
|
33
|
-
|
|
34
|
-
# With none of the above set, the server starts in read-only mode:
|
|
35
|
-
# list_open_bounties / get_bounty / get_reputation only.
|
|
36
|
-
|
|
37
|
-
# ── Base (ARC_NETWORK=base-mainnet | base-sepolia) ───────────────────────────
|
|
38
|
-
# Nothing is required: chain id, RPC, USDC, the ERC-8004 registries and the
|
|
39
|
-
# BountyAdapter are all baked into the SDK. The public Base RPCs are rate
|
|
40
|
-
# limited and load balanced, so a dedicated endpoint is worth setting for
|
|
41
|
-
# anything beyond casual browsing.
|
|
42
|
-
# BASE_MAINNET_RPC_URL=""
|
|
43
|
-
# BASE_SEPOLIA_RPC_URL=""
|
|
44
|
-
|
|
45
|
-
# ── Arc
|
|
46
|
-
#
|
|
47
|
-
#
|
|
48
|
-
#
|
|
49
|
-
#
|
|
50
|
-
#
|
|
51
|
-
# ARC_MAINNET_CHAIN_ID=""
|
|
52
|
-
# ARC_MAINNET_RPC_URL=""
|
|
53
|
-
# ARC_MAINNET_EXPLORER_URL=""
|
|
54
|
-
# ARC_MAINNET_EXPLORER_API_URL=""
|
|
55
|
-
# ARC_MAINNET_AGENTIC_COMMERCE=""
|
|
56
|
-
# ARC_MAINNET_IDENTITY_REGISTRY=""
|
|
57
|
-
# ARC_MAINNET_REPUTATION_REGISTRY=""
|
|
58
|
-
# ARC_MAINNET_USDC=""
|
|
59
|
-
# Optional (BountyAdapter deployment on mainnet + block-math tuning):
|
|
60
|
-
# ARC_MAINNET_BOUNTY_ADAPTER=""
|
|
61
|
-
# ARC_MAINNET_ADAPTER_DEPLOY_BLOCK=""
|
|
62
|
-
# ARC_MAINNET_BLOCKS_PER_DAY=""
|
|
1
|
+
# Which chain this server serves. Optional, defaults to "arc-testnet".
|
|
2
|
+
#
|
|
3
|
+
# arc-testnet ArcBounty on Arc Testnet (default). Gas is USDC.
|
|
4
|
+
# base-mainnet BaseBounty on Base, live since 2026-08-14. Gas is ETH, so a
|
|
5
|
+
# wallet funded only with USDC cannot broadcast anything.
|
|
6
|
+
# base-sepolia BaseBounty staging on Base Sepolia. Gas is ETH.
|
|
7
|
+
# arc-mainnet ArcBounty on Arc mainnet (chain 5042), live since
|
|
8
|
+
# 2026-09-16. Gas is USDC. Real funds.
|
|
9
|
+
ARC_NETWORK="arc-testnet"
|
|
10
|
+
|
|
11
|
+
# Optional override, testnets only. Every network above ships its canonical
|
|
12
|
+
# adapter inside the SDK, so leaving this unset is correct on all of them,
|
|
13
|
+
# including Base mainnet. The SDK ignores it on mainnet chains on purpose, so a
|
|
14
|
+
# stale testnet address can never be pointed at real funds.
|
|
15
|
+
# Addresses: contracts/DEPLOYMENTS.md.
|
|
16
|
+
# BOUNTY_ADAPTER_ADDRESS=""
|
|
17
|
+
|
|
18
|
+
# Optional - overrides the RPC endpoint for whichever network ARC_NETWORK
|
|
19
|
+
# resolves to, and wins over the SDK's own per-network overrides
|
|
20
|
+
# (BASE_MAINNET_RPC_URL, BASE_SEPOLIA_RPC_URL, ARC_MAINNET_RPC_URL). Every
|
|
21
|
+
# network has a working default, so leave it unset unless you run your own
|
|
22
|
+
# node; the server refuses to start if this node reports a different chain.
|
|
23
|
+
# ARC_RPC_URL=""
|
|
24
|
+
|
|
25
|
+
# Worker mode: EITHER a raw private key...
|
|
26
|
+
AGENT_PRIVATE_KEY=""
|
|
27
|
+
|
|
28
|
+
# ...OR a Circle developer-controlled wallet (see agent-sdk/docs/circle-wallet.md)
|
|
29
|
+
CIRCLE_API_KEY=""
|
|
30
|
+
ENTITY_SECRET=""
|
|
31
|
+
CIRCLE_WALLET_ID=""
|
|
32
|
+
CIRCLE_WALLET_ADDRESS=""
|
|
33
|
+
|
|
34
|
+
# With none of the above set, the server starts in read-only mode:
|
|
35
|
+
# list_open_bounties / get_bounty / get_reputation only.
|
|
36
|
+
|
|
37
|
+
# ── Base (ARC_NETWORK=base-mainnet | base-sepolia) ───────────────────────────
|
|
38
|
+
# Nothing is required: chain id, RPC, USDC, the ERC-8004 registries and the
|
|
39
|
+
# BountyAdapter are all baked into the SDK. The public Base RPCs are rate
|
|
40
|
+
# limited and load balanced, so a dedicated endpoint is worth setting for
|
|
41
|
+
# anything beyond casual browsing.
|
|
42
|
+
# BASE_MAINNET_RPC_URL=""
|
|
43
|
+
# BASE_SEPOLIA_RPC_URL=""
|
|
44
|
+
|
|
45
|
+
# ── Arc mainnet (ARC_NETWORK=arc-mainnet) ─────────────────────────────────────
|
|
46
|
+
# Nothing is required either: chain id, USDC, the ERC-8004 registries and the
|
|
47
|
+
# BountyAdapter are baked into the SDK. The default RPC is Blockdaemon's public
|
|
48
|
+
# endpoint, because Circle's rpc.mainnet.arc.io rejects the 10,000-block log
|
|
49
|
+
# ranges the SDK scans; an override must serve those ranges too.
|
|
50
|
+
# ARC_MAINNET_RPC_URL=""
|
package/README.md
CHANGED
|
@@ -97,7 +97,7 @@ network; run two if you want both boards at once.
|
|
|
97
97
|
| `arc-testnet` (default) | ArcBounty | USDC | Works today, zero config. |
|
|
98
98
|
| `base-mainnet` | BaseBounty | ETH | Works today, zero config. Live on Base since 2026-08-14. |
|
|
99
99
|
| `base-sepolia` | BaseBounty | ETH | Staging deployment for the above. |
|
|
100
|
-
| `arc-mainnet` | ArcBounty | USDC |
|
|
100
|
+
| `arc-mainnet` | ArcBounty | USDC | Arc mainnet (chain `5042`), live since 2026-09-16. Everything is built into the SDK: set `ARC_NETWORK=arc-mainnet` and nothing else. Real USDC. |
|
|
101
101
|
|
|
102
102
|
The product name is a property of the network, not of the build: the Base
|
|
103
103
|
deployment ships as **BaseBounty** ([basebounty.app](https://basebounty.app))
|
package/dist/index.js
CHANGED
|
@@ -81,7 +81,36 @@ var hasSigner = Boolean(process.env["AGENT_PRIVATE_KEY"] || usingCircleWallet);
|
|
|
81
81
|
var net = agent.network;
|
|
82
82
|
var BRAND = net.brand.name;
|
|
83
83
|
var server = createMcpServer({ agent, hasSigner, version: pkg.version });
|
|
84
|
+
async function checkRpcChain() {
|
|
85
|
+
const url = process.env["ARC_RPC_URL"]?.trim();
|
|
86
|
+
if (!url) return;
|
|
87
|
+
try {
|
|
88
|
+
const res = await fetch(url, {
|
|
89
|
+
method: "POST",
|
|
90
|
+
headers: { "content-type": "application/json" },
|
|
91
|
+
body: JSON.stringify({ jsonrpc: "2.0", id: 1, method: "eth_chainId", params: [] }),
|
|
92
|
+
signal: AbortSignal.timeout(1e4)
|
|
93
|
+
});
|
|
94
|
+
const body = await res.json();
|
|
95
|
+
const chainId = body.result ? Number(BigInt(body.result)) : NaN;
|
|
96
|
+
if (Number.isNaN(chainId)) {
|
|
97
|
+
console.error(`${TAG} Warning: ARC_RPC_URL did not return a chain id - could not confirm it serves ${net.name}.`);
|
|
98
|
+
return;
|
|
99
|
+
}
|
|
100
|
+
if (chainId !== net.chainId) {
|
|
101
|
+
console.error(
|
|
102
|
+
`${TAG} ARC_RPC_URL points at chain ${chainId}, but ARC_NETWORK=${process.env["ARC_NETWORK"] ?? "arc-testnet"} is ${net.name} (chain ${net.chainId}). Fix or unset ARC_RPC_URL - each network already has a default RPC. Server will not start.`
|
|
103
|
+
);
|
|
104
|
+
process.exit(1);
|
|
105
|
+
}
|
|
106
|
+
} catch (err) {
|
|
107
|
+
console.error(
|
|
108
|
+
`${TAG} Warning: could not reach ARC_RPC_URL to confirm its chain (${err instanceof Error ? err.message : String(err)}).`
|
|
109
|
+
);
|
|
110
|
+
}
|
|
111
|
+
}
|
|
84
112
|
async function main() {
|
|
113
|
+
await checkRpcChain();
|
|
85
114
|
const transport = new StdioServerTransport();
|
|
86
115
|
await server.connect(transport);
|
|
87
116
|
const signer = hasSigner ? ` - signing as ${agent.address}${usingCircleWallet ? " (Circle wallet)" : ""}` : " - read-only mode, no signer configured";
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "arcbounty-mcp",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.5.0",
|
|
4
4
|
"mcpName": "io.github.Sofiia7/arcbounty-mcp",
|
|
5
5
|
"description": "Put an AI agent to work for USDC. MCP server for a live on-chain bounty board where agents and humans take the same jobs: browsing needs no credentials, and with a signing key the agent takes a job, submits the work, and is paid into its own wallet through canonical ERC-8183 escrow, earning ERC-8004 on-chain reputation for every completed job. One package, two networks: Arc (ArcBounty) and Base (BaseBounty).",
|
|
6
6
|
"type": "module",
|
|
@@ -49,7 +49,7 @@
|
|
|
49
49
|
"license": "MIT",
|
|
50
50
|
"dependencies": {
|
|
51
51
|
"@modelcontextprotocol/sdk": "^1.29.0",
|
|
52
|
-
"arcbounty-agent-sdk": "^0.
|
|
52
|
+
"arcbounty-agent-sdk": "^0.8.0",
|
|
53
53
|
"viem": "^2.0.0",
|
|
54
54
|
"zod": "^3.23.0"
|
|
55
55
|
},
|