@quantulabs/8004-mcp 0.1.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.
Files changed (243) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +370 -0
  3. package/dist/chains/evm/index.d.ts +2 -0
  4. package/dist/chains/evm/index.d.ts.map +1 -0
  5. package/dist/chains/evm/index.js +3 -0
  6. package/dist/chains/evm/index.js.map +1 -0
  7. package/dist/chains/evm/provider.d.ts +48 -0
  8. package/dist/chains/evm/provider.d.ts.map +1 -0
  9. package/dist/chains/evm/provider.js +446 -0
  10. package/dist/chains/evm/provider.js.map +1 -0
  11. package/dist/chains/index.d.ts +3 -0
  12. package/dist/chains/index.d.ts.map +1 -0
  13. package/dist/chains/index.js +4 -0
  14. package/dist/chains/index.js.map +1 -0
  15. package/dist/chains/solana/data-source.d.ts +17 -0
  16. package/dist/chains/solana/data-source.d.ts.map +1 -0
  17. package/dist/chains/solana/data-source.js +65 -0
  18. package/dist/chains/solana/data-source.js.map +1 -0
  19. package/dist/chains/solana/index.d.ts +8 -0
  20. package/dist/chains/solana/index.d.ts.map +1 -0
  21. package/dist/chains/solana/index.js +9 -0
  22. package/dist/chains/solana/index.js.map +1 -0
  23. package/dist/chains/solana/parsers.d.ts +11 -0
  24. package/dist/chains/solana/parsers.d.ts.map +1 -0
  25. package/dist/chains/solana/parsers.js +94 -0
  26. package/dist/chains/solana/parsers.js.map +1 -0
  27. package/dist/chains/solana/provider.d.ts +33 -0
  28. package/dist/chains/solana/provider.d.ts.map +1 -0
  29. package/dist/chains/solana/provider.js +407 -0
  30. package/dist/chains/solana/provider.js.map +1 -0
  31. package/dist/chains/solana/state.d.ts +55 -0
  32. package/dist/chains/solana/state.d.ts.map +1 -0
  33. package/dist/chains/solana/state.js +162 -0
  34. package/dist/chains/solana/state.js.map +1 -0
  35. package/dist/chains/solana/tools/atom.d.ts +45 -0
  36. package/dist/chains/solana/tools/atom.d.ts.map +1 -0
  37. package/dist/chains/solana/tools/atom.js +115 -0
  38. package/dist/chains/solana/tools/atom.js.map +1 -0
  39. package/dist/chains/solana/tools/validation.d.ts +45 -0
  40. package/dist/chains/solana/tools/validation.d.ts.map +1 -0
  41. package/dist/chains/solana/tools/validation.js +212 -0
  42. package/dist/chains/solana/tools/validation.js.map +1 -0
  43. package/dist/chains/solana/tools/wallet.d.ts +45 -0
  44. package/dist/chains/solana/tools/wallet.d.ts.map +1 -0
  45. package/dist/chains/solana/tools/wallet.js +103 -0
  46. package/dist/chains/solana/tools/wallet.js.map +1 -0
  47. package/dist/config/defaults.d.ts +68 -0
  48. package/dist/config/defaults.d.ts.map +1 -0
  49. package/dist/config/defaults.js +247 -0
  50. package/dist/config/defaults.js.map +1 -0
  51. package/dist/config/env.d.ts +33 -0
  52. package/dist/config/env.d.ts.map +1 -0
  53. package/dist/config/env.js +42 -0
  54. package/dist/config/env.js.map +1 -0
  55. package/dist/config/index.d.ts +3 -0
  56. package/dist/config/index.d.ts.map +1 -0
  57. package/dist/config/index.js +3 -0
  58. package/dist/config/index.js.map +1 -0
  59. package/dist/core/cache/agent-cache.d.ts +36 -0
  60. package/dist/core/cache/agent-cache.d.ts.map +1 -0
  61. package/dist/core/cache/agent-cache.js +87 -0
  62. package/dist/core/cache/agent-cache.js.map +1 -0
  63. package/dist/core/cache/data-source.d.ts +31 -0
  64. package/dist/core/cache/data-source.d.ts.map +1 -0
  65. package/dist/core/cache/data-source.js +6 -0
  66. package/dist/core/cache/data-source.js.map +1 -0
  67. package/dist/core/cache/index.d.ts +7 -0
  68. package/dist/core/cache/index.d.ts.map +1 -0
  69. package/dist/core/cache/index.js +9 -0
  70. package/dist/core/cache/index.js.map +1 -0
  71. package/dist/core/cache/lazy-cache.d.ts +30 -0
  72. package/dist/core/cache/lazy-cache.d.ts.map +1 -0
  73. package/dist/core/cache/lazy-cache.js +79 -0
  74. package/dist/core/cache/lazy-cache.js.map +1 -0
  75. package/dist/core/cache/slim-store.d.ts +66 -0
  76. package/dist/core/cache/slim-store.d.ts.map +1 -0
  77. package/dist/core/cache/slim-store.js +285 -0
  78. package/dist/core/cache/slim-store.js.map +1 -0
  79. package/dist/core/cache/sqlite-store.d.ts +99 -0
  80. package/dist/core/cache/sqlite-store.d.ts.map +1 -0
  81. package/dist/core/cache/sqlite-store.js +470 -0
  82. package/dist/core/cache/sqlite-store.js.map +1 -0
  83. package/dist/core/cache/sync-manager.d.ts +38 -0
  84. package/dist/core/cache/sync-manager.d.ts.map +1 -0
  85. package/dist/core/cache/sync-manager.js +213 -0
  86. package/dist/core/cache/sync-manager.js.map +1 -0
  87. package/dist/core/errors/index.d.ts +2 -0
  88. package/dist/core/errors/index.d.ts.map +1 -0
  89. package/dist/core/errors/index.js +2 -0
  90. package/dist/core/errors/index.js.map +1 -0
  91. package/dist/core/errors/mcp-error.d.ts +39 -0
  92. package/dist/core/errors/mcp-error.d.ts.map +1 -0
  93. package/dist/core/errors/mcp-error.js +79 -0
  94. package/dist/core/errors/mcp-error.js.map +1 -0
  95. package/dist/core/interfaces/agent.d.ts +84 -0
  96. package/dist/core/interfaces/agent.d.ts.map +1 -0
  97. package/dist/core/interfaces/agent.js +40 -0
  98. package/dist/core/interfaces/agent.js.map +1 -0
  99. package/dist/core/interfaces/chain-provider.d.ts +50 -0
  100. package/dist/core/interfaces/chain-provider.d.ts.map +1 -0
  101. package/dist/core/interfaces/chain-provider.js +5 -0
  102. package/dist/core/interfaces/chain-provider.js.map +1 -0
  103. package/dist/core/interfaces/feedback.d.ts +46 -0
  104. package/dist/core/interfaces/feedback.d.ts.map +1 -0
  105. package/dist/core/interfaces/feedback.js +3 -0
  106. package/dist/core/interfaces/feedback.js.map +1 -0
  107. package/dist/core/interfaces/index.d.ts +6 -0
  108. package/dist/core/interfaces/index.d.ts.map +1 -0
  109. package/dist/core/interfaces/index.js +7 -0
  110. package/dist/core/interfaces/index.js.map +1 -0
  111. package/dist/core/interfaces/reputation.d.ts +47 -0
  112. package/dist/core/interfaces/reputation.d.ts.map +1 -0
  113. package/dist/core/interfaces/reputation.js +30 -0
  114. package/dist/core/interfaces/reputation.js.map +1 -0
  115. package/dist/core/interfaces/x402.d.ts +226 -0
  116. package/dist/core/interfaces/x402.d.ts.map +1 -0
  117. package/dist/core/interfaces/x402.js +120 -0
  118. package/dist/core/interfaces/x402.js.map +1 -0
  119. package/dist/core/parsers/common.d.ts +31 -0
  120. package/dist/core/parsers/common.d.ts.map +1 -0
  121. package/dist/core/parsers/common.js +185 -0
  122. package/dist/core/parsers/common.js.map +1 -0
  123. package/dist/core/parsers/index.d.ts +2 -0
  124. package/dist/core/parsers/index.d.ts.map +1 -0
  125. package/dist/core/parsers/index.js +2 -0
  126. package/dist/core/parsers/index.js.map +1 -0
  127. package/dist/core/registry/chain-registry.d.ts +26 -0
  128. package/dist/core/registry/chain-registry.d.ts.map +1 -0
  129. package/dist/core/registry/chain-registry.js +141 -0
  130. package/dist/core/registry/chain-registry.js.map +1 -0
  131. package/dist/core/registry/index.d.ts +3 -0
  132. package/dist/core/registry/index.d.ts.map +1 -0
  133. package/dist/core/registry/index.js +3 -0
  134. package/dist/core/registry/index.js.map +1 -0
  135. package/dist/core/registry/tool-registry.d.ts +23 -0
  136. package/dist/core/registry/tool-registry.d.ts.map +1 -0
  137. package/dist/core/registry/tool-registry.js +66 -0
  138. package/dist/core/registry/tool-registry.js.map +1 -0
  139. package/dist/core/serializers/common.d.ts +20 -0
  140. package/dist/core/serializers/common.d.ts.map +1 -0
  141. package/dist/core/serializers/common.js +76 -0
  142. package/dist/core/serializers/common.js.map +1 -0
  143. package/dist/core/serializers/index.d.ts +2 -0
  144. package/dist/core/serializers/index.d.ts.map +1 -0
  145. package/dist/core/serializers/index.js +2 -0
  146. package/dist/core/serializers/index.js.map +1 -0
  147. package/dist/core/services/index.d.ts +3 -0
  148. package/dist/core/services/index.d.ts.map +1 -0
  149. package/dist/core/services/index.js +3 -0
  150. package/dist/core/services/index.js.map +1 -0
  151. package/dist/core/services/ipfs-service.d.ts +59 -0
  152. package/dist/core/services/ipfs-service.d.ts.map +1 -0
  153. package/dist/core/services/ipfs-service.js +84 -0
  154. package/dist/core/services/ipfs-service.js.map +1 -0
  155. package/dist/core/utils/tags.d.ts +38 -0
  156. package/dist/core/utils/tags.d.ts.map +1 -0
  157. package/dist/core/utils/tags.js +77 -0
  158. package/dist/core/utils/tags.js.map +1 -0
  159. package/dist/core/utils/value-encoding.d.ts +36 -0
  160. package/dist/core/utils/value-encoding.d.ts.map +1 -0
  161. package/dist/core/utils/value-encoding.js +196 -0
  162. package/dist/core/utils/value-encoding.js.map +1 -0
  163. package/dist/core/wallet/index.d.ts +2 -0
  164. package/dist/core/wallet/index.d.ts.map +1 -0
  165. package/dist/core/wallet/index.js +3 -0
  166. package/dist/core/wallet/index.js.map +1 -0
  167. package/dist/core/wallet/wallet-manager.d.ts +86 -0
  168. package/dist/core/wallet/wallet-manager.d.ts.map +1 -0
  169. package/dist/core/wallet/wallet-manager.js +783 -0
  170. package/dist/core/wallet/wallet-manager.js.map +1 -0
  171. package/dist/core/x402/index.d.ts +2 -0
  172. package/dist/core/x402/index.d.ts.map +1 -0
  173. package/dist/core/x402/index.js +3 -0
  174. package/dist/core/x402/index.js.map +1 -0
  175. package/dist/core/x402/proof-validator.d.ts +57 -0
  176. package/dist/core/x402/proof-validator.d.ts.map +1 -0
  177. package/dist/core/x402/proof-validator.js +103 -0
  178. package/dist/core/x402/proof-validator.js.map +1 -0
  179. package/dist/index.d.ts +3 -0
  180. package/dist/index.d.ts.map +1 -0
  181. package/dist/index.js +135 -0
  182. package/dist/index.js.map +1 -0
  183. package/dist/state/global-state.d.ts +98 -0
  184. package/dist/state/global-state.d.ts.map +1 -0
  185. package/dist/state/global-state.js +258 -0
  186. package/dist/state/global-state.js.map +1 -0
  187. package/dist/tools/definitions.d.ts +10 -0
  188. package/dist/tools/definitions.d.ts.map +1 -0
  189. package/dist/tools/definitions.js +163 -0
  190. package/dist/tools/definitions.js.map +1 -0
  191. package/dist/tools/unified/agent.d.ts +5 -0
  192. package/dist/tools/unified/agent.d.ts.map +1 -0
  193. package/dist/tools/unified/agent.js +300 -0
  194. package/dist/tools/unified/agent.js.map +1 -0
  195. package/dist/tools/unified/cache.d.ts +5 -0
  196. package/dist/tools/unified/cache.d.ts.map +1 -0
  197. package/dist/tools/unified/cache.js +207 -0
  198. package/dist/tools/unified/cache.js.map +1 -0
  199. package/dist/tools/unified/collection.d.ts +5 -0
  200. package/dist/tools/unified/collection.d.ts.map +1 -0
  201. package/dist/tools/unified/collection.js +162 -0
  202. package/dist/tools/unified/collection.js.map +1 -0
  203. package/dist/tools/unified/config.d.ts +5 -0
  204. package/dist/tools/unified/config.d.ts.map +1 -0
  205. package/dist/tools/unified/config.js +217 -0
  206. package/dist/tools/unified/config.js.map +1 -0
  207. package/dist/tools/unified/crawler.d.ts +5 -0
  208. package/dist/tools/unified/crawler.d.ts.map +1 -0
  209. package/dist/tools/unified/crawler.js +212 -0
  210. package/dist/tools/unified/crawler.js.map +1 -0
  211. package/dist/tools/unified/feedback.d.ts +5 -0
  212. package/dist/tools/unified/feedback.d.ts.map +1 -0
  213. package/dist/tools/unified/feedback.js +274 -0
  214. package/dist/tools/unified/feedback.js.map +1 -0
  215. package/dist/tools/unified/ipfs.d.ts +5 -0
  216. package/dist/tools/unified/ipfs.d.ts.map +1 -0
  217. package/dist/tools/unified/ipfs.js +156 -0
  218. package/dist/tools/unified/ipfs.js.map +1 -0
  219. package/dist/tools/unified/oasf.d.ts +5 -0
  220. package/dist/tools/unified/oasf.d.ts.map +1 -0
  221. package/dist/tools/unified/oasf.js +167 -0
  222. package/dist/tools/unified/oasf.js.map +1 -0
  223. package/dist/tools/unified/registration.d.ts +5 -0
  224. package/dist/tools/unified/registration.d.ts.map +1 -0
  225. package/dist/tools/unified/registration.js +223 -0
  226. package/dist/tools/unified/registration.js.map +1 -0
  227. package/dist/tools/unified/reputation.d.ts +5 -0
  228. package/dist/tools/unified/reputation.d.ts.map +1 -0
  229. package/dist/tools/unified/reputation.js +121 -0
  230. package/dist/tools/unified/reputation.js.map +1 -0
  231. package/dist/tools/unified/wallet.d.ts +5 -0
  232. package/dist/tools/unified/wallet.d.ts.map +1 -0
  233. package/dist/tools/unified/wallet.js +434 -0
  234. package/dist/tools/unified/wallet.js.map +1 -0
  235. package/dist/tools/unified/write-operations.d.ts +5 -0
  236. package/dist/tools/unified/write-operations.d.ts.map +1 -0
  237. package/dist/tools/unified/write-operations.js +582 -0
  238. package/dist/tools/unified/write-operations.js.map +1 -0
  239. package/dist/tools/unified/x402.d.ts +5 -0
  240. package/dist/tools/unified/x402.d.ts.map +1 -0
  241. package/dist/tools/unified/x402.js +594 -0
  242. package/dist/tools/unified/x402.js.map +1 -0
  243. package/package.json +67 -0
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Quantu Labs
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,370 @@
1
+ # @quantulabs/8004-mcp
2
+
3
+ Multi-chain MCP server for the ERC-8004 Agent Registry Standard. Supports Solana and EVM chains (Ethereum, Base, Arbitrum, Polygon, Optimism).
4
+
5
+ ## Requirements
6
+
7
+ - Node.js >= 20.0.0
8
+ - npm or pnpm
9
+
10
+ ## Installation
11
+
12
+ ```bash
13
+ npm install -g @quantulabs/8004-mcp
14
+ ```
15
+
16
+ Or run directly without installing:
17
+
18
+ ```bash
19
+ npx @quantulabs/8004-mcp
20
+ ```
21
+
22
+ ## Features
23
+
24
+ - **Multi-chain**: Solana + EVM (Base, Ethereum, Arbitrum, Polygon, Optimism)
25
+ - **Unified API**: Same tools work across chains with automatic routing
26
+ - **Wallet Management**: Encrypted local storage with auto-lock
27
+ - **Local Cache**: SQLite with FTS5 for fast agent search
28
+ - **ATOM Reputation**: Full integration with Solana's reputation system
29
+ - **IPFS Support**: Pinata, Filecoin, or custom node
30
+
31
+ ## Configuration
32
+
33
+ The MCP automatically loads a `.env` file from the current directory.
34
+
35
+ ```bash
36
+ cp .env.example .env
37
+ # Edit .env with your values
38
+ npx @quantulabs/8004-mcp
39
+ ```
40
+
41
+ See [.env.example](./.env.example) for all available options.
42
+
43
+ ## Usage with Claude Code
44
+
45
+ ### Quick Start
46
+
47
+ ```bash
48
+ claude mcp add 8004-mcp -- npx @quantulabs/8004-mcp
49
+ ```
50
+
51
+ With configuration:
52
+
53
+ ```bash
54
+ claude mcp add 8004-mcp \
55
+ -e DEFAULT_CHAIN=sol \
56
+ -e NETWORK_MODE=testnet \
57
+ -e PINATA_JWT=your-jwt \
58
+ -- npx @quantulabs/8004-mcp
59
+ ```
60
+
61
+ ### Examples
62
+
63
+ #### Multi-chain agent search
64
+
65
+ Search across all blockchains without specifying a chain:
66
+
67
+ ```
68
+ > Find the agent named "DataAnalyst Pro"
69
+
70
+ Found 2 agents named "DataAnalyst Pro" on Ethereum Sepolia:
71
+ - eth:11155111:461 - Owner: 0xfb49...
72
+ - eth:11155111:460 - Owner: 0x6fd8...
73
+ ```
74
+
75
+ ```
76
+ > Search for agents with "Yoda" in the name
77
+
78
+ Found 4 agents:
79
+ - eth:11155111:523 - "Yoda 27 Jan"
80
+ - eth:11155111:468 - "Yoda 3"
81
+ - eth:11155111:467 - "Yoda Dash 1"
82
+ - eth:11155111:465 - "Yoda PG 2 IPFS"
83
+ All owned by 0xad55...
84
+ ```
85
+
86
+ #### Get agent details
87
+
88
+ ```
89
+ > Show me details about agent eth:11155111:474
90
+
91
+ Agent: 8004 Test Agent
92
+ - Chain: Ethereum Sepolia
93
+ - Owner: 0x9ca4...
94
+ - Description: This is an explanation of my test agent
95
+ - Created: 2026-01-27
96
+ ```
97
+
98
+ #### Check agent reputation (Solana only)
99
+
100
+ > Note: Trust tiers and ATOM reputation metrics are only available on Solana.
101
+
102
+ ```
103
+ > What's the reputation of sol:6YMAwDYygQEo1BGDavNaKhhfy52yzZ6SoBsa2wdgXthJ?
104
+
105
+ Trust Tier: Unrated (0/4)
106
+ Quality Score: 2440
107
+ Total Feedbacks: 29
108
+ Average Score: 24.4
109
+ ```
110
+
111
+ #### Top agents leaderboard (Solana only)
112
+
113
+ ```
114
+ > Show me the top 5 agents by reputation
115
+
116
+ Top 5 Solana agents:
117
+ 1. sol:9j7cTX... - Score: 5586 (34 feedbacks)
118
+ 2. sol:5heKjG... - Score: 5544 (35 feedbacks)
119
+ 3. sol:HnGRPf... - Score: 3364 (50 feedbacks)
120
+ 4. sol:6YMAwD... - Score: 2440 (30 feedbacks)
121
+ 5. sol:Arskmk... - Score: 2440 (30 feedbacks)
122
+ ```
123
+
124
+ #### Submit feedback
125
+
126
+ ```
127
+ > Give a score of 90 to agent sol:7xKXtG8vN2... with comment "Fast execution"
128
+
129
+ First I need to unlock a wallet...
130
+ Feedback submitted! Transaction: 4xR7m...
131
+ ```
132
+
133
+ #### Register a new agent
134
+
135
+ ```
136
+ > Register a new agent called "MyBot" with MCP endpoint https://mybot.com/mcp
137
+
138
+ 1. Uploading registration to IPFS...
139
+ 2. Registering on-chain...
140
+
141
+ Agent registered!
142
+ - ID: sol:NewAgentPubkey...
143
+ - Name: MyBot
144
+ - Transaction: 5tY8n...
145
+ ```
146
+
147
+ #### Manage wallets
148
+
149
+ ```
150
+ > Create a new Solana wallet called "trading-wallet"
151
+
152
+ Wallet created:
153
+ - Name: trading-wallet
154
+ - Address: 8xM2k...
155
+ - Chain: Solana
156
+
157
+ Fund this address to start using it for transactions.
158
+ ```
159
+
160
+ #### Switch networks
161
+
162
+ ```
163
+ > Switch to mainnet
164
+
165
+ Using network_set with mode "mainnet"...
166
+
167
+ Switched to mainnet. Active chains:
168
+ - Solana: mainnet-beta
169
+ - Base: mainnet (chainId: 8453)
170
+ - Ethereum: mainnet (chainId: 1)
171
+ ```
172
+
173
+ ## Tools
174
+
175
+ See [TOOLS.md](./TOOLS.md) for the complete list of 60+ available tools.
176
+
177
+ ## Global ID Format
178
+
179
+ Agents are identified using global IDs:
180
+
181
+ - Solana: `sol:<pubkey>`
182
+ - EVM: `<chain>:<chainId>:<tokenId>`
183
+
184
+ Examples:
185
+ - `sol:7xKXtG8vN2mPQr...`
186
+ - `base:8453:123`
187
+ - `eth:1:456`
188
+
189
+ ## x402 Protocol Integration
190
+
191
+ The MCP supports the x402 payment protocol extension for reputation (`8004-reputation`). This allows linking feedback to actual payment transactions, creating verifiable proof-of-payment reputation.
192
+
193
+ ### How it works
194
+
195
+ 1. **Server announces identity**: When returning 402 Payment Required, include agent identity in CAIP-2 format
196
+ 2. **Client pays**: Standard x402 payment flow
197
+ 3. **Feedback with proof**: Both parties can submit feedback linked to the payment transaction
198
+
199
+ ### Example: Connecting to 8004-mcp
200
+
201
+ ```javascript
202
+ import { Client } from '@modelcontextprotocol/sdk/client/index.js';
203
+ import { StdioClientTransport } from '@modelcontextprotocol/sdk/client/stdio.js';
204
+ import { spawn } from 'child_process';
205
+
206
+ // Start the MCP server
207
+ const server = spawn('npx', ['@quantulabs/8004-mcp'], {
208
+ stdio: ['pipe', 'pipe', 'inherit'],
209
+ });
210
+
211
+ const transport = new StdioClientTransport({
212
+ reader: server.stdout,
213
+ writer: server.stdin,
214
+ });
215
+
216
+ const mcpClient = new Client(
217
+ { name: 'my-app', version: '1.0.0' },
218
+ { capabilities: {} }
219
+ );
220
+
221
+ await mcpClient.connect(transport);
222
+ ```
223
+
224
+ ### Example: Server-side (announcing identity)
225
+
226
+ ```javascript
227
+ // Build identity for PaymentRequired response
228
+ const result = await mcpClient.callTool({
229
+ name: 'x402_identity_build',
230
+ arguments: { agentId: 'sol:AgentPubkey...' }
231
+ });
232
+
233
+ const identity = JSON.parse(result.content[0].text);
234
+ // Returns: { identity: { agentRegistry: "solana:EtWTRA...:HHCVWc...", agentId: "..." } }
235
+
236
+ // Add to PaymentRequired headers
237
+ const paymentRequired = {
238
+ ...standardX402Fields,
239
+ extensions: {
240
+ '8004-reputation': identity.identity
241
+ }
242
+ };
243
+ ```
244
+
245
+ ### Example: Client-side (submitting feedback)
246
+
247
+ ```javascript
248
+ // After receiving PaymentResponse, parse the proof
249
+ const proofResult = await mcpClient.callTool({
250
+ name: 'x402_proof_parse',
251
+ arguments: { paymentResponse: base64EncodedPaymentResponse }
252
+ });
253
+
254
+ const proof = JSON.parse(proofResult.content[0].text);
255
+
256
+ // Option A: Auto-store on IPFS (requires ipfs_configure first)
257
+ await mcpClient.callTool({
258
+ name: 'x402_feedback_submit',
259
+ arguments: {
260
+ agentId: 'sol:AgentPubkey...',
261
+ score: 85,
262
+ tag1: 'x402-resource-delivered',
263
+ tag2: 'exact-svm',
264
+ endpoint: 'https://agent.example.com/api',
265
+ proofOfPayment: proof.proofOfPayment,
266
+ storeOnIpfs: true
267
+ }
268
+ });
269
+
270
+ // Option B: Manual storage - build file first, store yourself
271
+ const buildResult = await mcpClient.callTool({
272
+ name: 'x402_feedback_build',
273
+ arguments: {
274
+ agentId: 'base:84532:123',
275
+ score: 90,
276
+ tag1: 'x402-resource-delivered',
277
+ proofOfPayment: proof.proofOfPayment
278
+ }
279
+ });
280
+ // Store buildResult.feedbackFile on Arweave, your IPFS, etc.
281
+ const myUri = 'ar://abc123...';
282
+
283
+ // Then submit with your URI
284
+ await mcpClient.callTool({
285
+ name: 'x402_feedback_submit',
286
+ arguments: {
287
+ agentId: 'base:84532:123',
288
+ score: 90,
289
+ tag1: 'x402-resource-delivered',
290
+ proofOfPayment: proof.proofOfPayment,
291
+ feedbackUri: myUri,
292
+ storeOnIpfs: false
293
+ }
294
+ });
295
+ ```
296
+
297
+ ### Feedback File Storage
298
+
299
+ Feedback files **must** be stored for the x402 protocol. Two options:
300
+
301
+ 1. **Auto IPFS** (`storeOnIpfs: true`): Configure IPFS first with `ipfs_configure`, then feedback is automatically stored
302
+ 2. **Manual storage** (`feedbackUri`): Use `x402_feedback_build` to get the file, store it yourself (Arweave, your IPFS, HTTP), then pass the URI
303
+
304
+ Supported URI schemes: `ipfs://`, `ar://`, `https://`, `http://`
305
+
306
+ Example feedback file structure:
307
+
308
+ ```json
309
+ {
310
+ "agentRegistry": "solana:EtWTRABZaYq6iMfeYKouRu166VU2xqa1:HHCVWcqs...",
311
+ "agentId": "AgentPubkey...",
312
+ "clientAddress": "solana:EtWTRABZaYq6iMfeYKouRu166VU2xqa1:ClientPubkey...",
313
+ "createdAt": "2026-01-23T12:00:00Z",
314
+ "score": 85,
315
+ "tag1": "x402-resource-delivered",
316
+ "tag2": "exact-svm",
317
+ "endpoint": "https://agent.example.com/api",
318
+ "proofOfPayment": {
319
+ "fromAddress": "ClientPubkey...",
320
+ "toAddress": "AgentPubkey...",
321
+ "chainId": "EtWTRABZaYq6iMfeYKouRu166VU2xqa1",
322
+ "txHash": "5xR7mN2k..."
323
+ }
324
+ }
325
+ ```
326
+
327
+ See [TOOLS.md](./TOOLS.md#x402-protocol-integration) for more details on x402 tools.
328
+
329
+ ## Development
330
+
331
+ ```bash
332
+ git clone https://github.com/QuantuLabs/8004-mcp.git
333
+ cd 8004-mcp
334
+ npm install
335
+ npm run build
336
+ npm test
337
+ ```
338
+
339
+ ## Adding Your Registry
340
+
341
+ > **Note:** Registries supported by the [8004-solana SDK](https://github.com/QuantuLabs/8004-solana) and [agent0-ts SDK](https://github.com/agent0lab/agent0-ts) are automatically included in this MCP. No action needed for those chains.
342
+
343
+ Want to add your own ERC-8004 compatible registry to the MCP? [Open an issue on GitHub](https://github.com/QuantuLabs/8004-mcp/issues/new?template=registry-request.md) with the following requirements:
344
+
345
+ ### Requirements
346
+
347
+ 1. **Open Source**: Your registry must be public and open source
348
+ - Provide link to your GitHub repository
349
+
350
+ 2. **Indexer**: Provide an open source indexer or equivalent data access method
351
+ - We need a way to query agents efficiently
352
+ - Subgraph, REST API, or RPC-based indexing supported
353
+
354
+ 3. **Documentation**: Complete API documentation including:
355
+ - All contract methods and events
356
+ - Data structures and types
357
+ - Example requests/responses
358
+
359
+ 4. **API Compatibility**: We recommend following the [8004-solana SDK](https://github.com/QuantuLabs/8004-solana) API patterns:
360
+ - `getAgent(id)` - Get agent details
361
+ - `agentExists(id)` - Check existence
362
+ - `searchAgents(params)` - Search with filters
363
+ - `giveFeedback(input)` - Submit feedback
364
+ - `getFeedback(agentId, client, index)` - Read feedback
365
+ - `listFeedbacks(query)` - List feedbacks
366
+ - `getReputationSummary(id)` - Get reputation
367
+
368
+ ## License
369
+
370
+ MIT
@@ -0,0 +1,2 @@
1
+ export * from './provider.js';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/chains/evm/index.ts"],"names":[],"mappings":"AAEA,cAAc,eAAe,CAAC"}
@@ -0,0 +1,3 @@
1
+ // EVM chain exports
2
+ export * from './provider.js';
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/chains/evm/index.ts"],"names":[],"mappings":"AAAA,oBAAoB;AAEpB,cAAc,eAAe,CAAC"}
@@ -0,0 +1,48 @@
1
+ import { SDK as Agent0SDK } from 'agent0-sdk';
2
+ import type { IChainProvider, IChainConfig, IWriteOptions, ITransactionResult } from '../../core/interfaces/chain-provider.js';
3
+ import type { IAgent, ISearchParams, ISearchResult, ChainType, ChainPrefix } from '../../core/interfaces/agent.js';
4
+ import type { IFeedback, IFeedbackInput, IFeedbackQuery, IFeedbackResult } from '../../core/interfaces/feedback.js';
5
+ import type { IReputationSummary, ILeaderboardOptions, ILeaderboardResult } from '../../core/interfaces/reputation.js';
6
+ export interface IEVMConfig {
7
+ chainId: number;
8
+ chainPrefix: ChainPrefix;
9
+ rpcUrl: string;
10
+ subgraphUrl?: string;
11
+ privateKey?: string;
12
+ }
13
+ export declare class EVMChainProvider implements IChainProvider {
14
+ readonly chainType: ChainType;
15
+ readonly chainPrefix: ChainPrefix;
16
+ readonly chainId: string;
17
+ readonly displayName: string;
18
+ private readonly config;
19
+ private _ready;
20
+ private _sdk?;
21
+ private _subgraph?;
22
+ constructor(config: IEVMConfig);
23
+ private getDisplayName;
24
+ getSdk(): Agent0SDK;
25
+ private getSubgraph;
26
+ invalidateSdk(): void;
27
+ initialize(): Promise<void>;
28
+ isReady(): boolean;
29
+ canWrite(): boolean;
30
+ getConfig(): IChainConfig;
31
+ getAgent(agentId: string): Promise<IAgent | null>;
32
+ agentExists(agentId: string): Promise<boolean>;
33
+ searchAgents(params: ISearchParams): Promise<ISearchResult>;
34
+ getFeedback(agentId: string, client: string, index: bigint): Promise<IFeedback | null>;
35
+ listFeedbacks(query: IFeedbackQuery): Promise<IFeedbackResult>;
36
+ giveFeedback(input: IFeedbackInput, options?: IWriteOptions): Promise<ITransactionResult>;
37
+ getReputationSummary(agentId: string): Promise<IReputationSummary | null>;
38
+ private computeTrustTier;
39
+ /**
40
+ * Convert raw value with decimals back to decimal string for SDK encoding
41
+ * Example: value=9977n, valueDecimals=2 → "99.77"
42
+ * The SDK's encodeReputationValue() expects decimal strings and will re-encode correctly
43
+ */
44
+ private rawToDecimalString;
45
+ isIndexerAvailable(): Promise<boolean>;
46
+ getLeaderboard(_options?: ILeaderboardOptions): Promise<ILeaderboardResult>;
47
+ }
48
+ //# sourceMappingURL=provider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"provider.d.ts","sourceRoot":"","sources":["../../../src/chains/evm/provider.ts"],"names":[],"mappings":"AAGA,OAAO,EACL,GAAG,IAAI,SAAS,EAIjB,MAAM,YAAY,CAAC;AAEpB,OAAO,KAAK,EACV,cAAc,EACd,YAAY,EACZ,aAAa,EACb,kBAAkB,EACnB,MAAM,yCAAyC,CAAC;AACjD,OAAO,KAAK,EACV,MAAM,EACN,aAAa,EACb,aAAa,EACb,SAAS,EACT,WAAW,EACZ,MAAM,gCAAgC,CAAC;AAExC,OAAO,KAAK,EACV,SAAS,EACT,cAAc,EACd,cAAc,EACd,eAAe,EAChB,MAAM,mCAAmC,CAAC;AAC3C,OAAO,KAAK,EACV,kBAAkB,EAClB,mBAAmB,EACnB,kBAAkB,EACnB,MAAM,qCAAqC,CAAC;AAI7C,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,WAAW,CAAC;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,qBAAa,gBAAiB,YAAW,cAAc;IACrD,QAAQ,CAAC,SAAS,EAAE,SAAS,CAAS;IACtC,QAAQ,CAAC,WAAW,EAAE,WAAW,CAAC;IAClC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAE7B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAa;IACpC,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,IAAI,CAAC,CAAY;IACzB,OAAO,CAAC,SAAS,CAAC,CAAiB;gBAEvB,MAAM,EAAE,UAAU;IAO9B,OAAO,CAAC,cAAc;IAYtB,MAAM,IAAI,SAAS;IAkBnB,OAAO,CAAC,WAAW;IASnB,aAAa,IAAI,IAAI;IAKf,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAMjC,OAAO,IAAI,OAAO;IAIlB,QAAQ,IAAI,OAAO;IAInB,SAAS,IAAI,YAAY;IAcnB,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAuBjD,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAK9C,YAAY,CAAC,MAAM,EAAE,aAAa,GAAG,OAAO,CAAC,aAAa,CAAC;IAwI3D,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC;IA8BtF,aAAa,CAAC,KAAK,EAAE,cAAc,GAAG,OAAO,CAAC,eAAe,CAAC;IA0E9D,YAAY,CAAC,KAAK,EAAE,cAAc,EAAE,OAAO,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAwEzF,oBAAoB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,GAAG,IAAI,CAAC;IAuB/E,OAAO,CAAC,gBAAgB;IAQxB;;;;OAIG;IACH,OAAO,CAAC,kBAAkB;IAoBpB,kBAAkB,IAAI,OAAO,CAAC,OAAO,CAAC;IAItC,cAAc,CAAC,QAAQ,CAAC,EAAE,mBAAmB,GAAG,OAAO,CAAC,kBAAkB,CAAC;CASlF"}