@ecadlabs/tezosx-mcp 1.0.0 → 1.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 +87 -66
- package/dist/api.d.ts +3 -0
- package/dist/api.js +155 -0
- package/dist/config-store.d.ts +15 -0
- package/dist/config-store.js +38 -0
- package/dist/index.d.ts +0 -6
- package/dist/index.js +43 -44
- package/dist/live-config.d.ts +32 -0
- package/dist/live-config.js +55 -0
- package/dist/tools/create_x402_payment.d.ts +2 -2
- package/dist/tools/create_x402_payment.js +2 -1
- package/dist/tools/fetch_with_x402.d.ts +3 -3
- package/dist/tools/fetch_with_x402.js +7 -6
- package/dist/tools/get_addresses.d.ts +2 -2
- package/dist/tools/get_addresses.js +2 -1
- package/dist/tools/get_balance.d.ts +2 -2
- package/dist/tools/get_balance.js +2 -1
- package/dist/tools/get_dashboard.d.ts +2 -1
- package/dist/tools/get_dashboard.js +2 -2
- package/dist/tools/get_limits.d.ts +2 -2
- package/dist/tools/get_limits.js +2 -1
- package/dist/tools/get_operation_history.d.ts +2 -1
- package/dist/tools/get_operation_history.js +2 -1
- package/dist/tools/index.d.ts +3 -3
- package/dist/tools/index.js +15 -24
- package/dist/tools/reveal_account.d.ts +2 -1
- package/dist/tools/reveal_account.js +2 -1
- package/dist/tools/send_xtz.d.ts +2 -9
- package/dist/tools/send_xtz.js +33 -15
- package/dist/webserver.d.ts +2 -1
- package/dist/webserver.js +11 -4
- package/frontend/dist/assets/{index-RtTL1nIl.js → index-B-2-_lot.js} +95 -65
- package/frontend/dist/assets/index-CTdz8_ps.css +1 -0
- package/frontend/dist/index.html +2 -2
- package/package.json +2 -1
- package/dist/adapters/index.d.ts +0 -37
- package/dist/adapters/index.js +0 -57
- package/dist/adapters/node.d.ts +0 -18
- package/dist/adapters/node.js +0 -35
- package/dist/adapters/types.d.ts +0 -52
- package/dist/adapters/types.js +0 -25
- package/dist/adapters/worker.d.ts +0 -35
- package/dist/adapters/worker.js +0 -50
- package/dist/server.d.ts +0 -36
- package/dist/server.js +0 -80
- package/dist/tools/get_address.d.ts +0 -20
- package/dist/tools/get_address.js +0 -24
- package/dist/worker.bundle.js +0 -134265
- package/dist/worker.d.ts +0 -13
- package/dist/worker.js +0 -132
- package/frontend/dist/assets/index-mSsI3AqQ.css +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
/*! tailwindcss v4.1.17 | MIT License | https://tailwindcss.com */@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-space-y-reverse:0;--tw-border-style:solid;--tw-font-weight:initial;--tw-tracking:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-backdrop-blur:initial;--tw-backdrop-brightness:initial;--tw-backdrop-contrast:initial;--tw-backdrop-grayscale:initial;--tw-backdrop-hue-rotate:initial;--tw-backdrop-invert:initial;--tw-backdrop-opacity:initial;--tw-backdrop-saturate:initial;--tw-backdrop-sepia:initial}}}@layer theme{:root,:host{--font-sans:"Inter",system-ui,-apple-system,sans-serif;--font-mono:"JetBrains Mono","SF Mono","Fira Code",monospace;--color-red-50:oklch(97.1% .013 17.38);--color-red-100:oklch(93.6% .032 17.717);--color-red-200:oklch(88.5% .062 18.334);--color-red-600:oklch(57.7% .245 27.325);--color-red-700:oklch(50.5% .213 27.518);--color-red-800:oklch(44.4% .177 26.899);--color-amber-50:oklch(98.7% .022 95.277);--color-amber-100:oklch(96.2% .059 95.617);--color-amber-200:oklch(92.4% .12 95.746);--color-amber-600:oklch(66.6% .179 58.318);--color-amber-700:oklch(55.5% .163 48.998);--color-amber-800:oklch(47.3% .137 46.201);--color-green-50:oklch(98.2% .018 155.826);--color-green-100:oklch(96.2% .044 156.743);--color-green-200:oklch(92.5% .084 155.995);--color-green-600:oklch(62.7% .194 149.214);--color-green-700:oklch(52.7% .154 150.069);--color-green-800:oklch(44.8% .119 151.328);--color-gray-50:oklch(98.5% .002 247.839);--color-gray-200:oklch(92.8% .006 264.531);--color-gray-300:oklch(87.2% .01 258.338);--color-gray-900:oklch(21% .034 264.665);--color-black:#000;--color-white:#fff;--spacing:.25rem;--container-md:28rem;--container-2xl:42rem;--text-xs:.75rem;--text-xs--line-height:calc(1/.75);--text-sm:.875rem;--text-sm--line-height:calc(1.25/.875);--text-lg:1.125rem;--text-lg--line-height:calc(1.75/1.125);--text-xl:1.25rem;--text-xl--line-height:calc(1.75/1.25);--text-3xl:1.875rem;--text-3xl--line-height: 1.2 ;--font-weight-medium:500;--font-weight-semibold:600;--tracking-tight:-.025em;--radius-lg:.5rem;--blur-sm:8px;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4,0,.2,1);--default-font-family:var(--font-sans);--default-mono-font-family:var(--font-mono);--color-primary-100:#f5f5f5;--color-primary-200:#e5e5e5;--color-primary-600:#525252;--color-accent-400:#fb923c;--color-accent-500:#f97316;--color-accent-600:#ea580c;--color-text-primary:#171717;--color-text-secondary:#525252;--color-text-muted:#a3a3a3;--color-error:#ef4444;--radius-card:12px;--radius-button:6px;--radius-badge:4px}}@layer base{*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;-moz-tab-size:4;tab-size:4;line-height:1.5;font-family:var(--default-font-family,ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--default-mono-font-family,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-variation-settings:var(--default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab,red,red)){::placeholder{color:color-mix(in oklab,currentcolor 50%,transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){-webkit-appearance:button;-moz-appearance:button;appearance:button}::file-selector-button{-webkit-appearance:button;-moz-appearance:button;appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}}@layer components;@layer utilities{.absolute{position:absolute}.fixed{position:fixed}.relative{position:relative}.inset-0{inset:calc(var(--spacing)*0)}.top-full{top:100%}.bottom-full{bottom:100%}.left-1\/2{left:50%}.z-10{z-index:10}.z-50{z-index:50}.mx-4{margin-inline:calc(var(--spacing)*4)}.mx-auto{margin-inline:auto}.-mt-1{margin-top:calc(var(--spacing)*-1)}.mt-0\.5{margin-top:calc(var(--spacing)*.5)}.mt-1\.5{margin-top:calc(var(--spacing)*1.5)}.mt-2{margin-top:calc(var(--spacing)*2)}.mt-5{margin-top:calc(var(--spacing)*5)}.mt-12{margin-top:calc(var(--spacing)*12)}.\!mb-0{margin-bottom:calc(var(--spacing)*0)!important}.mb-1{margin-bottom:calc(var(--spacing)*1)}.mb-2{margin-bottom:calc(var(--spacing)*2)}.mb-3{margin-bottom:calc(var(--spacing)*3)}.mb-4{margin-bottom:calc(var(--spacing)*4)}.mb-5{margin-bottom:calc(var(--spacing)*5)}.mb-6{margin-bottom:calc(var(--spacing)*6)}.block{display:block}.flex{display:flex}.grid{display:grid}.inline-flex{display:inline-flex}.\!h-3{height:calc(var(--spacing)*3)!important}.\!h-4{height:calc(var(--spacing)*4)!important}.h-3\.5{height:calc(var(--spacing)*3.5)}.h-4{height:calc(var(--spacing)*4)}.h-5{height:calc(var(--spacing)*5)}.h-6{height:calc(var(--spacing)*6)}.h-8{height:calc(var(--spacing)*8)}.h-12{height:calc(var(--spacing)*12)}.h-\[38px\]{height:38px}.min-h-screen{min-height:100vh}.\!w-3{width:calc(var(--spacing)*3)!important}.\!w-4{width:calc(var(--spacing)*4)!important}.w-3\.5{width:calc(var(--spacing)*3.5)}.w-4{width:calc(var(--spacing)*4)}.w-5{width:calc(var(--spacing)*5)}.w-6{width:calc(var(--spacing)*6)}.w-8{width:calc(var(--spacing)*8)}.w-12{width:calc(var(--spacing)*12)}.w-20{width:calc(var(--spacing)*20)}.w-24{width:calc(var(--spacing)*24)}.w-64{width:calc(var(--spacing)*64)}.w-fit{width:fit-content}.w-full{width:100%}.max-w-2xl{max-width:var(--container-2xl)}.max-w-md{max-width:var(--container-md)}.flex-1{flex:1}.flex-shrink-0,.shrink-0{flex-shrink:0}.-translate-x-1\/2{--tw-translate-x: -50% ;translate:var(--tw-translate-x)var(--tw-translate-y)}.cursor-pointer{cursor:pointer}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.items-baseline{align-items:baseline}.items-center{align-items:center}.items-start{align-items:flex-start}.items-stretch{align-items:stretch}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.gap-1{gap:calc(var(--spacing)*1)}.gap-1\.5{gap:calc(var(--spacing)*1.5)}.gap-2{gap:calc(var(--spacing)*2)}.gap-3{gap:calc(var(--spacing)*3)}:where(.space-y-2>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*2)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*2)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-3>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*3)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*3)*calc(1 - var(--tw-space-y-reverse)))}.overflow-x-auto{overflow-x:auto}.rounded{border-radius:.25rem}.rounded-full{border-radius:3.40282e38px}.rounded-lg{border-radius:var(--radius-lg)}.border{border-style:var(--tw-border-style);border-width:1px}.border-2{border-style:var(--tw-border-style);border-width:2px}.border-4{border-style:var(--tw-border-style);border-width:4px}.border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.border-amber-200{border-color:var(--color-amber-200)}.border-error\/20{border-color:#ef444433}@supports (color:color-mix(in lab,red,red)){.border-error\/20{border-color:color-mix(in oklab,var(--color-error)20%,transparent)}}.border-gray-200{border-color:var(--color-gray-200)}.border-green-200{border-color:var(--color-green-200)}.border-primary-200{border-color:var(--color-primary-200)}.border-red-200{border-color:var(--color-red-200)}.border-transparent{border-color:#0000}.border-t-gray-900{border-top-color:var(--color-gray-900)}.bg-amber-50\/50{background-color:#fffbeb80}@supports (color:color-mix(in lab,red,red)){.bg-amber-50\/50{background-color:color-mix(in oklab,var(--color-amber-50)50%,transparent)}}.bg-amber-100{background-color:var(--color-amber-100)}.bg-black\/50{background-color:#00000080}@supports (color:color-mix(in lab,red,red)){.bg-black\/50{background-color:color-mix(in oklab,var(--color-black)50%,transparent)}}.bg-error\/5{background-color:#ef44440d}@supports (color:color-mix(in lab,red,red)){.bg-error\/5{background-color:color-mix(in oklab,var(--color-error)5%,transparent)}}.bg-gray-50{background-color:var(--color-gray-50)}.bg-gray-900{background-color:var(--color-gray-900)}.bg-green-50\/50{background-color:#f0fdf480}@supports (color:color-mix(in lab,red,red)){.bg-green-50\/50{background-color:color-mix(in oklab,var(--color-green-50)50%,transparent)}}.bg-green-100{background-color:var(--color-green-100)}.bg-primary-100{background-color:var(--color-primary-100)}.bg-red-50\/50{background-color:#fef2f280}@supports (color:color-mix(in lab,red,red)){.bg-red-50\/50{background-color:color-mix(in oklab,var(--color-red-50)50%,transparent)}}.bg-red-100{background-color:var(--color-red-100)}.bg-transparent{background-color:#0000}.bg-white{background-color:var(--color-white)}.p-3{padding:calc(var(--spacing)*3)}.p-4{padding:calc(var(--spacing)*4)}.p-5{padding:calc(var(--spacing)*5)}.p-6{padding:calc(var(--spacing)*6)}.\!px-2{padding-inline:calc(var(--spacing)*2)!important}.\!px-3{padding-inline:calc(var(--spacing)*3)!important}.px-1{padding-inline:calc(var(--spacing)*1)}.px-2{padding-inline:calc(var(--spacing)*2)}.px-4{padding-inline:calc(var(--spacing)*4)}.\!py-1{padding-block:calc(var(--spacing)*1)!important}.\!py-1\.5{padding-block:calc(var(--spacing)*1.5)!important}.\!py-2{padding-block:calc(var(--spacing)*2)!important}.py-0\.5{padding-block:calc(var(--spacing)*.5)}.py-1{padding-block:calc(var(--spacing)*1)}.py-1\.5{padding-block:calc(var(--spacing)*1.5)}.py-12{padding-block:calc(var(--spacing)*12)}.pt-2{padding-top:calc(var(--spacing)*2)}.text-center{text-align:center}.text-3xl{font-size:var(--text-3xl);line-height:var(--tw-leading,var(--text-3xl--line-height))}.text-lg{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height))}.text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.text-xl{font-size:var(--text-xl);line-height:var(--tw-leading,var(--text-xl--line-height))}.text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.font-medium{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.font-semibold{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.tracking-tight{--tw-tracking:var(--tracking-tight);letter-spacing:var(--tracking-tight)}.break-all{word-break:break-all}.whitespace-pre-wrap{white-space:pre-wrap}.text-amber-600{color:var(--color-amber-600)}.text-amber-700{color:var(--color-amber-700)}.text-amber-800{color:var(--color-amber-800)}.text-error{color:var(--color-error)}.text-gray-300{color:var(--color-gray-300)}.text-green-600{color:var(--color-green-600)}.text-green-700{color:var(--color-green-700)}.text-green-800{color:var(--color-green-800)}.text-primary-600{color:var(--color-primary-600)}.text-red-600{color:var(--color-red-600)}.text-red-700{color:var(--color-red-700)}.text-red-800{color:var(--color-red-800)}.text-text-muted{color:var(--color-text-muted)}.text-text-primary{color:var(--color-text-primary)}.text-text-secondary{color:var(--color-text-secondary)}.text-white{color:var(--color-white)}.shadow-lg{--tw-shadow:0 10px 15px -3px var(--tw-shadow-color,#0000001a),0 4px 6px -4px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-xl{--tw-shadow:0 20px 25px -5px var(--tw-shadow-color,#0000001a),0 8px 10px -6px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.backdrop-blur-sm{--tw-backdrop-blur:blur(var(--blur-sm));-webkit-backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,)}.transition-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}@media (hover:hover){.hover\:border-text-muted:hover{border-color:var(--color-text-muted)}.hover\:text-text-secondary:hover{color:var(--color-text-secondary)}}@media (min-width:40rem){.sm\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.sm\:px-6{padding-inline:calc(var(--spacing)*6)}}@media (min-width:64rem){.lg\:px-8{padding-inline:calc(var(--spacing)*8)}}}html{font-family:var(--font-sans);color:var(--color-text-primary);background:#f5f5f5;min-height:100vh}body{min-height:100vh;position:relative}.film-grain{pointer-events:none;z-index:0;width:100%;height:100%;position:fixed;top:0;left:0}.film-grain:before{content:"";opacity:.08;background-image:url("data:image/svg+xml,%3Csvg viewBox='0 0 200 200' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='noise'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.8' numOctaves='4' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23noise)'/%3E%3C/svg%3E");width:100%;height:100%;position:absolute;top:0;left:0}.film-grain:after{content:"";background:linear-gradient(135deg,#fb923c1f,#f9731614,#fed7aa0d,#0000 75%);width:100%;height:100%;position:absolute;top:0;left:0}.card{border-radius:var(--radius-card);background:#fff;box-shadow:0 1px 3px #0000000a,0 1px 2px #0000000f}.card-subtle{border-radius:var(--radius-button);background:#fafafa;border:1px solid #e5e5e5}.section-label{font-family:var(--font-mono);color:var(--color-text-muted);letter-spacing:-.01em;font-size:.8125rem}.section-label:before{content:"// "}.btn-primary{background:var(--color-accent-500);color:#fff;border-radius:var(--radius-button);cursor:pointer;border:none;padding:.5rem 1rem;font-size:.875rem;font-weight:500;transition:background .15s}.btn-primary:hover{background:var(--color-accent-600)}.btn-primary:disabled{opacity:.5;cursor:not-allowed}.btn-secondary{color:var(--color-text-primary);border-radius:var(--radius-button);cursor:pointer;background:#fff;border:1px solid #e5e5e5;padding:.5rem 1rem;font-size:.875rem;font-weight:500;transition:all .15s}.btn-secondary:hover{background:#fafafa;border-color:#d4d4d4}.btn-secondary:disabled{opacity:.5;cursor:not-allowed}.btn-danger{background:var(--color-error);color:#fff;border-radius:var(--radius-button);cursor:pointer;border:none;padding:.5rem 1rem;font-size:.875rem;font-weight:500;transition:background .15s}.btn-danger:hover{background:#dc2626}.btn-danger:disabled{opacity:.5;cursor:not-allowed}.input-field{border-radius:var(--radius-button);width:100%;color:var(--color-text-primary);background:#fff;border:1px solid #e5e5e5;padding:.5rem .75rem;font-family:inherit;font-size:.875rem;transition:border-color .15s}.input-field:focus{border-color:var(--color-accent-500);outline:none}.input-field::placeholder{color:var(--color-text-muted)}.mono{font-family:var(--font-mono);letter-spacing:-.02em;font-size:.8125rem}.label{font-family:var(--font-mono);color:var(--color-text-muted);text-transform:lowercase;margin-bottom:.375rem;font-size:.75rem;display:block}.tech-badge{font-family:var(--font-mono);color:var(--color-text-secondary);border-radius:var(--radius-badge);background:#f5f5f5;border:1px solid #e5e5e5;align-items:center;padding:.25rem .5rem;font-size:.6875rem;display:inline-flex}.badge{border-radius:var(--radius-badge);align-items:center;padding:.25rem .5rem;font-size:.75rem;font-weight:500;display:inline-flex}.badge-success{color:#16a34a;background:#22c55e1a}.badge-warning{color:#d97706;background:#f59e0b1a}.badge-error{color:#dc2626;background:#ef44441a}.badge-muted{color:#6b7280;background:#6b72801a}.accent-text{color:var(--color-accent-600);font-family:var(--font-mono);font-size:.875rem}.divider{background:#e5e5e5;height:1px;margin:1.5rem 0}@keyframes spin{to{transform:rotate(360deg)}}.spinner{border:2px solid #ffffff4d;border-top-color:#fff;border-radius:50%;width:1rem;height:1rem;animation:.8s linear infinite spin}.spinner-dark{border-color:#e5e5e5;border-top-color:var(--color-text-secondary)}.progress-bar{background:#e5e5e5;border-radius:2px;height:4px;overflow:hidden}.progress-bar-fill{background:linear-gradient(90deg,var(--color-accent-400),var(--color-accent-500));height:100%;transition:width .3s}.value-display{color:var(--color-text-primary);font-size:1.5rem;font-weight:600;line-height:1}.value-unit{color:var(--color-text-muted);margin-left:.25rem;font-size:.875rem;font-weight:400}a{color:var(--color-accent-500);text-decoration:none;transition:color .15s}a:hover{color:var(--color-accent-600)}.fade-enter-active,.fade-leave-active{transition:opacity .2s}.fade-enter-from,.fade-leave-to{opacity:0}@property --tw-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-y{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-z{syntax:"*";inherits:false;initial-value:0}@property --tw-space-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-tracking{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"<length>";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-backdrop-blur{syntax:"*";inherits:false}@property --tw-backdrop-brightness{syntax:"*";inherits:false}@property --tw-backdrop-contrast{syntax:"*";inherits:false}@property --tw-backdrop-grayscale{syntax:"*";inherits:false}@property --tw-backdrop-hue-rotate{syntax:"*";inherits:false}@property --tw-backdrop-invert{syntax:"*";inherits:false}@property --tw-backdrop-opacity{syntax:"*";inherits:false}@property --tw-backdrop-saturate{syntax:"*";inherits:false}@property --tw-backdrop-sepia{syntax:"*";inherits:false}
|
package/frontend/dist/index.html
CHANGED
|
@@ -7,8 +7,8 @@
|
|
|
7
7
|
<link rel="preconnect" href="https://fonts.googleapis.com" />
|
|
8
8
|
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
|
|
9
9
|
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&family=JetBrains+Mono:wght@400;500&display=swap" rel="stylesheet" />
|
|
10
|
-
<script type="module" crossorigin src="/assets/index-
|
|
11
|
-
<link rel="stylesheet" crossorigin href="/assets/index-
|
|
10
|
+
<script type="module" crossorigin src="/assets/index-B-2-_lot.js"></script>
|
|
11
|
+
<link rel="stylesheet" crossorigin href="/assets/index-CTdz8_ps.css">
|
|
12
12
|
</head>
|
|
13
13
|
<body>
|
|
14
14
|
<div id="app"></div>
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ecadlabs/tezosx-mcp",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.1",
|
|
4
4
|
"description": "MCP server for Tezos wallet operations",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"bin": {
|
|
@@ -57,6 +57,7 @@
|
|
|
57
57
|
"@taquito/taquito": "^23.0.3",
|
|
58
58
|
"axios": "^1.13.2",
|
|
59
59
|
"bn.js": "^5.2.2",
|
|
60
|
+
"conf": "^15.1.0",
|
|
60
61
|
"dotenv": "^17.2.3",
|
|
61
62
|
"express": "^5.2.1",
|
|
62
63
|
"node-fetch": "^3.3.2",
|
package/dist/adapters/index.d.ts
DELETED
|
@@ -1,37 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Environment adapter factory and exports
|
|
3
|
-
* Automatically detects the runtime environment and creates the appropriate adapter
|
|
4
|
-
*/
|
|
5
|
-
export type { EnvironmentAdapter, EnvConfig, StaticFileConfig, RuntimeEnvironment } from './types.js';
|
|
6
|
-
export { detectEnvironment } from './types.js';
|
|
7
|
-
export { NodeAdapter, createNodeAdapter } from './node.js';
|
|
8
|
-
export { WorkerAdapter, createWorkerAdapter } from './worker.js';
|
|
9
|
-
export type { WorkerEnv } from './worker.js';
|
|
10
|
-
import { type EnvironmentAdapter } from './types.js';
|
|
11
|
-
import { type WorkerEnv } from './worker.js';
|
|
12
|
-
/**
|
|
13
|
-
* Create an environment adapter based on the detected runtime
|
|
14
|
-
* For Workers, pass the env bindings from the fetch handler
|
|
15
|
-
*/
|
|
16
|
-
export declare function createAdapter(workerEnv?: WorkerEnv): EnvironmentAdapter;
|
|
17
|
-
/**
|
|
18
|
-
* Get or create the singleton adapter instance
|
|
19
|
-
* Use this for convenience in modules that don't have access to the env bindings
|
|
20
|
-
*/
|
|
21
|
-
export declare function getAdapter(): EnvironmentAdapter;
|
|
22
|
-
/**
|
|
23
|
-
* Set the adapter instance (useful for Workers where env is per-request)
|
|
24
|
-
*/
|
|
25
|
-
export declare function setAdapter(adapter: EnvironmentAdapter): void;
|
|
26
|
-
/**
|
|
27
|
-
* Cross-platform base64 encode helper
|
|
28
|
-
*/
|
|
29
|
-
export declare function base64Encode(data: string): string;
|
|
30
|
-
/**
|
|
31
|
-
* Cross-platform base64 decode helper
|
|
32
|
-
*/
|
|
33
|
-
export declare function base64Decode(data: string): string;
|
|
34
|
-
/**
|
|
35
|
-
* Cross-platform logging helper
|
|
36
|
-
*/
|
|
37
|
-
export declare function log(message: string): void;
|
package/dist/adapters/index.js
DELETED
|
@@ -1,57 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Environment adapter factory and exports
|
|
3
|
-
* Automatically detects the runtime environment and creates the appropriate adapter
|
|
4
|
-
*/
|
|
5
|
-
export { detectEnvironment } from './types.js';
|
|
6
|
-
export { NodeAdapter, createNodeAdapter } from './node.js';
|
|
7
|
-
export { WorkerAdapter, createWorkerAdapter } from './worker.js';
|
|
8
|
-
import { detectEnvironment } from './types.js';
|
|
9
|
-
import { createNodeAdapter } from './node.js';
|
|
10
|
-
import { createWorkerAdapter } from './worker.js';
|
|
11
|
-
// Singleton adapter instance for convenience
|
|
12
|
-
let _adapter = null;
|
|
13
|
-
/**
|
|
14
|
-
* Create an environment adapter based on the detected runtime
|
|
15
|
-
* For Workers, pass the env bindings from the fetch handler
|
|
16
|
-
*/
|
|
17
|
-
export function createAdapter(workerEnv) {
|
|
18
|
-
const env = detectEnvironment();
|
|
19
|
-
if (env === 'worker') {
|
|
20
|
-
return createWorkerAdapter(workerEnv);
|
|
21
|
-
}
|
|
22
|
-
return createNodeAdapter();
|
|
23
|
-
}
|
|
24
|
-
/**
|
|
25
|
-
* Get or create the singleton adapter instance
|
|
26
|
-
* Use this for convenience in modules that don't have access to the env bindings
|
|
27
|
-
*/
|
|
28
|
-
export function getAdapter() {
|
|
29
|
-
if (!_adapter) {
|
|
30
|
-
_adapter = createAdapter();
|
|
31
|
-
}
|
|
32
|
-
return _adapter;
|
|
33
|
-
}
|
|
34
|
-
/**
|
|
35
|
-
* Set the adapter instance (useful for Workers where env is per-request)
|
|
36
|
-
*/
|
|
37
|
-
export function setAdapter(adapter) {
|
|
38
|
-
_adapter = adapter;
|
|
39
|
-
}
|
|
40
|
-
/**
|
|
41
|
-
* Cross-platform base64 encode helper
|
|
42
|
-
*/
|
|
43
|
-
export function base64Encode(data) {
|
|
44
|
-
return getAdapter().base64Encode(data);
|
|
45
|
-
}
|
|
46
|
-
/**
|
|
47
|
-
* Cross-platform base64 decode helper
|
|
48
|
-
*/
|
|
49
|
-
export function base64Decode(data) {
|
|
50
|
-
return getAdapter().base64Decode(data);
|
|
51
|
-
}
|
|
52
|
-
/**
|
|
53
|
-
* Cross-platform logging helper
|
|
54
|
-
*/
|
|
55
|
-
export function log(message) {
|
|
56
|
-
getAdapter().log(message);
|
|
57
|
-
}
|
package/dist/adapters/node.d.ts
DELETED
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Node.js environment adapter
|
|
3
|
-
* Uses filesystem operations and process.env for local development
|
|
4
|
-
*/
|
|
5
|
-
import type { EnvironmentAdapter, EnvConfig } from './types.js';
|
|
6
|
-
export declare class NodeAdapter implements EnvironmentAdapter {
|
|
7
|
-
private envOverrides;
|
|
8
|
-
constructor(envOverrides?: Partial<EnvConfig>);
|
|
9
|
-
getEnv(key: keyof EnvConfig): string | undefined;
|
|
10
|
-
isWorker(): boolean;
|
|
11
|
-
base64Encode(data: string): string;
|
|
12
|
-
base64Decode(data: string): string;
|
|
13
|
-
log(message: string): void;
|
|
14
|
-
}
|
|
15
|
-
/**
|
|
16
|
-
* Create a Node.js adapter instance
|
|
17
|
-
*/
|
|
18
|
-
export declare function createNodeAdapter(envOverrides?: Partial<EnvConfig>): EnvironmentAdapter;
|
package/dist/adapters/node.js
DELETED
|
@@ -1,35 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Node.js environment adapter
|
|
3
|
-
* Uses filesystem operations and process.env for local development
|
|
4
|
-
*/
|
|
5
|
-
export class NodeAdapter {
|
|
6
|
-
envOverrides;
|
|
7
|
-
constructor(envOverrides = {}) {
|
|
8
|
-
this.envOverrides = envOverrides;
|
|
9
|
-
}
|
|
10
|
-
getEnv(key) {
|
|
11
|
-
// Check overrides first, then process.env
|
|
12
|
-
if (key in this.envOverrides) {
|
|
13
|
-
return this.envOverrides[key];
|
|
14
|
-
}
|
|
15
|
-
return process.env[key];
|
|
16
|
-
}
|
|
17
|
-
isWorker() {
|
|
18
|
-
return false;
|
|
19
|
-
}
|
|
20
|
-
base64Encode(data) {
|
|
21
|
-
return Buffer.from(data).toString('base64');
|
|
22
|
-
}
|
|
23
|
-
base64Decode(data) {
|
|
24
|
-
return Buffer.from(data, 'base64').toString('utf-8');
|
|
25
|
-
}
|
|
26
|
-
log(message) {
|
|
27
|
-
console.error(`[tezosx-mcp] ${message}`);
|
|
28
|
-
}
|
|
29
|
-
}
|
|
30
|
-
/**
|
|
31
|
-
* Create a Node.js adapter instance
|
|
32
|
-
*/
|
|
33
|
-
export function createNodeAdapter(envOverrides) {
|
|
34
|
-
return new NodeAdapter(envOverrides);
|
|
35
|
-
}
|
package/dist/adapters/types.d.ts
DELETED
|
@@ -1,52 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Environment adapter interface for abstracting platform-specific operations.
|
|
3
|
-
* This allows the MCP server to run in both Node.js and Cloudflare Workers environments.
|
|
4
|
-
*/
|
|
5
|
-
export interface EnvConfig {
|
|
6
|
-
MCP_TRANSPORT?: string;
|
|
7
|
-
SKIP_FRONTEND?: string;
|
|
8
|
-
WEB_PORT?: string;
|
|
9
|
-
PORT?: string;
|
|
10
|
-
TEZOS_NETWORK?: string;
|
|
11
|
-
SPENDING_PRIVATE_KEY?: string;
|
|
12
|
-
SPENDING_CONTRACT?: string;
|
|
13
|
-
}
|
|
14
|
-
export interface EnvironmentAdapter {
|
|
15
|
-
/**
|
|
16
|
-
* Get environment variable value
|
|
17
|
-
*/
|
|
18
|
-
getEnv(key: keyof EnvConfig): string | undefined;
|
|
19
|
-
/**
|
|
20
|
-
* Check if we're running in a Workers environment
|
|
21
|
-
*/
|
|
22
|
-
isWorker(): boolean;
|
|
23
|
-
/**
|
|
24
|
-
* Base64 encode a string (Buffer.from in Node, btoa in Workers)
|
|
25
|
-
*/
|
|
26
|
-
base64Encode(data: string): string;
|
|
27
|
-
/**
|
|
28
|
-
* Base64 decode a string
|
|
29
|
-
*/
|
|
30
|
-
base64Decode(data: string): string;
|
|
31
|
-
/**
|
|
32
|
-
* Log a message (stderr in Node, console.log in Workers)
|
|
33
|
-
*/
|
|
34
|
-
log(message: string): void;
|
|
35
|
-
}
|
|
36
|
-
/**
|
|
37
|
-
* Static file serving configuration for HTTP mode
|
|
38
|
-
*/
|
|
39
|
-
export interface StaticFileConfig {
|
|
40
|
-
/** Path to serve static files from (Node.js only) */
|
|
41
|
-
staticPath?: string;
|
|
42
|
-
/** Whether to use SPA fallback (serve index.html for unknown routes) */
|
|
43
|
-
spaFallback?: boolean;
|
|
44
|
-
}
|
|
45
|
-
/**
|
|
46
|
-
* Runtime environment type
|
|
47
|
-
*/
|
|
48
|
-
export type RuntimeEnvironment = 'node' | 'worker';
|
|
49
|
-
/**
|
|
50
|
-
* Detect the current runtime environment
|
|
51
|
-
*/
|
|
52
|
-
export declare function detectEnvironment(): RuntimeEnvironment;
|
package/dist/adapters/types.js
DELETED
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Environment adapter interface for abstracting platform-specific operations.
|
|
3
|
-
* This allows the MCP server to run in both Node.js and Cloudflare Workers environments.
|
|
4
|
-
*/
|
|
5
|
-
/**
|
|
6
|
-
* Detect the current runtime environment
|
|
7
|
-
*/
|
|
8
|
-
export function detectEnvironment() {
|
|
9
|
-
// Check for Cloudflare Workers-specific globals
|
|
10
|
-
// @ts-ignore - caches is a Workers global
|
|
11
|
-
if (typeof globalThis.caches !== 'undefined' && typeof globalThis.caches.default !== 'undefined') {
|
|
12
|
-
return 'worker';
|
|
13
|
-
}
|
|
14
|
-
// Check for other Workers indicators
|
|
15
|
-
// @ts-ignore - WorkerGlobalScope is a Workers type
|
|
16
|
-
if (typeof WorkerGlobalScope !== 'undefined') {
|
|
17
|
-
return 'worker';
|
|
18
|
-
}
|
|
19
|
-
// Check for Node.js process
|
|
20
|
-
if (typeof process !== 'undefined' && process.versions?.node) {
|
|
21
|
-
return 'node';
|
|
22
|
-
}
|
|
23
|
-
// Default to worker if we can't determine (safer for bundled code)
|
|
24
|
-
return 'worker';
|
|
25
|
-
}
|
|
@@ -1,35 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Cloudflare Workers environment adapter
|
|
3
|
-
* Uses Web APIs and Worker bindings instead of Node.js filesystem/process
|
|
4
|
-
*/
|
|
5
|
-
import type { EnvironmentAdapter, EnvConfig } from './types.js';
|
|
6
|
-
/**
|
|
7
|
-
* Cloudflare Worker environment bindings type
|
|
8
|
-
* These are passed to the fetch handler by Cloudflare
|
|
9
|
-
*/
|
|
10
|
-
export interface WorkerEnv {
|
|
11
|
-
MCP_TRANSPORT?: string;
|
|
12
|
-
SKIP_FRONTEND?: string;
|
|
13
|
-
WEB_PORT?: string;
|
|
14
|
-
PORT?: string;
|
|
15
|
-
TEZOS_NETWORK?: string;
|
|
16
|
-
SPENDING_PRIVATE_KEY?: string;
|
|
17
|
-
SPENDING_CONTRACT?: string;
|
|
18
|
-
}
|
|
19
|
-
export declare class WorkerAdapter implements EnvironmentAdapter {
|
|
20
|
-
private env;
|
|
21
|
-
constructor(env?: WorkerEnv);
|
|
22
|
-
/**
|
|
23
|
-
* Update the environment bindings (called per-request with the env from fetch handler)
|
|
24
|
-
*/
|
|
25
|
-
setEnv(env: WorkerEnv): void;
|
|
26
|
-
getEnv(key: keyof EnvConfig): string | undefined;
|
|
27
|
-
isWorker(): boolean;
|
|
28
|
-
base64Encode(data: string): string;
|
|
29
|
-
base64Decode(data: string): string;
|
|
30
|
-
log(message: string): void;
|
|
31
|
-
}
|
|
32
|
-
/**
|
|
33
|
-
* Create a Worker adapter instance
|
|
34
|
-
*/
|
|
35
|
-
export declare function createWorkerAdapter(env?: WorkerEnv): WorkerAdapter;
|
package/dist/adapters/worker.js
DELETED
|
@@ -1,50 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Cloudflare Workers environment adapter
|
|
3
|
-
* Uses Web APIs and Worker bindings instead of Node.js filesystem/process
|
|
4
|
-
*/
|
|
5
|
-
export class WorkerAdapter {
|
|
6
|
-
env;
|
|
7
|
-
constructor(env = {}) {
|
|
8
|
-
this.env = env;
|
|
9
|
-
}
|
|
10
|
-
/**
|
|
11
|
-
* Update the environment bindings (called per-request with the env from fetch handler)
|
|
12
|
-
*/
|
|
13
|
-
setEnv(env) {
|
|
14
|
-
this.env = env;
|
|
15
|
-
}
|
|
16
|
-
getEnv(key) {
|
|
17
|
-
return this.env[key];
|
|
18
|
-
}
|
|
19
|
-
isWorker() {
|
|
20
|
-
return true;
|
|
21
|
-
}
|
|
22
|
-
base64Encode(data) {
|
|
23
|
-
// Use TextEncoder for proper UTF-8 handling
|
|
24
|
-
const encoder = new TextEncoder();
|
|
25
|
-
const bytes = encoder.encode(data);
|
|
26
|
-
let binary = '';
|
|
27
|
-
for (let i = 0; i < bytes.length; i++) {
|
|
28
|
-
binary += String.fromCharCode(bytes[i]);
|
|
29
|
-
}
|
|
30
|
-
return btoa(binary);
|
|
31
|
-
}
|
|
32
|
-
base64Decode(data) {
|
|
33
|
-
const binary = atob(data);
|
|
34
|
-
const bytes = new Uint8Array(binary.length);
|
|
35
|
-
for (let i = 0; i < binary.length; i++) {
|
|
36
|
-
bytes[i] = binary.charCodeAt(i);
|
|
37
|
-
}
|
|
38
|
-
const decoder = new TextDecoder();
|
|
39
|
-
return decoder.decode(bytes);
|
|
40
|
-
}
|
|
41
|
-
log(message) {
|
|
42
|
-
console.log(`[tezosx-mcp] ${message}`);
|
|
43
|
-
}
|
|
44
|
-
}
|
|
45
|
-
/**
|
|
46
|
-
* Create a Worker adapter instance
|
|
47
|
-
*/
|
|
48
|
-
export function createWorkerAdapter(env) {
|
|
49
|
-
return new WorkerAdapter(env);
|
|
50
|
-
}
|
package/dist/server.d.ts
DELETED
|
@@ -1,36 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Core MCP server setup - shared between Node.js and Workers environments
|
|
3
|
-
*/
|
|
4
|
-
import { TezosToolkit } from "@taquito/taquito";
|
|
5
|
-
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
6
|
-
import type { EnvironmentAdapter } from "./adapters/index.js";
|
|
7
|
-
export type WalletConfig = {
|
|
8
|
-
Tezos: TezosToolkit;
|
|
9
|
-
spendingContract: string;
|
|
10
|
-
spendingAddress: string;
|
|
11
|
-
} | null;
|
|
12
|
-
declare const NETWORKS: {
|
|
13
|
-
readonly mainnet: {
|
|
14
|
-
readonly rpcUrl: "https://mainnet.tezos.ecadinfra.com";
|
|
15
|
-
readonly tzktApi: "https://api.tzkt.io";
|
|
16
|
-
};
|
|
17
|
-
readonly shadownet: {
|
|
18
|
-
readonly rpcUrl: "https://shadownet.tezos.ecadinfra.com";
|
|
19
|
-
readonly tzktApi: "https://api.shadownet.tzkt.io";
|
|
20
|
-
};
|
|
21
|
-
};
|
|
22
|
-
export type NetworkName = keyof typeof NETWORKS;
|
|
23
|
-
export type NetworkConfig = typeof NETWORKS[NetworkName];
|
|
24
|
-
export interface ServerConfig {
|
|
25
|
-
server: McpServer;
|
|
26
|
-
walletConfig: WalletConfig;
|
|
27
|
-
network: NetworkConfig;
|
|
28
|
-
networkName: NetworkName;
|
|
29
|
-
isHttp: boolean;
|
|
30
|
-
}
|
|
31
|
-
/**
|
|
32
|
-
* Initialize the MCP server with tools and wallet configuration
|
|
33
|
-
* This is the shared core that works in both Node.js and Workers
|
|
34
|
-
*/
|
|
35
|
-
export declare function createMcpServer(adapter: EnvironmentAdapter): Promise<ServerConfig>;
|
|
36
|
-
export {};
|
package/dist/server.js
DELETED
|
@@ -1,80 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Core MCP server setup - shared between Node.js and Workers environments
|
|
3
|
-
*/
|
|
4
|
-
import { InMemorySigner } from "@taquito/signer";
|
|
5
|
-
import { TezosToolkit } from "@taquito/taquito";
|
|
6
|
-
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
7
|
-
import { createTools } from "./tools/index.js";
|
|
8
|
-
// Network configurations
|
|
9
|
-
const NETWORKS = {
|
|
10
|
-
mainnet: {
|
|
11
|
-
rpcUrl: 'https://mainnet.tezos.ecadinfra.com',
|
|
12
|
-
tzktApi: 'https://api.tzkt.io',
|
|
13
|
-
},
|
|
14
|
-
shadownet: {
|
|
15
|
-
rpcUrl: 'https://shadownet.tezos.ecadinfra.com',
|
|
16
|
-
tzktApi: 'https://api.shadownet.tzkt.io',
|
|
17
|
-
},
|
|
18
|
-
};
|
|
19
|
-
/**
|
|
20
|
-
* Initialize the MCP server with tools and wallet configuration
|
|
21
|
-
* This is the shared core that works in both Node.js and Workers
|
|
22
|
-
*/
|
|
23
|
-
export async function createMcpServer(adapter) {
|
|
24
|
-
const log = (msg) => adapter.log(msg);
|
|
25
|
-
log('Initializing MCP server...');
|
|
26
|
-
const server = new McpServer({
|
|
27
|
-
name: "tezosx-mcp",
|
|
28
|
-
version: "1.0.0"
|
|
29
|
-
});
|
|
30
|
-
// Network configuration
|
|
31
|
-
const networkName = (adapter.getEnv('TEZOS_NETWORK') || 'mainnet');
|
|
32
|
-
const network = NETWORKS[networkName];
|
|
33
|
-
if (!network) {
|
|
34
|
-
throw new ReferenceError(`Invalid network: ${networkName}. Valid options: ${Object.keys(NETWORKS).join(', ')}`);
|
|
35
|
-
}
|
|
36
|
-
log(`Network: ${networkName}`);
|
|
37
|
-
// Taquito setup
|
|
38
|
-
const Tezos = new TezosToolkit(network.rpcUrl);
|
|
39
|
-
// Wallet configuration (optional - tools will guide user to configure if not set)
|
|
40
|
-
let walletConfig = null;
|
|
41
|
-
const privateKey = adapter.getEnv('SPENDING_PRIVATE_KEY')?.trim();
|
|
42
|
-
const spendingContract = adapter.getEnv('SPENDING_CONTRACT')?.trim();
|
|
43
|
-
if (privateKey && spendingContract) {
|
|
44
|
-
log('Configuring wallet...');
|
|
45
|
-
// Validate private key format
|
|
46
|
-
if (!privateKey.startsWith('edsk') && !privateKey.startsWith('spsk') && !privateKey.startsWith('p2sk')) {
|
|
47
|
-
log(`Warning: Invalid SPENDING_PRIVATE_KEY format. Must start with edsk, spsk, or p2sk. Wallet not configured.`);
|
|
48
|
-
}
|
|
49
|
-
else {
|
|
50
|
-
try {
|
|
51
|
-
const signer = await InMemorySigner.fromSecretKey(privateKey);
|
|
52
|
-
Tezos.setSignerProvider(signer);
|
|
53
|
-
const spendingAddress = await Tezos.signer.publicKeyHash();
|
|
54
|
-
walletConfig = { Tezos, spendingContract, spendingAddress };
|
|
55
|
-
log(`Wallet configured: ${spendingAddress}`);
|
|
56
|
-
}
|
|
57
|
-
catch (error) {
|
|
58
|
-
log(`Warning: Failed to initialize signer: ${error instanceof Error ? error.message : 'Unknown error'}. Wallet not configured.`);
|
|
59
|
-
}
|
|
60
|
-
}
|
|
61
|
-
}
|
|
62
|
-
else {
|
|
63
|
-
log('Wallet not configured (missing SPENDING_PRIVATE_KEY or SPENDING_CONTRACT)');
|
|
64
|
-
}
|
|
65
|
-
// Tools
|
|
66
|
-
log('Registering tools...');
|
|
67
|
-
const isHttp = adapter.getEnv('MCP_TRANSPORT') === 'http';
|
|
68
|
-
const tools = createTools(walletConfig, network.tzktApi, isHttp);
|
|
69
|
-
tools.forEach(tool => {
|
|
70
|
-
server.registerTool(tool.name, tool.config, tool.handler);
|
|
71
|
-
});
|
|
72
|
-
log(`Registered ${tools.length} tools`);
|
|
73
|
-
return {
|
|
74
|
-
server,
|
|
75
|
-
walletConfig,
|
|
76
|
-
network,
|
|
77
|
-
networkName,
|
|
78
|
-
isHttp
|
|
79
|
-
};
|
|
80
|
-
}
|
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
import { TezosToolkit } from "@taquito/taquito";
|
|
2
|
-
import z from "zod";
|
|
3
|
-
export declare const createGetAddressTool: (Tezos: TezosToolkit) => {
|
|
4
|
-
name: string;
|
|
5
|
-
config: {
|
|
6
|
-
title: string;
|
|
7
|
-
description: string;
|
|
8
|
-
inputSchema: z.ZodObject<{}, z.z.core.$strip>;
|
|
9
|
-
annotations: {
|
|
10
|
-
readOnlyHint: boolean;
|
|
11
|
-
destructiveHint: boolean;
|
|
12
|
-
};
|
|
13
|
-
};
|
|
14
|
-
handler: () => Promise<{
|
|
15
|
-
content: {
|
|
16
|
-
type: "text";
|
|
17
|
-
text: string;
|
|
18
|
-
}[];
|
|
19
|
-
}>;
|
|
20
|
-
};
|
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
import z from "zod";
|
|
2
|
-
export const createGetAddressTool = (Tezos) => ({
|
|
3
|
-
name: "tezos_get_address",
|
|
4
|
-
config: {
|
|
5
|
-
title: "Get Tezos Address",
|
|
6
|
-
description: "Returns the currently configured Tezos address",
|
|
7
|
-
inputSchema: z.object({}),
|
|
8
|
-
annotations: {
|
|
9
|
-
readOnlyHint: true,
|
|
10
|
-
destructiveHint: false
|
|
11
|
-
}
|
|
12
|
-
},
|
|
13
|
-
handler: async () => {
|
|
14
|
-
try {
|
|
15
|
-
const address = await Tezos.signer.publicKeyHash();
|
|
16
|
-
return {
|
|
17
|
-
content: [{ type: "text", text: address }]
|
|
18
|
-
};
|
|
19
|
-
}
|
|
20
|
-
catch {
|
|
21
|
-
throw new ReferenceError("Failed to get public key from signer.");
|
|
22
|
-
}
|
|
23
|
-
}
|
|
24
|
-
});
|