!function(){var t=localStorage.getItem('lion_portal_theme');if(t)document.documentElement.setAttribute('data-theme',t)}(); /> LionMCP — Gateway de Ferramentas para IA
LionDataMesh LionDataMesh MCP · Gateway IA
Processando…
🤖

LionMCP — Gateway de IA

Expõe todas as APIs Lion como ferramentas semânticas para agentes de IA via Model Context Protocol

O que é o LionMCP?
🔌

Model Context Protocol (MCP)

Padrão aberto para expor dados e capacidades como ferramentas que agentes de IA (Claude, GPT, Gemini) podem invocar diretamente durante raciocínio.

Por que o LionMCP é superior

Diferente de simples wrappers REST, o LionMCP mapeia contexto semântico, debate de créditos, rate limiting e versionamento de contratos por ferramenta.

🏭

Ferramentas disponíveis

LionCheck (compliance), LionRoute (logística), LionPCP (produção), LionContábil (financeiro), LionMKT (CRM) — tudo em um gateway unificado.

🔐

Segurança & Créditos

Cada chamada debita créditos da conta. Bearer JWT por tenant. Rate limit por plano. Audit log imutável de todas as execuções.

Fluxo de uma chamada MCP
🤖 Agente IA
Claude / GPT / Gemini
⚡ LionMCP
Gateway /mcp/v1
✅ LionCheck
CNPJ/CPF
|
🏭 LionPCP
MRP / BOM
|
📊 LionContábil
DRE / NF-e
📋 Resposta
JSON + créditos

Catálogo de Ferramentas MCP

Clique em uma ferramenta para ir direto para a aba Executar

Executar Ferramenta

Selecione a ferramenta, preencha os argumentos em JSON e execute. O gateway debita 1+ crédito por chamada bem-sucedida.

Integração rápida

Listar ferramentas disponíveis

curl -H "Authorization: Bearer SEU_TOKEN" \
  "https://api.liondatamesh.com.br/mcp/v1/tools"

Executar ferramenta (exemplo: consulta CNPJ)

curl -X POST \
  -H "Authorization: Bearer SEU_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "lion_check_cnpj",
    "arguments": {"documento": "11.222.333/0001-81"}
  }' \
  "https://api.liondatamesh.com.br/mcp/v1/tools/call"

Python — Integração com LangChain / LlamaIndex

from lionmcp import LionMCPClient

client = LionMCPClient(token="SEU_TOKEN")

# Listar ferramentas
tools = client.list_tools()

