@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.
- package/LICENSE +21 -0
- package/README.md +370 -0
- package/dist/chains/evm/index.d.ts +2 -0
- package/dist/chains/evm/index.d.ts.map +1 -0
- package/dist/chains/evm/index.js +3 -0
- package/dist/chains/evm/index.js.map +1 -0
- package/dist/chains/evm/provider.d.ts +48 -0
- package/dist/chains/evm/provider.d.ts.map +1 -0
- package/dist/chains/evm/provider.js +446 -0
- package/dist/chains/evm/provider.js.map +1 -0
- package/dist/chains/index.d.ts +3 -0
- package/dist/chains/index.d.ts.map +1 -0
- package/dist/chains/index.js +4 -0
- package/dist/chains/index.js.map +1 -0
- package/dist/chains/solana/data-source.d.ts +17 -0
- package/dist/chains/solana/data-source.d.ts.map +1 -0
- package/dist/chains/solana/data-source.js +65 -0
- package/dist/chains/solana/data-source.js.map +1 -0
- package/dist/chains/solana/index.d.ts +8 -0
- package/dist/chains/solana/index.d.ts.map +1 -0
- package/dist/chains/solana/index.js +9 -0
- package/dist/chains/solana/index.js.map +1 -0
- package/dist/chains/solana/parsers.d.ts +11 -0
- package/dist/chains/solana/parsers.d.ts.map +1 -0
- package/dist/chains/solana/parsers.js +94 -0
- package/dist/chains/solana/parsers.js.map +1 -0
- package/dist/chains/solana/provider.d.ts +33 -0
- package/dist/chains/solana/provider.d.ts.map +1 -0
- package/dist/chains/solana/provider.js +407 -0
- package/dist/chains/solana/provider.js.map +1 -0
- package/dist/chains/solana/state.d.ts +55 -0
- package/dist/chains/solana/state.d.ts.map +1 -0
- package/dist/chains/solana/state.js +162 -0
- package/dist/chains/solana/state.js.map +1 -0
- package/dist/chains/solana/tools/atom.d.ts +45 -0
- package/dist/chains/solana/tools/atom.d.ts.map +1 -0
- package/dist/chains/solana/tools/atom.js +115 -0
- package/dist/chains/solana/tools/atom.js.map +1 -0
- package/dist/chains/solana/tools/validation.d.ts +45 -0
- package/dist/chains/solana/tools/validation.d.ts.map +1 -0
- package/dist/chains/solana/tools/validation.js +212 -0
- package/dist/chains/solana/tools/validation.js.map +1 -0
- package/dist/chains/solana/tools/wallet.d.ts +45 -0
- package/dist/chains/solana/tools/wallet.d.ts.map +1 -0
- package/dist/chains/solana/tools/wallet.js +103 -0
- package/dist/chains/solana/tools/wallet.js.map +1 -0
- package/dist/config/defaults.d.ts +68 -0
- package/dist/config/defaults.d.ts.map +1 -0
- package/dist/config/defaults.js +247 -0
- package/dist/config/defaults.js.map +1 -0
- package/dist/config/env.d.ts +33 -0
- package/dist/config/env.d.ts.map +1 -0
- package/dist/config/env.js +42 -0
- package/dist/config/env.js.map +1 -0
- package/dist/config/index.d.ts +3 -0
- package/dist/config/index.d.ts.map +1 -0
- package/dist/config/index.js +3 -0
- package/dist/config/index.js.map +1 -0
- package/dist/core/cache/agent-cache.d.ts +36 -0
- package/dist/core/cache/agent-cache.d.ts.map +1 -0
- package/dist/core/cache/agent-cache.js +87 -0
- package/dist/core/cache/agent-cache.js.map +1 -0
- package/dist/core/cache/data-source.d.ts +31 -0
- package/dist/core/cache/data-source.d.ts.map +1 -0
- package/dist/core/cache/data-source.js +6 -0
- package/dist/core/cache/data-source.js.map +1 -0
- package/dist/core/cache/index.d.ts +7 -0
- package/dist/core/cache/index.d.ts.map +1 -0
- package/dist/core/cache/index.js +9 -0
- package/dist/core/cache/index.js.map +1 -0
- package/dist/core/cache/lazy-cache.d.ts +30 -0
- package/dist/core/cache/lazy-cache.d.ts.map +1 -0
- package/dist/core/cache/lazy-cache.js +79 -0
- package/dist/core/cache/lazy-cache.js.map +1 -0
- package/dist/core/cache/slim-store.d.ts +66 -0
- package/dist/core/cache/slim-store.d.ts.map +1 -0
- package/dist/core/cache/slim-store.js +285 -0
- package/dist/core/cache/slim-store.js.map +1 -0
- package/dist/core/cache/sqlite-store.d.ts +99 -0
- package/dist/core/cache/sqlite-store.d.ts.map +1 -0
- package/dist/core/cache/sqlite-store.js +470 -0
- package/dist/core/cache/sqlite-store.js.map +1 -0
- package/dist/core/cache/sync-manager.d.ts +38 -0
- package/dist/core/cache/sync-manager.d.ts.map +1 -0
- package/dist/core/cache/sync-manager.js +213 -0
- package/dist/core/cache/sync-manager.js.map +1 -0
- package/dist/core/errors/index.d.ts +2 -0
- package/dist/core/errors/index.d.ts.map +1 -0
- package/dist/core/errors/index.js +2 -0
- package/dist/core/errors/index.js.map +1 -0
- package/dist/core/errors/mcp-error.d.ts +39 -0
- package/dist/core/errors/mcp-error.d.ts.map +1 -0
- package/dist/core/errors/mcp-error.js +79 -0
- package/dist/core/errors/mcp-error.js.map +1 -0
- package/dist/core/interfaces/agent.d.ts +84 -0
- package/dist/core/interfaces/agent.d.ts.map +1 -0
- package/dist/core/interfaces/agent.js +40 -0
- package/dist/core/interfaces/agent.js.map +1 -0
- package/dist/core/interfaces/chain-provider.d.ts +50 -0
- package/dist/core/interfaces/chain-provider.d.ts.map +1 -0
- package/dist/core/interfaces/chain-provider.js +5 -0
- package/dist/core/interfaces/chain-provider.js.map +1 -0
- package/dist/core/interfaces/feedback.d.ts +46 -0
- package/dist/core/interfaces/feedback.d.ts.map +1 -0
- package/dist/core/interfaces/feedback.js +3 -0
- package/dist/core/interfaces/feedback.js.map +1 -0
- package/dist/core/interfaces/index.d.ts +6 -0
- package/dist/core/interfaces/index.d.ts.map +1 -0
- package/dist/core/interfaces/index.js +7 -0
- package/dist/core/interfaces/index.js.map +1 -0
- package/dist/core/interfaces/reputation.d.ts +47 -0
- package/dist/core/interfaces/reputation.d.ts.map +1 -0
- package/dist/core/interfaces/reputation.js +30 -0
- package/dist/core/interfaces/reputation.js.map +1 -0
- package/dist/core/interfaces/x402.d.ts +226 -0
- package/dist/core/interfaces/x402.d.ts.map +1 -0
- package/dist/core/interfaces/x402.js +120 -0
- package/dist/core/interfaces/x402.js.map +1 -0
- package/dist/core/parsers/common.d.ts +31 -0
- package/dist/core/parsers/common.d.ts.map +1 -0
- package/dist/core/parsers/common.js +185 -0
- package/dist/core/parsers/common.js.map +1 -0
- package/dist/core/parsers/index.d.ts +2 -0
- package/dist/core/parsers/index.d.ts.map +1 -0
- package/dist/core/parsers/index.js +2 -0
- package/dist/core/parsers/index.js.map +1 -0
- package/dist/core/registry/chain-registry.d.ts +26 -0
- package/dist/core/registry/chain-registry.d.ts.map +1 -0
- package/dist/core/registry/chain-registry.js +141 -0
- package/dist/core/registry/chain-registry.js.map +1 -0
- package/dist/core/registry/index.d.ts +3 -0
- package/dist/core/registry/index.d.ts.map +1 -0
- package/dist/core/registry/index.js +3 -0
- package/dist/core/registry/index.js.map +1 -0
- package/dist/core/registry/tool-registry.d.ts +23 -0
- package/dist/core/registry/tool-registry.d.ts.map +1 -0
- package/dist/core/registry/tool-registry.js +66 -0
- package/dist/core/registry/tool-registry.js.map +1 -0
- package/dist/core/serializers/common.d.ts +20 -0
- package/dist/core/serializers/common.d.ts.map +1 -0
- package/dist/core/serializers/common.js +76 -0
- package/dist/core/serializers/common.js.map +1 -0
- package/dist/core/serializers/index.d.ts +2 -0
- package/dist/core/serializers/index.d.ts.map +1 -0
- package/dist/core/serializers/index.js +2 -0
- package/dist/core/serializers/index.js.map +1 -0
- package/dist/core/services/index.d.ts +3 -0
- package/dist/core/services/index.d.ts.map +1 -0
- package/dist/core/services/index.js +3 -0
- package/dist/core/services/index.js.map +1 -0
- package/dist/core/services/ipfs-service.d.ts +59 -0
- package/dist/core/services/ipfs-service.d.ts.map +1 -0
- package/dist/core/services/ipfs-service.js +84 -0
- package/dist/core/services/ipfs-service.js.map +1 -0
- package/dist/core/utils/tags.d.ts +38 -0
- package/dist/core/utils/tags.d.ts.map +1 -0
- package/dist/core/utils/tags.js +77 -0
- package/dist/core/utils/tags.js.map +1 -0
- package/dist/core/utils/value-encoding.d.ts +36 -0
- package/dist/core/utils/value-encoding.d.ts.map +1 -0
- package/dist/core/utils/value-encoding.js +196 -0
- package/dist/core/utils/value-encoding.js.map +1 -0
- package/dist/core/wallet/index.d.ts +2 -0
- package/dist/core/wallet/index.d.ts.map +1 -0
- package/dist/core/wallet/index.js +3 -0
- package/dist/core/wallet/index.js.map +1 -0
- package/dist/core/wallet/wallet-manager.d.ts +86 -0
- package/dist/core/wallet/wallet-manager.d.ts.map +1 -0
- package/dist/core/wallet/wallet-manager.js +783 -0
- package/dist/core/wallet/wallet-manager.js.map +1 -0
- package/dist/core/x402/index.d.ts +2 -0
- package/dist/core/x402/index.d.ts.map +1 -0
- package/dist/core/x402/index.js +3 -0
- package/dist/core/x402/index.js.map +1 -0
- package/dist/core/x402/proof-validator.d.ts +57 -0
- package/dist/core/x402/proof-validator.d.ts.map +1 -0
- package/dist/core/x402/proof-validator.js +103 -0
- package/dist/core/x402/proof-validator.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +135 -0
- package/dist/index.js.map +1 -0
- package/dist/state/global-state.d.ts +98 -0
- package/dist/state/global-state.d.ts.map +1 -0
- package/dist/state/global-state.js +258 -0
- package/dist/state/global-state.js.map +1 -0
- package/dist/tools/definitions.d.ts +10 -0
- package/dist/tools/definitions.d.ts.map +1 -0
- package/dist/tools/definitions.js +163 -0
- package/dist/tools/definitions.js.map +1 -0
- package/dist/tools/unified/agent.d.ts +5 -0
- package/dist/tools/unified/agent.d.ts.map +1 -0
- package/dist/tools/unified/agent.js +300 -0
- package/dist/tools/unified/agent.js.map +1 -0
- package/dist/tools/unified/cache.d.ts +5 -0
- package/dist/tools/unified/cache.d.ts.map +1 -0
- package/dist/tools/unified/cache.js +207 -0
- package/dist/tools/unified/cache.js.map +1 -0
- package/dist/tools/unified/collection.d.ts +5 -0
- package/dist/tools/unified/collection.d.ts.map +1 -0
- package/dist/tools/unified/collection.js +162 -0
- package/dist/tools/unified/collection.js.map +1 -0
- package/dist/tools/unified/config.d.ts +5 -0
- package/dist/tools/unified/config.d.ts.map +1 -0
- package/dist/tools/unified/config.js +217 -0
- package/dist/tools/unified/config.js.map +1 -0
- package/dist/tools/unified/crawler.d.ts +5 -0
- package/dist/tools/unified/crawler.d.ts.map +1 -0
- package/dist/tools/unified/crawler.js +212 -0
- package/dist/tools/unified/crawler.js.map +1 -0
- package/dist/tools/unified/feedback.d.ts +5 -0
- package/dist/tools/unified/feedback.d.ts.map +1 -0
- package/dist/tools/unified/feedback.js +274 -0
- package/dist/tools/unified/feedback.js.map +1 -0
- package/dist/tools/unified/ipfs.d.ts +5 -0
- package/dist/tools/unified/ipfs.d.ts.map +1 -0
- package/dist/tools/unified/ipfs.js +156 -0
- package/dist/tools/unified/ipfs.js.map +1 -0
- package/dist/tools/unified/oasf.d.ts +5 -0
- package/dist/tools/unified/oasf.d.ts.map +1 -0
- package/dist/tools/unified/oasf.js +167 -0
- package/dist/tools/unified/oasf.js.map +1 -0
- package/dist/tools/unified/registration.d.ts +5 -0
- package/dist/tools/unified/registration.d.ts.map +1 -0
- package/dist/tools/unified/registration.js +223 -0
- package/dist/tools/unified/registration.js.map +1 -0
- package/dist/tools/unified/reputation.d.ts +5 -0
- package/dist/tools/unified/reputation.d.ts.map +1 -0
- package/dist/tools/unified/reputation.js +121 -0
- package/dist/tools/unified/reputation.js.map +1 -0
- package/dist/tools/unified/wallet.d.ts +5 -0
- package/dist/tools/unified/wallet.d.ts.map +1 -0
- package/dist/tools/unified/wallet.js +434 -0
- package/dist/tools/unified/wallet.js.map +1 -0
- package/dist/tools/unified/write-operations.d.ts +5 -0
- package/dist/tools/unified/write-operations.d.ts.map +1 -0
- package/dist/tools/unified/write-operations.js +582 -0
- package/dist/tools/unified/write-operations.js.map +1 -0
- package/dist/tools/unified/x402.d.ts +5 -0
- package/dist/tools/unified/x402.d.ts.map +1 -0
- package/dist/tools/unified/x402.js +594 -0
- package/dist/tools/unified/x402.js.map +1 -0
- 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 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/chains/evm/index.ts"],"names":[],"mappings":"AAEA,cAAc,eAAe,CAAC"}
|
|
@@ -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"}
|