@useagentpay/mcp-server 0.1.2 → 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.
- package/README.md +124 -0
- package/dist/index.js +7 -9
- package/dist/index.js.map +1 -1
- package/package.json +2 -2
package/README.md
ADDED
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
# @useagentpay/mcp-server
|
|
2
|
+
|
|
3
|
+
MCP server for [AgentPay](https://github.com/kar69-96/useagentpay) — exposes the full payment lifecycle to any MCP-compatible AI host (Claude Desktop, Cursor, Claude Code, Windsurf).
|
|
4
|
+
|
|
5
|
+
8 tools, 3 resources, 3 prompts. Agents can propose purchases, wait for human approval, execute checkout, and retrieve receipts — all over the Model Context Protocol.
|
|
6
|
+
|
|
7
|
+
## Install & Run
|
|
8
|
+
|
|
9
|
+
```bash
|
|
10
|
+
npx @useagentpay/mcp-server # stdio (default)
|
|
11
|
+
npx @useagentpay/mcp-server --http # HTTP transport
|
|
12
|
+
```
|
|
13
|
+
|
|
14
|
+
Or via the AgentPay CLI:
|
|
15
|
+
```bash
|
|
16
|
+
agentpay mcp # stdio
|
|
17
|
+
agentpay mcp --http # HTTP
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
## Host Configuration
|
|
21
|
+
|
|
22
|
+
Add to your Claude Desktop, Cursor, or Claude Code config:
|
|
23
|
+
|
|
24
|
+
```json
|
|
25
|
+
{
|
|
26
|
+
"mcpServers": {
|
|
27
|
+
"agentpay": {
|
|
28
|
+
"command": "npx",
|
|
29
|
+
"args": ["@useagentpay/mcp-server"]
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
### With passphrase (for execute)
|
|
36
|
+
|
|
37
|
+
```json
|
|
38
|
+
{
|
|
39
|
+
"mcpServers": {
|
|
40
|
+
"agentpay": {
|
|
41
|
+
"command": "npx",
|
|
42
|
+
"args": ["@useagentpay/mcp-server"],
|
|
43
|
+
"env": {
|
|
44
|
+
"AGENTPAY_PASSPHRASE": "your-passphrase"
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
## Prerequisites
|
|
52
|
+
|
|
53
|
+
AgentPay must be set up before the MCP server can operate:
|
|
54
|
+
|
|
55
|
+
```bash
|
|
56
|
+
npm install -g @useagentpay/sdk
|
|
57
|
+
agentpay setup # encrypt & store credentials
|
|
58
|
+
agentpay budget --set 200
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
## Tools
|
|
62
|
+
|
|
63
|
+
| Tool | Description |
|
|
64
|
+
|------|-------------|
|
|
65
|
+
| `agentpay_status` | Check if setup is complete, balance, budget, pending count |
|
|
66
|
+
| `agentpay_check_balance` | Current balance and limits (call before proposing) |
|
|
67
|
+
| `agentpay_list_pending` | Pending transactions awaiting approval |
|
|
68
|
+
| `agentpay_propose_purchase` | Propose a new purchase (merchant, amount, description, url) |
|
|
69
|
+
| `agentpay_get_transaction` | Get transaction details by ID |
|
|
70
|
+
| `agentpay_wait_for_approval` | Long-poll until approved or rejected |
|
|
71
|
+
| `agentpay_execute_purchase` | Execute an approved purchase (requires passphrase config) |
|
|
72
|
+
| `agentpay_get_receipt` | Get receipt for a completed purchase |
|
|
73
|
+
|
|
74
|
+
## Resources
|
|
75
|
+
|
|
76
|
+
| URI | Description |
|
|
77
|
+
|-----|-------------|
|
|
78
|
+
| `agentpay://wallet` | Wallet balance and limits |
|
|
79
|
+
| `agentpay://transactions/{txId}` | Transaction details |
|
|
80
|
+
| `agentpay://audit-log` | Last 50 audit log entries |
|
|
81
|
+
|
|
82
|
+
## Prompts
|
|
83
|
+
|
|
84
|
+
| Name | Description |
|
|
85
|
+
|------|-------------|
|
|
86
|
+
| `buy` | Guided step-by-step purchase flow |
|
|
87
|
+
| `budget-check` | Balance and pending transaction summary |
|
|
88
|
+
| `purchase-status` | Recent transaction history |
|
|
89
|
+
|
|
90
|
+
## Typical Agent Flow
|
|
91
|
+
|
|
92
|
+
```
|
|
93
|
+
1. agentpay_status → verify setup is complete
|
|
94
|
+
2. agentpay_check_balance → confirm budget for purchase
|
|
95
|
+
3. agentpay_propose_purchase → create pending transaction
|
|
96
|
+
4. agentpay_wait_for_approval → wait for human to approve
|
|
97
|
+
5. agentpay_execute_purchase → run checkout via headless browser
|
|
98
|
+
6. agentpay_get_receipt → retrieve confirmation
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
## Passphrase Modes
|
|
102
|
+
|
|
103
|
+
The `execute_purchase` tool needs access to the vault passphrase. Three modes:
|
|
104
|
+
|
|
105
|
+
| Mode | Config | Description |
|
|
106
|
+
|------|--------|-------------|
|
|
107
|
+
| **env** | `AGENTPAY_PASSPHRASE` | Passphrase from environment variable |
|
|
108
|
+
| **server** | `AGENTPAY_PASSPHRASE_SERVER` | Fetch passphrase from a URL |
|
|
109
|
+
| **none** | Neither set | Read-only — propose/approve works, execute does not |
|
|
110
|
+
|
|
111
|
+
## Environment Variables
|
|
112
|
+
|
|
113
|
+
| Variable | Purpose | Default |
|
|
114
|
+
|----------|---------|---------|
|
|
115
|
+
| `AGENTPAY_PASSPHRASE` | Passphrase for execute (env mode) | — |
|
|
116
|
+
| `AGENTPAY_PASSPHRASE_SERVER` | URL to fetch passphrase (server mode) | — |
|
|
117
|
+
| `ANTHROPIC_API_KEY` | LLM API key for browser navigation | — |
|
|
118
|
+
| `AGENTPAY_HOME` | Override data directory | `~/.agentpay` |
|
|
119
|
+
| `MCP_TRANSPORT` | Set to `http` for HTTP transport | `stdio` |
|
|
120
|
+
| `MCP_HTTP_PORT` | HTTP port | `3100` |
|
|
121
|
+
|
|
122
|
+
## License
|
|
123
|
+
|
|
124
|
+
MIT
|
package/dist/index.js
CHANGED
|
@@ -145,6 +145,8 @@ function registerProposeTool(server, ap) {
|
|
|
145
145
|
async ({ merchant, amount, description, url }) => {
|
|
146
146
|
try {
|
|
147
147
|
const tx = ap.transactions.propose({ merchant, amount, description, url });
|
|
148
|
+
ap.transactions.requestApproval(tx.id).catch(() => {
|
|
149
|
+
});
|
|
148
150
|
return {
|
|
149
151
|
content: [
|
|
150
152
|
{
|
|
@@ -155,7 +157,7 @@ function registerProposeTool(server, ap) {
|
|
|
155
157
|
status: tx.status,
|
|
156
158
|
merchant: tx.merchant,
|
|
157
159
|
amount: tx.amount,
|
|
158
|
-
nextAction: "
|
|
160
|
+
nextAction: "Approval page opened in browser. Waiting for human approval..."
|
|
159
161
|
})
|
|
160
162
|
}
|
|
161
163
|
]
|
|
@@ -280,13 +282,9 @@ function loadConfig(overrides) {
|
|
|
280
282
|
let passphraseMode = "none";
|
|
281
283
|
if (passphrase) passphraseMode = "env";
|
|
282
284
|
else if (passphraseServer) passphraseMode = "server";
|
|
283
|
-
const
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
browserbaseApiKey: process.env.BROWSERBASE_API_KEY,
|
|
287
|
-
browserbaseProjectId: process.env.BROWSERBASE_PROJECT_ID,
|
|
288
|
-
proxyUrl: process.env.AGENTPAY_PROXY_URL
|
|
289
|
-
} : void 0;
|
|
285
|
+
const executor = {
|
|
286
|
+
modelApiKey: process.env.ANTHROPIC_API_KEY
|
|
287
|
+
};
|
|
290
288
|
return {
|
|
291
289
|
home: process.env.AGENTPAY_HOME || void 0,
|
|
292
290
|
passphrase,
|
|
@@ -613,7 +611,7 @@ function registerPrompts(server) {
|
|
|
613
611
|
function createServer(config) {
|
|
614
612
|
const server = new McpServer({
|
|
615
613
|
name: "agentpay",
|
|
616
|
-
version: true ? "0.1.
|
|
614
|
+
version: true ? "0.1.3" : "0.0.0"
|
|
617
615
|
});
|
|
618
616
|
const ap = new AgentPay2({
|
|
619
617
|
home: config.home,
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","../src/server.ts","../src/errors.ts","../src/tools/status.ts","../src/tools/propose.ts","../src/tools/transactions.ts","../src/tools/execute.ts","../src/config.ts","../src/tools/receipt.ts","../src/tools/index.ts","../src/resources/wallet.ts","../src/resources/transaction.ts","../src/resources/audit.ts","../src/resources/index.ts","../src/prompts/buy.ts","../src/prompts/budget-check.ts","../src/prompts/purchase-status.ts","../src/prompts/index.ts"],"sourcesContent":["import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';\nimport { fileURLToPath } from 'node:url';\nimport { realpathSync } from 'node:fs';\nimport { createServer } from './server.js';\nimport { loadConfig } from './config.js';\n\nexport { createServer } from './server.js';\nexport { loadConfig } from './config.js';\nexport type { ServerConfig } from './config.js';\n\nexport async function startServer(overrides?: { http?: boolean }) {\n const config = loadConfig(overrides);\n const server = createServer(config);\n\n if (config.http) {\n // Dynamic import to avoid loading HTTP deps when not needed\n const { createServer: createHttpServer } = await import('node:http');\n const { StreamableHTTPServerTransport } = await import(\n '@modelcontextprotocol/sdk/server/streamableHttp.js'\n );\n\n const transport = new StreamableHTTPServerTransport({ sessionIdGenerator: () => crypto.randomUUID() });\n await server.connect(transport);\n\n const httpServer = createHttpServer((req, res) => {\n transport.handleRequest(req, res);\n });\n\n const port = parseInt(process.env.MCP_HTTP_PORT ?? '3100', 10);\n httpServer.listen(port, () => {\n console.error(`AgentPay MCP server listening on http://localhost:${port}`);\n });\n\n const shutdown = () => {\n httpServer.close();\n process.exit(0);\n };\n process.on('SIGINT', shutdown);\n process.on('SIGTERM', shutdown);\n } else {\n const transport = new StdioServerTransport();\n await server.connect(transport);\n\n const shutdown = async () => {\n await server.close();\n process.exit(0);\n };\n process.on('SIGINT', shutdown);\n process.on('SIGTERM', shutdown);\n }\n}\n\n// Auto-start when run directly (handles npx, global install, and symlinks)\nlet isDirectRun = false;\ntry {\n const thisFile = fileURLToPath(import.meta.url);\n isDirectRun = !!process.argv[1] && realpathSync(process.argv[1]) === thisFile;\n} catch {\n // process.argv[1] doesn't exist or can't be resolved\n}\n\nif (isDirectRun) {\n const httpFlag = process.argv.includes('--http');\n startServer({ http: httpFlag }).catch((err) => {\n console.error('Failed to start MCP server:', err);\n process.exit(1);\n });\n}\n","import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport { AgentPay } from '@useagentpay/sdk';\nimport type { ServerConfig } from './config.js';\nimport { registerTools } from './tools/index.js';\nimport { registerResources } from './resources/index.js';\nimport { registerPrompts } from './prompts/index.js';\n\ndeclare const __PKG_VERSION__: string;\n\nexport function createServer(config: ServerConfig): McpServer {\n const server = new McpServer({\n name: 'agentpay',\n version: typeof __PKG_VERSION__ !== 'undefined' ? __PKG_VERSION__ : '0.0.0',\n });\n\n // Shared AgentPay instance (no passphrase — read-only by default)\n const ap = new AgentPay({\n home: config.home,\n executor: config.executor,\n });\n\n registerTools(server, ap, config);\n registerResources(server, ap);\n registerPrompts(server);\n\n return server;\n}\n","import {\n NotSetupError,\n DecryptError,\n InsufficientBalanceError,\n ExceedsTxLimitError,\n NotApprovedError,\n InvalidMandateError,\n AlreadyExecutedError,\n CheckoutFailedError,\n TimeoutError,\n} from '@useagentpay/sdk';\n\nexport interface ToolResult {\n success: boolean;\n error?: string;\n nextAction?: string;\n [key: string]: unknown;\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nconst ERROR_MAP: Array<{\n type: new (...args: any[]) => Error;\n error: string;\n nextAction: string;\n}> = [\n { type: NotSetupError, error: 'NOT_SETUP', nextAction: 'STOP - Human must run: agentpay setup' },\n { type: InsufficientBalanceError, error: 'INSUFFICIENT_BALANCE', nextAction: 'STOP - Human must add budget' },\n { type: ExceedsTxLimitError, error: 'EXCEEDS_TX_LIMIT', nextAction: 'STOP - Human must increase limit' },\n { type: NotApprovedError, error: 'NOT_APPROVED', nextAction: 'WAIT - Needs approval first' },\n { type: InvalidMandateError, error: 'INVALID_MANDATE', nextAction: 'STOP - Security error' },\n { type: AlreadyExecutedError, error: 'ALREADY_EXECUTED', nextAction: 'STOP - Already processed' },\n { type: CheckoutFailedError, error: 'CHECKOUT_FAILED', nextAction: 'ERROR - Human should review' },\n { type: TimeoutError, error: 'TIMEOUT', nextAction: 'RETRY - Try again later' },\n { type: DecryptError, error: 'DECRYPT_FAILED', nextAction: 'STOP - Wrong passphrase' },\n];\n\nexport function mapError(err: unknown): ToolResult {\n if (err instanceof Error) {\n for (const mapping of ERROR_MAP) {\n if (err instanceof mapping.type) {\n return {\n success: false,\n error: mapping.error,\n message: err.message,\n nextAction: mapping.nextAction,\n };\n }\n }\n }\n\n return {\n success: false,\n error: 'UNKNOWN_ERROR',\n message: err instanceof Error ? err.message : String(err),\n };\n}\n","import { z } from 'zod';\nimport type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport type { AgentPay } from '@useagentpay/sdk';\nimport { mapError } from '../errors.js';\n\nexport function registerStatusTools(server: McpServer, ap: AgentPay) {\n server.tool(\n 'agentpay_status',\n 'Get AgentPay status: setup state, balance, budget, and pending transactions. Call this first.',\n {},\n async () => {\n try {\n const status = ap.status();\n return {\n content: [\n {\n type: 'text' as const,\n text: JSON.stringify({\n success: true,\n ...status,\n pendingCount: status.pending.length,\n nextAction: !status.isSetup\n ? 'STOP - Human must run: agentpay setup'\n : status.pending.length > 0\n ? 'Review pending transactions with agentpay_list_pending'\n : 'Ready for purchases. Use agentpay_check_balance before proposing.',\n }),\n },\n ],\n };\n } catch (err) {\n return { content: [{ type: 'text' as const, text: JSON.stringify(mapError(err)) }] };\n }\n }\n );\n\n server.tool(\n 'agentpay_check_balance',\n 'Check current balance, budget, and per-transaction limit. Call BEFORE proposing a purchase.',\n {},\n async () => {\n try {\n const wallet = ap.wallet.getBalance();\n return {\n content: [\n {\n type: 'text' as const,\n text: JSON.stringify({\n success: true,\n ...wallet,\n nextAction:\n wallet.balance <= 0\n ? 'STOP - No balance remaining. Human must add budget.'\n : `Ready. Max single purchase: $${Math.min(wallet.balance, wallet.limitPerTx).toFixed(2)}`,\n }),\n },\n ],\n };\n } catch (err) {\n return { content: [{ type: 'text' as const, text: JSON.stringify(mapError(err)) }] };\n }\n }\n );\n\n server.tool(\n 'agentpay_list_pending',\n 'List all pending transactions awaiting human approval.',\n {},\n async () => {\n try {\n const status = ap.status();\n return {\n content: [\n {\n type: 'text' as const,\n text: JSON.stringify({\n success: true,\n pending: status.pending,\n count: status.pending.length,\n nextAction:\n status.pending.length > 0\n ? 'Human must approve/reject via CLI. Use agentpay_wait_for_approval to poll.'\n : 'No pending transactions.',\n }),\n },\n ],\n };\n } catch (err) {\n return { content: [{ type: 'text' as const, text: JSON.stringify(mapError(err)) }] };\n }\n }\n );\n}\n","import { z } from 'zod';\nimport type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport type { AgentPay } from '@useagentpay/sdk';\nimport { mapError } from '../errors.js';\n\nexport function registerProposeTool(server: McpServer, ap: AgentPay) {\n server.tool(\n 'agentpay_propose_purchase',\n 'Propose a new purchase. Creates a pending transaction that requires human approval before execution.',\n {\n merchant: z.string().describe('Merchant name (e.g. \"Amazon\", \"Target\")'),\n amount: z.number().positive().describe('Purchase amount in USD'),\n description: z.string().describe('What is being purchased'),\n url: z.string().url().describe('Product or checkout URL'),\n },\n async ({ merchant, amount, description, url }) => {\n try {\n const tx = ap.transactions.propose({ merchant, amount, description, url });\n return {\n content: [\n {\n type: 'text' as const,\n text: JSON.stringify({\n success: true,\n txId: tx.id,\n status: tx.status,\n merchant: tx.merchant,\n amount: tx.amount,\n nextAction: 'Human must approve via CLI: agentpay approve ' + tx.id,\n }),\n },\n ],\n };\n } catch (err) {\n return { content: [{ type: 'text' as const, text: JSON.stringify(mapError(err)) }] };\n }\n }\n );\n}\n","import { z } from 'zod';\nimport type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport type { AgentPay } from '@useagentpay/sdk';\nimport { mapError } from '../errors.js';\n\nfunction nextActionForStatus(status: string): string {\n switch (status) {\n case 'pending':\n return 'WAIT - Human must approve via CLI. Use agentpay_wait_for_approval to poll.';\n case 'approved':\n return 'READY - Use agentpay_execute_purchase to complete the purchase.';\n case 'rejected':\n return 'STOP - Transaction was rejected by human.';\n case 'executing':\n return 'WAIT - Purchase is being executed.';\n case 'completed':\n return 'DONE - Use agentpay_get_receipt for confirmation details.';\n case 'failed':\n return 'ERROR - Purchase failed. Human should review.';\n default:\n return 'Unknown status.';\n }\n}\n\nexport function registerTransactionTools(server: McpServer, ap: AgentPay) {\n server.tool(\n 'agentpay_get_transaction',\n 'Get the current status and details of a transaction.',\n {\n txId: z.string().describe('Transaction ID (e.g. \"tx_abc123\")'),\n },\n async ({ txId }) => {\n try {\n const tx = ap.transactions.get(txId);\n if (!tx) {\n return {\n content: [\n {\n type: 'text' as const,\n text: JSON.stringify({\n success: false,\n error: 'NOT_FOUND',\n message: `Transaction ${txId} not found.`,\n }),\n },\n ],\n };\n }\n return {\n content: [\n {\n type: 'text' as const,\n text: JSON.stringify({\n success: true,\n id: tx.id,\n status: tx.status,\n merchant: tx.merchant,\n amount: tx.amount,\n description: tx.description,\n url: tx.url,\n createdAt: tx.createdAt,\n nextAction: nextActionForStatus(tx.status),\n }),\n },\n ],\n };\n } catch (err) {\n return { content: [{ type: 'text' as const, text: JSON.stringify(mapError(err)) }] };\n }\n }\n );\n\n server.tool(\n 'agentpay_wait_for_approval',\n 'Long-poll for human approval of a pending transaction. Blocks until approved, rejected, or timeout.',\n {\n txId: z.string().describe('Transaction ID to wait for'),\n pollInterval: z.number().positive().optional().describe('Poll interval in ms (default 2000)'),\n timeout: z.number().positive().optional().describe('Timeout in ms (default 300000 = 5 min)'),\n },\n async ({ txId, pollInterval, timeout }) => {\n try {\n const result = await ap.transactions.waitForApproval(txId, {\n pollInterval: pollInterval ?? 2000,\n timeout: timeout ?? 300000,\n });\n return {\n content: [\n {\n type: 'text' as const,\n text: JSON.stringify({\n success: true,\n txId,\n status: result.status,\n reason: result.reason,\n nextAction: nextActionForStatus(result.status),\n }),\n },\n ],\n };\n } catch (err) {\n return { content: [{ type: 'text' as const, text: JSON.stringify(mapError(err)) }] };\n }\n }\n );\n}\n","import { z } from 'zod';\nimport type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport { AgentPay } from '@useagentpay/sdk';\nimport type { ServerConfig } from '../config.js';\nimport { getPassphrase } from '../config.js';\nimport { mapError } from '../errors.js';\n\nexport function registerExecuteTool(server: McpServer, ap: AgentPay, config: ServerConfig) {\n server.tool(\n 'agentpay_execute_purchase',\n 'Execute an approved purchase. Requires passphrase config. Decrypts credentials and completes checkout via browser.',\n {\n txId: z.string().describe('Transaction ID of an approved purchase'),\n },\n async ({ txId }) => {\n try {\n const passphrase = await getPassphrase(config);\n\n // Create a temporary instance with passphrase for execution\n const execAp = new AgentPay({\n home: ap.home,\n passphrase,\n executor: config.executor,\n });\n\n const receipt = await execAp.transactions.execute(txId);\n\n return {\n content: [\n {\n type: 'text' as const,\n text: JSON.stringify({\n success: true,\n receipt,\n nextAction: 'DONE - Purchase completed. Use agentpay_get_receipt for details.',\n }),\n },\n ],\n };\n } catch (err) {\n return { content: [{ type: 'text' as const, text: JSON.stringify(mapError(err)) }] };\n }\n }\n );\n}\n","import type { ExecutorConfig } from '@useagentpay/sdk';\n\nexport interface ServerConfig {\n home?: string;\n passphrase?: string;\n passphraseServer?: string;\n passphraseMode: 'env' | 'server' | 'none';\n executor?: ExecutorConfig;\n http?: boolean;\n}\n\nexport function loadConfig(overrides?: { http?: boolean }): ServerConfig {\n const passphrase = process.env.AGENTPAY_PASSPHRASE;\n const passphraseServer = process.env.AGENTPAY_PASSPHRASE_SERVER;\n\n let passphraseMode: ServerConfig['passphraseMode'] = 'none';\n if (passphrase) passphraseMode = 'env';\n else if (passphraseServer) passphraseMode = 'server';\n\n const hasDirectKeys = !!(process.env.BROWSERBASE_API_KEY && process.env.BROWSERBASE_PROJECT_ID);\n const hasProxy = !!process.env.AGENTPAY_PROXY_URL;\n\n const executor: ExecutorConfig | undefined =\n hasDirectKeys || hasProxy\n ? {\n browserbaseApiKey: process.env.BROWSERBASE_API_KEY,\n browserbaseProjectId: process.env.BROWSERBASE_PROJECT_ID,\n proxyUrl: process.env.AGENTPAY_PROXY_URL,\n }\n : undefined;\n\n return {\n home: process.env.AGENTPAY_HOME || undefined,\n passphrase,\n passphraseServer,\n passphraseMode,\n executor,\n http: overrides?.http ?? process.env.MCP_TRANSPORT === 'http',\n };\n}\n\nexport async function getPassphrase(config: ServerConfig): Promise<string> {\n if (config.passphraseMode === 'env' && config.passphrase) {\n return config.passphrase;\n }\n\n if (config.passphraseMode === 'server' && config.passphraseServer) {\n const res = await fetch(config.passphraseServer);\n if (!res.ok) throw new Error(`Passphrase server returned ${res.status}`);\n const body = await res.text();\n return body.trim();\n }\n\n throw new Error(\n 'No passphrase configured. Set AGENTPAY_PASSPHRASE or AGENTPAY_PASSPHRASE_SERVER to enable purchase execution.'\n );\n}\n","import { z } from 'zod';\nimport type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport type { AgentPay } from '@useagentpay/sdk';\nimport { mapError } from '../errors.js';\n\nexport function registerReceiptTool(server: McpServer, ap: AgentPay) {\n server.tool(\n 'agentpay_get_receipt',\n 'Get the receipt for a completed purchase.',\n {\n txId: z.string().describe('Transaction ID of a completed purchase'),\n },\n async ({ txId }) => {\n try {\n const receipt = ap.transactions.getReceipt(txId);\n if (!receipt) {\n return {\n content: [\n {\n type: 'text' as const,\n text: JSON.stringify({\n success: false,\n error: 'NO_RECEIPT',\n message: `No receipt found for transaction ${txId}. Transaction may not be completed yet.`,\n nextAction: 'Check transaction status with agentpay_get_transaction',\n }),\n },\n ],\n };\n }\n return {\n content: [\n {\n type: 'text' as const,\n text: JSON.stringify({\n success: true,\n receipt,\n nextAction: 'DONE - Purchase confirmed.',\n }),\n },\n ],\n };\n } catch (err) {\n return { content: [{ type: 'text' as const, text: JSON.stringify(mapError(err)) }] };\n }\n }\n );\n}\n","import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport type { AgentPay } from '@useagentpay/sdk';\nimport type { ServerConfig } from '../config.js';\nimport { registerStatusTools } from './status.js';\nimport { registerProposeTool } from './propose.js';\nimport { registerTransactionTools } from './transactions.js';\nimport { registerExecuteTool } from './execute.js';\nimport { registerReceiptTool } from './receipt.js';\n\nexport function registerTools(server: McpServer, ap: AgentPay, config: ServerConfig) {\n registerStatusTools(server, ap);\n registerProposeTool(server, ap);\n registerTransactionTools(server, ap);\n registerExecuteTool(server, ap, config);\n registerReceiptTool(server, ap);\n}\n","import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport type { AgentPay } from '@useagentpay/sdk';\n\nexport function registerWalletResource(server: McpServer, ap: AgentPay) {\n server.resource('wallet', 'agentpay://wallet', async () => {\n try {\n const wallet = ap.wallet.getBalance();\n return {\n contents: [\n {\n uri: 'agentpay://wallet',\n mimeType: 'application/json',\n text: JSON.stringify(wallet, null, 2),\n },\n ],\n };\n } catch {\n return {\n contents: [\n {\n uri: 'agentpay://wallet',\n mimeType: 'application/json',\n text: JSON.stringify({ budget: 0, balance: 0, limitPerTx: 0, spent: 0 }),\n },\n ],\n };\n }\n });\n}\n","import { ResourceTemplate } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport type { AgentPay } from '@useagentpay/sdk';\n\nexport function registerTransactionResource(server: McpServer, ap: AgentPay) {\n server.resource(\n 'transaction',\n new ResourceTemplate('agentpay://transactions/{txId}', { list: undefined }),\n async (uri, { txId }) => {\n const tx = ap.transactions.get(txId as string);\n if (!tx) {\n return {\n contents: [\n {\n uri: uri.href,\n mimeType: 'application/json',\n text: JSON.stringify({ error: 'Transaction not found' }),\n },\n ],\n };\n }\n\n // Omit mandate internals for security\n const { mandate: _, ...safeTx } = tx;\n return {\n contents: [\n {\n uri: uri.href,\n mimeType: 'application/json',\n text: JSON.stringify(safeTx, null, 2),\n },\n ],\n };\n }\n );\n}\n","import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport type { AgentPay } from '@useagentpay/sdk';\n\nexport function registerAuditResource(server: McpServer, ap: AgentPay) {\n server.resource('audit-log', 'agentpay://audit-log', async () => {\n const lines = ap.audit.getLog();\n const last50 = lines.slice(-50);\n\n const entries = last50.map((line) => {\n const parts = line.split('\\t');\n return {\n timestamp: parts[0] ?? '',\n action: parts[1] ?? '',\n details: parts[2] ? JSON.parse(parts[2]) : {},\n };\n });\n\n return {\n contents: [\n {\n uri: 'agentpay://audit-log',\n mimeType: 'application/json',\n text: JSON.stringify(entries, null, 2),\n },\n ],\n };\n });\n}\n","import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport type { AgentPay } from '@useagentpay/sdk';\nimport { registerWalletResource } from './wallet.js';\nimport { registerTransactionResource } from './transaction.js';\nimport { registerAuditResource } from './audit.js';\n\nexport function registerResources(server: McpServer, ap: AgentPay) {\n registerWalletResource(server, ap);\n registerTransactionResource(server, ap);\n registerAuditResource(server, ap);\n}\n","import { z } from 'zod';\nimport type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\n\nexport function registerBuyPrompt(server: McpServer) {\n server.prompt(\n 'buy',\n 'Step-by-step purchase flow: check balance, propose, wait for approval, execute.',\n {\n merchant: z.string().describe('Merchant name'),\n amount: z.string().describe('Purchase amount in USD (e.g. \"29.99\")'),\n description: z.string().describe('What is being purchased'),\n url: z.string().describe('Product or checkout URL'),\n },\n async ({ merchant, amount, description, url }) => ({\n messages: [\n {\n role: 'user' as const,\n content: {\n type: 'text' as const,\n text: [\n `I need to purchase from ${merchant}.`,\n '',\n 'Follow these steps exactly:',\n '',\n '1. Call agentpay_check_balance to verify sufficient funds',\n `2. Call agentpay_propose_purchase with:`,\n ` - merchant: \"${merchant}\"`,\n ` - amount: ${amount}`,\n ` - description: \"${description}\"`,\n ` - url: \"${url}\"`,\n '3. Tell me the transaction ID and that I need to approve it',\n '4. Call agentpay_wait_for_approval with the transaction ID',\n '5. Once approved, call agentpay_execute_purchase',\n '6. Call agentpay_get_receipt to confirm',\n '',\n 'If any step fails, stop and explain what went wrong.',\n ].join('\\n'),\n },\n },\n ],\n })\n );\n}\n","import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\n\nexport function registerBudgetCheckPrompt(server: McpServer) {\n server.prompt(\n 'budget-check',\n 'Check current balance, spending limits, and pending transactions.',\n {},\n async () => ({\n messages: [\n {\n role: 'user' as const,\n content: {\n type: 'text' as const,\n text: [\n 'Check my AgentPay budget status:',\n '',\n '1. Call agentpay_check_balance to get current balance and limits',\n '2. Call agentpay_list_pending to see any pending transactions',\n '3. Summarize:',\n ' - Available balance',\n ' - Per-transaction limit',\n ' - Total budget and amount spent',\n ' - Number of pending transactions (if any)',\n ].join('\\n'),\n },\n },\n ],\n })\n );\n}\n","import { z } from 'zod';\nimport type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\n\nexport function registerPurchaseStatusPrompt(server: McpServer) {\n server.prompt(\n 'purchase-status',\n 'Review recent transactions and their receipts.',\n {\n limit: z.string().optional().describe('Number of recent transactions to show (default 5)'),\n },\n async ({ limit }) => ({\n messages: [\n {\n role: 'user' as const,\n content: {\n type: 'text' as const,\n text: [\n `Show me the status of my recent AgentPay transactions (last ${limit ?? '5'}):`,\n '',\n '1. Call agentpay_status to get recent transactions',\n '2. For each completed transaction, call agentpay_get_receipt',\n '3. Present a summary table with:',\n ' - Transaction ID',\n ' - Merchant',\n ' - Amount',\n ' - Status',\n ' - Confirmation ID (if completed)',\n ].join('\\n'),\n },\n },\n ],\n })\n );\n}\n","import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport { registerBuyPrompt } from './buy.js';\nimport { registerBudgetCheckPrompt } from './budget-check.js';\nimport { registerPurchaseStatusPrompt } from './purchase-status.js';\n\nexport function registerPrompts(server: McpServer) {\n registerBuyPrompt(server);\n registerBudgetCheckPrompt(server);\n registerPurchaseStatusPrompt(server);\n}\n"],"mappings":"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","names":["AgentPay","z","z","z","z","z","z","z","z","AgentPay"]}
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/server.ts","../src/errors.ts","../src/tools/status.ts","../src/tools/propose.ts","../src/tools/transactions.ts","../src/tools/execute.ts","../src/config.ts","../src/tools/receipt.ts","../src/tools/index.ts","../src/resources/wallet.ts","../src/resources/transaction.ts","../src/resources/audit.ts","../src/resources/index.ts","../src/prompts/buy.ts","../src/prompts/budget-check.ts","../src/prompts/purchase-status.ts","../src/prompts/index.ts"],"sourcesContent":["import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';\nimport { fileURLToPath } from 'node:url';\nimport { realpathSync } from 'node:fs';\nimport { createServer } from './server.js';\nimport { loadConfig } from './config.js';\n\nexport { createServer } from './server.js';\nexport { loadConfig } from './config.js';\nexport type { ServerConfig } from './config.js';\n\nexport async function startServer(overrides?: { http?: boolean }) {\n const config = loadConfig(overrides);\n const server = createServer(config);\n\n if (config.http) {\n // Dynamic import to avoid loading HTTP deps when not needed\n const { createServer: createHttpServer } = await import('node:http');\n const { StreamableHTTPServerTransport } = await import(\n '@modelcontextprotocol/sdk/server/streamableHttp.js'\n );\n\n const transport = new StreamableHTTPServerTransport({ sessionIdGenerator: () => crypto.randomUUID() });\n await server.connect(transport);\n\n const httpServer = createHttpServer((req, res) => {\n transport.handleRequest(req, res);\n });\n\n const port = parseInt(process.env.MCP_HTTP_PORT ?? '3100', 10);\n httpServer.listen(port, () => {\n console.error(`AgentPay MCP server listening on http://localhost:${port}`);\n });\n\n const shutdown = () => {\n httpServer.close();\n process.exit(0);\n };\n process.on('SIGINT', shutdown);\n process.on('SIGTERM', shutdown);\n } else {\n const transport = new StdioServerTransport();\n await server.connect(transport);\n\n const shutdown = async () => {\n await server.close();\n process.exit(0);\n };\n process.on('SIGINT', shutdown);\n process.on('SIGTERM', shutdown);\n }\n}\n\n// Auto-start when run directly (handles npx, global install, and symlinks)\nlet isDirectRun = false;\ntry {\n const thisFile = fileURLToPath(import.meta.url);\n isDirectRun = !!process.argv[1] && realpathSync(process.argv[1]) === thisFile;\n} catch {\n // process.argv[1] doesn't exist or can't be resolved\n}\n\nif (isDirectRun) {\n const httpFlag = process.argv.includes('--http');\n startServer({ http: httpFlag }).catch((err) => {\n console.error('Failed to start MCP server:', err);\n process.exit(1);\n });\n}\n","import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport { AgentPay } from '@useagentpay/sdk';\nimport type { ServerConfig } from './config.js';\nimport { registerTools } from './tools/index.js';\nimport { registerResources } from './resources/index.js';\nimport { registerPrompts } from './prompts/index.js';\n\ndeclare const __PKG_VERSION__: string;\n\nexport function createServer(config: ServerConfig): McpServer {\n const server = new McpServer({\n name: 'agentpay',\n version: typeof __PKG_VERSION__ !== 'undefined' ? __PKG_VERSION__ : '0.0.0',\n });\n\n // Shared AgentPay instance (no passphrase — read-only by default)\n const ap = new AgentPay({\n home: config.home,\n executor: config.executor,\n });\n\n registerTools(server, ap, config);\n registerResources(server, ap);\n registerPrompts(server);\n\n return server;\n}\n","import {\n NotSetupError,\n DecryptError,\n InsufficientBalanceError,\n ExceedsTxLimitError,\n NotApprovedError,\n InvalidMandateError,\n AlreadyExecutedError,\n CheckoutFailedError,\n TimeoutError,\n} from '@useagentpay/sdk';\n\nexport interface ToolResult {\n success: boolean;\n error?: string;\n nextAction?: string;\n [key: string]: unknown;\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nconst ERROR_MAP: Array<{\n type: new (...args: any[]) => Error;\n error: string;\n nextAction: string;\n}> = [\n { type: NotSetupError, error: 'NOT_SETUP', nextAction: 'STOP - Human must run: agentpay setup' },\n { type: InsufficientBalanceError, error: 'INSUFFICIENT_BALANCE', nextAction: 'STOP - Human must add budget' },\n { type: ExceedsTxLimitError, error: 'EXCEEDS_TX_LIMIT', nextAction: 'STOP - Human must increase limit' },\n { type: NotApprovedError, error: 'NOT_APPROVED', nextAction: 'WAIT - Needs approval first' },\n { type: InvalidMandateError, error: 'INVALID_MANDATE', nextAction: 'STOP - Security error' },\n { type: AlreadyExecutedError, error: 'ALREADY_EXECUTED', nextAction: 'STOP - Already processed' },\n { type: CheckoutFailedError, error: 'CHECKOUT_FAILED', nextAction: 'ERROR - Human should review' },\n { type: TimeoutError, error: 'TIMEOUT', nextAction: 'RETRY - Try again later' },\n { type: DecryptError, error: 'DECRYPT_FAILED', nextAction: 'STOP - Wrong passphrase' },\n];\n\nexport function mapError(err: unknown): ToolResult {\n if (err instanceof Error) {\n for (const mapping of ERROR_MAP) {\n if (err instanceof mapping.type) {\n return {\n success: false,\n error: mapping.error,\n message: err.message,\n nextAction: mapping.nextAction,\n };\n }\n }\n }\n\n return {\n success: false,\n error: 'UNKNOWN_ERROR',\n message: err instanceof Error ? err.message : String(err),\n };\n}\n","import { z } from 'zod';\nimport type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport type { AgentPay } from '@useagentpay/sdk';\nimport { mapError } from '../errors.js';\n\nexport function registerStatusTools(server: McpServer, ap: AgentPay) {\n server.tool(\n 'agentpay_status',\n 'Get AgentPay status: setup state, balance, budget, and pending transactions. Call this first.',\n {},\n async () => {\n try {\n const status = ap.status();\n return {\n content: [\n {\n type: 'text' as const,\n text: JSON.stringify({\n success: true,\n ...status,\n pendingCount: status.pending.length,\n nextAction: !status.isSetup\n ? 'STOP - Human must run: agentpay setup'\n : status.pending.length > 0\n ? 'Review pending transactions with agentpay_list_pending'\n : 'Ready for purchases. Use agentpay_check_balance before proposing.',\n }),\n },\n ],\n };\n } catch (err) {\n return { content: [{ type: 'text' as const, text: JSON.stringify(mapError(err)) }] };\n }\n }\n );\n\n server.tool(\n 'agentpay_check_balance',\n 'Check current balance, budget, and per-transaction limit. Call BEFORE proposing a purchase.',\n {},\n async () => {\n try {\n const wallet = ap.wallet.getBalance();\n return {\n content: [\n {\n type: 'text' as const,\n text: JSON.stringify({\n success: true,\n ...wallet,\n nextAction:\n wallet.balance <= 0\n ? 'STOP - No balance remaining. Human must add budget.'\n : `Ready. Max single purchase: $${Math.min(wallet.balance, wallet.limitPerTx).toFixed(2)}`,\n }),\n },\n ],\n };\n } catch (err) {\n return { content: [{ type: 'text' as const, text: JSON.stringify(mapError(err)) }] };\n }\n }\n );\n\n server.tool(\n 'agentpay_list_pending',\n 'List all pending transactions awaiting human approval.',\n {},\n async () => {\n try {\n const status = ap.status();\n return {\n content: [\n {\n type: 'text' as const,\n text: JSON.stringify({\n success: true,\n pending: status.pending,\n count: status.pending.length,\n nextAction:\n status.pending.length > 0\n ? 'Human must approve/reject via CLI. Use agentpay_wait_for_approval to poll.'\n : 'No pending transactions.',\n }),\n },\n ],\n };\n } catch (err) {\n return { content: [{ type: 'text' as const, text: JSON.stringify(mapError(err)) }] };\n }\n }\n );\n}\n","import { z } from 'zod';\nimport type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport type { AgentPay } from '@useagentpay/sdk';\nimport { mapError } from '../errors.js';\n\nexport function registerProposeTool(server: McpServer, ap: AgentPay) {\n server.tool(\n 'agentpay_propose_purchase',\n 'Propose a new purchase. Creates a pending transaction that requires human approval before execution.',\n {\n merchant: z.string().describe('Merchant name (e.g. \"Amazon\", \"Target\")'),\n amount: z.number().positive().describe('Purchase amount in USD'),\n description: z.string().describe('What is being purchased'),\n url: z.string().url().describe('Product or checkout URL'),\n },\n async ({ merchant, amount, description, url }) => {\n try {\n const tx = ap.transactions.propose({ merchant, amount, description, url });\n\n // Fire-and-forget: open browser for human approval\n ap.transactions.requestApproval(tx.id).catch(() => {\n // Silently ignore — human can still use CLI fallback\n });\n\n return {\n content: [\n {\n type: 'text' as const,\n text: JSON.stringify({\n success: true,\n txId: tx.id,\n status: tx.status,\n merchant: tx.merchant,\n amount: tx.amount,\n nextAction: 'Approval page opened in browser. Waiting for human approval...',\n }),\n },\n ],\n };\n } catch (err) {\n return { content: [{ type: 'text' as const, text: JSON.stringify(mapError(err)) }] };\n }\n }\n );\n}\n","import { z } from 'zod';\nimport type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport type { AgentPay } from '@useagentpay/sdk';\nimport { mapError } from '../errors.js';\n\nfunction nextActionForStatus(status: string): string {\n switch (status) {\n case 'pending':\n return 'WAIT - Human must approve via CLI. Use agentpay_wait_for_approval to poll.';\n case 'approved':\n return 'READY - Use agentpay_execute_purchase to complete the purchase.';\n case 'rejected':\n return 'STOP - Transaction was rejected by human.';\n case 'executing':\n return 'WAIT - Purchase is being executed.';\n case 'completed':\n return 'DONE - Use agentpay_get_receipt for confirmation details.';\n case 'failed':\n return 'ERROR - Purchase failed. Human should review.';\n default:\n return 'Unknown status.';\n }\n}\n\nexport function registerTransactionTools(server: McpServer, ap: AgentPay) {\n server.tool(\n 'agentpay_get_transaction',\n 'Get the current status and details of a transaction.',\n {\n txId: z.string().describe('Transaction ID (e.g. \"tx_abc123\")'),\n },\n async ({ txId }) => {\n try {\n const tx = ap.transactions.get(txId);\n if (!tx) {\n return {\n content: [\n {\n type: 'text' as const,\n text: JSON.stringify({\n success: false,\n error: 'NOT_FOUND',\n message: `Transaction ${txId} not found.`,\n }),\n },\n ],\n };\n }\n return {\n content: [\n {\n type: 'text' as const,\n text: JSON.stringify({\n success: true,\n id: tx.id,\n status: tx.status,\n merchant: tx.merchant,\n amount: tx.amount,\n description: tx.description,\n url: tx.url,\n createdAt: tx.createdAt,\n nextAction: nextActionForStatus(tx.status),\n }),\n },\n ],\n };\n } catch (err) {\n return { content: [{ type: 'text' as const, text: JSON.stringify(mapError(err)) }] };\n }\n }\n );\n\n server.tool(\n 'agentpay_wait_for_approval',\n 'Long-poll for human approval of a pending transaction. Blocks until approved, rejected, or timeout.',\n {\n txId: z.string().describe('Transaction ID to wait for'),\n pollInterval: z.number().positive().optional().describe('Poll interval in ms (default 2000)'),\n timeout: z.number().positive().optional().describe('Timeout in ms (default 300000 = 5 min)'),\n },\n async ({ txId, pollInterval, timeout }) => {\n try {\n const result = await ap.transactions.waitForApproval(txId, {\n pollInterval: pollInterval ?? 2000,\n timeout: timeout ?? 300000,\n });\n return {\n content: [\n {\n type: 'text' as const,\n text: JSON.stringify({\n success: true,\n txId,\n status: result.status,\n reason: result.reason,\n nextAction: nextActionForStatus(result.status),\n }),\n },\n ],\n };\n } catch (err) {\n return { content: [{ type: 'text' as const, text: JSON.stringify(mapError(err)) }] };\n }\n }\n );\n}\n","import { z } from 'zod';\nimport type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport { AgentPay } from '@useagentpay/sdk';\nimport type { ServerConfig } from '../config.js';\nimport { getPassphrase } from '../config.js';\nimport { mapError } from '../errors.js';\n\nexport function registerExecuteTool(server: McpServer, ap: AgentPay, config: ServerConfig) {\n server.tool(\n 'agentpay_execute_purchase',\n 'Execute an approved purchase. Requires passphrase config. Decrypts credentials and completes checkout via browser.',\n {\n txId: z.string().describe('Transaction ID of an approved purchase'),\n },\n async ({ txId }) => {\n try {\n const passphrase = await getPassphrase(config);\n\n // Create a temporary instance with passphrase for execution\n const execAp = new AgentPay({\n home: ap.home,\n passphrase,\n executor: config.executor,\n });\n\n const receipt = await execAp.transactions.execute(txId);\n\n return {\n content: [\n {\n type: 'text' as const,\n text: JSON.stringify({\n success: true,\n receipt,\n nextAction: 'DONE - Purchase completed. Use agentpay_get_receipt for details.',\n }),\n },\n ],\n };\n } catch (err) {\n return { content: [{ type: 'text' as const, text: JSON.stringify(mapError(err)) }] };\n }\n }\n );\n}\n","import type { ExecutorConfig } from '@useagentpay/sdk';\n\nexport interface ServerConfig {\n home?: string;\n passphrase?: string;\n passphraseServer?: string;\n passphraseMode: 'env' | 'server' | 'none';\n executor?: ExecutorConfig;\n http?: boolean;\n}\n\nexport function loadConfig(overrides?: { http?: boolean }): ServerConfig {\n const passphrase = process.env.AGENTPAY_PASSPHRASE;\n const passphraseServer = process.env.AGENTPAY_PASSPHRASE_SERVER;\n\n let passphraseMode: ServerConfig['passphraseMode'] = 'none';\n if (passphrase) passphraseMode = 'env';\n else if (passphraseServer) passphraseMode = 'server';\n\n // Default: local Chromium via Stagehand. Only modelApiKey needed for AI navigation.\n const executor: ExecutorConfig = {\n modelApiKey: process.env.ANTHROPIC_API_KEY,\n };\n\n return {\n home: process.env.AGENTPAY_HOME || undefined,\n passphrase,\n passphraseServer,\n passphraseMode,\n executor,\n http: overrides?.http ?? process.env.MCP_TRANSPORT === 'http',\n };\n}\n\nexport async function getPassphrase(config: ServerConfig): Promise<string> {\n if (config.passphraseMode === 'env' && config.passphrase) {\n return config.passphrase;\n }\n\n if (config.passphraseMode === 'server' && config.passphraseServer) {\n const res = await fetch(config.passphraseServer);\n if (!res.ok) throw new Error(`Passphrase server returned ${res.status}`);\n const body = await res.text();\n return body.trim();\n }\n\n throw new Error(\n 'No passphrase configured. Set AGENTPAY_PASSPHRASE or AGENTPAY_PASSPHRASE_SERVER to enable purchase execution.'\n );\n}\n","import { z } from 'zod';\nimport type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport type { AgentPay } from '@useagentpay/sdk';\nimport { mapError } from '../errors.js';\n\nexport function registerReceiptTool(server: McpServer, ap: AgentPay) {\n server.tool(\n 'agentpay_get_receipt',\n 'Get the receipt for a completed purchase.',\n {\n txId: z.string().describe('Transaction ID of a completed purchase'),\n },\n async ({ txId }) => {\n try {\n const receipt = ap.transactions.getReceipt(txId);\n if (!receipt) {\n return {\n content: [\n {\n type: 'text' as const,\n text: JSON.stringify({\n success: false,\n error: 'NO_RECEIPT',\n message: `No receipt found for transaction ${txId}. Transaction may not be completed yet.`,\n nextAction: 'Check transaction status with agentpay_get_transaction',\n }),\n },\n ],\n };\n }\n return {\n content: [\n {\n type: 'text' as const,\n text: JSON.stringify({\n success: true,\n receipt,\n nextAction: 'DONE - Purchase confirmed.',\n }),\n },\n ],\n };\n } catch (err) {\n return { content: [{ type: 'text' as const, text: JSON.stringify(mapError(err)) }] };\n }\n }\n );\n}\n","import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport type { AgentPay } from '@useagentpay/sdk';\nimport type { ServerConfig } from '../config.js';\nimport { registerStatusTools } from './status.js';\nimport { registerProposeTool } from './propose.js';\nimport { registerTransactionTools } from './transactions.js';\nimport { registerExecuteTool } from './execute.js';\nimport { registerReceiptTool } from './receipt.js';\n\nexport function registerTools(server: McpServer, ap: AgentPay, config: ServerConfig) {\n registerStatusTools(server, ap);\n registerProposeTool(server, ap);\n registerTransactionTools(server, ap);\n registerExecuteTool(server, ap, config);\n registerReceiptTool(server, ap);\n}\n","import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport type { AgentPay } from '@useagentpay/sdk';\n\nexport function registerWalletResource(server: McpServer, ap: AgentPay) {\n server.resource('wallet', 'agentpay://wallet', async () => {\n try {\n const wallet = ap.wallet.getBalance();\n return {\n contents: [\n {\n uri: 'agentpay://wallet',\n mimeType: 'application/json',\n text: JSON.stringify(wallet, null, 2),\n },\n ],\n };\n } catch {\n return {\n contents: [\n {\n uri: 'agentpay://wallet',\n mimeType: 'application/json',\n text: JSON.stringify({ budget: 0, balance: 0, limitPerTx: 0, spent: 0 }),\n },\n ],\n };\n }\n });\n}\n","import { ResourceTemplate } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport type { AgentPay } from '@useagentpay/sdk';\n\nexport function registerTransactionResource(server: McpServer, ap: AgentPay) {\n server.resource(\n 'transaction',\n new ResourceTemplate('agentpay://transactions/{txId}', { list: undefined }),\n async (uri, { txId }) => {\n const tx = ap.transactions.get(txId as string);\n if (!tx) {\n return {\n contents: [\n {\n uri: uri.href,\n mimeType: 'application/json',\n text: JSON.stringify({ error: 'Transaction not found' }),\n },\n ],\n };\n }\n\n // Omit mandate internals for security\n const { mandate: _, ...safeTx } = tx;\n return {\n contents: [\n {\n uri: uri.href,\n mimeType: 'application/json',\n text: JSON.stringify(safeTx, null, 2),\n },\n ],\n };\n }\n );\n}\n","import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport type { AgentPay } from '@useagentpay/sdk';\n\nexport function registerAuditResource(server: McpServer, ap: AgentPay) {\n server.resource('audit-log', 'agentpay://audit-log', async () => {\n const lines = ap.audit.getLog();\n const last50 = lines.slice(-50);\n\n const entries = last50.map((line) => {\n const parts = line.split('\\t');\n return {\n timestamp: parts[0] ?? '',\n action: parts[1] ?? '',\n details: parts[2] ? JSON.parse(parts[2]) : {},\n };\n });\n\n return {\n contents: [\n {\n uri: 'agentpay://audit-log',\n mimeType: 'application/json',\n text: JSON.stringify(entries, null, 2),\n },\n ],\n };\n });\n}\n","import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport type { AgentPay } from '@useagentpay/sdk';\nimport { registerWalletResource } from './wallet.js';\nimport { registerTransactionResource } from './transaction.js';\nimport { registerAuditResource } from './audit.js';\n\nexport function registerResources(server: McpServer, ap: AgentPay) {\n registerWalletResource(server, ap);\n registerTransactionResource(server, ap);\n registerAuditResource(server, ap);\n}\n","import { z } from 'zod';\nimport type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\n\nexport function registerBuyPrompt(server: McpServer) {\n server.prompt(\n 'buy',\n 'Step-by-step purchase flow: check balance, propose, wait for approval, execute.',\n {\n merchant: z.string().describe('Merchant name'),\n amount: z.string().describe('Purchase amount in USD (e.g. \"29.99\")'),\n description: z.string().describe('What is being purchased'),\n url: z.string().describe('Product or checkout URL'),\n },\n async ({ merchant, amount, description, url }) => ({\n messages: [\n {\n role: 'user' as const,\n content: {\n type: 'text' as const,\n text: [\n `I need to purchase from ${merchant}.`,\n '',\n 'Follow these steps exactly:',\n '',\n '1. Call agentpay_check_balance to verify sufficient funds',\n `2. Call agentpay_propose_purchase with:`,\n ` - merchant: \"${merchant}\"`,\n ` - amount: ${amount}`,\n ` - description: \"${description}\"`,\n ` - url: \"${url}\"`,\n '3. Tell me the transaction ID and that I need to approve it',\n '4. Call agentpay_wait_for_approval with the transaction ID',\n '5. Once approved, call agentpay_execute_purchase',\n '6. Call agentpay_get_receipt to confirm',\n '',\n 'If any step fails, stop and explain what went wrong.',\n ].join('\\n'),\n },\n },\n ],\n })\n );\n}\n","import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\n\nexport function registerBudgetCheckPrompt(server: McpServer) {\n server.prompt(\n 'budget-check',\n 'Check current balance, spending limits, and pending transactions.',\n {},\n async () => ({\n messages: [\n {\n role: 'user' as const,\n content: {\n type: 'text' as const,\n text: [\n 'Check my AgentPay budget status:',\n '',\n '1. Call agentpay_check_balance to get current balance and limits',\n '2. Call agentpay_list_pending to see any pending transactions',\n '3. Summarize:',\n ' - Available balance',\n ' - Per-transaction limit',\n ' - Total budget and amount spent',\n ' - Number of pending transactions (if any)',\n ].join('\\n'),\n },\n },\n ],\n })\n );\n}\n","import { z } from 'zod';\nimport type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\n\nexport function registerPurchaseStatusPrompt(server: McpServer) {\n server.prompt(\n 'purchase-status',\n 'Review recent transactions and their receipts.',\n {\n limit: z.string().optional().describe('Number of recent transactions to show (default 5)'),\n },\n async ({ limit }) => ({\n messages: [\n {\n role: 'user' as const,\n content: {\n type: 'text' as const,\n text: [\n `Show me the status of my recent AgentPay transactions (last ${limit ?? '5'}):`,\n '',\n '1. Call agentpay_status to get recent transactions',\n '2. For each completed transaction, call agentpay_get_receipt',\n '3. Present a summary table with:',\n ' - Transaction ID',\n ' - Merchant',\n ' - Amount',\n ' - Status',\n ' - Confirmation ID (if completed)',\n ].join('\\n'),\n },\n },\n ],\n })\n );\n}\n","import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport { registerBuyPrompt } from './buy.js';\nimport { registerBudgetCheckPrompt } from './budget-check.js';\nimport { registerPurchaseStatusPrompt } from './purchase-status.js';\n\nexport function registerPrompts(server: McpServer) {\n registerBuyPrompt(server);\n registerBudgetCheckPrompt(server);\n registerPurchaseStatusPrompt(server);\n}\n"],"mappings":"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","names":["AgentPay","z","z","z","z","z","z","z","z","AgentPay"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@useagentpay/mcp-server",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.3",
|
|
4
4
|
"mcpName": "io.github.kar69-96/agentpay",
|
|
5
5
|
"description": "MCP server for AgentPay – exposes payment tools to AI agents",
|
|
6
6
|
"type": "module",
|
|
@@ -25,7 +25,7 @@
|
|
|
25
25
|
"clean": "rm -rf dist"
|
|
26
26
|
},
|
|
27
27
|
"dependencies": {
|
|
28
|
-
"@useagentpay/sdk": "
|
|
28
|
+
"@useagentpay/sdk": "^0.1.1",
|
|
29
29
|
"@modelcontextprotocol/sdk": "^1.12.0",
|
|
30
30
|
"zod": "^3.25.0 || ^4.0.0"
|
|
31
31
|
},
|