# Executar ferramenta
result = client.call_tool("lion_check_cnpj", {"documento": "11.222.333/0001-81"})
print(result.content)  # JSON com dados do CNPJ
print(result.credits_charged)  # créditos debitados
function getToken() { return localStorage.getItem('portalToken') || localStorage.getItem('portal_token') || ''; } function authHdr() { return { 'Authorization': 'Bearer ' + getToken(), 'Content-Type': 'application/json' }; } function showSpinner(v) { document.getElementById('spinner').style.display = v ? 'block' : 'none'; } function switchTab(id) { document.querySelectorAll('.tab-pane').forEach(p => p.classList.remove('active')); document.querySelectorAll('.tab-btn').forEach(b => b.classList.remove('active')); document.getElementById(id).classList.add('active'); const tabs = ['tab-tools','tab-call','tab-credits','tab-health']; document.querySelectorAll('.tab-btn')[tabs.indexOf(id)].classList.add('active'); } function kpi(val, lbl) { return `
${val}
${lbl}
`; } async function loadTools() { showSpinner(true); try { const resp = await fetch(API + '/tools', { headers: authHdr() }); const data = await resp.json(); showSpinner(false); if (!resp.ok) { LionUI.toast('Erro: ' + (data.detail?.message || JSON.stringify(data))); return; } _tools = data.tools || []; renderTools(_tools); // Populate call selector const sel = document.getElementById('call-tool-name'); sel.innerHTML = '' + _tools.map(t => ``).join(''); } catch(e) { showSpinner(false); LionUI.toast('Erro: ' + e.message, 'err'); } } function renderTools(tools) { document.getElementById('tools-grid').innerHTML = tools.map(t => `
${t.name}
${t.description}
${t.credits_cost} crédito(s) v${t.contract_version} ${(t.tags||[]).slice(0,3).map(tag => `${tag}`).join('')}
`).join(''); } function selectTool(name) { switchTab('tab-call'); document.getElementById('call-tool-name').value = name; updateArgTemplate(); } function updateArgTemplate() { const name = document.getElementById('call-tool-name').value; const tool = _tools.find(t => t.name === name); if (!tool) return; const required = tool.arguments?.required || []; const props = tool.arguments?.properties || {}; const example = {}; required.forEach(k => { const prop = props[k] || {}; if (prop.enum) example[k] = prop.enum[0]; else if (prop.type === 'integer') example[k] = 1; else if (prop.type === 'number') example[k] = 0; else if (prop.type === 'boolean') example[k] = false; else example[k] = `<${k}>`; }); document.getElementById('call-args').value = JSON.stringify(example, null, 2); } async function callTool() { const name = document.getElementById('call-tool-name').value; if (!name) { LionUI.toast('Selecione uma ferramenta.', 'info'); return; } let args; try { args = JSON.parse(document.getElementById('call-args').value || '{}'); } catch(e) { LionUI.toast('JSON inválido: ' + e.message, 'err'); return; } showSpinner(true); try { const resp = await fetch(API + '/tools/call', { method: 'POST', headers: authHdr(), body: JSON.stringify({ name, arguments: args }), }); const data = await resp.json(); showSpinner(false); if (!resp.ok) { document.getElementById('call-meta').innerHTML = `
Erro ${escHtml(String(resp.status))}: ${escHtml(data.detail?.message || '')}
`; document.getElementById('call-pre').textContent = JSON.stringify(data, null, 2); document.getElementById('call-result').style.display = 'block'; return; } const st = data.status || 'ok'; document.getElementById('call-meta').innerHTML = `
${kpi(`${st.toUpperCase()}`, 'Status')} ${kpi(data.credits_charged ?? '-', 'Créditos debitados')} ${kpi((data.elapsed_ms ?? '-') + ' ms', 'Latência')}
`; const contentText = (data.content || [])[0]?.text || ''; let pretty; try { pretty = JSON.stringify(JSON.parse(contentText), null, 2); } catch { pretty = contentText; } document.getElementById('call-pre').textContent = pretty; document.getElementById('call-result').style.display = 'block'; } catch(e) { showSpinner(false); LionUI.toast('Erro: ' + e.message, 'err'); } } function clearCall() { document.getElementById('call-args').value = ''; document.getElementById('call-result').style.display = 'none'; } async function loadCredits() { showSpinner(true); try { const [balR, stmtR] = await Promise.all([ fetch(API + '/credits/balance', { headers: authHdr() }), fetch(API + '/credits/statement?limit=50', { headers: authHdr() }), ]); const bal = await balR.json(); const stmt = await stmtR.json(); showSpinner(false); const plan = bal.plan || {}; document.getElementById('credits-kpis').innerHTML = [ kpi(bal.unlimited ? '∞' : (bal.available_credits ?? '-'), 'Disponíveis'), kpi(bal.monthly_debited ?? '-', 'Usados (mês)'), kpi(plan.label || plan.plan_key || '-', 'Plano'), kpi(plan.rate_limit_per_min ?? '-', 'Req/min limite'), ].join(''); const entries = (stmt.entries || []).slice(0, 50); document.getElementById('credits-tbody').innerHTML = entries.map(e => `${(e.ts||'').substring(0,16).replace('T',' ')}${e.tool_name||''}${e.type||''}${e.amount||0}` ).join(''); document.getElementById('credits-result').style.display = 'block'; } catch(e) { showSpinner(false); LionUI.toast('Erro: ' + e.message, 'err'); } } async function loadHealth() { showSpinner(true); try { const resp = await fetch(API + '/health', { headers: authHdr() }); const data = await resp.json(); showSpinner(false); const st = data.status || 'ok'; const cls = st === 'ok' ? 'badge-ok' : 'badge-err'; const warns = (data.warnings || []).map(w => `
${escHtml(w)}
`).join(''); document.getElementById('health-status').innerHTML = `
Status: ${escHtml(st.toUpperCase())}
${warns}`; const cr = data.credits || {}; document.getElementById('health-kpis').innerHTML = [ kpi(data.tools_registered ?? '-', 'Ferramentas registradas'), kpi(cr.unlimited ? '∞' : (cr.available_credits ?? '-'), 'Créditos disponíveis'), kpi(data.rate_limit?.current ?? '-', 'Req/min atual'), kpi(data.protocol || 'lionmcp', 'Protocolo'), ].join(''); document.getElementById('health-pre').textContent = JSON.stringify(data, null, 2); document.getElementById('health-result').style.display = 'block'; } catch(e) { showSpinner(false); LionUI.toast('Erro: ' + e.message, 'err'); } } (function init() { if (typeof LionPortalNav !== 'undefined') LionPortalNav.render('/portal/lionmcp'); loadTools(); })();