@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 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 | Description |
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-brasil) or [request a tool](https://github.com/codespar/mcp-dev-brasil/issues).
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 Brasil](https://github.com/codespar/mcp-dev-brasil)
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
- const server = new Server({ name: "mcp-bitso", version: "0.2.0" }, { capabilities: { tools: {} } });
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.0" }, { capabilities: { tools: {} } });
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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@codespar/mcp-bitso",
3
- "version": "0.2.0",
3
+ "version": "0.2.2",
4
4
  "description": "MCP server for Bitso — Latin American crypto exchange, trading, funding, withdrawals",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
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-brasil",
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.0",
10
+ "version": "0.2.2",
11
11
  "packages": [
12
12
  {
13
13
  "registryType": "npm",
14
14
  "identifier": "@codespar/mcp-bitso",
15
- "version": "0.2.0",
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 10 tools", async () => {
36
+ it("should register 20 tools", async () => {
37
37
  const result = await listToolsHandler();
38
- expect(result.tools).toHaveLength(10);
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.0" },
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.0" }, { 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);
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 });