@clawpump/claw-agent 0.1.1 → 0.1.3

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.
@@ -368,6 +368,19 @@ def _resolve_runtime_from_pool_entry(
368
368
  # For Anthropic-style endpoints, strip /v1 suffix
369
369
  if api_mode == "anthropic_messages":
370
370
  base_url = re.sub(r"/v1/?$", "", base_url)
371
+ elif provider == "usepod":
372
+ # UsePod authenticates by the token in the URL path, so the pool
373
+ # entry's base_url is only the proxy root — derive the real per-token
374
+ # base URL from the resolved key. A config base_url or USEPOD_BASE_URL
375
+ # (self-hosted gateway) still wins.
376
+ from hermes_cli.auth import _resolve_usepod_base_url
377
+ cfg_provider = str(model_cfg.get("provider") or "").strip().lower()
378
+ cfg_base_url = ""
379
+ if cfg_provider == "usepod":
380
+ cfg_base_url = str(model_cfg.get("base_url") or "").strip().rstrip("/")
381
+ env_override = os.getenv("USEPOD_BASE_URL", "").strip()
382
+ base_url = cfg_base_url or _resolve_usepod_base_url(api_key, env_override).rstrip("/")
383
+ api_mode = "chat_completions"
371
384
  else:
372
385
  configured_provider = str(model_cfg.get("provider") or "").strip().lower()
373
386
  # Honour model.base_url from config.yaml when the configured provider
@@ -1165,6 +1178,11 @@ def _resolve_explicit_runtime(
1165
1178
  if provider in {"kimi-coding", "kimi-coding-cn"}:
1166
1179
  creds = resolve_api_key_provider_credentials(provider)
1167
1180
  base_url = creds.get("base_url", "").rstrip("/")
1181
+ elif provider == "usepod":
1182
+ # UsePod embeds the token in the URL path; defer base_url until
1183
+ # the token is resolved below so it always reflects the current
1184
+ # key (covers explicit --api-key overrides too).
1185
+ base_url = ""
1168
1186
  else:
1169
1187
  base_url = env_url or pconfig.inference_base_url
1170
1188
 
@@ -1175,6 +1193,12 @@ def _resolve_explicit_runtime(
1175
1193
  if not base_url:
1176
1194
  base_url = creds.get("base_url", "").rstrip("/")
1177
1195
 
1196
+ if provider == "usepod" and not explicit_base_url:
1197
+ # Derive the proxy base URL from the resolved token. An explicit
1198
+ # --base-url (or USEPOD_BASE_URL, carried via env_url) still wins.
1199
+ from hermes_cli.auth import _resolve_usepod_base_url
1200
+ base_url = _resolve_usepod_base_url(api_key, env_url).rstrip("/")
1201
+
1178
1202
  api_mode = "chat_completions"
1179
1203
  if provider == "copilot":
1180
1204
  api_mode = _copilot_runtime_api_mode(model_cfg, api_key)
@@ -196,87 +196,6 @@ _BUILTIN_SKINS: Dict[str, Dict[str, Any]] = {
196
196
  },
197
197
  "tool_prefix": "┊",
198
198
  },
199
- "clawpump": {
200
- "name": "clawpump",
201
- "description": "ClawPump — Solana green, claw mark (built on Hermes)",
202
- "colors": {
203
- "banner_border": "#16A34A",
204
- "banner_title": "#4ADE80",
205
- "banner_accent": "#22C55E",
206
- "banner_dim": "#15803D",
207
- "banner_text": "#DCFCE7",
208
- "ui_accent": "#22C55E",
209
- "ui_label": "#4ADE80",
210
- "ui_ok": "#22C55E",
211
- "ui_error": "#ef5350",
212
- "ui_warn": "#ffa726",
213
- "prompt": "#DCFCE7",
214
- "input_rule": "#16A34A",
215
- "response_border": "#4ADE80",
216
- "status_bar_bg": "#0B1F14",
217
- "status_bar_text": "#DCFCE7",
218
- "status_bar_strong": "#4ADE80",
219
- "status_bar_dim": "#3F6B50",
220
- "status_bar_good": "#22C55E",
221
- "status_bar_warn": "#FACC15",
222
- "status_bar_bad": "#F59E0B",
223
- "status_bar_critical": "#EF5350",
224
- "session_label": "#4ADE80",
225
- "session_border": "#3F6B50",
226
- "selection_bg": "#14532D",
227
- "completion_menu_bg": "#06140C",
228
- "completion_menu_current_bg": "#14532D",
229
- "completion_menu_meta_bg": "#0B1F14",
230
- "completion_menu_meta_current_bg": "#14532D",
231
- },
232
- "spinner": {
233
- "waiting_faces": ["(◴)", "(◷)", "(◶)", "(◵)", "(<>)"],
234
- "thinking_faces": ["(✦)", "(◇)", "(◈)", "(⌁)", "(<>)"],
235
- "thinking_verbs": [
236
- "pumping", "launching", "scanning the mints", "routing the swap",
237
- "reading the chart", "minting", "snapping the claw", "checking liquidity",
238
- ],
239
- "wings": [
240
- ["⟪◇", "◇⟫"],
241
- ["⟪✦", "✦⟫"],
242
- ["⟪>", "<⟫"],
243
- ["⟪◈", "◈⟫"],
244
- ],
245
- },
246
- "branding": {
247
- "agent_name": "ClawPump",
248
- "org": "ClawPump",
249
- "credit": "built on Hermes ☤ by Nous Research",
250
- "welcome": "Welcome to ClawPump 🦀 — Solana agents, trading & token launch. Type your message or /help for commands.",
251
- "goodbye": "Claws out! 🦀",
252
- "response_label": " ✦ ClawPump ",
253
- "prompt_symbol": "❯",
254
- "help_header": "(✦) Available Commands",
255
- },
256
- "tool_prefix": "┊",
257
- "banner_logo": """[bold #86EFAC] ██████╗██╗ █████╗ ██╗ ██╗██████╗ ██╗ ██╗███╗ ███╗██████╗ [/]
258
- [bold #4ADE80]██╔════╝██║ ██╔══██╗██║ ██║██╔══██╗██║ ██║████╗ ████║██╔══██╗[/]
259
- [#22C55E]██║ ██║ ███████║██║ █╗ ██║██████╔╝██║ ██║██╔████╔██║██████╔╝[/]
260
- [#16A34A]██║ ██║ ██╔══██║██║███╗██║██╔═══╝ ██║ ██║██║╚██╔╝██║██╔═══╝ [/]
261
- [#15803D]╚██████╗███████╗██║ ██║╚███╔███╔╝██║ ╚██████╔╝██║ ╚═╝ ██║██║ [/]
262
- [#166534] ╚═════╝╚══════╝╚═╝ ╚═╝ ╚══╝╚══╝ ╚═╝ ╚═════╝ ╚═╝ ╚═╝╚═╝ [/]""",
263
- "banner_hero": """[#86EFAC]⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠠⣀⣂⣤⣤⣤⣤⣤⣤⠄[/]
264
- [#7EE5A4]⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣢⣵⣾⣿⣿⣿⣿⣿⣿⣿⡿⠃⠀[/]
265
- [#77DA9B]⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢠⣴⠿⢿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠟⠀⠀⠀[/]
266
- [#6FD093]⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢠⣾⠟⠁⢀⣼⣿⣿⣿⣿⣿⣿⣿⡿⠀⠀⠀⠀⠀[/]
267
- [#68C58A]⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣜⡿⠁⢀⣴⣿⣿⣿⣿⣿⣿⣿⣿⣿⠗⠀⠀⠀⠀⠀[/]
268
- [#60BB82]⠀⠀⠀⠀⠀⠀⠀⠀⢀⣮⣿⣇⣴⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠁⠀⠀⠀⠀⠀⠀[/]
269
- [#58B179]⠀⠀⠀⠀⠀⠀⠀⢠⣿⣿⠃⣸⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠀⠀⠀⠀⠀⠀⠀[/]
270
- [#51A671]⠀⠀⠀⠀⠀⠀⢀⣾⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡿⠃⠀⠀⠀⠀⠀⠀⠀[/]
271
- [#499C68]⠀⠀⠀⠀⠀⠀⢸⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠿⠋⠀⠀⠀⠀⠀⠀⠀⠀⠀[/]
272
- [#429160]⠀⠀⠀⠀⠀⣀⣈⡙⠻⢿⣿⣿⣿⣿⣿⣿⡿⠋⣡⣤⣤⠀⠀⠀⠀⠀⠐⢀⣠⣴[/]
273
- [#3A8757]⠀⠀⠀⢀⣞⣿⠟⠉⣷⣦⣌⠙⢿⣿⣿⣿⣠⣾⣿⣿⣿⣷⣷⣶⣶⣶⣿⣿⣿⠃[/]
274
- [#327D4F]⠀⠀⣀⣉⡛⠳⢴⣾⣿⣿⣿⣷⣄⠹⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡿⠁⠀[/]
275
- [#2B7246]⢠⣞⣿⡟⣩⣿⣶⣌⠻⢿⣿⣿⣿⣆⠘⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡿⠋⠀⠀⠀[/]
276
- [#23683E]⠀⠉⠙⠻⢿⣿⣿⣿⣷⣄⠻⣿⣿⣿⡀⠹⢿⣿⣿⣿⣿⠿⠟⠋⠁⠀⠀⠀⠀⠀[/]
277
- [#1C5D35]⠀⠀⠀⠀⠀⠈⠻⣿⣿⣿⣆⠹⣿⠟⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀[/]
278
- [#14532D]⠀⠀⠀⠀⠀⠀⠀⠘⢿⣿⠟⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀[/]""",
279
- },
280
199
  "ares": {
281
200
  "name": "ares",
282
201
  "description": "War-god theme — crimson and bronze",
@@ -730,8 +649,21 @@ _BUILTIN_SKINS: Dict[str, Dict[str, Any]] = {
730
649
  # Skin loading and management
731
650
  # =============================================================================
732
651
 
652
+ # -- ClawPump distribution overlay (downstream) ---------------------------
653
+ # Pull ClawPump's skins + default-skin name from the downstream-owned
654
+ # overlay so this upstream-owned file stays mergeable. Falls back to
655
+ # vanilla Hermes ("default") when the overlay module is absent.
656
+ try:
657
+ from hermes_cli.distribution import (
658
+ BUILTIN_SKINS as _DIST_SKINS,
659
+ DEFAULT_SKIN as _DISTRIBUTION_DEFAULT_SKIN,
660
+ )
661
+ _BUILTIN_SKINS.update(_DIST_SKINS)
662
+ except Exception:
663
+ _DISTRIBUTION_DEFAULT_SKIN = "default"
664
+
733
665
  _active_skin: Optional[SkinConfig] = None
734
- _active_skin_name: str = "clawpump"
666
+ _active_skin_name: str = _DISTRIBUTION_DEFAULT_SKIN
735
667
 
736
668
 
737
669
  def _skins_dir() -> Path:
@@ -856,8 +788,23 @@ def get_active_skin() -> SkinConfig:
856
788
 
857
789
 
858
790
  def set_active_skin(name: str) -> SkinConfig:
859
- """Switch the active skin. Returns the new SkinConfig."""
791
+ """Switch the active skin. Returns the new SkinConfig.
792
+
793
+ In a downstream distribution (e.g. ClawPump) the built-in ``default`` skin
794
+ name resolves to the distribution's own skin, so users who have
795
+ ``display.skin: default`` persisted in config — or who pick ``default``
796
+ interactively via ``/skin`` — get the distribution brand instead of vanilla
797
+ Hermes. The remap happens here, at the single activation chokepoint, rather
798
+ than by overwriting ``_BUILTIN_SKINS["default"]``: that entry is also the
799
+ base from which every *other* skin inherits unset keys (see
800
+ ``_build_skin_config``), so replacing it would bleed the distribution's
801
+ colors into unrelated skins. ``load_skin("default")`` therefore still
802
+ returns the untouched vanilla base. Degrades to a no-op on vanilla Hermes,
803
+ where ``_DISTRIBUTION_DEFAULT_SKIN == "default"``.
804
+ """
860
805
  global _active_skin, _active_skin_name
806
+ if name == "default" and _DISTRIBUTION_DEFAULT_SKIN != "default":
807
+ name = _DISTRIBUTION_DEFAULT_SKIN
861
808
  _active_skin_name = name
862
809
  _active_skin = load_skin(name)
863
810
  return _active_skin
@@ -876,11 +823,11 @@ def init_skin_from_config(config: dict) -> None:
876
823
  display = config.get("display") or {}
877
824
  if not isinstance(display, dict):
878
825
  display = {}
879
- skin_name = display.get("skin", "clawpump")
826
+ skin_name = display.get("skin", _DISTRIBUTION_DEFAULT_SKIN)
880
827
  if isinstance(skin_name, str) and skin_name.strip():
881
828
  set_active_skin(skin_name.strip())
882
829
  else:
883
- set_active_skin("clawpump")
830
+ set_active_skin(_DISTRIBUTION_DEFAULT_SKIN)
884
831
 
885
832
 
886
833
  # =============================================================================
@@ -3,7 +3,7 @@
3
3
  manifest_version: 1
4
4
 
5
5
  name: clawpump
6
- description: ClawPump — Solana AI agents, trading, perps, DCA, token launch, marketplace, lending, predictions, market intelligence (104 tools).
6
+ description: ClawPump — Solana AI agents, trading, perps, DCA, token launch, marketplace, lending, predictions, gift cards, agent mail, x402 paid APIs, market intelligence (131 tools).
7
7
  source: https://mcp.clawpump.tech
8
8
 
9
9
  # ClawPump ships a remote MCP server: Streamable HTTP + native OAuth 2.1 +
@@ -29,11 +29,13 @@ auth:
29
29
  # first probe / first connect.
30
30
 
31
31
  # Tool selection at install time.
32
- # ClawPump exposes 104 tools; 28 of them move real funds or are irreversible
32
+ # ClawPump exposes 131 tools; 37 of them move real funds or are irreversible
33
33
  # (perps orders, swaps, DCA/limit orders, lending deposit/withdraw, prediction
34
- # positions, marketplace bids, external-wallet changes, token launches).
34
+ # positions, marketplace bids, external-wallet changes, wallet transfers,
35
+ # token launches, gift-card purchases/withdrawals, agent-mail
36
+ # provisioning/sending, x402 paid-API execution).
35
37
  # Hermes does NOT auto-gate MCP tools by their destructiveHint, so we ship a
36
- # read-mostly default: the 76 safe tools below are pre-checked in the install
38
+ # read-mostly default: the 94 safe tools below are pre-checked in the install
37
39
  # checklist (and applied directly if the server can't be probed before auth).
38
40
  # Users opt into the financial tools per their threat model in the checklist,
39
41
  # or later with `hermes mcp configure clawpump`.
@@ -54,6 +56,23 @@ tools:
54
56
  - upload_agent_avatar
55
57
  - get_agent_asset_url
56
58
  - list_available_skills
59
+ # agent cards (Laso — reads / linking / quotes; purchase & withdraw are opt-in)
60
+ - agent_card_list
61
+ - agent_card_get
62
+ - agent_card_status
63
+ - agent_card_balance
64
+ - agent_card_data
65
+ - agent_card_withdrawals
66
+ - agent_card_quote
67
+ - agent_card_refresh
68
+ - agent_card_search_gift_cards
69
+ - agent_card_search_merchants
70
+ - agent_card_connect
71
+ - agent_card_connect_link
72
+ # agent mail (reads; inbox provisioning & sending are opt-in)
73
+ - agent_mail_get_address
74
+ - agent_mail_list
75
+ - agent_mail_read
57
76
  # automations
58
77
  - list_automations
59
78
  - get_automation
@@ -95,6 +114,10 @@ tools:
95
114
  - get_my_bids
96
115
  - get_received_bids
97
116
  - get_marketplace_history
117
+ # pay.sh x402 (catalog / pricing / approval prep — paid execution is opt-in)
118
+ - pay_sh_search
119
+ - pay_sh_provider_details
120
+ - pay_sh_prepare_call
98
121
  # perps (read / preview only)
99
122
  - perps_markets
100
123
  - perps_market_data
@@ -143,8 +166,12 @@ post_install: |
143
166
 
144
167
  FINANCIAL / IRREVERSIBLE TOOLS are OFF by default (perps_*, swap_execute,
145
168
  dca_create, limit_order_create, jup_lend_deposit/withdraw, predictions_open/
146
- close, place_bid / accept_marketplace_bid, set_external_wallet, and the
147
- token-launch tools). Several require confirmRisk=true / confirm_launch=true.
169
+ close, place_bid / accept_marketplace_bid, set_external_wallet,
170
+ wallet_transfer, agent_card_create/cancel/reveal/withdraw,
171
+ agent_mail_create/send, pay_sh_execute_approved, and the token-launch
172
+ tools). Several require explicit confirm flags (confirmRisk,
173
+ confirm_launch, confirm_spend, confirm_send, confirm_transfer,
174
+ confirm_payment, …).
148
175
  Enable the ones you want and review every call:
149
176
  hermes mcp configure clawpump
150
177
 
@@ -3,7 +3,7 @@
3
3
  manifest_version: 1
4
4
 
5
5
  name: clawpump-stdio
6
- description: ClawPump (stdio) — the same 104 tools via the npm package, authed with a cpk_* API key (no browser).
6
+ description: ClawPump (stdio) — the same 131 tools via the npm package, authed with a cpk_* API key (no browser).
7
7
  source: https://www.npmjs.com/package/@clawpump/agents
8
8
 
9
9
  # Same tool surface as the `clawpump` remote entry, but run locally over stdio
@@ -31,8 +31,8 @@ auth:
31
31
  secret: false
32
32
  default: ""
33
33
 
34
- # Same read-mostly default as the remote `clawpump` entry: 76 safe tools
35
- # pre-checked; the 28 financial/irreversible tools are opt-in. See the
34
+ # Same read-mostly default as the remote `clawpump` entry: 94 safe tools
35
+ # pre-checked; the 37 financial/irreversible tools are opt-in. See the
36
36
  # `clawpump` manifest for the rationale (Hermes does not auto-gate MCP tools
37
37
  # by destructiveHint).
38
38
  tools:
@@ -52,6 +52,23 @@ tools:
52
52
  - upload_agent_avatar
53
53
  - get_agent_asset_url
54
54
  - list_available_skills
55
+ # agent cards (Laso — reads / linking / quotes; purchase & withdraw are opt-in)
56
+ - agent_card_list
57
+ - agent_card_get
58
+ - agent_card_status
59
+ - agent_card_balance
60
+ - agent_card_data
61
+ - agent_card_withdrawals
62
+ - agent_card_quote
63
+ - agent_card_refresh
64
+ - agent_card_search_gift_cards
65
+ - agent_card_search_merchants
66
+ - agent_card_connect
67
+ - agent_card_connect_link
68
+ # agent mail (reads; inbox provisioning & sending are opt-in)
69
+ - agent_mail_get_address
70
+ - agent_mail_list
71
+ - agent_mail_read
55
72
  # automations
56
73
  - list_automations
57
74
  - get_automation
@@ -93,6 +110,10 @@ tools:
93
110
  - get_my_bids
94
111
  - get_received_bids
95
112
  - get_marketplace_history
113
+ # pay.sh x402 (catalog / pricing / approval prep — paid execution is opt-in)
114
+ - pay_sh_search
115
+ - pay_sh_provider_details
116
+ - pay_sh_prepare_call
96
117
  # perps (read / preview only)
97
118
  - perps_markets
98
119
  - perps_market_data
@@ -0,0 +1,100 @@
1
+ """UsePod provider profile.
2
+
3
+ UsePod (usepod.ai) is a drop-in OpenAI- and Anthropic-compatible inference
4
+ marketplace. Independent operators serve open-weight models (or relay their
5
+ own upstream keys) and centralized providers stay available as a fallback;
6
+ billing is pay-per-request, settled in USDC from a per-token balance.
7
+
8
+ Unlike a normal API-key provider, UsePod authenticates by the token embedded
9
+ in the request *path* (``/proxy/<token>/v1/...``) and ignores the
10
+ Authorization header. The base URL is therefore DERIVED from the API key
11
+ rather than being static — see ``hermes_cli.auth._resolve_usepod_base_url`` and
12
+ the ``usepod`` branches in ``resolve_api_key_provider_credentials`` /
13
+ ``get_api_key_provider_status`` (auth.py) and ``_resolve_explicit_runtime``
14
+ (runtime_provider.py).
15
+
16
+ The net effect for the user: they only paste the token they obtained from
17
+ ``POST https://api.usepod.ai/v1/register`` (and funded on https://usepod.ai/fund)
18
+ — the proxy URL is built for them. An explicit ``USEPOD_BASE_URL`` env var
19
+ still wins, e.g. for a self-hosted UsePod gateway.
20
+ """
21
+
22
+ from __future__ import annotations
23
+
24
+ import json
25
+ import logging
26
+ import urllib.request
27
+
28
+ from providers import register_provider
29
+ from providers.base import ProviderProfile, _profile_user_agent
30
+
31
+ logger = logging.getLogger(__name__)
32
+
33
+ # Production gateway host. The token-bearing inference base URL is
34
+ # ``{USEPOD_API_BASE}/proxy/<token>/v1``; the catalog is
35
+ # ``{USEPOD_API_BASE}/proxy/<token>/v1/models``.
36
+ USEPOD_API_BASE = "https://api.usepod.ai"
37
+
38
+
39
+ class UsePodProfile(ProviderProfile):
40
+ """UsePod — OpenAI-compatible proxy with the auth token in the URL path."""
41
+
42
+ def fetch_models(self, *, api_key: str | None = None, timeout: float = 8.0):
43
+ """List models from the per-token catalog endpoint.
44
+
45
+ UsePod exposes ``/proxy/<token>/v1/models``; the token lives in the
46
+ path, so the base-class implementation (which builds the URL from the
47
+ static ``base_url``) cannot reach it. Returns None when no token is
48
+ available so callers fall back to ``fallback_models``.
49
+ """
50
+ token = (api_key or "").strip()
51
+ if not token:
52
+ return None
53
+ url = f"{USEPOD_API_BASE}/proxy/{token}/v1/models"
54
+ req = urllib.request.Request(url)
55
+ # Harmless — UsePod ignores it (auth is the path token) — but send it
56
+ # for parity with standard OpenAI clients / intermediaries.
57
+ req.add_header("Authorization", f"Bearer {token}")
58
+ req.add_header("Accept", "application/json")
59
+ req.add_header("User-Agent", _profile_user_agent())
60
+ try:
61
+ with urllib.request.urlopen(req, timeout=timeout) as resp:
62
+ data = json.loads(resp.read().decode())
63
+ items = data if isinstance(data, list) else data.get("data", [])
64
+ return [m["id"] for m in items if isinstance(m, dict) and "id" in m]
65
+ except Exception as exc:
66
+ logger.debug("fetch_models(usepod): %s", exc)
67
+ return None
68
+
69
+
70
+ usepod = UsePodProfile(
71
+ name="usepod",
72
+ # USEPOD_API_KEY = the token (paste-in). USEPOD_BASE_URL = optional override
73
+ # for self-hosted gateways; the registry auto-maps the *_BASE_URL var to the
74
+ # base_url override env var.
75
+ env_vars=("USEPOD_API_KEY", "USEPOD_BASE_URL"),
76
+ display_name="UsePod",
77
+ description="UsePod (drop-in OpenAI-compatible inference marketplace, pay-per-use in USDC)",
78
+ signup_url="https://usepod.ai",
79
+ # Non-empty so the picker + live-fetch plumbing engages; the *effective*
80
+ # inference URL is derived per-token (see module docstring). hostname pins
81
+ # the URL→provider reverse mapping to api.usepod.ai.
82
+ base_url=f"{USEPOD_API_BASE}/proxy",
83
+ hostname="api.usepod.ai",
84
+ # The token is in the URL path, so doctor's static /models probe (built from
85
+ # base_url) can't reach the per-token catalog. Skip it — key presence is the
86
+ # meaningful "configured" signal for this provider.
87
+ supports_health_check=False,
88
+ # Best-effort offline picker list — UsePod's real catalog is dynamic and is
89
+ # fetched live from /proxy/<token>/v1/models whenever a key is present.
90
+ fallback_models=(
91
+ "claude-opus-4-8",
92
+ "claude-sonnet-4-6",
93
+ "gpt-5.5",
94
+ "deepseek-v4",
95
+ "glm-4-7",
96
+ "kimi-k2.5",
97
+ ),
98
+ )
99
+
100
+ register_provider(usepod)
@@ -0,0 +1,5 @@
1
+ name: usepod-provider
2
+ kind: model-provider
3
+ version: 1.0.0
4
+ description: UsePod (drop-in OpenAI-compatible inference marketplace)
5
+ author: "@0xgilbert"
@@ -45,6 +45,7 @@ ACP_REGISTRY_MANIFEST = REPO_ROOT / "acp_registry" / "agent.json"
45
45
 
46
46
  # Auto-extracted from noreply emails + manual overrides
47
47
  AUTHOR_MAP = {
48
+ "chris@100x.dev": "chris-gilbert",
48
49
  "ben.bartholomew@vectorize.io": "benfrank241",
49
50
  "74339271+SaguaroDev@users.noreply.github.com": "SaguaroDev",
50
51
  "subw3@mail2.sysu.edu.cn": "Subway2023",
@@ -1,20 +1,21 @@
1
1
  ---
2
2
  name: clawpump
3
- description: "ClawPump on Solana — create/chat with agents, trade, perps, DCA, lend, launch tokens, marketplace, predictions, intelligence via mcp_clawpump_* tools. Use when the user mentions ClawPump, launching a token, an agent's wallet/balance, swaps, perps, or DeFi on Solana."
4
- version: 1.0.0
3
+ description: "ClawPump on Solana — create/chat with agents, trade, perps, DCA, lend, launch tokens, marketplace, predictions, gift cards, agent email, intelligence via mcp_clawpump_* tools. Use when the user mentions ClawPump, launching a token, an agent's wallet/balance, swaps, perps, gift cards, agent email, or DeFi on Solana."
4
+ version: 1.3.0
5
5
  platforms: [linux, macos, windows]
6
6
  metadata:
7
7
  hermes:
8
- tags: [clawpump, solana, defi, trading, perps, dca, lending, token-launch, marketplace, predictions, agents, mcp]
9
- related_skills: [mcp]
8
+ tags: [clawpump, solana, defi, trading, perps, dca, lending, token-launch, marketplace, predictions, gift-cards, agent-mail, agents, mcp]
9
+ related_skills: [mcp, pay-sh]
10
10
  ---
11
11
 
12
12
  # ClawPump
13
13
 
14
14
  ClawPump is a Solana platform for AI agents: each agent has a wallet and can
15
- trade, run perps, DCA, lend, launch tokens, and be bought/sold on a
16
- marketplace. Its full feature set reaches Hermes through the **ClawPump MCP
17
- server** (104 tools, 10 resources, 10 prompts).
15
+ trade, run perps, DCA, lend, launch tokens, buy gift cards, send email from
16
+ its own inbox, and be bought/sold on a marketplace. Its full feature set
17
+ reaches Hermes through the **ClawPump MCP server** (131 tools, 10 resources,
18
+ 10 prompts).
18
19
 
19
20
  ## Enabling ClawPump
20
21
 
@@ -43,7 +44,7 @@ Most tools act on a specific agent. Resolve it once with `list_agents`, then
43
44
  pass `agent_id`. If the user set `CLAWPUMP_DEFAULT_AGENT` (or has exactly one
44
45
  agent), `agent_id` can usually be omitted. When unsure which agent, ask.
45
46
 
46
- ## What's available (104 tools, 17 groups)
47
+ ## What's available (131 tools, 20 groups)
47
48
 
48
49
  | Group | Representative tools |
49
50
  |-------|----------------------|
@@ -53,19 +54,22 @@ agent), `agent_id` can usually be omitted. When unsure which agent, ask.
53
54
  | Custom skills | `list_custom_skills`, `get_custom_skill`, `create_custom_skill`, `update_custom_skill`, `delete_custom_skill` |
54
55
  | Trading | `swap_quote`, `swap_execute`, `token_search`, `get_portfolio`, `get_price`, `get_market_signals`, `get_indicators`, `arbitrage_quote`/`arbitrage_prices` |
55
56
  | DCA / limits | `dca_create`, `dca_list`, `dca_cancel`, `limit_order_create`, `limit_order_cancel`, `limit_order_history` |
56
- | Phoenix perps | `perps_markets`, `perps_market_data`, `perps_account`, `perps_account_prepare`, `perps_trader_register`, `perps_collateral_deposit`, `perps_order_preview`, `perps_order_execute`, `perps_order_cancel` |
57
+ | Phoenix perps | `perps_markets`, `perps_market_data`, `perps_account`, `perps_account_prepare`, `perps_trader_register`, `perps_collateral_deposit`, `perps_collateral_withdraw`, `perps_order_preview`, `perps_order_execute`, `perps_order_cancel` |
57
58
  | Lending (Jupiter) | `jup_lend_tokens`, `jup_lend_positions`, `jup_lend_deposit`, `jup_lend_withdraw` |
58
59
  | Predictions | `predictions_events`, `predictions_positions`, `predictions_open`, `predictions_close` |
59
60
  | Token launch | `get_launch_status`, `launch_token_gasless`, `launch_metaplex_genesis_token` |
60
61
  | Marketplace | `browse_marketplace`, `create_marketplace_listing`, `delist_marketplace_listing`, `browse_public_agents`, `place_bid`, `get_my_bids`, `get_received_bids`, `accept_marketplace_bid`, `reject_marketplace_bid`, `withdraw_marketplace_bid`, `get_marketplace_history` |
61
- | Wallet & billing | `get_balance`, `get_budget`, `get_usage`, `get_transactions`, `get_wallet_summaries`, `get_wallet_history`, `get_private_wallet_balance`, `get_balance_history`, `sync_billing` |
62
+ | Agent cards (Laso) | `agent_card_search_merchants`, `agent_card_search_gift_cards`, `agent_card_quote`, `agent_card_create`, `agent_card_list`, `agent_card_get`, `agent_card_status`, `agent_card_data`, `agent_card_balance`, `agent_card_reveal`, `agent_card_cancel`, `agent_card_refresh`, `agent_card_withdraw`, `agent_card_withdrawals`, `agent_card_connect`, `agent_card_connect_link` |
63
+ | Agent mail | `agent_mail_create`, `agent_mail_get_address`, `agent_mail_send`, `agent_mail_list`, `agent_mail_read` |
64
+ | Pay.sh x402 (agent-wallet paid APIs) | `pay_sh_search`, `pay_sh_provider_details`, `pay_sh_prepare_call`, `pay_sh_execute_approved` |
65
+ | Wallet & billing | `get_balance`, `get_budget`, `get_usage`, `get_transactions`, `get_wallet_summaries`, `get_wallet_history`, `get_private_wallet_balance`, `get_balance_history`, `sync_billing`, `wallet_transfer` |
62
66
  | Market intelligence | `intelligence_capabilities`, `intelligence_market`, `intelligence_signals`, `intelligence_macro`, `intelligence_perps` |
63
67
  | Integrations | `list_integrations`, `save_integration`, `remove_integration`, `get_linked_accounts` |
64
68
  | Account | `get_account_status`, `connect_twitter`, `configure_twitter_posting`, `set_external_wallet`, `generate_link_code`, `link_google_account`, `get_dashboard_urls` |
65
69
  | Whitelist | `get_whitelist`, `add_to_whitelist`, `remove_from_whitelist` |
66
70
  | Utility | `get_model_catalog`, `get_news_feed` |
67
71
 
68
- By default only the **76 read-mostly** tools are enabled. The financial ones
72
+ By default only the **94 read-mostly** tools are enabled. The financial ones
69
73
  below are opt-in via `hermes mcp configure clawpump`.
70
74
 
71
75
  ## ⚠️ FINANCIAL & IRREVERSIBLE TOOLS — confirmation is mandatory
@@ -73,20 +77,27 @@ below are opt-in via `hermes mcp configure clawpump`.
73
77
  These move real funds on-chain or are irreversible. **Never call them without
74
78
  the user's explicit, specific go-ahead in this conversation.** Quote the exact
75
79
  action (amounts, token, agent) and wait for a clear yes. Several require an
76
- explicit confirm flag (e.g. `confirmRisk: true`, `confirm_launch: true`) — only
77
- set it after the user agrees.
80
+ explicit confirm flag (e.g. `confirmRisk: true`, `confirm_launch: true`,
81
+ `confirm_spend: true`, `confirm_send: true`, `confirm_transfer: true`,
82
+ `confirm_payment: true`) — only set it after the user agrees.
78
83
 
79
84
  - Trading: `swap_execute`, `dca_create`, `dca_cancel`, `limit_order_create`, `limit_order_cancel`
80
- - Perps: `perps_account_prepare`, `perps_trader_register`, `perps_collateral_deposit`, `perps_order_execute`, `perps_order_cancel`
85
+ - Perps: `perps_account_prepare`, `perps_trader_register`, `perps_collateral_deposit`, `perps_collateral_withdraw`, `perps_order_execute`, `perps_order_cancel`
81
86
  - Lending: `jup_lend_deposit`, `jup_lend_withdraw`
82
87
  - Predictions: `predictions_open`, `predictions_close`
83
88
  - Marketplace (funds/ownership): `place_bid`, `accept_marketplace_bid`, `reject_marketplace_bid`, `withdraw_marketplace_bid`, `delist_marketplace_listing`
84
89
  - Token launch: `launch_token_gasless`, `launch_metaplex_genesis_token`
85
90
  - Account / lifecycle: `set_external_wallet`, `delete_agent`, `delete_automation`, `delete_custom_skill`, `cancel_agent_run`, `remove_integration`, `remove_from_whitelist`
91
+ - Agent cards (Laso): `agent_card_create` (pays USDC from the agent wallet — quote first), `agent_card_withdraw`, `agent_card_cancel`, `agent_card_reveal` (exposes the card number / redemption secret)
92
+ - Agent mail: `agent_mail_create` (one-time ~$2 USDC from the agent wallet), `agent_mail_send` (outward-facing email; paid per send via x402 from the agent wallet)
93
+ - Wallet: `wallet_transfer` (irreversible on-chain send; destination must be on the agent's whitelist via `add_to_whitelist`; quote the exact amount, token, and address, then `confirm_transfer: true`)
94
+ - Pay.sh x402: `pay_sh_execute_approved` (pays USDC from the agent wallet via x402 — always `pay_sh_prepare_call` first; quote the exact endpoint + price; approval codes expire in 10 minutes; requires the `x402` skill on the agent)
86
95
 
87
96
  **Always get a quote/preview first** (`swap_quote` before `swap_execute`,
88
- `perps_order_preview` before `perps_order_execute`) and show it to the user
89
- before executing. Report tx signatures back when a call succeeds.
97
+ `perps_order_preview` before `perps_order_execute`, `agent_card_quote` before
98
+ `agent_card_create`, `pay_sh_prepare_call` before `pay_sh_execute_approved`)
99
+ and show it to the user before executing. Report tx signatures back when a
100
+ call succeeds.
90
101
 
91
102
  ## Resources (read with the MCP resource reader)
92
103
 
@@ -120,3 +131,8 @@ Common patterns:
120
131
  - **Launch a token:** `get_launch_status` → confirm details → `launch_token_gasless` (gasless) or `launch_metaplex_genesis_token`.
121
132
  - **Check portfolio:** `get_balance` + `get_portfolio` + `get_wallet_summaries`.
122
133
  - **Perps:** `perps_markets`/`perps_market_data` → `perps_order_preview` → (confirm) → `perps_order_execute`.
134
+ - **Gift card:** `agent_card_search_merchants`/`agent_card_search_gift_cards` → `agent_card_quote` → (confirm) → `agent_card_create` → `agent_card_status`; `agent_card_reveal` only when the user asks for the card details.
135
+ - **Agent email:** `agent_mail_get_address`; no inbox → (confirm ~$2 USDC) `agent_mail_create`; then `agent_mail_send` (confirm) or `agent_mail_list` → `agent_mail_read`.
136
+ - **Deliverability (avoid spam):** write genuine, complete messages — a specific subject, a greeting, 2–4 sentences of real purpose, and a sign-off. Never send one-word/empty bodies or test-like "hello": low-content mail from a fresh sender domain is the #1 spam trigger. Do **not** use fake-urgent or deceptive subjects ("IMPORTANT!!", "URGENT") to game filters — that backfires and is deceptive. Tell first-time recipients to mark "Not spam" + add the address to contacts; that trains their inbox fastest.
137
+ - **Fund an external wallet (e.g. a pay.sh allowance):** `get_balance` → `add_to_whitelist` (user-approved address) → (confirm) `wallet_transfer`. See the `pay-sh` skill.
138
+ - **Paid x402 API call (agent wallet pays):** `pay_sh_search` → `pay_sh_provider_details` (price) → `pay_sh_prepare_call` → (confirm price with user) → `pay_sh_execute_approved`. The agent needs the `x402` skill (`update_agent` with `enabled_skills`).
@@ -0,0 +1,66 @@
1
+ ---
2
+ name: pay-sh
3
+ description: "Pay.sh / x402 paid APIs paid with the ClawPump agent wallet — search a catalog of pay-per-call services (images, data, email, voice…) and pay per call in USDC straight from the agent's custodial wallet via the ClawPump MCP. Use when the user mentions pay.sh, x402, 402 payments, or paying for an API/service with the agent's funds."
4
+ version: 2.0.0
5
+ platforms: [linux, macos, windows]
6
+ metadata:
7
+ hermes:
8
+ tags: [pay-sh, x402, solana, payments, usdc, apis, mcp, clawpump]
9
+ related_skills: [clawpump, mcp]
10
+ ---
11
+
12
+ # Pay.sh (x402 paid APIs) — paid by the ClawPump wallet
13
+
14
+ Pay.sh is a catalog of APIs gated by stablecoin payments instead of accounts
15
+ and keys: call an endpoint, get HTTP 402 with a price, pay in USDC, get the
16
+ response. ClawPump pays these **from the agent's own custodial wallet** — there
17
+ is no separate wallet to create or fund.
18
+
19
+ ## Use the ClawPump MCP tools — nothing else
20
+
21
+ These come from the ClawPump MCP (`mcp_clawpump_*` / `mcp_clawpump-stdio_*`):
22
+
23
+ - `pay_sh_search` — find providers (free)
24
+ - `pay_sh_provider_details` — endpoints + per-call price for one provider (free)
25
+ - `pay_sh_prepare_call` — balance preflight + payment preview + a 10-minute
26
+ approval code; **pays nothing**
27
+ - `pay_sh_execute_approved` — pays from the agent wallet via x402 and returns
28
+ the response; needs the approval code + `confirm_payment: true`
29
+
30
+ ## ⛔ Never do this
31
+
32
+ - **Do NOT run the `pay` CLI** (`npx @solana/pay …`) — `pay setup`,
33
+ `pay account new`, `pay topup`, `pay curl`, etc. That creates a *separate
34
+ local wallet*, which is exactly what we are avoiding. The user wants the
35
+ **ClawPump agent wallet** to pay.
36
+ - **Do NOT** create, fund, or transfer to any local/external pay wallet for
37
+ this. No `wallet_transfer` "allowance" hop either.
38
+ - If the ClawPump pay_sh tools are missing, tell the user to enable them
39
+ (`hermes mcp configure clawpump`, opt in `pay_sh_execute_approved`) and that
40
+ the agent needs the `x402` skill — do **not** fall back to the CLI.
41
+
42
+ ## Requirement: the `x402` skill
43
+
44
+ `pay_sh_prepare_call` / `pay_sh_execute_approved` require the ClawPump agent to
45
+ have the **`x402`** skill enabled. If a call is rejected for capability, enable
46
+ it with `update_agent` (`enabled_skills` += `x402`), then retry — never reach
47
+ for the CLI.
48
+
49
+ ## ⚠️ Spending rules
50
+
51
+ `pay_sh_execute_approved` spends real USDC. Before it:
52
+
53
+ 1. Get the price first — `pay_sh_provider_details` / the `pay_sh_prepare_call`
54
+ preview include per-call pricing.
55
+ 2. Tell the user the exact endpoint and price; wait for a clear yes.
56
+ 3. Only then call `pay_sh_execute_approved` with the approval code and
57
+ `confirm_payment: true`. Never loop paid calls without telling the user the
58
+ total.
59
+ 4. Report what was spent and the result.
60
+
61
+ ## Pattern
62
+
63
+ `pay_sh_search` → `pay_sh_provider_details` (price) → quote it to the user →
64
+ `pay_sh_prepare_call` → (user approves) → `pay_sh_execute_approved`. All paid
65
+ from the agent's ClawPump wallet. See the `clawpump` skill for the full tool
66
+ reference.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@clawpump/claw-agent",
3
- "version": "0.1.1",
3
+ "version": "0.1.3",
4
4
  "publishConfig": {
5
5
  "access": "public"
6
6
  },