@pincerpay/mcp 0.1.1 → 0.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (75) hide show
  1. package/README.md +51 -4
  2. package/dist/client.d.ts +50 -1
  3. package/dist/client.d.ts.map +1 -1
  4. package/dist/client.js +111 -4
  5. package/dist/client.js.map +1 -1
  6. package/dist/prompts/index.d.ts.map +1 -1
  7. package/dist/prompts/index.js +4 -0
  8. package/dist/prompts/index.js.map +1 -1
  9. package/dist/prompts/manage-paywalls.d.ts +3 -0
  10. package/dist/prompts/manage-paywalls.d.ts.map +1 -0
  11. package/dist/prompts/manage-paywalls.js +49 -0
  12. package/dist/prompts/manage-paywalls.js.map +1 -0
  13. package/dist/prompts/monitor-payments.d.ts +3 -0
  14. package/dist/prompts/monitor-payments.d.ts.map +1 -0
  15. package/dist/prompts/monitor-payments.js +50 -0
  16. package/dist/prompts/monitor-payments.js.map +1 -0
  17. package/dist/server.d.ts.map +1 -1
  18. package/dist/server.js +11 -2
  19. package/dist/server.js.map +1 -1
  20. package/dist/tools/check-health.d.ts +4 -0
  21. package/dist/tools/check-health.d.ts.map +1 -0
  22. package/dist/tools/check-health.js +29 -0
  23. package/dist/tools/check-health.js.map +1 -0
  24. package/dist/tools/create-paywall.d.ts +4 -0
  25. package/dist/tools/create-paywall.d.ts.map +1 -0
  26. package/dist/tools/create-paywall.js +51 -0
  27. package/dist/tools/create-paywall.js.map +1 -0
  28. package/dist/tools/delete-paywall.d.ts +4 -0
  29. package/dist/tools/delete-paywall.d.ts.map +1 -0
  30. package/dist/tools/delete-paywall.js +32 -0
  31. package/dist/tools/delete-paywall.js.map +1 -0
  32. package/dist/tools/get-merchant-profile.d.ts +4 -0
  33. package/dist/tools/get-merchant-profile.d.ts.map +1 -0
  34. package/dist/tools/get-merchant-profile.js +27 -0
  35. package/dist/tools/get-merchant-profile.js.map +1 -0
  36. package/dist/tools/get-metrics.d.ts +4 -0
  37. package/dist/tools/get-metrics.d.ts.map +1 -0
  38. package/dist/tools/get-metrics.js +29 -0
  39. package/dist/tools/get-metrics.js.map +1 -0
  40. package/dist/tools/index.d.ts.map +1 -1
  41. package/dist/tools/index.js +35 -3
  42. package/dist/tools/index.js.map +1 -1
  43. package/dist/tools/list-agents.d.ts +4 -0
  44. package/dist/tools/list-agents.d.ts.map +1 -0
  45. package/dist/tools/list-agents.js +37 -0
  46. package/dist/tools/list-agents.js.map +1 -0
  47. package/dist/tools/list-paywalls.d.ts +4 -0
  48. package/dist/tools/list-paywalls.d.ts.map +1 -0
  49. package/dist/tools/list-paywalls.js +37 -0
  50. package/dist/tools/list-paywalls.js.map +1 -0
  51. package/dist/tools/list-transactions.d.ts +4 -0
  52. package/dist/tools/list-transactions.d.ts.map +1 -0
  53. package/dist/tools/list-transactions.js +53 -0
  54. package/dist/tools/list-transactions.js.map +1 -0
  55. package/dist/tools/list-webhooks.d.ts +4 -0
  56. package/dist/tools/list-webhooks.d.ts.map +1 -0
  57. package/dist/tools/list-webhooks.js +41 -0
  58. package/dist/tools/list-webhooks.js.map +1 -0
  59. package/dist/tools/retry-webhook.d.ts +4 -0
  60. package/dist/tools/retry-webhook.d.ts.map +1 -0
  61. package/dist/tools/retry-webhook.js +32 -0
  62. package/dist/tools/retry-webhook.js.map +1 -0
  63. package/dist/tools/update-agent.d.ts +4 -0
  64. package/dist/tools/update-agent.d.ts.map +1 -0
  65. package/dist/tools/update-agent.js +48 -0
  66. package/dist/tools/update-agent.js.map +1 -0
  67. package/dist/tools/update-paywall.d.ts +4 -0
  68. package/dist/tools/update-paywall.d.ts.map +1 -0
  69. package/dist/tools/update-paywall.js +47 -0
  70. package/dist/tools/update-paywall.js.map +1 -0
  71. package/dist/tools/verify-payment.d.ts +4 -0
  72. package/dist/tools/verify-payment.d.ts.map +1 -0
  73. package/dist/tools/verify-payment.js +56 -0
  74. package/dist/tools/verify-payment.js.map +1 -0
  75. package/package.json +2 -2
package/README.md CHANGED
@@ -77,17 +77,62 @@ Add via the Cascade MCP panel or `mcp.json`:
77
77
  npx @pincerpay/mcp --transport=http --port=3100 --api-key=pp_live_your_key
