<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>VeChain MCP Server</title>
<meta name="description"
content="This page documents and helps you configure an MCP server exposing VeChain Docs search plus Thorest API tools for accounts, transactions, blocks and fee suggestions." />
<link rel="icon" href="favicon.ico" />
<style>
:root {
--bg: #0b0d10;
--panel: #0f1318;
--muted: #9aa4b2;
--text: #e6edf3;
--brand: #21d0b2;
--brand-2: #7c6cf5;
--ring: 0 0 0 3px rgba(33, 208, 178, .35);
--radius: 12px;
--code-bg: #0a0d12;
--border: #1c232d;
--shadow: 0 10px 30px rgba(0, 0, 0, .35);
}
@media (prefers-color-scheme: light) {
:root {
--bg: #f7fafc;
--panel: #ffffff;
--text: #0b1020;
--muted: #5b6777;
--border: #e8eef5;
--code-bg: #0b1020;
}
.code pre {
background: #0b1020;
color: #e6edf3;
}
}
* {
box-sizing: border-box;
}
html,
body {
height: 100%;
}
body {
margin: 0;
font: 16px/1.5 ui-sans-serif, -apple-system, "Segoe UI", Roboto, Inter, system-ui, Arial;
color: var(--text);
background: var(--bg);
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
}
a {
color: var(--brand);
text-decoration: none;
text-decoration: underline;
}
a:hover {
text-decoration: underline;
}
.container {
max-width: 1100px;
margin: 0 auto;
padding: 24px;
}
header.nav {
position: sticky;
top: 0;
z-index: 50;
backdrop-filter: saturate(120%) blur(10px);
background: color-mix(in oklab, var(--bg), transparent 60%);
border-bottom: 1px solid var(--border);
}
.nav-inner {
display: flex;
align-items: center;
gap: 18px;
padding: 16px 24px;
}
.brand {
display: flex;
align-items: center;
gap: 12px;
font-weight: 700;
letter-spacing: .2px;
}
.logo {
width: 60px;
height: 60px;
display: grid;
place-items: center;
border-radius: 8px;
}
.tabs {
margin-left: auto;
display: flex;
gap: 6px;
background: var(--panel);
padding: 6px;
border-radius: 999px;
border: 1px solid var(--border);
}
.tab {
border: 0;
padding: 8px 14px;
border-radius: 999px;
color: var(--muted);
background: transparent;
cursor: pointer;
font-weight: 600;
}
.tab.active {
color: #0b0f14;
background: linear-gradient(135deg, var(--brand), var(--brand-2));
box-shadow: var(--shadow);
}
.hero {
padding: 40px 0 16px;
}
.hero h1 {
font-size: clamp(28px, 4vw, 40px);
margin: 4px 0;
}
.tagline {
color: var(--muted);
max-width: 60ch;
}
.pill {
border: 1px solid var(--border);
padding: 6px 10px;
border-radius: 999px;
background: color-mix(in oklab, var(--panel), transparent 20%);
display: inline-flex;
align-items: center;
gap: 8px;
}
.section {
margin: 28px 0;
}
.muted {
color: var(--muted);
}
.code {
position: relative;
border: 1px solid var(--border);
border-radius: 12px;
overflow: hidden;
background: color-mix(in oklab, var(--panel), transparent 0%);
}
.code .bar {
display: flex;
gap: 8px;
padding: 10px 12px;
align-items: center;
background: color-mix(in oklab, var(--panel), transparent 6%);
border-bottom: 1px solid var(--border);
}
.dot {
width: 10px;
height: 10px;
border-radius: 999px;
background: #ff5f57;
}
.dot:nth-child(2) {
background: #ffbd2e;
}
.dot:nth-child(3) {
background: #28c840;
}
pre {
margin: 0;
padding: 16px;
overflow: auto;
font: 13px/1.6 ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", monospace;
background: var(--code-bg);
color: #cde3ff;
}
code {
font-family: inherit;
}
.copy {
position: absolute;
top: 8px;
right: 8px;
border: 1px solid var(--border);
background: color-mix(in oklab, var(--panel), transparent 10%);
color: var(--muted);
padding: 6px 10px;
border-radius: 10px;
cursor: pointer;
font-weight: 600;
}
.copy:focus {
outline: none;
box-shadow: var(--ring);
}
.kbd {
border: 1px solid #1f2937;
padding: 2px 6px;
border-radius: 6px;
background: #0e1621;
color: #d1e5ff;
font: 12px ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", monospace;
}
.input,
select {
width: 100%;
padding: 10px 12px;
border-radius: 10px;
border: 1px solid var(--border);
background: color-mix(in oklab, var(--panel), transparent 10%);
color: var(--text);
}
.row {
display: grid;
grid-template-columns: 1fr 2fr;
gap: 12px;
align-items: center;
}
@media (max-width: 720px) {
.row {
grid-template-columns: 1fr;
}
}
.btn {
appearance: none;
border: 0;
padding: 10px 14px;
border-radius: 10px;
background: linear-gradient(135deg, var(--brand), var(--brand-2));
color: #0b0f14;
font-weight: 700;
cursor: pointer;
}
.btn.secondary {
background: color-mix(in oklab, var(--panel), transparent 10%);
color: var(--text);
border: 1px solid var(--border);
}
details {
border: 1px solid var(--border);
border-radius: 12px;
padding: 12px 14px;
background: color-mix(in oklab, var(--panel), transparent 10%);
}
summary {
cursor: pointer;
font-weight: 700;
}
footer {
padding: 40px 24px;
color: var(--muted);
}
#playground section {
margin-top: 14px;
}
#playground ul {
margin: 8px 0 0 60px;
padding: 0;
}
#playground code {
background: rgba(0, 0, 0, 0.12);
padding: 2px 6px;
border-radius: 6px;
font-size: 0.95em;
color: var(--text);
}
#playground h4 {
margin-left: 20px;
}
</style>
</head>
<body>
<header class="nav">
<div class="nav-inner container">
<div class="brand">
<img src="./images/isotipo.png" alt="VeChain logo" class="logo" />
<div>VeChain MCP Server</div>
</div>
<nav class="tabs" role="tablist" aria-label="Primary">
<button class="tab active" data-tab="docs" role="tab" aria-selected="true">Docs</button>
</nav>
</div>
</header>
<main class="container">
<section class="hero">
<p class="pill">MCP • Model Context Protocol <span class="muted">for VeChain</span></p>
<h1>VeChain MCP Server</h1>
<p class="tagline">This page documents and helps you configure an MCP server exposing VeChain Docs search
plus Thorest API tools for accounts, transactions, blocks and fee suggestions.</p>
<a href="https://github.com/leandrogavidia/vechain-mcp-server" target="_blank"
rel="noopener noreferrer">GitHub Repository</a>
</section>
<div id="tab-docs" role="tabpanel">
<div id="integration" class="section">
<h2>Integrations</h2>
<p class="muted">Register the server in your MCP-aware host configuration.</p>
<div class="code" data-copy>
<div class="bar"><span class="dot"></span><span class="dot"></span><span class="dot"></span></div>
<pre><code class="language-json">{
"mcpServers": {
"vechainMcp": {
"url": "https://server.smithery.ai/@leandrogavidia/vechain-mcp-server/mcp",
"type": "streamable-http"
}
}
}</code></pre>
<button class="copy" title="Copy">Copy</button>
</div>
</div>
<div class="section" id="playground">
<h2>Tool list</h2>
<p class="muted">
A read-only list of the available tools. Use these names when constructing MCP requests.
</p>
<section>
<h3>Vechain Docs</h3>
<ul>
<li><code>search_documentation</code> — Search VeChain Documentation.</li>
</ul>
</section>
<section>
<h3>Thorest API</h3>
<h4>Accounts</h4>
<ul>
<li><code>get_account</code> — Retrieve account details.</li>
</ul>
<h4>Transactions</h4>
<ul>
<li><code>get_transaction</code> — Retrieve a transaction by ID.</li>
</ul>
<h4>Blocks</h4>
<ul>
<li><code>get_block</code> — Get a VeChain block.</li>
</ul>
<h4>Fees</h4>
<ul>
<li><code>get_priority_fee</code> — Suggest a priority fee.</li>
</ul>
</section>
<section>
<h3>Wallet & signatures</h3>
<h4>Wallet</h4>
<ul>
<li><code>create_wallet</code> — Create a VeChain wallet (mnemonic + keys).</li>
</ul>
<h4>Signatures</h4>
<ul>
<li><code>sign_certificate</code> — Create and sign a canonical certificate.</li>
<li><code>sign_raw_transaction</code> — Sign raw transaction.</li>
</ul>
</section>
<section>
<h3>Goat SDK (VeChain Tools)</h3>
<ul>
<li><code>get_address</code> — Get the address of the wallet</li>
<li><code>get_chain</code> — Get the chain of the wallet</li>
<li><code>sign_message</code> — Sign a message with the wallet</li>
<li><code>get_balance</code> — Get the balance for native currency or a specific token</li>
<li><code>get_token_info_by_ticker</code> — Get token info (contract, decimals) by ticker</li>
<li><code>convert_to_base_units</code> — Convert a token amount to base units (e.g., wei)</li>
<li><code>convert_from_base_units</code> — Convert from base units to readable units</li>
<li><code>sign_typed_data_evm</code> — Sign EIP-712 typed data (EVM)</li>
<li><code>get_token_allowance_evm</code> — Get ERC20 allowance (base units)</li>
<li><code>send_token</code> — Send native currency or ERC20 token (base units)</li>
<li><code>approve_token_evm</code> — Approve ERC20 token allowance (base units)</li>
<li><code>revoke_token_approval_evm</code> — Revoke ERC20 token approval (set allowance to 0)
</li>
</ul>
</section>
</div>
</div>
</main>
<script>
document.querySelectorAll('[data-copy] .copy').forEach(btn => {
btn.addEventListener('click', async () => {
try {
const pre = btn.parentElement.querySelector('pre');
if (!pre) return;
const text = pre.innerText || pre.textContent || '';
await navigator.clipboard.writeText(text);
const prev = btn.textContent;
btn.textContent = 'Copied!';
setTimeout(() => btn.textContent = prev || 'Copy', 1600);
} catch {
}
});
});
</script>
</body>
</html>