@gblin-protocol/mcp-server 0.1.21 → 0.2.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/AGENTS.md +2 -1
- package/README.md +441 -438
- package/dist/config.d.ts +1 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +10 -0
- package/dist/config.js.map +1 -1
- package/dist/init.js +2 -1
- package/dist/init.js.map +1 -1
- package/dist/paywall.d.ts +5 -1
- package/dist/paywall.d.ts.map +1 -1
- package/dist/paywall.js +5 -1
- package/dist/paywall.js.map +1 -1
- package/dist/tools.d.ts +31 -9
- package/dist/tools.d.ts.map +1 -1
- package/dist/tools.js +216 -13
- package/dist/tools.js.map +1 -1
- package/llms.txt +9 -0
- package/package.json +74 -74
package/dist/config.d.ts
CHANGED
|
@@ -16,6 +16,7 @@ export declare const GBLIN_TIMELOCK: Address;
|
|
|
16
16
|
export declare const GBLIN_GUARDIAN: Address;
|
|
17
17
|
export declare const EXPECTED_MIN_DELAY_SECONDS = 172800n;
|
|
18
18
|
export declare const ETH_USD_FEED: Address;
|
|
19
|
+
export declare const GBLIN_ATTESTOR: Address;
|
|
19
20
|
export declare const WETH_USDC_POOL_FEE = 500;
|
|
20
21
|
export declare const MIN_DEPOSIT_WEI = 500000000000000n;
|
|
21
22
|
export declare const COOLDOWN_SECONDS = 120;
|
package/dist/config.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAMpC,eAAO,MAAM,eAAe,QAAc,CAAC;AAG3C,eAAO,MAAM,aAAa,OAAO,CAAC;AAGlC,eAAO,MAAM,eAAe,oCAAoC,CAAC;AAiBjE,eAAO,MAAM,OAAO,QAC4C,CAAC;AAGjE,eAAO,MAAM,QAAQ,EAAE,OAAsD,CAAC;AAC9E,eAAO,MAAM,IAAI,EAAE,OAAsD,CAAC;AAC1E,eAAO,MAAM,IAAI,EAAE,OAAsD,CAAC;AAI1E,eAAO,MAAM,cAAc,EAAE,OAAsD,CAAC;AAEpF,eAAO,MAAM,cAAc,EAAE,OAAsD,CAAC;AACpF,eAAO,MAAM,0BAA0B,UAAW,CAAC;AAGnD,eAAO,MAAM,YAAY,EAAE,OAAsD,CAAC;
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAMpC,eAAO,MAAM,eAAe,QAAc,CAAC;AAG3C,eAAO,MAAM,aAAa,OAAO,CAAC;AAGlC,eAAO,MAAM,eAAe,oCAAoC,CAAC;AAiBjE,eAAO,MAAM,OAAO,QAC4C,CAAC;AAGjE,eAAO,MAAM,QAAQ,EAAE,OAAsD,CAAC;AAC9E,eAAO,MAAM,IAAI,EAAE,OAAsD,CAAC;AAC1E,eAAO,MAAM,IAAI,EAAE,OAAsD,CAAC;AAI1E,eAAO,MAAM,cAAc,EAAE,OAAsD,CAAC;AAEpF,eAAO,MAAM,cAAc,EAAE,OAAsD,CAAC;AACpF,eAAO,MAAM,0BAA0B,UAAW,CAAC;AAGnD,eAAO,MAAM,YAAY,EAAE,OAAsD,CAAC;AASlF,eAAO,MAAM,cAAc,EAAE,OAGqB,CAAC;AAGnD,eAAO,MAAM,kBAAkB,MAAM,CAAC;AAGtC,eAAO,MAAM,eAAe,mBAAuB,CAAC;AACpD,eAAO,MAAM,gBAAgB,MAAM,CAAC;AACpC,eAAO,MAAM,wBAAwB,QAAS,CAAC;AAI/C,eAAO,MAAM,mBAAmB,OAAO,CAAC;AACxC,eAAO,MAAM,yBAAyB,OAAO,CAAC;AAC9C,eAAO,MAAM,eAAe,SAAU,CAAC;AAGvC,eAAO,MAAM,gBAAgB,QAAS,CAAC;AACvC,eAAO,MAAM,mBAAmB,QAAS,CAAC;AAG1C,eAAO,MAAM,WAAW,uBAAuB,CAAC;AAChD,eAAO,MAAM,cAAc,QAAc,CAAC"}
|
package/dist/config.js
CHANGED
|
@@ -40,6 +40,16 @@ export const GBLIN_GUARDIAN = "0x30590c0D05c26562d7296CE3D927d3418d2e6dcA";
|
|
|
40
40
|
export const EXPECTED_MIN_DELAY_SECONDS = 172800n; // 48 hours
|
|
41
41
|
// Chainlink ETH/USD price feed on Base
|
|
42
42
|
export const ETH_USD_FEED = "0x71041dddad3595F9CEd3DcCFBe3D1F4b0a16Bb70";
|
|
43
|
+
// ─── Risk Attestation ────────────────────────────────────────────────────────
|
|
44
|
+
// GBLIN's published attestor address — the EOA that EIP-712-signs Risk
|
|
45
|
+
// Attestations served by https://gblin.digital/api/x402/attestation. This key
|
|
46
|
+
// only signs off-chain messages: it never holds funds and never sends txs.
|
|
47
|
+
// Agents treat this as the trusted signer when verifying attestations via
|
|
48
|
+
// verify_risk_attestation. Override with GBLIN_ATTESTOR_ADDRESS to rotate it.
|
|
49
|
+
const _attestorEnv = process.env.GBLIN_ATTESTOR_ADDRESS;
|
|
50
|
+
export const GBLIN_ATTESTOR = _attestorEnv && /^0x[0-9a-fA-F]{40}$/.test(_attestorEnv)
|
|
51
|
+
? _attestorEnv
|
|
52
|
+
: "0x3ae65d36e8b1d82B0B80669E769A3dc300D543e4";
|
|
43
53
|
// Uniswap V3 pool fee tier for the WETH->USDC leg of the JIT redemption
|
|
44
54
|
export const WETH_USDC_POOL_FEE = 500; // 0.05%
|
|
45
55
|
// ─── Protocol Constants (mirrors GBLIN_V6.sol) ──────────────────────────────
|
package/dist/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC/C,MAAM,GAAG,GAAG,OAAO,CAAC,iBAAiB,CAAwB,CAAC;AAE9D,+EAA+E;AAC/E,MAAM,CAAC,MAAM,eAAe,GAAG,GAAG,CAAC,OAAO,CAAC;AAE3C,+EAA+E;AAC/E,MAAM,CAAC,MAAM,aAAa,GAAG,IAAI,CAAC;AAClC,sEAAsE;AACtE,mFAAmF;AACnF,MAAM,CAAC,MAAM,eAAe,GAAG,iCAAiC,CAAC;AAEjE,SAAS,cAAc,CAAC,CAAS;IAC/B,IAAI,CAAC;QACH,MAAM,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC;QACrB,OAAO,CAAC,CAAC,QAAQ,KAAK,OAAO,IAAI,CAAC,CAAC,QAAQ,KAAK,QAAQ,CAAC;IAC3D,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC;AAC1C,IAAI,OAAO,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,EAAE,CAAC;IACxC,OAAO,CAAC,KAAK,CACX,8BAA8B,OAAO,+CAA+C,eAAe,EAAE,CACtG,CAAC;AACJ,CAAC;AACD,MAAM,CAAC,MAAM,OAAO,GAClB,OAAO,IAAI,cAAc,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,CAAC;AAEjE,+EAA+E;AAC/E,MAAM,CAAC,MAAM,QAAQ,GAAY,4CAA4C,CAAC;AAC9E,MAAM,CAAC,MAAM,IAAI,GAAY,4CAA4C,CAAC;AAC1E,MAAM,CAAC,MAAM,IAAI,GAAY,4CAA4C,CAAC;AAE1E,2EAA2E;AAC3E,wDAAwD;AACxD,MAAM,CAAC,MAAM,cAAc,GAAY,4CAA4C,CAAC;AACpF,sFAAsF;AACtF,MAAM,CAAC,MAAM,cAAc,GAAY,4CAA4C,CAAC;AACpF,MAAM,CAAC,MAAM,0BAA0B,GAAG,OAAQ,CAAC,CAAC,WAAW;AAE/D,uCAAuC;AACvC,MAAM,CAAC,MAAM,YAAY,GAAY,4CAA4C,CAAC;AAElF,wEAAwE;AACxE,MAAM,CAAC,MAAM,kBAAkB,GAAG,GAAG,CAAC,CAAC,QAAQ;AAE/C,+EAA+E;AAC/E,MAAM,CAAC,MAAM,eAAe,GAAG,gBAAoB,CAAC,CAAC,aAAa;AAClE,MAAM,CAAC,MAAM,gBAAgB,GAAG,GAAG,CAAC,CAAC,kCAAkC;AACvE,MAAM,CAAC,MAAM,wBAAwB,GAAG,MAAM,CAAC,CAAC,0BAA0B;AAE1E,+EAA+E;AAC/E,+EAA+E;AAC/E,MAAM,CAAC,MAAM,mBAAmB,GAAG,IAAI,CAAC,CAAC,qBAAqB;AAC9D,MAAM,CAAC,MAAM,yBAAyB,GAAG,IAAI,CAAC,CAAC,6BAA6B;AAC5E,MAAM,CAAC,MAAM,eAAe,GAAG,MAAO,CAAC;AAEvC,+EAA+E;AAC/E,MAAM,CAAC,MAAM,gBAAgB,GAAG,MAAM,CAAC,CAAC,aAAa;AACrD,MAAM,CAAC,MAAM,mBAAmB,GAAG,MAAM,CAAC,CAAC,aAAa;AAExD,+EAA+E;AAC/E,MAAM,CAAC,MAAM,WAAW,GAAG,oBAAoB,CAAC;AAChD,MAAM,CAAC,MAAM,cAAc,GAAG,GAAG,CAAC,OAAO,CAAC"}
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
|
package/dist/init.js
CHANGED
|
@@ -62,11 +62,12 @@ if x402_invoice_arrives AND usdc_balance < invoice_amount:
|
|
|
62
62
|
call swap_gblin_to_usdc_jit, then pay
|
|
63
63
|
\`\`\`
|
|
64
64
|
|
|
65
|
-
## The
|
|
65
|
+
## The 10 tools
|
|
66
66
|
|
|
67
67
|
| Tool | When to call it |
|
|
68
68
|
| --- | --- |
|
|
69
69
|
| \`get_market_risk_regime\` | BTC/ETH risk regime (calm/elevated/crash) + posture — $0.002 |
|
|
70
|
+
| \`verify_risk_attestation\` | Verify a peer's Risk Attestation (integrity + signature + freshness) — free |
|
|
70
71
|
| \`get_treasury_state\` | Read live NAV, basket weights, Crash Shield status |
|
|
71
72
|
| \`quote_safe_swap\` | Preview a buy/sell with MEV-safe \`minOut\` |
|
|
72
73
|
| \`swap_gblin_to_usdc_jit\` | Pay an x402 invoice — atomic GBLIN→USDC swap |
|
package/dist/init.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init.js","sourceRoot":"","sources":["../src/init.ts"],"names":[],"mappings":";AACA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAEH,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAClE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACvD,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,MAAM,YAAY,GAAG,0CAA0C,CAAC;AAEhE,6EAA6E;AAC7E,0EAA0E;AAC1E,YAAY;AACZ,MAAM,YAAY,GAAG,mCAAmC,CAAC;AACzD,MAAM,UAAU,GAAG,iCAAiC,CAAC;AAErD,MAAM,cAAc,GAAG
|
|
1
|
+
{"version":3,"file":"init.js","sourceRoot":"","sources":["../src/init.ts"],"names":[],"mappings":"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"}
|
package/dist/paywall.d.ts
CHANGED
|
@@ -26,7 +26,11 @@ export interface PaywallDef {
|
|
|
26
26
|
/**
|
|
27
27
|
* Tool pricing.
|
|
28
28
|
* Free tools (get_treasury_state, quote_safe_swap, get_governance_state,
|
|
29
|
-
* share_skill_with_peer) are not in this table.
|
|
29
|
+
* share_skill_with_peer, verify_risk_attestation) are not in this table.
|
|
30
|
+
*
|
|
31
|
+
* Note: verify_risk_attestation is deliberately FREE — verifying a peer's
|
|
32
|
+
* attestation exposes that agent to GBLIN and drives PAID calls to the
|
|
33
|
+
* /api/x402/attestation minting endpoint on the webapp (adoption flywheel).
|
|
30
34
|
*/
|
|
31
35
|
export declare const TOOL_PRICES: Record<string, PaywallDef>;
|
|
32
36
|
declare const PaymentProofSchema: z.ZodObject<{
|
package/dist/paywall.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"paywall.d.ts","sourceRoot":"","sources":["../src/paywall.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAexB,MAAM,WAAW,UAAU;IACzB,kDAAkD;IAClD,SAAS,EAAE,MAAM,CAAC;IAClB,wDAAwD;IACxD,UAAU,EAAE,MAAM,CAAC;CACpB;AAED
|
|
1
|
+
{"version":3,"file":"paywall.d.ts","sourceRoot":"","sources":["../src/paywall.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAexB,MAAM,WAAW,UAAU;IACzB,kDAAkD;IAClD,SAAS,EAAE,MAAM,CAAC;IAClB,wDAAwD;IACxD,UAAU,EAAE,MAAM,CAAC;CACpB;AAED;;;;;;;;GAQG;AACH,eAAO,MAAM,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CAQlD,CAAC;AAIF,QAAA,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;EAQtB,CAAC;AAEH,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAC;AAa9D;;;;;GAKG;AACH,wBAAgB,cAAc,CAC5B,GAAG,EAAE,UAAU,EACf,OAAO,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,OAAO,CAAC,OAAO,CAAC,IAE9B,SAAS,OAAO,KAAG,OAAO,CAAC,OAAO,CAAC,CA+ClD"}
|
package/dist/paywall.js
CHANGED
|
@@ -26,7 +26,11 @@ const DEFAULT_RECIPIENT = "0x0ebA5d314F4f5Dcb7A094953Fa9311a45172dd1B";
|
|
|
26
26
|
/**
|
|
27
27
|
* Tool pricing.
|
|
28
28
|
* Free tools (get_treasury_state, quote_safe_swap, get_governance_state,
|
|
29
|
-
* share_skill_with_peer) are not in this table.
|
|
29
|
+
* share_skill_with_peer, verify_risk_attestation) are not in this table.
|
|
30
|
+
*
|
|
31
|
+
* Note: verify_risk_attestation is deliberately FREE — verifying a peer's
|
|
32
|
+
* attestation exposes that agent to GBLIN and drives PAID calls to the
|
|
33
|
+
* /api/x402/attestation minting endpoint on the webapp (adoption flywheel).
|
|
30
34
|
*/
|
|
31
35
|
export const TOOL_PRICES = {
|
|
32
36
|
get_market_risk_regime: { priceUsdc: "0.002", priceLabel: "$0.002 USDC per call" },
|
package/dist/paywall.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"paywall.js","sourceRoot":"","sources":["../src/paywall.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,gFAAgF;AAEhF,MAAM,SAAS,GAAG,4CAAqD,CAAC;AACxE,MAAM,WAAW,GACf,OAAO,CAAC,GAAG,CAAC,oBAAoB,IAAI,8BAA8B,CAAC;AAErE,gDAAgD;AAChD,uDAAuD;AACvD,MAAM,iBAAiB,GAAG,4CAA4C,CAAC;AAWvE
|
|
1
|
+
{"version":3,"file":"paywall.js","sourceRoot":"","sources":["../src/paywall.ts"],"names":[],"mappings":"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"}
|
package/dist/tools.d.ts
CHANGED
|
@@ -1,16 +1,18 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* GBLIN MCP — Tool Implementations
|
|
3
3
|
*
|
|
4
|
-
*
|
|
4
|
+
* Ten focused tools. Each returns structured JSON the LLM can parse:
|
|
5
5
|
*
|
|
6
|
-
* 1. get_treasury_state
|
|
7
|
-
* 2. quote_safe_swap
|
|
8
|
-
* 3. swap_gblin_to_usdc_jit
|
|
9
|
-
* 4. invest_usdc_to_gblin
|
|
10
|
-
* 5. analyze_treasury_health
|
|
11
|
-
* 6. get_governance_state
|
|
12
|
-
* 7. share_skill_with_peer
|
|
13
|
-
* 8. find_keeper_bounty
|
|
6
|
+
* 1. get_treasury_state → NAV, basket, Crash Shield (snapshot)
|
|
7
|
+
* 2. quote_safe_swap → preview a buy/sell with safe minOut
|
|
8
|
+
* 3. swap_gblin_to_usdc_jit → calldata for Just-In-Time x402 payment
|
|
9
|
+
* 4. invest_usdc_to_gblin → calldata to convert USDC earnings → GBLIN
|
|
10
|
+
* 5. analyze_treasury_health → balances + gas check + runway estimate (PAID)
|
|
11
|
+
* 6. get_governance_state → verify 48h timelock ownership + pending ops
|
|
12
|
+
* 7. share_skill_with_peer → portable JSON skill seed + referral code
|
|
13
|
+
* 8. find_keeper_bounty → check rebalance bounty availability + calldata (PAID)
|
|
14
|
+
* 9. get_market_risk_regime → on-chain BTC/ETH risk regime signal (PAID)
|
|
15
|
+
* 10. verify_risk_attestation → verify a perishable Risk Attestation (FREE)
|
|
14
16
|
*/
|
|
15
17
|
export declare const GET_TREASURY_STATE_DEFINITION: {
|
|
16
18
|
name: string;
|
|
@@ -165,6 +167,26 @@ export declare const MARKET_RISK_DEFINITION: {
|
|
|
165
167
|
additionalProperties: boolean;
|
|
166
168
|
};
|
|
167
169
|
};
|
|
170
|
+
export declare const VERIFY_ATTESTATION_DEFINITION: {
|
|
171
|
+
name: string;
|
|
172
|
+
description: string;
|
|
173
|
+
inputSchema: {
|
|
174
|
+
type: "object";
|
|
175
|
+
properties: {
|
|
176
|
+
attestation: {
|
|
177
|
+
type: string;
|
|
178
|
+
description: string;
|
|
179
|
+
};
|
|
180
|
+
expected_attestor: {
|
|
181
|
+
type: string;
|
|
182
|
+
description: string;
|
|
183
|
+
pattern: string;
|
|
184
|
+
};
|
|
185
|
+
};
|
|
186
|
+
required: string[];
|
|
187
|
+
additionalProperties: boolean;
|
|
188
|
+
};
|
|
189
|
+
};
|
|
168
190
|
export declare const TOOL_DEFINITIONS: ({
|
|
169
191
|
name: string;
|
|
170
192
|
description: string;
|
package/dist/tools.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../src/tools.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../src/tools.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AA6GH,eAAO,MAAM,6BAA6B;;;;;;;;CASzC,CAAC;AAEF,wBAAsB,sBAAsB;;;;;GAgC3C;AAaD,eAAO,MAAM,0BAA0B;;;;;;;;;;;;;;;;;;CAgBtC,CAAC;AAEF,wBAAsB,mBAAmB,CAAC,IAAI,EAAE,OAAO;;;;;GAoEtD;AAeD,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;CAgB/B,CAAC;AAEF,wBAAsB,aAAa,CAAC,IAAI,EAAE,OAAO;;;;;GAsGhD;AAWD,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;CAmB7B,CAAC;AAEF,wBAAsB,YAAY,CAAC,IAAI,EAAE,OAAO;;;;;GA0F/C;AAeD,eAAO,MAAM,2BAA2B;;;;;;;;;;;;;;;;;;;;;;CAoBvC,CAAC;AAEF,wBAAsB,qBAAqB,CAAC,IAAI,EAAE,OAAO;;;;;GAsGxD;AAgBD,eAAO,MAAM,+BAA+B;;;;;;;;;;;;;CAe3C,CAAC;AAEF,wBAAsB,wBAAwB,CAAC,IAAI,EAAE,OAAO;;;;;GAqP3D;AA2MD,eAAO,MAAM,sBAAsB;;;;;;;;;;;;;CAclC,CAAC;AAuFF,eAAO,MAAM,6BAA6B;;;;;;;;;;;;;;;;;;;CAsBzC,CAAC;AAmLF,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAW5B,CAAC;AAEF,eAAO,MAAM,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,OAAO,CAAC,OAAO,CAAC,CAiB7E,CAAC"}
|
package/dist/tools.js
CHANGED
|
@@ -1,24 +1,26 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* GBLIN MCP — Tool Implementations
|
|
3
3
|
*
|
|
4
|
-
*
|
|
4
|
+
* Ten focused tools. Each returns structured JSON the LLM can parse:
|
|
5
5
|
*
|
|
6
|
-
* 1. get_treasury_state
|
|
7
|
-
* 2. quote_safe_swap
|
|
8
|
-
* 3. swap_gblin_to_usdc_jit
|
|
9
|
-
* 4. invest_usdc_to_gblin
|
|
10
|
-
* 5. analyze_treasury_health
|
|
11
|
-
* 6. get_governance_state
|
|
12
|
-
* 7. share_skill_with_peer
|
|
13
|
-
* 8. find_keeper_bounty
|
|
6
|
+
* 1. get_treasury_state → NAV, basket, Crash Shield (snapshot)
|
|
7
|
+
* 2. quote_safe_swap → preview a buy/sell with safe minOut
|
|
8
|
+
* 3. swap_gblin_to_usdc_jit → calldata for Just-In-Time x402 payment
|
|
9
|
+
* 4. invest_usdc_to_gblin → calldata to convert USDC earnings → GBLIN
|
|
10
|
+
* 5. analyze_treasury_health → balances + gas check + runway estimate (PAID)
|
|
11
|
+
* 6. get_governance_state → verify 48h timelock ownership + pending ops
|
|
12
|
+
* 7. share_skill_with_peer → portable JSON skill seed + referral code
|
|
13
|
+
* 8. find_keeper_bounty → check rebalance bounty availability + calldata (PAID)
|
|
14
|
+
* 9. get_market_risk_regime → on-chain BTC/ETH risk regime signal (PAID)
|
|
15
|
+
* 10. verify_risk_attestation → verify a perishable Risk Attestation (FREE)
|
|
14
16
|
*/
|
|
15
|
-
import { encodeFunctionData, formatUnits, getAddress, isAddress, parseUnits, } from "viem";
|
|
17
|
+
import { encodeFunctionData, formatUnits, getAddress, hashTypedData, isAddress, parseUnits, recoverTypedDataAddress, } from "viem";
|
|
16
18
|
import { parseAbi } from "viem";
|
|
17
19
|
import { z } from "zod";
|
|
18
20
|
import { ERC20_ABI, GBLIN_ABI, TIMELOCK_ABI } from "./abi.js";
|
|
19
|
-
import { client } from "./client.js";
|
|
21
|
+
import { client, getOnChainTimestamp } from "./client.js";
|
|
20
22
|
import { requirePayment } from "./paywall.js";
|
|
21
|
-
import { EXPECTED_MIN_DELAY_SECONDS, GBLIN_GUARDIAN, GBLIN_TIMELOCK, GBLIN_V6, MIN_DEPOSIT_WEI, USDC, WETH, WETH_USDC_POOL_FEE, } from "./config.js";
|
|
23
|
+
import { EXPECTED_MIN_DELAY_SECONDS, GBLIN_ATTESTOR, GBLIN_GUARDIAN, GBLIN_TIMELOCK, GBLIN_V6, MIN_DEPOSIT_WEI, USDC, WETH, WETH_USDC_POOL_FEE, } from "./config.js";
|
|
22
24
|
import { applySlippageBuffer, checkCooldown, getBasketState, getDynamicSlippage, getEthPriceUsd, getNavUsd, getWalletBalances, quoteGblinForUsdc, } from "./helpers.js";
|
|
23
25
|
import { PACKAGE_VERSION } from "./config.js";
|
|
24
26
|
import { findKeeperBounty } from "./keeper.js";
|
|
@@ -883,6 +885,8 @@ async function handleShareSkillWithPeer(args) {
|
|
|
883
885
|
"get_governance_state",
|
|
884
886
|
"share_skill_with_peer",
|
|
885
887
|
"find_keeper_bounty",
|
|
888
|
+
"get_market_risk_regime",
|
|
889
|
+
"verify_risk_attestation",
|
|
886
890
|
],
|
|
887
891
|
chain: "Base mainnet (8453)",
|
|
888
892
|
contract: GBLIN_V6,
|
|
@@ -932,7 +936,7 @@ async function handleShareSkillWithPeer(args) {
|
|
|
932
936
|
" 3. Set the GBLIN_REFERRER environment variable to: " + referralCode,
|
|
933
937
|
" 4. Restart the MCP client to load the new server",
|
|
934
938
|
"",
|
|
935
|
-
"Once installed, the peer agent has the same
|
|
939
|
+
"Once installed, the peer agent has the same 10 tools available. Every transaction it executes will include your referral code in the Builder Code ERC-8021 attribution, redirecting a small share of the protocol fee to your wallet (" +
|
|
936
940
|
caller_wallet +
|
|
937
941
|
").",
|
|
938
942
|
"",
|
|
@@ -1036,6 +1040,203 @@ async function handleMarketRiskRegime() {
|
|
|
1036
1040
|
}
|
|
1037
1041
|
}
|
|
1038
1042
|
// ───────────────────────────────────────────────────────────────────────────
|
|
1043
|
+
// TOOL 10 — verify_risk_attestation (FREE public-good verifier — adoption flywheel)
|
|
1044
|
+
//
|
|
1045
|
+
// The counterpart to the paid /api/x402/attestation endpoint. Verifying a peer's
|
|
1046
|
+
// attestation is FREE on purpose: every agent that verifies one is exposed to
|
|
1047
|
+
// GBLIN and learns it can mint its own → drives paid calls to the attestation
|
|
1048
|
+
// endpoint. Keyless integrity + EIP-712 recover + live-drift, no RPC secrets.
|
|
1049
|
+
// ───────────────────────────────────────────────────────────────────────────
|
|
1050
|
+
// EIP-712 schema — MUST stay byte-for-byte identical to the webapp signer
|
|
1051
|
+
// (GBLIN_WEBAPP/src/app/api/x402/attestation/route.ts). Do not reorder fields.
|
|
1052
|
+
const ATTESTATION_EIP712_DOMAIN = {
|
|
1053
|
+
name: "GBLIN Risk Attestation",
|
|
1054
|
+
version: "1",
|
|
1055
|
+
chainId: 8453,
|
|
1056
|
+
verifyingContract: GBLIN_V6,
|
|
1057
|
+
};
|
|
1058
|
+
const ATTESTATION_EIP712_TYPES = {
|
|
1059
|
+
RiskAttestation: [
|
|
1060
|
+
{ name: "regime", type: "uint8" },
|
|
1061
|
+
{ name: "severityBps", type: "uint16" },
|
|
1062
|
+
{ name: "defensiveCashBps", type: "uint16" },
|
|
1063
|
+
{ name: "blockNumber", type: "uint64" },
|
|
1064
|
+
{ name: "issuedAt", type: "uint64" },
|
|
1065
|
+
{ name: "expiresAt", type: "uint64" },
|
|
1066
|
+
{ name: "basketHash", type: "bytes32" },
|
|
1067
|
+
],
|
|
1068
|
+
};
|
|
1069
|
+
const REGIME_LABELS = ["calm", "elevated", "crash"];
|
|
1070
|
+
const ZERO_ADDR = "0x0000000000000000000000000000000000000000";
|
|
1071
|
+
export const VERIFY_ATTESTATION_DEFINITION = {
|
|
1072
|
+
name: "verify_risk_attestation",
|
|
1073
|
+
description: "Verify a GBLIN Risk Attestation — the object returned by GBLIN's /api/x402/attestation, or a proof-of-diligence a peer agent attached to its action. FREE, no payment. Runs four checks: (1) INTEGRITY — recomputes the EIP-712 attestation_id and detects tampering; (2) AUTHENTICITY — if a signature is present, recovers the signer and checks it is GBLIN's published attestor; (3) FRESHNESS — whether it expired (10-minute TTL), using on-chain time; (4) LIVE DRIFT — compares the attested regime to the CURRENT on-chain regime and flags if it changed. Use before you trust any counterparty/peer that claims it 'checked market risk via GBLIN'.",
|
|
1074
|
+
inputSchema: {
|
|
1075
|
+
type: "object",
|
|
1076
|
+
properties: {
|
|
1077
|
+
attestation: {
|
|
1078
|
+
type: "object",
|
|
1079
|
+
description: "The full attestation object from /api/x402/attestation (must include `eip712`; `attestation_id`, `signature`, `attestor` are used when present). A JSON string of that object is also accepted.",
|
|
1080
|
+
},
|
|
1081
|
+
expected_attestor: {
|
|
1082
|
+
type: "string",
|
|
1083
|
+
description: "Optional 0x address to check the signature against. Defaults to the GBLIN attestor address baked into this MCP build (GBLIN_ATTESTOR_ADDRESS env).",
|
|
1084
|
+
pattern: "^0x[a-fA-F0-9]{40}$",
|
|
1085
|
+
},
|
|
1086
|
+
},
|
|
1087
|
+
required: ["attestation"],
|
|
1088
|
+
additionalProperties: false,
|
|
1089
|
+
},
|
|
1090
|
+
};
|
|
1091
|
+
async function handleVerifyRiskAttestation(args) {
|
|
1092
|
+
const a = (args ?? {});
|
|
1093
|
+
// Accept either a parsed object or a JSON string.
|
|
1094
|
+
let att = a.attestation;
|
|
1095
|
+
if (typeof att === "string") {
|
|
1096
|
+
try {
|
|
1097
|
+
att = JSON.parse(att);
|
|
1098
|
+
}
|
|
1099
|
+
catch {
|
|
1100
|
+
return toolError("`attestation` string is not valid JSON.");
|
|
1101
|
+
}
|
|
1102
|
+
}
|
|
1103
|
+
if (!att || typeof att !== "object") {
|
|
1104
|
+
return toolError("Missing `attestation` object.", "Pass the whole object returned by /api/x402/attestation.");
|
|
1105
|
+
}
|
|
1106
|
+
const eip712 = att.eip712;
|
|
1107
|
+
if (!eip712 || !eip712.message || !eip712.domain || !eip712.types) {
|
|
1108
|
+
return toolError("Attestation is missing its `eip712` payload (domain/types/message).", "Pass the whole object returned by /api/x402/attestation, including the `eip712` field.");
|
|
1109
|
+
}
|
|
1110
|
+
// Rebuild the typed message (uint64 fields as bigint for viem).
|
|
1111
|
+
const m = eip712.message;
|
|
1112
|
+
let message;
|
|
1113
|
+
try {
|
|
1114
|
+
message = {
|
|
1115
|
+
regime: Number(m.regime),
|
|
1116
|
+
severityBps: Number(m.severityBps),
|
|
1117
|
+
defensiveCashBps: Number(m.defensiveCashBps),
|
|
1118
|
+
blockNumber: BigInt(m.blockNumber),
|
|
1119
|
+
issuedAt: BigInt(m.issuedAt),
|
|
1120
|
+
expiresAt: BigInt(m.expiresAt),
|
|
1121
|
+
basketHash: String(m.basketHash),
|
|
1122
|
+
};
|
|
1123
|
+
}
|
|
1124
|
+
catch {
|
|
1125
|
+
return toolError("Attestation `eip712.message` fields are malformed.");
|
|
1126
|
+
}
|
|
1127
|
+
// 1. INTEGRITY — recompute the id using the CANONICAL schema from this build
|
|
1128
|
+
// (never trust the schema embedded in the payload for hashing).
|
|
1129
|
+
const recomputedId = hashTypedData({
|
|
1130
|
+
domain: ATTESTATION_EIP712_DOMAIN,
|
|
1131
|
+
types: ATTESTATION_EIP712_TYPES,
|
|
1132
|
+
primaryType: "RiskAttestation",
|
|
1133
|
+
message,
|
|
1134
|
+
});
|
|
1135
|
+
const claimedId = typeof att.attestation_id === "string" ? att.attestation_id : "";
|
|
1136
|
+
const integrityOk = claimedId ? recomputedId.toLowerCase() === claimedId.toLowerCase() : null;
|
|
1137
|
+
// The payload's OWN domain must match the canonical GBLIN domain, else it is
|
|
1138
|
+
// a different (untrusted) schema even if internally consistent.
|
|
1139
|
+
const schemaMatches = eip712.domain?.name === ATTESTATION_EIP712_DOMAIN.name &&
|
|
1140
|
+
String(eip712.domain?.version) === ATTESTATION_EIP712_DOMAIN.version &&
|
|
1141
|
+
Number(eip712.domain?.chainId) === ATTESTATION_EIP712_DOMAIN.chainId;
|
|
1142
|
+
// 2. AUTHENTICITY — signature recover
|
|
1143
|
+
const expectedAttestor = typeof a.expected_attestor === "string" && isAddress(a.expected_attestor)
|
|
1144
|
+
? getAddress(a.expected_attestor)
|
|
1145
|
+
: GBLIN_ATTESTOR;
|
|
1146
|
+
let signatureOk = null;
|
|
1147
|
+
let recoveredSigner = null;
|
|
1148
|
+
let isGblinAttestor = null;
|
|
1149
|
+
const signature = typeof att.signature === "string" ? att.signature : null;
|
|
1150
|
+
if (signature) {
|
|
1151
|
+
try {
|
|
1152
|
+
recoveredSigner = await recoverTypedDataAddress({
|
|
1153
|
+
domain: ATTESTATION_EIP712_DOMAIN,
|
|
1154
|
+
types: ATTESTATION_EIP712_TYPES,
|
|
1155
|
+
primaryType: "RiskAttestation",
|
|
1156
|
+
message,
|
|
1157
|
+
signature: signature,
|
|
1158
|
+
});
|
|
1159
|
+
signatureOk = true;
|
|
1160
|
+
if (expectedAttestor.toLowerCase() !== ZERO_ADDR) {
|
|
1161
|
+
isGblinAttestor = recoveredSigner.toLowerCase() === expectedAttestor.toLowerCase();
|
|
1162
|
+
}
|
|
1163
|
+
}
|
|
1164
|
+
catch {
|
|
1165
|
+
signatureOk = false;
|
|
1166
|
+
}
|
|
1167
|
+
}
|
|
1168
|
+
// 3. FRESHNESS — prefer on-chain time
|
|
1169
|
+
let nowSec;
|
|
1170
|
+
try {
|
|
1171
|
+
nowSec = Number(await getOnChainTimestamp());
|
|
1172
|
+
}
|
|
1173
|
+
catch {
|
|
1174
|
+
nowSec = Math.floor(Date.now() / 1000);
|
|
1175
|
+
}
|
|
1176
|
+
const expiresAtNum = Number(message.expiresAt);
|
|
1177
|
+
const expired = nowSec >= expiresAtNum;
|
|
1178
|
+
const secondsToExpiry = expired ? 0 : expiresAtNum - nowSec;
|
|
1179
|
+
// 4. LIVE DRIFT — is the attested regime still the current on-chain regime?
|
|
1180
|
+
let liveRegime = null;
|
|
1181
|
+
let stillCurrent = null;
|
|
1182
|
+
try {
|
|
1183
|
+
const basket = await getBasketState();
|
|
1184
|
+
const maxCut = basket.entries
|
|
1185
|
+
.filter((e) => !e.isStable)
|
|
1186
|
+
.reduce((mx, e) => {
|
|
1187
|
+
const cut = e.baseWeightBps > 0
|
|
1188
|
+
? Math.max(0, ((e.baseWeightBps - e.dynamicWeightBps) / e.baseWeightBps) * 100)
|
|
1189
|
+
: 0;
|
|
1190
|
+
return Math.max(mx, cut);
|
|
1191
|
+
}, 0);
|
|
1192
|
+
const liveCode = maxCut <= 0 ? 0 : maxCut < 40 ? 1 : 2;
|
|
1193
|
+
liveRegime = REGIME_LABELS[liveCode];
|
|
1194
|
+
stillCurrent = liveCode === message.regime;
|
|
1195
|
+
}
|
|
1196
|
+
catch {
|
|
1197
|
+
/* leave null — RPC hiccup shouldn't fail the crypto verification */
|
|
1198
|
+
}
|
|
1199
|
+
// Overall verdict: integrity not falsified, canonical schema, not expired, and
|
|
1200
|
+
// (if signed) a valid signature from the expected attestor when one is known.
|
|
1201
|
+
const trustable = integrityOk !== false &&
|
|
1202
|
+
schemaMatches &&
|
|
1203
|
+
!expired &&
|
|
1204
|
+
(signature ? signatureOk === true && isGblinAttestor !== false : true);
|
|
1205
|
+
const guidance = !signature
|
|
1206
|
+
? "Unsigned attestation: integrity + freshness verified, but authenticity relies on the gblin.digital TLS origin. Prefer signed attestations for counterparty gating."
|
|
1207
|
+
: isGblinAttestor === null
|
|
1208
|
+
? "Signature is cryptographically valid, but this MCP build has no published GBLIN attestor to compare against. Pass expected_attestor or set GBLIN_ATTESTOR_ADDRESS."
|
|
1209
|
+
: isGblinAttestor
|
|
1210
|
+
? "Signed by GBLIN's published attestor."
|
|
1211
|
+
: "WARNING: signature does NOT match GBLIN's published attestor — do not trust this attestation.";
|
|
1212
|
+
return toolResult({
|
|
1213
|
+
valid: trustable,
|
|
1214
|
+
checks: {
|
|
1215
|
+
integrity: integrityOk === null ? "no_id_to_compare" : integrityOk,
|
|
1216
|
+
schema_matches_gblin: schemaMatches,
|
|
1217
|
+
signed: !!signature,
|
|
1218
|
+
signature_valid: signatureOk,
|
|
1219
|
+
recovered_signer: recoveredSigner,
|
|
1220
|
+
is_gblin_attestor: isGblinAttestor,
|
|
1221
|
+
expected_attestor: expectedAttestor.toLowerCase() === ZERO_ADDR ? "not_published_in_this_build" : expectedAttestor,
|
|
1222
|
+
expired,
|
|
1223
|
+
seconds_to_expiry: secondsToExpiry,
|
|
1224
|
+
},
|
|
1225
|
+
attested: {
|
|
1226
|
+
regime: REGIME_LABELS[message.regime] ?? "unknown",
|
|
1227
|
+
severity_pct: message.severityBps / 100,
|
|
1228
|
+
defensive_cash_pct: message.defensiveCashBps / 100,
|
|
1229
|
+
block_number: Number(message.blockNumber),
|
|
1230
|
+
issued_at: Number(message.issuedAt),
|
|
1231
|
+
expires_at: expiresAtNum,
|
|
1232
|
+
},
|
|
1233
|
+
live: { regime: liveRegime, still_current: stillCurrent },
|
|
1234
|
+
recomputed_attestation_id: recomputedId,
|
|
1235
|
+
guidance,
|
|
1236
|
+
source: "GBLIN Risk Attestation verifier — keyless integrity + EIP-712 recover + live drift",
|
|
1237
|
+
});
|
|
1238
|
+
}
|
|
1239
|
+
// ───────────────────────────────────────────────────────────────────────────
|
|
1039
1240
|
// REGISTRY
|
|
1040
1241
|
// ───────────────────────────────────────────────────────────────────────────
|
|
1041
1242
|
export const TOOL_DEFINITIONS = [
|
|
@@ -1048,6 +1249,7 @@ export const TOOL_DEFINITIONS = [
|
|
|
1048
1249
|
SHARE_SKILL_DEFINITION,
|
|
1049
1250
|
FIND_KEEPER_BOUNTY_DEFINITION,
|
|
1050
1251
|
MARKET_RISK_DEFINITION,
|
|
1252
|
+
VERIFY_ATTESTATION_DEFINITION,
|
|
1051
1253
|
];
|
|
1052
1254
|
export const TOOL_HANDLERS = {
|
|
1053
1255
|
// ── FREE tools ─────────────────────────────────────────────────────────────
|
|
@@ -1059,6 +1261,7 @@ export const TOOL_HANDLERS = {
|
|
|
1059
1261
|
share_skill_with_peer: handleShareSkillWithPeer,
|
|
1060
1262
|
swap_gblin_to_usdc_jit: handleJitSwap,
|
|
1061
1263
|
invest_usdc_to_gblin: handleInvest,
|
|
1264
|
+
verify_risk_attestation: handleVerifyRiskAttestation,
|
|
1062
1265
|
// ── PAID tools (x402 intelligence layer) ──────────────────────────────────
|
|
1063
1266
|
// Analysis and keeper discovery — these are "advice", not transport.
|
|
1064
1267
|
analyze_treasury_health: requirePayment({ priceUsdc: "0.003", priceLabel: "$0.003 USDC per call" }, handleAnalyzeTreasury),
|