78
78
  ```
79
79
 
80
- ## Tools
80
+ ## Tools (20)
81
+
82
+ ### Monitoring & Discovery
81
83
 
82
84
  | Tool | Description | Auth Required |
83
85
  |------|-------------|:---:|
84
86
  | `list-supported-chains` | List supported chains and USDC configs | No |
85
87
  | `estimate-gas-cost` | Estimate gas fees per chain | No |
88
+ | `check-facilitator-health` | Check facilitator connectivity and worker status | No |
89
+ | `get-settlement-metrics` | Fetch performance metrics (latency, counters, error rates) | No |
90
+
91
+ ### Operations
92
+
93
+ | Tool | Description | Auth Required |
94
+ |------|-------------|:---:|
95
+ | `check-transaction-status` | Query transaction status by hash/signature | Yes |
96
+ | `verify-payment` | Dry-run payment validation without broadcasting | Yes |
97
+ | `list-transactions` | List transactions with filtering and pagination | Yes |
98
+
99
+ ### Paywall CRUD
100
+
101
+ | Tool | Description | Auth Required |
102
+ |------|-------------|:---:|
103
+ | `list-paywalls` | List paywalled endpoints | Yes |
104
+ | `create-paywall` | Create a new paywalled endpoint | Yes |
105
+ | `update-paywall` | Update paywall price, status, or chains | Yes |
106
+ | `delete-paywall` | Permanently delete a paywall | Yes |
107
+
108
+ ### Agent Management
109
+
110
+ | Tool | Description | Auth Required |
111
+ |------|-------------|:---:|
112
+ | `list-agents` | List agents that have interacted with your account | Yes |
113
+ | `update-agent` | Update agent name, status, or spending limits | Yes |
114
+
115
+ ### Webhook Observability
116
+
117
+ | Tool | Description | Auth Required |
118
+ |------|-------------|:---:|
119
+ | `list-webhooks` | List webhook delivery attempts | Yes |
120
+ | `retry-webhook` | Retry a failed webhook delivery | Yes |
121
+
122
+ ### Account
123
+
124
+ | Tool | Description | Auth Required |
125
+ |------|-------------|:---:|
126
+ | `get-merchant-profile` | Fetch merchant profile and configuration | Yes |
127
+
128
+ ### Scaffolding & Validation
129
+
130
+ | Tool | Description | Auth Required |
131
+ |------|-------------|:---:|
86
132
  | `validate-payment-config` | Validate merchant config with route pattern checks | No |
87
133
  | `scaffold-x402-middleware` | Generate Express/Hono/Next.js middleware | No |
88
134
  | `scaffold-agent-client` | Generate agent fetch wrapper with spending policies | No |
89
135
  | `generate-ucp-manifest` | Create commerce discovery manifest | No |
90
- | `check-transaction-status` | Query transaction status | Yes |
91
136
 
92
137
  ## Resources
93
138
 
@@ -107,7 +152,7 @@ npx @pincerpay/mcp --transport=http --port=3100 --api-key=pp_live_your_key
107
152
  | Troubleshooting | `docs://pincerpay/troubleshooting` | Common issues table, devnet funding, debugging tips |
108
153
  | Reference | `docs://pincerpay/reference` | Chain shorthands, USDC amounts, package exports, API methods |
109
154
 
110
- ## Prompts
155
+ ## Prompts (6)
111
156
 
112
157
  | Prompt | Description |
113
158
  |--------|-------------|
@@ -115,6 +160,8 @@ npx @pincerpay/mcp --transport=http --port=3100 --api-key=pp_live_your_key
115
160
  | `integrate-merchant` | Step-by-step merchant SDK integration (Express, Hono, or Next.js) |
116
161
  | `integrate-agent` | Agent SDK setup with spending policies and gas estimates |
117
162
  | `debug-transaction` | Transaction troubleshooting by hash/signature |
163
+ | `manage-paywalls` | Paywall management — list, create, update, delete, or review configuration |
164
+ | `monitor-payments` | Payment monitoring — overview, failure investigation, pending transaction analysis |
118
165
 
119
166
  ## CLI Options
120
167
 
@@ -129,7 +176,7 @@ npx @pincerpay/mcp --transport=http --port=3100 --api-key=pp_live_your_key
129
176
 
130
177
  Get your API key from [pincerpay.com/dashboard/settings](https://pincerpay.com/dashboard/settings).
131
178
 
132
- Developer tools (scaffolding, gas estimates, chain listing, config validation) work without an API key. Operations tools (transaction status) require one.
179
+ Developer tools (scaffolding, gas estimates, chain listing, config validation, health checks) work without an API key. Operations tools (transactions, paywalls, agents, webhooks, merchant profile) require one.
133
180
 
134
181
  ## License
135
182
 
package/dist/client.d.ts CHANGED
@@ -20,9 +20,58 @@ export declare class FacilitatorClient {
20
20
  */
21
21
  requireAuth(): void;
22
22
  request<T>(path: string, body?: unknown): Promise<T>;
23
+ requestWithMethod<T>(method: "GET" | "POST" | "PUT" | "DELETE", path: string, body?: unknown): Promise<T>;
23
24
  getSupported(): Promise<unknown>;
24
- getStatus(txHash: string): Promise<unknown>;
25
25
  getHealth(): Promise<unknown>;
26
+ getMetrics(): Promise<unknown>;
26
27
  getOpenApiSpec(): Promise<unknown>;
28
+ getStatus(txHash: string): Promise<unknown>;
29
+ verifyPayment(paymentPayload: unknown, paymentRequirements: unknown): Promise<unknown>;
30
+ listTransactions(params?: {
31
+ limit?: number;
32
+ offset?: number;
33
+ status?: string;
34
+ chain?: string;
35
+ from?: string;
36
+ to?: string;
37
+ agent?: string;
38
+ }): Promise<unknown>;
39
+ listPaywalls(params?: {
40
+ limit?: number;
41
+ offset?: number;
42
+ active?: boolean;
43
+ }): Promise<unknown>;
44
+ createPaywall(data: {
45
+ endpointPattern: string;
46
+ amount: string;
47
+ description?: string;
48
+ chains?: string[];
49
+ }): Promise<unknown>;
50
+ updatePaywall(id: string, data: {
51
+ amount?: string;
52
+ description?: string;
53
+ chains?: string[];
54
+ isActive?: boolean;
55
+ }): Promise<unknown>;
56
+ deletePaywall(id: string): Promise<void>;
57
+ listAgents(params?: {
58
+ limit?: number;
59
+ offset?: number;
60
+ status?: string;
61
+ }): Promise<unknown>;
62
+ updateAgent(id: string, data: {
63
+ name?: string;
64
+ status?: string;
65
+ maxPerTransaction?: string;
66
+ maxPerDay?: string;
67
+ }): Promise<unknown>;
68
+ listWebhooks(params?: {
69
+ limit?: number;
70
+ offset?: number;
71
+ status?: string;
72
+ event?: string;
73
+ }): Promise<unknown>;
74
+ retryWebhook(id: string): Promise<unknown>;
75
+ getMerchantProfile(): Promise<unknown>;
27
76
  }
28
77
  //# sourceMappingURL=client.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAMA,MAAM,WAAW,uBAAuB;IACtC,qDAAqD;IACrD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,sEAAsE;IACtE,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED;;;;GAIG;AACH,qBAAa,iBAAiB;IAC5B,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;gBAEb,MAAM,EAAE,uBAAuB;IAK3C,IAAI,eAAe,IAAI,OAAO,CAE7B;IAED;;;OAGG;IACH,WAAW,IAAI,IAAI;IASb,OAAO,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,CAAC,CAAC;IAuBpD,YAAY,IAAI,OAAO,CAAC,OAAO,CAAC;IAIhC,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAK3C,SAAS,IAAI,OAAO,CAAC,OAAO,CAAC;IAI7B,cAAc,IAAI,OAAO,CAAC,OAAO,CAAC;CAGzC"}
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
package/dist/client.js CHANGED
@@ -43,18 +43,125 @@ export class FacilitatorClient {
43
43
  }
44
44
  return res.json();
45
45
  }
