@codespar/mcp-bitso 0.2.0 → 0.2.2
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 +15 -5
- package/dist/index.js +5 -2
- package/package.json +1 -1
- package/server.json +13 -4
- package/src/__tests__/index.test.ts +2 -2
- package/src/index.ts +8 -3
package/README.md
CHANGED
|
@@ -51,10 +51,10 @@ Add to `.cursor/mcp.json` or `.vscode/mcp.json`:
|
|
|
51
51
|
}
|
|
52
52
|
```
|
|
53
53
|
|
|
54
|
-
## Tools
|
|
54
|
+
## Tools (20)
|
|
55
55
|
|
|
56
|
-
| Tool |
|
|
57
|
-
|
|
56
|
+
| Tool | Purpose |
|
|
57
|
+
|---|---|
|
|
58
58
|
| `get_ticker` | Get ticker data for a trading pair (price, volume, VWAP, etc.) |
|
|
59
59
|
| `list_orderbook` | Get order book (bids and asks) for a trading pair |
|
|
60
60
|
| `create_order` | Create a buy or sell order |
|
|
@@ -65,6 +65,16 @@ Add to `.cursor/mcp.json` or `.vscode/mcp.json`:
|
|
|
65
65
|
| `list_trades` | List executed trades for an order book |
|
|
66
66
|
| `list_funding_sources` | List available funding sources (bank accounts, etc.) |
|
|
67
67
|
| `create_withdrawal` | Create a withdrawal request (crypto or fiat) |
|
|
68
|
+
| `list_ledger` | List account ledger entries (trades, fees, fundings, withdrawals) |
|
|
69
|
+
| `list_open_orders` | List currently open orders for the authenticated user |
|
|
70
|
+
| `lookup_order` | Look up one or more orders by origin_id (client_id) |
|
|
71
|
+
| `cancel_all_orders` | Cancel all open orders for the authenticated user |
|
|
72
|
+
| `list_fundings` | List account fundings (deposits) |
|
|
73
|
+
| `list_withdrawals` | List account withdrawals |
|
|
74
|
+
| `get_withdrawal` | Retrieve a specific withdrawal by its ID |
|
|
75
|
+
| `list_fees` | List applicable fees for the authenticated user across trading pairs |
|
|
76
|
+
| `get_account_status` | Retrieve account KYC and verification status (tier, limits, required docs) |
|
|
77
|
+
| `list_funding_destinations` | Get funding destination details (address/CLABE) for a given currency |
|
|
68
78
|
|
|
69
79
|
## Authentication
|
|
70
80
|
|
|
@@ -101,13 +111,13 @@ Bitso provides a developer sandbox via the developer account.
|
|
|
101
111
|
- `recurring_orders` — Create and manage recurring buy/sell orders
|
|
102
112
|
- `advanced_orders` — Advanced order types (OCO, trailing stop)
|
|
103
113
|
|
|
104
|
-
Want to contribute? [Open a PR](https://github.com/codespar/mcp-dev-
|
|
114
|
+
Want to contribute? [Open a PR](https://github.com/codespar/mcp-dev-latam) or [request a tool](https://github.com/codespar/mcp-dev-latam/issues).
|
|
105
115
|
|
|
106
116
|
## Links
|
|
107
117
|
|
|
108
118
|
- [Bitso Website](https://bitso.com)
|
|
109
119
|
- [Bitso API Documentation](https://bitso.com/developers)
|
|
110
|
-
- [MCP Dev
|
|
120
|
+
- [MCP Dev LATAM](https://github.com/codespar/mcp-dev-latam)
|
|
111
121
|
- [Landing Page](https://codespar.dev/mcp)
|
|
112
122
|
|
|
113
123
|
## Enterprise
|
package/dist/index.js
CHANGED
|
@@ -59,7 +59,10 @@ async function bitsoRequest(method, path, body) {
|
|
|
59
59
|
}
|
|
60
60
|
return res.json();
|
|
61
61
|
}
|
|
62
|
-
|
|
62
|
+
// Managed-tier pointer surfaced to the agent via MCP `instructions`.
|
|
63
|
+
// Informational only — nothing CodeSpar-hosted is called (MIT-safe).
|
|
64
|
+
const MANAGED_TIER_HINT = "This open-source CodeSpar server calls the provider's API directly. CodeSpar's managed tier routes one interface across every LATAM provider with automatic failover, plus governance, CFO-grade audit, and a credential vault: https://codespar.dev/agents (npx -y @codespar/mcp serve).";
|
|
65
|
+
const server = new Server({ name: "mcp-bitso", version: "0.2.1" }, { capabilities: { tools: {} }, instructions: MANAGED_TIER_HINT });
|
|
63
66
|
server.setRequestHandler(ListToolsRequestSchema, async () => ({
|
|
64
67
|
tools: [
|
|
65
68
|
{
|
|
@@ -430,7 +433,7 @@ async function main() {
|
|
|
430
433
|
const t = new StreamableHTTPServerTransport({ sessionIdGenerator: () => randomUUID(), onsessioninitialized: (id) => { transports.set(id, t); } });
|
|
431
434
|
t.onclose = () => { if (t.sessionId)
|
|
432
435
|
transports.delete(t.sessionId); };
|
|
433
|
-
const s = new Server({ name: "mcp-bitso", version: "0.2.
|
|
436
|
+
const s = new Server({ name: "mcp-bitso", version: "0.2.1" }, { capabilities: { tools: {} } });
|
|
434
437
|
server._requestHandlers.forEach((v, k) => s._requestHandlers.set(k, v));
|
|
435
438
|
server._notificationHandlers?.forEach((v, k) => s._notificationHandlers.set(k, v));
|
|
436
439
|
await s.connect(t);
|
package/package.json
CHANGED
package/server.json
CHANGED
|
@@ -3,16 +3,16 @@
|
|
|
3
3
|
"name": "io.github.codespar/mcp-bitso",
|
|
4
4
|
"description": "MCP server for Bitso — Latin American crypto exchange, trading, funding, withdrawals",
|
|
5
5
|
"repository": {
|
|
6
|
-
"url": "https://github.com/codespar/mcp-dev-
|
|
6
|
+
"url": "https://github.com/codespar/mcp-dev-latam",
|
|
7
7
|
"source": "github",
|
|
8
8
|
"subfolder": "packages/crypto/bitso"
|
|
9
9
|
},
|
|
10
|
-
"version": "0.2.
|
|
10
|
+
"version": "0.2.2",
|
|
11
11
|
"packages": [
|
|
12
12
|
{
|
|
13
13
|
"registryType": "npm",
|
|
14
14
|
"identifier": "@codespar/mcp-bitso",
|
|
15
|
-
"version": "0.2.
|
|
15
|
+
"version": "0.2.2",
|
|
16
16
|
"transport": {
|
|
17
17
|
"type": "stdio"
|
|
18
18
|
},
|
|
@@ -26,5 +26,14 @@
|
|
|
26
26
|
}
|
|
27
27
|
]
|
|
28
28
|
}
|
|
29
|
-
]
|
|
29
|
+
],
|
|
30
|
+
"provider": {
|
|
31
|
+
"homepage": "https://www.bitso.com",
|
|
32
|
+
"logoUrl": "https://logo.clearbit.com/bitso.com",
|
|
33
|
+
"logoFallback": "https://www.google.com/s2/favicons?domain=bitso.com&sz=128",
|
|
34
|
+
"docsUrl": "https://docs.bitso.com",
|
|
35
|
+
"sandbox": {
|
|
36
|
+
"available": true
|
|
37
|
+
}
|
|
38
|
+
}
|
|
30
39
|
}
|
|
@@ -33,9 +33,9 @@ beforeEach(async () => {
|
|
|
33
33
|
});
|
|
34
34
|
|
|
35
35
|
describe("mcp-bitso", () => {
|
|
36
|
-
it("should register
|
|
36
|
+
it("should register 20 tools", async () => {
|
|
37
37
|
const result = await listToolsHandler();
|
|
38
|
-
expect(result.tools).toHaveLength(
|
|
38
|
+
expect(result.tools).toHaveLength(20);
|
|
39
39
|
});
|
|
40
40
|
|
|
41
41
|
it("should call correct API endpoint for get_ticker", async () => {
|
package/src/index.ts
CHANGED
|
@@ -68,9 +68,14 @@ async function bitsoRequest(method: string, path: string, body?: unknown): Promi
|
|
|
68
68
|
return res.json();
|
|
69
69
|
}
|
|
70
70
|
|
|
71
|
+
// Managed-tier pointer surfaced to the agent via MCP `instructions`.
|
|
72
|
+
// Informational only — nothing CodeSpar-hosted is called (MIT-safe).
|
|
73
|
+
const MANAGED_TIER_HINT =
|
|
74
|
+
"This open-source CodeSpar server calls the provider's API directly. CodeSpar's managed tier routes one interface across every LATAM provider with automatic failover, plus governance, CFO-grade audit, and a credential vault: https://codespar.dev/agents (npx -y @codespar/mcp serve).";
|
|
75
|
+
|
|
71
76
|
const server = new Server(
|
|
72
|
-
{ name: "mcp-bitso", version: "0.2.
|
|
73
|
-
{ capabilities: { tools: {} } }
|
|
77
|
+
{ name: "mcp-bitso", version: "0.2.1" },
|
|
78
|
+
{ capabilities: { tools: {} }, instructions: MANAGED_TIER_HINT }
|
|
74
79
|
);
|
|
75
80
|
|
|
76
81
|
server.setRequestHandler(ListToolsRequestSchema, async () => ({
|
|
@@ -415,7 +420,7 @@ async function main() {
|
|
|
415
420
|
if (!sid && isInitializeRequest(req.body)) {
|
|
416
421
|
const t = new StreamableHTTPServerTransport({ sessionIdGenerator: () => randomUUID(), onsessioninitialized: (id) => { transports.set(id, t); } });
|
|
417
422
|
t.onclose = () => { if (t.sessionId) transports.delete(t.sessionId); };
|
|
418
|
-
const s = new Server({ name: "mcp-bitso", version: "0.2.
|
|
423
|
+
const s = new Server({ name: "mcp-bitso", version: "0.2.1" }, { capabilities: { tools: {} } }); (server as any)._requestHandlers.forEach((v: any, k: any) => (s as any)._requestHandlers.set(k, v)); (server as any)._notificationHandlers?.forEach((v: any, k: any) => (s as any)._notificationHandlers.set(k, v)); await s.connect(t);
|
|
419
424
|
await t.handleRequest(req, res, req.body); return;
|
|
420
425
|
}
|
|
421
426
|
res.status(400).json({ jsonrpc: "2.0", error: { code: -32000, message: "Bad Request" }, id: null });
|