@curless/agentbank-mcp 0.0.1
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 +41 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +32 -0
- package/dist/index.js.map +1 -0
- package/dist/tools.d.ts +71 -0
- package/dist/tools.d.ts.map +1 -0
- package/dist/tools.js +102 -0
- package/dist/tools.js.map +1 -0
- package/package.json +36 -0
package/README.md
ADDED
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
# @curless/agentbank-mcp
|
|
2
|
+
|
|
3
|
+
MCP server for agentbank — Curless's gateway for AI-agent payments. Lets your local AI agent (Claude Desktop, Cursor, etc.) discover Curless merchants and pay them through agent payment protocols.
|
|
4
|
+
|
|
5
|
+
## Install
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
npx @curless/agentbank-mcp
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
## Claude Desktop config
|
|
12
|
+
|
|
13
|
+
```jsonc
|
|
14
|
+
// ~/Library/Application Support/Claude/claude_desktop_config.json
|
|
15
|
+
{
|
|
16
|
+
"mcpServers": {
|
|
17
|
+
"agentbank": {
|
|
18
|
+
"command": "npx",
|
|
19
|
+
"args": ["-y", "@curless/agentbank-mcp"],
|
|
20
|
+
"env": {
|
|
21
|
+
"AGENTBANK_API_URL": "https://api.agentbank.example",
|
|
22
|
+
"AGENTBANK_AGENT_TOKEN": "agt_..."
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
## Tools
|
|
30
|
+
|
|
31
|
+
- `list_merchants` — list merchants, optionally by category
|
|
32
|
+
- `get_merchant` — full merchant info
|
|
33
|
+
- `get_agent_card` — A2A / ACP compatible agent card
|
|
34
|
+
- `invoke_skill` — call a skill (e.g. `search_availability`, `book_room`, `order_item`)
|
|
35
|
+
|
|
36
|
+
## Local dev
|
|
37
|
+
|
|
38
|
+
```bash
|
|
39
|
+
export AGENTBANK_API_URL=http://localhost:3000
|
|
40
|
+
pnpm dev
|
|
41
|
+
```
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":""}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { Server } from '@modelcontextprotocol/sdk/server/index.js';
|
|
3
|
+
import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
|
|
4
|
+
import { CallToolRequestSchema, ListToolsRequestSchema } from '@modelcontextprotocol/sdk/types.js';
|
|
5
|
+
import { TOOLS, dispatchTool } from './tools.js';
|
|
6
|
+
// The MCP server is a thin proxy over the agentbank HTTP API. It does
|
|
7
|
+
// not talk to Curless or the database directly; everything goes through
|
|
8
|
+
// /v1/* so authentication, rate limiting and audit logging stay in one
|
|
9
|
+
// place. Tool definitions + dispatch live in tools.ts (unit-tested).
|
|
10
|
+
const API_BASE = process.env.AGENTBANK_API_URL ?? 'http://localhost:3000';
|
|
11
|
+
const AGENT_TOKEN = process.env.AGENTBANK_AGENT_TOKEN;
|
|
12
|
+
const fetchApi = async (path, init = {}) => {
|
|
13
|
+
const res = await fetch(`${API_BASE}${path}`, {
|
|
14
|
+
...init,
|
|
15
|
+
headers: {
|
|
16
|
+
'content-type': 'application/json',
|
|
17
|
+
...(AGENT_TOKEN ? { authorization: `Bearer ${AGENT_TOKEN}` } : {}),
|
|
18
|
+
...(init.headers ?? {}),
|
|
19
|
+
},
|
|
20
|
+
});
|
|
21
|
+
if (!res.ok) {
|
|
22
|
+
const body = await res.text().catch(() => '');
|
|
23
|
+
throw new Error(`agentbank API ${res.status}: ${body}`);
|
|
24
|
+
}
|
|
25
|
+
return (await res.json());
|
|
26
|
+
};
|
|
27
|
+
const server = new Server({ name: 'agentbank-mcp', version: '0.0.1' }, { capabilities: { tools: {} } });
|
|
28
|
+
server.setRequestHandler(ListToolsRequestSchema, async () => ({ tools: TOOLS }));
|
|
29
|
+
server.setRequestHandler(CallToolRequestSchema, async (req) => dispatchTool(req.params.name, req.params.arguments, fetchApi));
|
|
30
|
+
const transport = new StdioServerTransport();
|
|
31
|
+
await server.connect(transport);
|
|
32
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AACnE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EAAE,qBAAqB,EAAE,sBAAsB,EAAE,MAAM,oCAAoC,CAAC;AACnG,OAAO,EAAE,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAEjD,sEAAsE;AACtE,wEAAwE;AACxE,uEAAuE;AACvE,qEAAqE;AAErE,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,iBAAiB,IAAI,uBAAuB,CAAC;AAC1E,MAAM,WAAW,GAAG,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC;AAEtD,MAAM,QAAQ,GAAG,KAAK,EAAK,IAAY,EAAE,OAAoB,EAAE,EAAc,EAAE;IAC7E,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,QAAQ,GAAG,IAAI,EAAE,EAAE;QAC5C,GAAG,IAAI;QACP,OAAO,EAAE;YACP,cAAc,EAAE,kBAAkB;YAClC,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,UAAU,WAAW,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAClE,GAAG,CAAC,IAAI,CAAC,OAAO,IAAI,EAAE,CAAC;SACxB;KACF,CAAC,CAAC;IACH,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;QACZ,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;QAC9C,MAAM,IAAI,KAAK,CAAC,iBAAiB,GAAG,CAAC,MAAM,KAAK,IAAI,EAAE,CAAC,CAAC;IAC1D,CAAC;IACD,OAAO,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,CAAM,CAAC;AACjC,CAAC,CAAC;AAEF,MAAM,MAAM,GAAG,IAAI,MAAM,CACvB,EAAE,IAAI,EAAE,eAAe,EAAE,OAAO,EAAE,OAAO,EAAE,EAC3C,EAAE,YAAY,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE,CAChC,CAAC;AAEF,MAAM,CAAC,iBAAiB,CAAC,sBAAsB,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;AACjF,MAAM,CAAC,iBAAiB,CAAC,qBAAqB,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE,CAC5D,YAAY,CACV,GAAG,CAAC,MAAM,CAAC,IAAI,EACf,GAAG,CAAC,MAAM,CAAC,SAAgD,EAC3D,QAAQ,CACT,CACF,CAAC;AAEF,MAAM,SAAS,GAAG,IAAI,oBAAoB,EAAE,CAAC;AAC7C,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC"}
|
package/dist/tools.d.ts
ADDED
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
export type FetchApi = <T>(path: string, init?: RequestInit) => Promise<T>;
|
|
2
|
+
export type ToolResult = {
|
|
3
|
+
content: Array<{
|
|
4
|
+
type: 'text';
|
|
5
|
+
text: string;
|
|
6
|
+
}>;
|
|
7
|
+
isError?: boolean;
|
|
8
|
+
};
|
|
9
|
+
export declare const TOOLS: readonly [{
|
|
10
|
+
readonly name: "list_merchants";
|
|
11
|
+
readonly description: "List Curless merchants available to pay, optionally filtered by category.";
|
|
12
|
+
readonly inputSchema: {
|
|
13
|
+
readonly type: "object";
|
|
14
|
+
readonly properties: {
|
|
15
|
+
readonly category: {
|
|
16
|
+
readonly type: "string";
|
|
17
|
+
readonly enum: readonly ["hotel", "food", "flight", "marketplace", "generic"];
|
|
18
|
+
};
|
|
19
|
+
readonly limit: {
|
|
20
|
+
readonly type: "integer";
|
|
21
|
+
};
|
|
22
|
+
readonly offset: {
|
|
23
|
+
readonly type: "integer";
|
|
24
|
+
};
|
|
25
|
+
};
|
|
26
|
+
};
|
|
27
|
+
}, {
|
|
28
|
+
readonly name: "get_merchant";
|
|
29
|
+
readonly description: "Get detailed info about a Curless merchant.";
|
|
30
|
+
readonly inputSchema: {
|
|
31
|
+
readonly type: "object";
|
|
32
|
+
readonly required: readonly ["merchantId"];
|
|
33
|
+
readonly properties: {
|
|
34
|
+
readonly merchantId: {
|
|
35
|
+
readonly type: "string";
|
|
36
|
+
};
|
|
37
|
+
};
|
|
38
|
+
};
|
|
39
|
+
}, {
|
|
40
|
+
readonly name: "get_agent_card";
|
|
41
|
+
readonly description: "Get the protocol-native agent card for a Curless merchant, including its available skills (A2A / ACP compatible).";
|
|
42
|
+
readonly inputSchema: {
|
|
43
|
+
readonly type: "object";
|
|
44
|
+
readonly required: readonly ["merchantId"];
|
|
45
|
+
readonly properties: {
|
|
46
|
+
readonly merchantId: {
|
|
47
|
+
readonly type: "string";
|
|
48
|
+
};
|
|
49
|
+
};
|
|
50
|
+
};
|
|
51
|
+
}, {
|
|
52
|
+
readonly name: "invoke_skill";
|
|
53
|
+
readonly description: "Invoke a skill on a merchant agent — e.g. search_availability, quote_room, book_room, browse_menu, order_item. Discover skill ids + their inputs via get_agent_card first.";
|
|
54
|
+
readonly inputSchema: {
|
|
55
|
+
readonly type: "object";
|
|
56
|
+
readonly required: readonly ["merchantId", "skillId"];
|
|
57
|
+
readonly properties: {
|
|
58
|
+
readonly merchantId: {
|
|
59
|
+
readonly type: "string";
|
|
60
|
+
};
|
|
61
|
+
readonly skillId: {
|
|
62
|
+
readonly type: "string";
|
|
63
|
+
};
|
|
64
|
+
readonly input: {
|
|
65
|
+
readonly type: "object";
|
|
66
|
+
};
|
|
67
|
+
};
|
|
68
|
+
};
|
|
69
|
+
}];
|
|
70
|
+
export declare const dispatchTool: (name: string, rawArgs: Record<string, unknown> | undefined, fetchApi: FetchApi) => Promise<ToolResult>;
|
|
71
|
+
//# sourceMappingURL=tools.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../src/tools.ts"],"names":[],"mappings":"AAOA,MAAM,MAAM,QAAQ,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,WAAW,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC;AAE3E,MAAM,MAAM,UAAU,GAAG;IACvB,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC/C,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB,CAAC;AAEF,eAAO,MAAM,KAAK;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA8CR,CAAC;AA6BX,eAAO,MAAM,YAAY,GACvB,MAAM,MAAM,EACZ,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,EAC5C,UAAU,QAAQ,KACjB,OAAO,CAAC,UAAU,CAsCpB,CAAC"}
|
package/dist/tools.js
ADDED
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
export const TOOLS = [
|
|
3
|
+
{
|
|
4
|
+
name: 'list_merchants',
|
|
5
|
+
description: 'List Curless merchants available to pay, optionally filtered by category.',
|
|
6
|
+
inputSchema: {
|
|
7
|
+
type: 'object',
|
|
8
|
+
properties: {
|
|
9
|
+
category: { type: 'string', enum: ['hotel', 'food', 'flight', 'marketplace', 'generic'] },
|
|
10
|
+
limit: { type: 'integer' },
|
|
11
|
+
offset: { type: 'integer' },
|
|
12
|
+
},
|
|
13
|
+
},
|
|
14
|
+
},
|
|
15
|
+
{
|
|
16
|
+
name: 'get_merchant',
|
|
17
|
+
description: 'Get detailed info about a Curless merchant.',
|
|
18
|
+
inputSchema: {
|
|
19
|
+
type: 'object',
|
|
20
|
+
required: ['merchantId'],
|
|
21
|
+
properties: { merchantId: { type: 'string' } },
|
|
22
|
+
},
|
|
23
|
+
},
|
|
24
|
+
{
|
|
25
|
+
name: 'get_agent_card',
|
|
26
|
+
description: 'Get the protocol-native agent card for a Curless merchant, including its available skills (A2A / ACP compatible).',
|
|
27
|
+
inputSchema: {
|
|
28
|
+
type: 'object',
|
|
29
|
+
required: ['merchantId'],
|
|
30
|
+
properties: { merchantId: { type: 'string' } },
|
|
31
|
+
},
|
|
32
|
+
},
|
|
33
|
+
{
|
|
34
|
+
name: 'invoke_skill',
|
|
35
|
+
description: 'Invoke a skill on a merchant agent — e.g. search_availability, quote_room, book_room, browse_menu, order_item. Discover skill ids + their inputs via get_agent_card first.',
|
|
36
|
+
inputSchema: {
|
|
37
|
+
type: 'object',
|
|
38
|
+
required: ['merchantId', 'skillId'],
|
|
39
|
+
properties: {
|
|
40
|
+
merchantId: { type: 'string' },
|
|
41
|
+
skillId: { type: 'string' },
|
|
42
|
+
input: { type: 'object' },
|
|
43
|
+
},
|
|
44
|
+
},
|
|
45
|
+
},
|
|
46
|
+
];
|
|
47
|
+
const ok = (out) => ({
|
|
48
|
+
content: [{ type: 'text', text: JSON.stringify(out, null, 2) }],
|
|
49
|
+
});
|
|
50
|
+
const fail = (message) => ({
|
|
51
|
+
content: [{ type: 'text', text: `Error: ${message}` }],
|
|
52
|
+
isError: true,
|
|
53
|
+
});
|
|
54
|
+
const listMerchantsSchema = z.object({
|
|
55
|
+
category: z.enum(['hotel', 'food', 'flight', 'marketplace', 'generic']).optional(),
|
|
56
|
+
limit: z.number().int().positive().optional(),
|
|
57
|
+
offset: z.number().int().nonnegative().optional(),
|
|
58
|
+
});
|
|
59
|
+
const merchantSchema = z.object({ merchantId: z.string().min(1) });
|
|
60
|
+
const invokeSchema = z.object({
|
|
61
|
+
merchantId: z.string().min(1),
|
|
62
|
+
skillId: z.string().min(1),
|
|
63
|
+
input: z.record(z.unknown()).default({}),
|
|
64
|
+
});
|
|
65
|
+
const qs = (params) => {
|
|
66
|
+
const entries = Object.entries(params)
|
|
67
|
+
.filter(([, v]) => v !== undefined)
|
|
68
|
+
.map(([k, v]) => [k, String(v)]);
|
|
69
|
+
return entries.length ? `?${new URLSearchParams(entries)}` : '';
|
|
70
|
+
};
|
|
71
|
+
export const dispatchTool = async (name, rawArgs, fetchApi) => {
|
|
72
|
+
const args = rawArgs ?? {};
|
|
73
|
+
try {
|
|
74
|
+
switch (name) {
|
|
75
|
+
case 'list_merchants': {
|
|
76
|
+
const a = listMerchantsSchema.parse(args);
|
|
77
|
+
return ok(await fetchApi(`/v1/merchants${qs({ category: a.category, limit: a.limit, offset: a.offset })}`));
|
|
78
|
+
}
|
|
79
|
+
case 'get_merchant': {
|
|
80
|
+
const a = merchantSchema.parse(args);
|
|
81
|
+
return ok(await fetchApi(`/v1/merchants/${encodeURIComponent(a.merchantId)}`));
|
|
82
|
+
}
|
|
83
|
+
case 'get_agent_card': {
|
|
84
|
+
const a = merchantSchema.parse(args);
|
|
85
|
+
return ok(await fetchApi(`/v1/merchants/${encodeURIComponent(a.merchantId)}/agent-card`));
|
|
86
|
+
}
|
|
87
|
+
case 'invoke_skill': {
|
|
88
|
+
const a = invokeSchema.parse(args);
|
|
89
|
+
return ok(await fetchApi(`/v1/merchants/${encodeURIComponent(a.merchantId)}/skills/${encodeURIComponent(a.skillId)}/invoke`, { method: 'POST', body: JSON.stringify(a.input) }));
|
|
90
|
+
}
|
|
91
|
+
default:
|
|
92
|
+
return fail(`unknown tool: ${name}`);
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
catch (err) {
|
|
96
|
+
if (err instanceof z.ZodError) {
|
|
97
|
+
return fail(`invalid arguments for ${name}: ${JSON.stringify(err.issues)}`);
|
|
98
|
+
}
|
|
99
|
+
return fail(err.message);
|
|
100
|
+
}
|
|
101
|
+
};
|
|
102
|
+
//# sourceMappingURL=tools.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tools.js","sourceRoot":"","sources":["../src/tools.ts"],"names":[],"mappings":"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"}
|
package/package.json
ADDED
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@curless/agentbank-mcp",
|
|
3
|
+
"version": "0.0.1",
|
|
4
|
+
"description": "MCP server for agentbank — let your AI agent discover Curless merchants and pay them.",
|
|
5
|
+
"license": "MIT",
|
|
6
|
+
"type": "module",
|
|
7
|
+
"bin": {
|
|
8
|
+
"agentbank-mcp": "dist/index.js"
|
|
9
|
+
},
|
|
10
|
+
"main": "dist/index.js",
|
|
11
|
+
"types": "dist/index.d.ts",
|
|
12
|
+
"files": ["dist", "README.md"],
|
|
13
|
+
"scripts": {
|
|
14
|
+
"build": "tsc",
|
|
15
|
+
"dev": "tsx src/index.ts",
|
|
16
|
+
"start": "node dist/index.js",
|
|
17
|
+
"typecheck": "tsc --noEmit",
|
|
18
|
+
"test": "vitest run",
|
|
19
|
+
"clean": "rm -rf dist",
|
|
20
|
+
"prepublishOnly": "npm run build"
|
|
21
|
+
},
|
|
22
|
+
"dependencies": {
|
|
23
|
+
"@modelcontextprotocol/sdk": "^1.0.4",
|
|
24
|
+
"zod": "^3.23.8"
|
|
25
|
+
},
|
|
26
|
+
"devDependencies": {
|
|
27
|
+
"@types/node": "^22.10.1",
|
|
28
|
+
"tsx": "^4.19.2",
|
|
29
|
+
"typescript": "^5.6.3",
|
|
30
|
+
"vitest": "^2.1.9"
|
|
31
|
+
},
|
|
32
|
+
"engines": {
|
|
33
|
+
"node": ">=22"
|
|
34
|
+
},
|
|
35
|
+
"keywords": ["mcp", "agentbank", "curless", "agent", "payments", "claude", "cursor"]
|
|
36
|
+
}
|