46
+ async requestWithMethod(method, path, body) {
47
+ const url = `${this.facilitatorUrl}${path}`;
48
+ const headers = {
49
+ "Content-Type": "application/json",
50
+ };
51
+ if (this.apiKey) {
52
+ headers[API_KEY_HEADER] = this.apiKey;
53
+ }
54
+ const res = await fetch(url, {
55
+ method,
56
+ headers,
57
+ body: body ? JSON.stringify(body) : undefined,
58
+ });
59
+ if (res.status === 204) {
60
+ return undefined;
61
+ }
62
+ if (!res.ok) {
63
+ const text = await res.text().catch(() => "Unknown error");
64
+ throw new Error(`Facilitator ${method} ${path} failed (${res.status}): ${text}`);
65
+ }
66
+ return res.json();
67
+ }
68
+ // ─── Discovery / Health ───
46
69
  async getSupported() {
47
70
  return this.request(FACILITATOR_ROUTES.supported);
48
71
  }
49
- async getStatus(txHash) {
50
- this.requireAuth();
51
- return this.request(`${FACILITATOR_ROUTES.status}/${txHash}`);
52
- }
53
72
  async getHealth() {
54
73
  return this.request(FACILITATOR_ROUTES.health);
55
74
  }
75
+ async getMetrics() {
76
+ return this.request("/v1/metrics");
77
+ }
56
78
  async getOpenApiSpec() {
57
79
  return this.request("/openapi.json");
58
80
  }
81
+ // ─── Transaction Operations ───
82
+ async getStatus(txHash) {
83
+ this.requireAuth();
84
+ return this.request(`${FACILITATOR_ROUTES.status}/${txHash}`);
85
+ }
86
+ async verifyPayment(paymentPayload, paymentRequirements) {
87
+ this.requireAuth();
88
+ return this.request(FACILITATOR_ROUTES.verify, { paymentPayload, paymentRequirements });
89
+ }
90
+ async listTransactions(params) {
91
+ this.requireAuth();
92
+ const query = new URLSearchParams();
93
+ if (params) {
94
+ for (const [k, v] of Object.entries(params)) {
95
+ if (v !== undefined)
96
+ query.set(k, String(v));
97
+ }
98
+ }
99
+ const qs = query.toString();
100
+ return this.request(`/v1/transactions${qs ? `?${qs}` : ""}`);
101
+ }
102
+ // ─── Paywall CRUD ───
103
+ async listPaywalls(params) {
104
+ this.requireAuth();
105
+ const query = new URLSearchParams();
106
+ if (params) {
107
+ for (const [k, v] of Object.entries(params)) {
108
+ if (v !== undefined)
109
+ query.set(k, String(v));
110
+ }
111
+ }
112
+ const qs = query.toString();
113
+ return this.request(`/v1/paywalls${qs ? `?${qs}` : ""}`);
114
+ }
115
+ async createPaywall(data) {
116
+ this.requireAuth();
117
+ return this.requestWithMethod("POST", "/v1/paywalls", data);
118
+ }
119
+ async updatePaywall(id, data) {
120
+ this.requireAuth();
121
+ return this.requestWithMethod("PUT", `/v1/paywalls/${id}`, data);
122
+ }
123
+ async deletePaywall(id) {
124
+ this.requireAuth();
125
+ await this.requestWithMethod("DELETE", `/v1/paywalls/${id}`);
126
+ }
127
+ // ─── Agent Management ───
128
+ async listAgents(params) {
129
+ this.requireAuth();
130
+ const query = new URLSearchParams();
131
+ if (params) {
132
+ for (const [k, v] of Object.entries(params)) {
133
+ if (v !== undefined)
134
+ query.set(k, String(v));
135
+ }
136
+ }
137
+ const qs = query.toString();
138
+ return this.request(`/v1/agents${qs ? `?${qs}` : ""}`);
139
+ }
140
+ async updateAgent(id, data) {
141
+ this.requireAuth();
142
+ return this.requestWithMethod("PUT", `/v1/agents/${id}`, data);
143
+ }
144
+ // ─── Webhook Observability ───
145
+ async listWebhooks(params) {
146
+ this.requireAuth();
147
+ const query = new URLSearchParams();
148
+ if (params) {
149
+ for (const [k, v] of Object.entries(params)) {
150
+ if (v !== undefined)
151
+ query.set(k, String(v));
152
+ }
153
+ }
154
+ const qs = query.toString();
155
+ return this.request(`/v1/webhooks${qs ? `?${qs}` : ""}`);
156
+ }
157
+ async retryWebhook(id) {
158
+ this.requireAuth();
159
+ return this.requestWithMethod("POST", `/v1/webhooks/${id}/retry`);
160
+ }
161
+ // ─── Merchant Profile ───
162
+ async getMerchantProfile() {
163
+ this.requireAuth();
164
+ return this.request("/v1/merchant");
165
+ }
59
166
  }
