@ecadlabs/tezosx-mcp 1.0.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 (51) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +335 -0
  3. package/dist/adapters/index.d.ts +37 -0
  4. package/dist/adapters/index.js +57 -0
  5. package/dist/adapters/node.d.ts +18 -0
  6. package/dist/adapters/node.js +35 -0
  7. package/dist/adapters/types.d.ts +52 -0
  8. package/dist/adapters/types.js +25 -0
  9. package/dist/adapters/worker.d.ts +35 -0
  10. package/dist/adapters/worker.js +50 -0
  11. package/dist/index.d.ts +8 -0
  12. package/dist/index.js +144 -0
  13. package/dist/server.d.ts +36 -0
  14. package/dist/server.js +80 -0
  15. package/dist/tools/create_x402_payment.d.ts +27 -0
  16. package/dist/tools/create_x402_payment.js +55 -0
  17. package/dist/tools/fetch_with_x402.d.ts +28 -0
  18. package/dist/tools/fetch_with_x402.js +143 -0
  19. package/dist/tools/get_address.d.ts +20 -0
  20. package/dist/tools/get_address.js +24 -0
  21. package/dist/tools/get_addresses.d.ts +22 -0
  22. package/dist/tools/get_addresses.js +32 -0
  23. package/dist/tools/get_balance.d.ts +22 -0
  24. package/dist/tools/get_balance.js +27 -0
  25. package/dist/tools/get_dashboard.d.ts +21 -0
  26. package/dist/tools/get_dashboard.js +29 -0
  27. package/dist/tools/get_limits.d.ts +22 -0
  28. package/dist/tools/get_limits.js +61 -0
  29. package/dist/tools/get_operation_history.d.ts +21 -0
  30. package/dist/tools/get_operation_history.js +58 -0
  31. package/dist/tools/index.d.ts +113 -0
  32. package/dist/tools/index.js +59 -0
  33. package/dist/tools/parse_x402_requirements.d.ts +23 -0
  34. package/dist/tools/parse_x402_requirements.js +66 -0
  35. package/dist/tools/reveal_account.d.ts +34 -0
  36. package/dist/tools/reveal_account.js +51 -0
  37. package/dist/tools/send_xtz.d.ts +32 -0
  38. package/dist/tools/send_xtz.js +86 -0
  39. package/dist/tools/x402/sign.d.ts +12 -0
  40. package/dist/tools/x402/sign.js +76 -0
  41. package/dist/tools/x402/types.d.ts +40 -0
  42. package/dist/tools/x402/types.js +16 -0
  43. package/dist/webserver.d.ts +1 -0
  44. package/dist/webserver.js +10 -0
  45. package/dist/worker.bundle.js +134265 -0
  46. package/dist/worker.d.ts +13 -0
  47. package/dist/worker.js +132 -0
  48. package/frontend/dist/assets/index-RtTL1nIl.js +257 -0
  49. package/frontend/dist/assets/index-mSsI3AqQ.css +1 -0
  50. package/frontend/dist/index.html +16 -0
  51. package/package.json +70 -0
