@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.
- package/LICENSE +201 -0
- package/README.md +335 -0
- package/dist/adapters/index.d.ts +37 -0
- package/dist/adapters/index.js +57 -0
- package/dist/adapters/node.d.ts +18 -0
- package/dist/adapters/node.js +35 -0
- package/dist/adapters/types.d.ts +52 -0
- package/dist/adapters/types.js +25 -0
- package/dist/adapters/worker.d.ts +35 -0
- package/dist/adapters/worker.js +50 -0
- package/dist/index.d.ts +8 -0
- package/dist/index.js +144 -0
- package/dist/server.d.ts +36 -0
- package/dist/server.js +80 -0
- package/dist/tools/create_x402_payment.d.ts +27 -0
- package/dist/tools/create_x402_payment.js +55 -0
- package/dist/tools/fetch_with_x402.d.ts +28 -0
- package/dist/tools/fetch_with_x402.js +143 -0
- package/dist/tools/get_address.d.ts +20 -0
- package/dist/tools/get_address.js +24 -0
- package/dist/tools/get_addresses.d.ts +22 -0
- package/dist/tools/get_addresses.js +32 -0
- package/dist/tools/get_balance.d.ts +22 -0
- package/dist/tools/get_balance.js +27 -0
- package/dist/tools/get_dashboard.d.ts +21 -0
- package/dist/tools/get_dashboard.js +29 -0
- package/dist/tools/get_limits.d.ts +22 -0
- package/dist/tools/get_limits.js +61 -0
- package/dist/tools/get_operation_history.d.ts +21 -0
- package/dist/tools/get_operation_history.js +58 -0
- package/dist/tools/index.d.ts +113 -0
- package/dist/tools/index.js +59 -0
- package/dist/tools/parse_x402_requirements.d.ts +23 -0
- package/dist/tools/parse_x402_requirements.js +66 -0
- package/dist/tools/reveal_account.d.ts +34 -0
- package/dist/tools/reveal_account.js +51 -0
- package/dist/tools/send_xtz.d.ts +32 -0
- package/dist/tools/send_xtz.js +86 -0
- package/dist/tools/x402/sign.d.ts +12 -0
- package/dist/tools/x402/sign.js +76 -0
- package/dist/tools/x402/types.d.ts +40 -0
- package/dist/tools/x402/types.js +16 -0
- package/dist/webserver.d.ts +1 -0
- package/dist/webserver.js +10 -0
- package/dist/worker.bundle.js +134265 -0
- package/dist/worker.d.ts +13 -0
- package/dist/worker.js +132 -0
- package/frontend/dist/assets/index-RtTL1nIl.js +257 -0
- package/frontend/dist/assets/index-mSsI3AqQ.css +1 -0
- package/frontend/dist/index.html +16 -0
- package/package.json +70 -0
package/dist/worker.d.ts
ADDED
|
@@ -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
|
+
};
|