60
167
  //# sourceMappingURL=client.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,uBAAuB,EACvB,kBAAkB,EAClB,cAAc,GACf,MAAM,iBAAiB,CAAC;AASzB;;;;GAIG;AACH,MAAM,OAAO,iBAAiB;IACnB,cAAc,CAAS;IACvB,MAAM,CAAU;IAEzB,YAAY,MAA+B;QACzC,IAAI,CAAC,cAAc,GAAG,MAAM,CAAC,cAAc,IAAI,uBAAuB,CAAC;QACvE,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;IAC9B,CAAC;IAED,IAAI,eAAe;QACjB,OAAO,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC;IACvB,CAAC;IAED;;;OAGG;IACH,WAAW;QACT,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;YACjB,MAAM,IAAI,KAAK,CACb,+CAA+C;gBAC7C,iFAAiF,CACpF,CAAC;QACJ,CAAC;IACH,CAAC;IAED,KAAK,CAAC,OAAO,CAAI,IAAY,EAAE,IAAc;QAC3C,MAAM,GAAG,GAAG,GAAG,IAAI,CAAC,cAAc,GAAG,IAAI,EAAE,CAAC;QAC5C,MAAM,OAAO,GAA2B;YACtC,cAAc,EAAE,kBAAkB;SACnC,CAAC;QACF,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAChB,OAAO,CAAC,cAAc,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC;QACxC,CAAC;QAED,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE;YAC3B,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK;YAC7B,OAAO;YACP,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS;SAC9C,CAAC,CAAC;QAEH,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;YACZ,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,eAAe,CAAC,CAAC;YAC3D,MAAM,IAAI,KAAK,CAAC,eAAe,IAAI,YAAY,GAAG,CAAC,MAAM,MAAM,IAAI,EAAE,CAAC,CAAC;QACzE,CAAC;QAED,OAAO,GAAG,CAAC,IAAI,EAAgB,CAAC;IAClC,CAAC;IAED,KAAK,CAAC,YAAY;QAChB,OAAO,IAAI,CAAC,OAAO,CAAC,kBAAkB,CAAC,SAAS,CAAC,CAAC;IACpD,CAAC;IAED,KAAK,CAAC,SAAS,CAAC,MAAc;QAC5B,IAAI,CAAC,WAAW,EAAE,CAAC;QACnB,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,kBAAkB,CAAC,MAAM,IAAI,MAAM,EAAE,CAAC,CAAC;IAChE,CAAC;IAED,KAAK,CAAC,SAAS;QACb,OAAO,IAAI,CAAC,OAAO,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC;IACjD,CAAC;IAED,KAAK,CAAC,cAAc;QAClB,OAAO,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC;IACvC,CAAC;CACF"}
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/prompts/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAMzE,wBAAgB,eAAe,CAAC,MAAM,EAAE,SAAS,QAKhD"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/prompts/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAQzE,wBAAgB,eAAe,CAAC,MAAM,EAAE,SAAS,QAOhD"}
@@ -2,10 +2,14 @@ import { registerGetStartedPrompt } from "./get-started.js";
2
2
  import { registerMerchantPrompt } from "./integrate-merchant.js";
3
3
  import { registerAgentPrompt } from "./integrate-agent.js";
4
4
  import { registerDebugPrompt } from "./debug-transaction.js";
5
+ import { registerManagePaywallsPrompt } from "./manage-paywalls.js";
6
+ import { registerMonitorPaymentsPrompt } from "./monitor-payments.js";
5
7
  export function registerPrompts(server) {
6
8
  registerGetStartedPrompt(server);
7
9
  registerMerchantPrompt(server);
8
10
  registerAgentPrompt(server);
9
11
  registerDebugPrompt(server);
12
+ registerManagePaywallsPrompt(server);
13
+ registerMonitorPaymentsPrompt(server);
10
14
  }