@@ -0,0 +1,13 @@
1
+ /**
2
+ * TezosX MCP Server - Cloudflare Workers Entry Point
3
+ *
4
+ * This entry point is for Cloudflare Workers deployment.
5
+ * For local development with Node.js, see index.ts
6
+ */
7
+ import { type WorkerEnv } from "./adapters/index.js";
8
+ export interface Env extends WorkerEnv {
9
+ }
10
+ declare const _default: {
11
+ fetch(request: Request, env: Env, ctx: ExecutionContext): Promise<Response>;
12
+ };
13
+ export default _default;
package/dist/worker.js ADDED
@@ -0,0 +1,132 @@
1
+ /**
2
+ * TezosX MCP Server - Cloudflare Workers Entry Point
3
+ *
4
+ * This entry point is for Cloudflare Workers deployment.
5
+ * For local development with Node.js, see index.ts
6
+ */
7
+ /// <reference types="@cloudflare/workers-types" />
8
+ import { StreamableHTTPServerTransport } from "@modelcontextprotocol/sdk/server/streamableHttp.js";
9
+ import { createWorkerAdapter, setAdapter } from "./adapters/index.js";
10
+ import { createMcpServer } from "./server.js";
11
+ // Cache the server config to avoid re-initializing on every request
12
+ let serverConfigPromise = null;
13
+ let currentAdapter = null;
14
+ async function getServerConfig(env) {
15
+ // Create or update the adapter with the current request's env
16
+ if (!currentAdapter) {
17
+ currentAdapter = createWorkerAdapter(env);
18
+ setAdapter(currentAdapter);
19
+ }
20
+ else {
21
+ currentAdapter.setEnv(env);
22
+ }
23
+ // Initialize the server if not already done
24
+ if (!serverConfigPromise) {
25
+ serverConfigPromise = createMcpServer(currentAdapter);
26
+ }
27
+ return serverConfigPromise;
28
+ }
29
+ /**
30
+ * Handle incoming requests
31
+ */
32
+ async function handleRequest(request, env, ctx) {
33
+ const url = new URL(request.url);
34
+ const { server } = await getServerConfig(env);
35
+ // Log incoming request
36
+ console.log(`[tezosx-mcp] ${request.method} ${url.pathname}`);
37
+ // Handle MCP endpoint
38
+ if (url.pathname === '/mcp' && request.method === 'POST') {
39
+ try {
40
+ const httpTransport = new StreamableHTTPServerTransport({
41
+ sessionIdGenerator: undefined,
42
+ enableJsonResponse: true
43
+ });
44
+ // Connect the server to this transport
45
+ await server.connect(httpTransport);
46
+ // Create a mock request/response for the transport
47
+ const body = await request.json();
48
+ // Handle the MCP request and get the response
49
+ const responsePromise = new Promise((resolve) => {
50
+ const mockRes = {
51
+ statusCode: 200,
52
+ headers: {},
53
+ body: '',
54
+ setHeader(name, value) {
55
+ this.headers[name] = value;
56
+ },
57
+ status(code) {
58
+ this.statusCode = code;
59
+ return this;
60
+ },
61
+ json(data) {
62
+ this.headers['Content-Type'] = 'application/json';
63
+ this.body = JSON.stringify(data);
64
+ resolve(new Response(this.body, {
65
+ status: this.statusCode,
66
+ headers: this.headers
67
+ }));
68
+ },
69
+ send(data) {
70
+ this.body = data;
71
+ resolve(new Response(this.body, {
72
+ status: this.statusCode,
73
+ headers: this.headers
74
+ }));
75
+ },
76
+ end(data) {
77
+ if (data)
78
+ this.body = data;
79
+ resolve(new Response(this.body, {
80
+ status: this.statusCode,
81
+ headers: this.headers
82
+ }));
83
+ },
84
+ on(_event, _handler) {
85
+ // No-op for Workers
86
+ }
87
+ };
88
+ const mockReq = {
89
+ method: request.method,
90
+ url: url.pathname,
91
+ headers: Object.fromEntries(request.headers.entries()),
92
+ body
93
+ };
94
+ httpTransport.handleRequest(mockReq, mockRes, body);
95
+ });
96
+ return await responsePromise;
97
+ }
98
+ catch (error) {
99
+ console.error('[tezosx-mcp] MCP request error:', error);
100
+ return new Response(JSON.stringify({
101
+ error: 'Internal server error',
102
+ message: error instanceof Error ? error.message : 'Unknown error'
103
+ }), {
104
+ status: 500,
105
+ headers: { 'Content-Type': 'application/json' }
106
+ });
107
+ }
108
+ }
109
+ // Health check endpoint
110
+ if (url.pathname === '/health' || url.pathname === '/') {
111
+ return new Response(JSON.stringify({
112
+ status: 'ok',
113
+ service: 'tezosx-mcp',
114
+ version: '1.0.0',
115
+ environment: 'cloudflare-workers'
116
+ }), {
117
+ status: 200,
118
+ headers: { 'Content-Type': 'application/json' }
119
+ });
120
+ }
121
+ // 404 for unknown routes
122
+ return new Response(JSON.stringify({ error: 'Not found' }), {
123
+ status: 404,
124
+ headers: { 'Content-Type': 'application/json' }
125
+ });
126
+ }
127
+ // Export the Worker fetch handler
128
+ export default {
129
+ async fetch(request, env, ctx) {
130
+ return handleRequest(request, env, ctx);
131
+ }
132
+ };