11
15
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/prompts/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,wBAAwB,EAAE,MAAM,kBAAkB,CAAC;AAC5D,OAAO,EAAE,sBAAsB,EAAE,MAAM,yBAAyB,CAAC;AACjE,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAE7D,MAAM,UAAU,eAAe,CAAC,MAAiB;IAC/C,wBAAwB,CAAC,MAAM,CAAC,CAAC;IACjC,sBAAsB,CAAC,MAAM,CAAC,CAAC;IAC/B,mBAAmB,CAAC,MAAM,CAAC,CAAC;IAC5B,mBAAmB,CAAC,MAAM,CAAC,CAAC;AAC9B,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/prompts/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,wBAAwB,EAAE,MAAM,kBAAkB,CAAC;AAC5D,OAAO,EAAE,sBAAsB,EAAE,MAAM,yBAAyB,CAAC;AACjE,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAC7D,OAAO,EAAE,4BAA4B,EAAE,MAAM,sBAAsB,CAAC;AACpE,OAAO,EAAE,6BAA6B,EAAE,MAAM,uBAAuB,CAAC;AAEtE,MAAM,UAAU,eAAe,CAAC,MAAiB;IAC/C,wBAAwB,CAAC,MAAM,CAAC,CAAC;IACjC,sBAAsB,CAAC,MAAM,CAAC,CAAC;IAC/B,mBAAmB,CAAC,MAAM,CAAC,CAAC;IAC5B,mBAAmB,CAAC,MAAM,CAAC,CAAC;IAC5B,4BAA4B,CAAC,MAAM,CAAC,CAAC;IACrC,6BAA6B,CAAC,MAAM,CAAC,CAAC;AACxC,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ export declare function registerManagePaywallsPrompt(server: McpServer): void;
3
+ //# sourceMappingURL=manage-paywalls.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manage-paywalls.d.ts","sourceRoot":"","sources":["../../src/prompts/manage-paywalls.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEzE,wBAAgB,4BAA4B,CAAC,MAAM,EAAE,SAAS,QAoD7D"}
@@ -0,0 +1,49 @@
1
+ import { z } from "zod";
2
+ export function registerManagePaywallsPrompt(server) {
3
+ server.prompt("manage-paywalls", "Manage paywalled endpoints: list, create, update, delete, or review configuration. " +
4
+ "Orchestrates the paywall CRUD tools for your merchant account.", {
5
+ action: z
6
+ .enum(["list", "create", "update", "delete", "review"])
7
+ .describe("What to do with paywalls."),
8
+ }, ({ action }) => {
9
+ const instructions = {
10
+ list: `Please list all my paywalled endpoints using the list-paywalls tool.
11
+ Show them in a clear table format with: endpoint pattern, USDC price, active status, and creation date.
12
+ If I have no paywalls, suggest creating one.`,
13
+ create: `I want to create a new paywalled endpoint.
14
+ Ask me for:
15
+ 1. The endpoint pattern (HTTP method + path, e.g. "GET /api/weather")
16
+ 2. The USDC price (e.g. "0.01")
17
+ 3. An optional description
18
+ 4. Whether to restrict to specific chains (or use my merchant defaults)
19
+
20
+ Then use the create-paywall tool to create it.
21
+ After creation, suggest using validate-payment-config to verify the setup.`,
22
+ update: `I want to update an existing paywall.
23
+ First, use list-paywalls to show my current paywalls.
24
+ Then ask which one to update and what to change (price, description, chains, or active status).
25
+ Use the update-paywall tool to apply changes.`,
26
+ delete: `I want to delete a paywall.
27
+ First, use list-paywalls to show my current paywalls.
28
+ Then ask which one to delete. Warn that this is permanent — suggest disabling (isActive=false) via update-paywall as an alternative.
29
+ If confirmed, use the delete-paywall tool.`,
30
+ review: `Please review my paywall configuration for best practices.
31
+ 1. Use list-paywalls to fetch all paywalls
32
+ 2. Check for: unreasonably low prices (< $0.001), inactive paywalls that might be forgotten, missing descriptions
33
+ 3. Use get-merchant-profile to check my supported chains
34
+ 4. Suggest improvements and warn about any issues`,
35
+ };
36
+ return {
37
+ messages: [
38
+ {
39
+ role: "user",
40
+ content: {
41
+ type: "text",
42
+ text: instructions[action],
43
+ },
44
+ },
45
+ ],
46
+ };
47
+ });
48
+ }
49
+ //# sourceMappingURL=manage-paywalls.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manage-paywalls.js","sourceRoot":"","sources":["../../src/prompts/manage-paywalls.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,MAAM,UAAU,4BAA4B,CAAC,MAAiB;IAC5D,MAAM,CAAC,MAAM,CACX,iBAAiB,EACjB,qFAAqF;QACnF,gEAAgE,EAClE;QACE,MAAM,EAAE,CAAC;aACN,IAAI,CAAC,CAAC,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;aACtD,QAAQ,CAAC,2BAA2B,CAAC;KACzC,EACD,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE;QACb,MAAM,YAAY,GAA2B;YAC3C,IAAI,EAAE;;6CAE+B;YACrC,MAAM,EAAE;;;;;;;;2EAQ2D;YACnE,MAAM,EAAE;;;8CAG8B;YACtC,MAAM,EAAE;;;2CAG2B;YACnC,MAAM,EAAE;;;;kDAIkC;SAC3C,CAAC;QAEF,OAAO;YACL,QAAQ,EAAE;gBACR;oBACE,IAAI,EAAE,MAAe;oBACrB,OAAO,EAAE;wBACP,IAAI,EAAE,MAAe;wBACrB,IAAI,EAAE,YAAY,CAAC,MAAM,CAAC;qBAC3B;iBACF;aACF;SACF,CAAC;IACJ,CAAC,CACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ export declare function registerMonitorPaymentsPrompt(server: McpServer): void;
3
+ //# sourceMappingURL=monitor-payments.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"monitor-payments.d.ts","sourceRoot":"","sources":["../../src/prompts/monitor-payments.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEzE,wBAAgB,6BAA6B,CAAC,MAAM,EAAE,SAAS,QAqD9D"}
@@ -0,0 +1,50 @@
1
+ import { z } from "zod";
2
+ export function registerMonitorPaymentsPrompt(server) {
3
+ server.prompt("monitor-payments", "Monitor payment activity: view transaction history, check settlement metrics, " +
4
+ "and investigate failures or pending payments.", {
5
+ timeframe: z
6
+ .enum(["today", "week", "month"])
7
+ .default("today")
8
+ .describe("Time period to focus on."),
9
+ focus: z
10
+ .enum(["overview", "failures", "pending"])
11
+ .default("overview")
12
+ .describe("What aspect to focus on."),
13
+ }, ({ timeframe, focus }) => {
14
+ const focusInstructions = {
15
+ overview: `Give me an overview of my payment activity for ${timeframe}:
16
+ 1. Use get-settlement-metrics to show overall performance (settlement count, latency, error rate)
17
+ 2. Use list-transactions to show recent transactions
18
+ 3. Summarize: total volume, success rate, most active chains, and any concerning patterns
19
+ 4. If there are failed transactions, briefly note them`,
20
+ failures: `Help me investigate failed payments for ${timeframe}:
21
+ 1. Use list-transactions with status=failed to find failures
22
+ 2. For each failure, analyze the likely cause:
23
+ - Insufficient USDC balance
24
+ - Wrong chain/network mismatch
25
+ - Transaction timeout
26
+ - RPC connectivity issues
27
+ 3. Use check-facilitator-health to verify the facilitator is healthy
28
+ 4. Check list-webhooks with status=failed to see if webhook notifications also failed
29
+ 5. Suggest remediation steps`,
30
+ pending: `Show me pending/stuck payments for ${timeframe}:
31
+ 1. Use list-transactions with status=pending to find stuck transactions
32
+ 2. Also check status=mempool for transactions waiting for confirmation
33
+ 3. Use get-settlement-metrics to see if latency is elevated
34
+ 4. Use check-facilitator-health to check worker status (confirmation worker)
35
+ 5. For each pending transaction, explain how long it's been waiting and whether it's concerning`,
36
+ };
37
+ return {
38
+ messages: [
39
+ {
40
+ role: "user",
41
+ content: {
42
+ type: "text",
43
+ text: focusInstructions[focus],
44
+ },
45
+ },
46
+ ],
47
+ };
48
+ });
49
+ }
50
+ //# sourceMappingURL=monitor-payments.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"monitor-payments.js","sourceRoot":"","sources":["../../src/prompts/monitor-payments.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,MAAM,UAAU,6BAA6B,CAAC,MAAiB;IAC7D,MAAM,CAAC,MAAM,CACX,kBAAkB,EAClB,gFAAgF;QAC9E,+CAA+C,EACjD;QACE,SAAS,EAAE,CAAC;aACT,IAAI,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;aAChC,OAAO,CAAC,OAAO,CAAC;aAChB,QAAQ,CAAC,0BAA0B,CAAC;QACvC,KAAK,EAAE,CAAC;aACL,IAAI,CAAC,CAAC,UAAU,EAAE,UAAU,EAAE,SAAS,CAAC,CAAC;aACzC,OAAO,CAAC,UAAU,CAAC;aACnB,QAAQ,CAAC,0BAA0B,CAAC;KACxC,EACD,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,EAAE,EAAE;QACvB,MAAM,iBAAiB,GAA2B;YAChD,QAAQ,EAAE,kDAAkD,SAAS;;;;uDAItB;YAC/C,QAAQ,EAAE,2CAA2C,SAAS;;;;;;;;;6BASzC;YACrB,OAAO,EAAE,sCAAsC,SAAS;;;;;gGAKgC;SACzF,CAAC;QAEF,OAAO;YACL,QAAQ,EAAE;gBACR;oBACE,IAAI,EAAE,MAAe;oBACrB,OAAO,EAAE;wBACP,IAAI,EAAE,MAAe;wBACrB,IAAI,EAAE,iBAAiB,CAAC,KAAK,CAAC;qBAC/B;iBACF;aACF;SACF,CAAC;IACJ,CAAC,CACF,CAAC;AACJ,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAMpE,MAAM,WAAW,kBAAkB;IACjC,qDAAqD;IACrD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,sEAAsE;IACtE,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED;;;;;;;;GAQG;AACH,wBAAgB,wBAAwB,CAAC,MAAM,GAAE,kBAAuB,aAuCvE"}
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAMpE,MAAM,WAAW,kBAAkB;IACjC,qDAAqD;IACrD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,sEAAsE;IACtE,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED;;;;;;;;GAQG;AACH,wBAAgB,wBAAwB,CAAC,MAAM,GAAE,kBAAuB,aAgDvE"}
package/dist/server.js CHANGED
@@ -15,7 +15,7 @@ import { registerPrompts } from "./prompts/index.js";
15
15
  export function createPincerPayMcpServer(config = {}) {
16
16
  const server = new McpServer({
17
17
  name: "pincerpay",
18
- version: "0.1.0",
18
+ version: "0.4.0",
19
19
  }, {
20
20
  instructions: "PincerPay is an on-chain USDC payment gateway for AI agents — no card rails, " +
21
21
  "pure stablecoin settlement via the x402 protocol (HTTP 402). Solana is the primary " +
@@ -24,7 +24,16 @@ export function createPincerPayMcpServer(config = {}) {
24
24
  "- Merchant (accept payments): use the `integrate-merchant` prompt → scaffold-x402-middleware → validate-payment-config → generate-ucp-manifest\n" +
25
25
  "- Agent developer (make payments): use the `integrate-agent` prompt → scaffold-agent-client → estimate-gas-cost\n" +
26
26
  "- Unclear: use the `get-started` prompt to triage\n" +
27
- "- Debugging: use the `debug-transaction` prompt\n\n" +
27
+ "- Debugging: use the `debug-transaction` prompt\n" +
28
+ "- Paywall management: use the `manage-paywalls` prompt\n" +
29
+ "- Payment monitoring: use the `monitor-payments` prompt\n\n" +
30
+ "OPERATIONAL TOOLS (require API key):\n" +
31
+ "- Paywall CRUD: list-paywalls, create-paywall, update-paywall, delete-paywall\n" +
32
+ "- Transactions: list-transactions, check-transaction-status, verify-payment\n" +
33
+ "- Agents: list-agents, update-agent\n" +
34
+ "- Webhooks: list-webhooks, retry-webhook\n" +
35
+ "- Account: get-merchant-profile\n" +
36
+ "- Health: check-facilitator-health, get-settlement-metrics\n\n" +
28
37
  "KEY GOTCHAS to always warn about:\n" +
29
38
  "1. Route `price` uses human-readable USDC (\"0.01\"), but spending `policies` use base units with 6 decimals (\"10000\" = $0.01). Using \"0.10\" in a policy causes BigInt() to throw.\n" +
30
39
  "2. ESM required: \"type\": \"module\" in package.json — SDKs are ESM-only.\n" +
@@ -1 +1 @@
1
- {"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AASrD;;;;;;;;GAQG;AACH,MAAM,UAAU,wBAAwB,CAAC,SAA6B,EAAE;IACtE,MAAM,MAAM,GAAG,IAAI,SAAS,CAC1B;QACE,IAAI,EAAE,WAAW;QACjB,OAAO,EAAE,OAAO;KACjB,EACD;QACE,YAAY,EACV,+EAA+E;YAC/E,qFAAqF;YACrF,4DAA4D;YAC5D,uFAAuF;YACvF,kJAAkJ;YAClJ,mHAAmH;YACnH,qDAAqD;YACrD,qDAAqD;YACrD,qCAAqC;YACrC,0LAA0L;YAC1L,8EAA8E;YAC9E,uFAAuF;YACvF,qEAAqE;YACrE,+EAA+E;YAC/E,uFAAuF;QACzF,YAAY,EAAE;YACZ,OAAO,EAAE,EAAE;SACZ;KACF,CACF,CAAC;IAEF,MAAM,MAAM,GAAG,IAAI,iBAAiB,CAAC;QACnC,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,cAAc,EAAE,MAAM,CAAC,cAAc;KACtC,CAAC,CAAC;IAEH,aAAa,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC9B,iBAAiB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAClC,eAAe,CAAC,MAAM,CAAC,CAAC;IAExB,OAAO,MAAM,CAAC;AAChB,CAAC"}
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AASrD;;;;;;;;GAQG;AACH,MAAM,UAAU,wBAAwB,CAAC,SAA6B,EAAE;IACtE,MAAM,MAAM,GAAG,IAAI,SAAS,CAC1B;QACE,IAAI,EAAE,WAAW;QACjB,OAAO,EAAE,OAAO;KACjB,EACD;QACE,YAAY,EACV,+EAA+E;YAC/E,qFAAqF;YACrF,4DAA4D;YAC5D,uFAAuF;YACvF,kJAAkJ;YAClJ,mHAAmH;YACnH,qDAAqD;YACrD,mDAAmD;YACnD,0DAA0D;YAC1D,6DAA6D;YAC7D,wCAAwC;YACxC,iFAAiF;YACjF,+EAA+E;YAC/E,uCAAuC;YACvC,4CAA4C;YAC5C,mCAAmC;YACnC,gEAAgE;YAChE,qCAAqC;YACrC,0LAA0L;YAC1L,8EAA8E;YAC9E,uFAAuF;YACvF,qEAAqE;YACrE,+EAA+E;YAC/E,uFAAuF;QACzF,YAAY,EAAE;YACZ,OAAO,EAAE,EAAE;SACZ;KACF,CACF,CAAC;IAEF,MAAM,MAAM,GAAG,IAAI,iBAAiB,CAAC;QACnC,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,cAAc,EAAE,MAAM,CAAC,cAAc;KACtC,CAAC,CAAC;IAEH,aAAa,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC9B,iBAAiB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAClC,eAAe,CAAC,MAAM,CAAC,CAAC;IAExB,OAAO,MAAM,CAAC;AAChB,CAAC"}
@@ -0,0 +1,4 @@
1
+ import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ import type { FacilitatorClient } from "../client.js";
3
+ export declare function registerCheckHealth(server: McpServer, client: FacilitatorClient): void;
4
+ //# sourceMappingURL=check-health.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"check-health.d.ts","sourceRoot":"","sources":["../../src/tools/check-health.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAEtD,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,SAAS,EACjB,MAAM,EAAE,iBAAiB,QAgC1B"}
@@ -0,0 +1,29 @@
1
+ export function registerCheckHealth(server, client) {
2
+ server.tool("check-facilitator-health", "Check whether the PincerPay facilitator is reachable and healthy. " +
3
+ "Returns database status, worker health, uptime, and Kora (gasless) status. " +
4
+ "No API key required. Use this as the first troubleshooting step.", {}, async () => {
5
+ try {
6
+ const result = await client.getHealth();
7
+ return {
8
+ content: [
9
+ {
10
+ type: "text",
11
+ text: JSON.stringify(result, null, 2),
12
+ },
13
+ ],
14
+ };
15
+ }
16
+ catch (err) {
17
+ return {
18
+ content: [
19
+ {
20
+ type: "text",
21
+ text: `Failed to reach facilitator: ${err instanceof Error ? err.message : String(err)}`,
22
+ },
23
+ ],
24
+ isError: true,
25
+ };
26
+ }
27
+ });
28
+ }
29
+ //# sourceMappingURL=check-health.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"check-health.js","sourceRoot":"","sources":["../../src/tools/check-health.ts"],"names":[],"mappings":"AAGA,MAAM,UAAU,mBAAmB,CACjC,MAAiB,EACjB,MAAyB;IAEzB,MAAM,CAAC,IAAI,CACT,0BAA0B,EAC1B,oEAAoE;QAClE,6EAA6E;QAC7E,kEAAkE,EACpE,EAAE,EACF,KAAK,IAAI,EAAE;QACT,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,SAAS,EAAE,CAAC;YACxC,OAAO;gBACL,OAAO,EAAE;oBACP;wBACE,IAAI,EAAE,MAAe;wBACrB,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;qBACtC;iBACF;aACF,CAAC;QACJ,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO;gBACL,OAAO,EAAE;oBACP;wBACE,IAAI,EAAE,MAAe;wBACrB,IAAI,EAAE,gCAAgC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE;qBACzF;iBACF;gBACD,OAAO,EAAE,IAAI;aACd,CAAC;QACJ,CAAC;IACH,CAAC,CACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,4 @@
1
+ import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ import type { FacilitatorClient } from "../client.js";
3
+ export declare function registerCreatePaywall(server: McpServer, client: FacilitatorClient): void;
4
+ //# sourceMappingURL=create-paywall.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create-paywall.d.ts","sourceRoot":"","sources":["../../src/tools/create-paywall.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAqBtD,wBAAgB,qBAAqB,CACnC,MAAM,EAAE,SAAS,EACjB,MAAM,EAAE,iBAAiB,QAmC1B"}
@@ -0,0 +1,51 @@
1
+ import { z } from "zod";
2
+ const inputSchema = {
3
+ endpointPattern: z
4
+ .string()
5
+ .min(1)
6
+ .describe('HTTP method + path to paywall, e.g. "GET /api/weather".'),
7
+ amount: z
8
+ .string()
9
+ .min(1)
10
+ .describe('USDC price in human-readable format, e.g. "0.01".'),
11
+ description: z
12
+ .string()
13
+ .optional()
14
+ .describe("Optional description of what this endpoint provides."),
15
+ chains: z
16
+ .array(z.string())
17
+ .optional()
18
+ .describe("Override supported chains for this paywall. Omit to use merchant defaults."),
19
+ };
20
+ export function registerCreatePaywall(server, client) {
21
+ server.tool("create-paywall", "Create a new paywalled endpoint. Sets the USDC price and optional chain restrictions. " +
22
+ "The endpoint pattern must be unique per merchant. Requires a PincerPay API key.", inputSchema, async ({ endpointPattern, amount, description, chains }) => {
23
+ try {
24
+ client.requireAuth();
25
+ }
26
+ catch (err) {
27
+ return {
28
+ content: [{ type: "text", text: err instanceof Error ? err.message : String(err) }],
29
+ isError: true,
30
+ };
31
+ }
32
+ try {
33
+ const result = await client.createPaywall({
34
+ endpointPattern,
35
+ amount,
36
+ description,
37
+ chains,
38
+ });
39
+ return {
40
+ content: [{ type: "text", text: JSON.stringify(result, null, 2) }],
41
+ };
42
+ }
43
+ catch (err) {
44
+ return {
45
+ content: [{ type: "text", text: `Failed to create paywall: ${err instanceof Error ? err.message : String(err)}` }],
46
+ isError: true,
47
+ };
48
+ }
49
+ });
50
+ }
51
+ //# sourceMappingURL=create-paywall.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create-paywall.js","sourceRoot":"","sources":["../../src/tools/create-paywall.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB,MAAM,WAAW,GAAG;IAClB,eAAe,EAAE,CAAC;SACf,MAAM,EAAE;SACR,GAAG,CAAC,CAAC,CAAC;SACN,QAAQ,CAAC,yDAAyD,CAAC;IACtE,MAAM,EAAE,CAAC;SACN,MAAM,EAAE;SACR,GAAG,CAAC,CAAC,CAAC;SACN,QAAQ,CAAC,mDAAmD,CAAC;IAChE,WAAW,EAAE,CAAC;SACX,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CAAC,sDAAsD,CAAC;IACnE,MAAM,EAAE,CAAC;SACN,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;SACjB,QAAQ,EAAE;SACV,QAAQ,CAAC,4EAA4E,CAAC;CAC1F,CAAC;AAEF,MAAM,UAAU,qBAAqB,CACnC,MAAiB,EACjB,MAAyB;IAEzB,MAAM,CAAC,IAAI,CACT,gBAAgB,EAChB,wFAAwF;QACtF,iFAAiF,EACnF,WAAW,EACX,KAAK,EAAE,EAAE,eAAe,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,EAAE,EAAE;QACzD,IAAI,CAAC;YACH,MAAM,CAAC,WAAW,EAAE,CAAC;QACvB,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO;gBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC;gBAC5F,OAAO,EAAE,IAAI;aACd,CAAC;QACJ,CAAC;QAED,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,aAAa,CAAC;gBACxC,eAAe;gBACf,MAAM;gBACN,WAAW;gBACX,MAAM;aACP,CAAC,CAAC;YACH,OAAO;gBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC;aAC5E,CAAC;QACJ,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO;gBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,6BAA6B,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;gBAC3H,OAAO,EAAE,IAAI;aACd,CAAC;QACJ,CAAC;IACH,CAAC,CACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,4 @@
1
+ import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ import type { FacilitatorClient } from "../client.js";
3
+ export declare function registerDeletePaywall(server: McpServer, client: FacilitatorClient): void;
4
+ //# sourceMappingURL=delete-paywall.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"delete-paywall.d.ts","sourceRoot":"","sources":["../../src/tools/delete-paywall.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAMtD,wBAAgB,qBAAqB,CACnC,MAAM,EAAE,SAAS,EACjB,MAAM,EAAE,iBAAiB,QA+B1B"}