{% include '@Application/inc/central_header.html.twig' %}
{% include '@HoneybeeWeb/inc/_web_design_system.html.twig' %}
{# ─── HoneyBee AI Connector (MCP) — public documentation ───────────────────────
Route honeybee_ai_connector, path /ai-connector. PUBLIC and unauthenticated.
★ THIS IS THE DOCUMENTATION URL SUBMITTED TO ANTHROPIC'S CONNECTORS DIRECTORY.
The submission portal requires public setup + usage instructions; a listing with
none is rejected. It is written for two readers at once — a directory reviewer
checking what the connector can do, and a business owner about to connect it.
All styling lives in honeybee_web_assets/css/pages.css under `.hbc-*`, loaded
globally by central_header. ZERO inline style= attributes, no page-level <style>
block, per the CW1 consolidation. Colours/type come from the shared n-* tokens.
Every number below is derived from code, not from marketing:
· 39 reads → McpProtocolCore::readManifest() over the ToolRegistry
· 31 propose-only writes → McpWriteSurface::writeManifest()
· 5 refused operations → McpWriteSurface::refusedToolMap()
· money law → Modules\Mcp\Support\McpMoneyCore (MCP-7)
If you change a count here, change it because the code changed.
--------------------------------------------------------------------------- #}
<main id="hb-main">
{# ══ 1. HERO ══════════════════════════════════════════════════════════════ #}
<section class="hbc-hero">
<div class="n-wrap">
<div class="hbc-hero-inner">
<span class="n-label">HoneyBee AI Connector</span>
<h1 class="hbc-h1">Point Claude at your live business.</h1>
<p class="hbc-sub">Read-only by default. Writes only as drafts a person approves.</p>
<p class="hbc-lede">
The HoneyBee connector is a remote <b>Model Context Protocol</b> server that lets Claude
— or any MCP client — ask questions about your real HoneyBee ERP account: cash,
invoices, stock, projects, approvals, payroll self-service. You connect it once, with your
own HoneyBee login, and it answers from your own database with your own permissions.
</p>
<div class="hbc-actions">
<a href="#connect" class="n-btn n-btn-primary">
How to connect <i class="fa-solid fa-arrow-right" aria-hidden="true"></i>
</a>
<a href="#limits" class="n-btn n-btn-outline">What it cannot do</a>
</div>
</div>
</div>
</section>
{# ══ 2. WHO IT IS FOR ═════════════════════════════════════════════════════ #}
<section class="n-sec-sm hbc-band">
<div class="n-wrap-sm">
<h2 class="n-h2">Who this is for</h2>
<p class="hbc-body">
Anyone who already runs their company on HoneyBee ERP — EPC and engineering contractors,
solar and energy operators, trading and services SMEs in Bangladesh, Singapore and Germany.
It is meant for the people who ask the business questions: owners, finance and project leads,
and the staff who just want their own payslip or leave balance without opening a screen.
</p>
<p class="hbc-body">
You need an existing HoneyBee account. The connector adds no data of its own and creates no
second copy of your records — it is a window onto the system you already have.
</p>
</div>
</section>
{# ══ 3. HOW TO CONNECT ════════════════════════════════════════════════════ #}
<section class="n-sec-sm" id="connect">
<div class="n-wrap-sm">
<span class="n-label">Setup</span>
<h2 class="n-h2">How to connect</h2>
<p class="hbc-body">
Authentication is <b>OAuth 2.1 with PKCE</b>, with dynamic client registration, so there is no
key to copy and no secret to store. You sign in to HoneyBee in your own browser, see exactly
what the connection is asking for, and approve it there.
</p>
<ol class="hbc-steps">
<li>
<h3>Find your endpoint</h3>
<p>
In HoneyBee, open <b>Settings → AI Connection</b>. The page shows the exact server
URL for your company. It is your own HoneyBee address with <code>/mcp</code> on the end
— for example <code class="hbc-url">https://your-company.example/mcp</code>.
</p>
<p class="hbc-note">
If you have several HoneyBee companies, <code class="hbc-url">/my/mcp</code> on the
central address is a second, cross-company server that answers about all of them at
once. It is read-only with no setting that changes that.
</p>
</li>
<li>
<h3>Add it as a connector</h3>
<p>
In Claude, go to <b>Settings → Connectors → Add custom connector</b> and paste
that URL. Claude registers itself with the server automatically; you are not asked for a
client id or a secret.
</p>
</li>
<li>
<h3>Sign in and consent</h3>
<p>
Your browser opens a HoneyBee sign-in page. After you sign in, a consent screen states
in plain words what the connection will be able to do — and what it will never be
able to do. It reflects your company's actual settings: if drafting is switched off for
your company, the screen does not claim drafting.
</p>
</li>
<li>
<h3>Ask something</h3>
<p>
Try “what is my cash position”, “which invoices are overdue”, or
“what is waiting for my approval”. Answers come from your live ledger, and
when HoneyBee cannot stand behind a figure it says so instead of returning a number.
</p>
</li>
</ol>
<div class="hbc-callout">
<h3>Revoking access</h3>
<p>
Every connected client is listed on the same <b>Settings → AI Connection</b> page with
the person who authorised it and when. Revoking one there stops it immediately — the
next call it makes is refused. Revoking does not require support, and it does not affect
any other connection.
</p>
</div>
</div>
</section>
{# ══ 4. WHAT IT CAN AND CANNOT DO — the differentiator ════════════════════ #}
<section class="hbc-limits" id="limits">
<div class="n-wrap-sm">
<span class="n-label">The limits are the feature</span>
<h2 class="n-h2">What it can do, and what it <em class="n-em">cannot</em>.</h2>
<p class="hbc-body">
Most business connectors are shaped by what the API happened to expose. This one is shaped by
what we are willing to let software do to a company's money. The boundaries below are enforced
in code, on the server, at every request — not by prompting the model nicely.
</p>
<div class="hbc-rails">
<article class="hbc-rail">
<span class="hbc-rail-n" aria-hidden="true">01</span>
<div>
<h3>Read-only until you say otherwise.</h3>
<p>
Out of the box the connector exposes <b>39 tools that can only read</b>. Whether a
tool can execute is decided by the risk class it declares in the tool registry, not
by a list of names somebody maintains, so a new writing tool cannot appear on the
read surface by being forgotten.
</p>
</div>
</article>
<article class="hbc-rail">
<span class="hbc-rail-n" aria-hidden="true">02</span>
<div>
<h3>Writing is off by default, and even then it only drafts.</h3>
<p>
A company can switch on a second tier of <b>31 write tools</b>. Calling one of them
creates nothing: it returns a preview of what <em>would</em> change plus a signed,
single-use draft reference. The record does not exist until a person approves it.
</p>
</div>
</article>
<article class="hbc-rail">
<span class="hbc-rail-n" aria-hidden="true">03</span>
<div>
<h3>Money never moves without a human confirming a draft they were shown.</h3>
<p>
There is no code path on which a payment executes in the same request that asked for
it. A money operation is <em>always</em> drafted first, and the draft must state the
amount, the currency, the paying account, the receiving party, what it settles and
the resulting balance effect — six facts, all of them, or HoneyBee refuses to
produce the draft at all rather than show half a transaction.
</p>
<p>
Committing it is a separate call that must name that specific draft, quote a proof
string printed on it, <b>and restate the amount and currency exactly</b>. A mistyped
figure is refused. “Approve the last thing” is impossible by
construction. If anything about the money changed since the human read it, the
confirm is refused rather than adjusted.
</p>
<p>
And only a real person can do it: an authenticated human in an OAuth session who
consented to a scope that says so in plain words, on a company that switched money
confirmation on, with a kill switch un-pulled. A machine credential never sees these
tools at all — they are absent from its tool list, not merely refused.
</p>
</div>
</article>
<article class="hbc-rail">
<span class="hbc-rail-n" aria-hidden="true">04</span>
<div>
<h3>Some things are refused for everyone, permanently.</h3>
<p>
Five operations are unreachable through the connector at every setting: creating a
supplier payment, posting a journal voucher, posting a contra voucher, approving a
document and bulk-approving documents. A person may never approve, through this
channel, work that they themselves raised — that control is what makes
everything else safe, and there is no flag anywhere that lifts it.
</p>
</div>
</article>
<article class="hbc-rail">
<span class="hbc-rail-n" aria-hidden="true">05</span>
<div>
<h3>Your own permissions still apply.</h3>
<p>
The connector acts as the person who authorised it. Every call runs through the same
permission gate as the ERP screens, and the company's own database is the only thing
it can reach. A colleague's payslip is refused for the same reason it is refused in
the browser.
</p>
</div>
</article>
</div>
</div>
</section>
{# ══ 5. THE TOOLS ═════════════════════════════════════════════════════════ #}
<section class="n-sec-sm" id="tools">
<div class="n-wrap-sm">
<span class="n-label">Reference</span>
<h2 class="n-h2">The tools</h2>
<p class="hbc-body">
Every tool carries a plain-language title and a machine-readable hint saying whether it only
reads or can write, so your client can tell before it calls. The read tools below are the
default surface — what a brand-new connection sees.
</p>
<div class="hbc-tools">
<section class="hbc-group">
<h3>Money and accounting <span class="hbc-count">12</span></h3>
<ul>
<li>Cash position</li>
<li>Cash flow forecast</li>
<li>Overdue invoices</li>
<li>Payments due</li>
<li>Customer or supplier balance</li>
<li>General ledger inquiry</li>
<li>Search the cash and bank ledger</li>
<li>Where the money goes</li>
<li>Payables across companies</li>
<li>Plan for overdue payments</li>
<li>Find an expense account</li>
<li>Find a paying account</li>
</ul>
</section>
<section class="hbc-group">
<h3>Documents and operations <span class="hbc-count">7</span></h3>
<ul>
<li>Documents needing attention</li>
<li>View a document</li>
<li>Files attached to a document</li>
<li>Waiting for my approval</li>
<li>Three-way match check</li>
<li>Stock position</li>
<li>Find a customer or supplier</li>
</ul>
</section>
<section class="hbc-group">
<h3>Reporting and briefings <span class="hbc-count">6</span></h3>
<ul>
<li>Daily briefing</li>
<li>Business intelligence</li>
<li>Sales digest</li>
<li>Report for my role</li>
<li>Reports I can run</li>
<li>Run a report</li>
</ul>
</section>
<section class="hbc-group">
<h3>My own records <span class="hbc-count">7</span></h3>
<ul>
<li>My attendance</li>
<li>My leave requests</li>
<li>My leave balance</li>
<li>My payslip</li>
<li>My notifications</li>
<li>Tasks</li>
<li>Task history</li>
</ul>
</section>
<section class="hbc-group">
<h3>Projects, energy and account <span class="hbc-count">5</span></h3>
<ul>
<li>Energy project finance</li>
<li>Management plan</li>
<li>Onboarding status</li>
<li>Provisioning status</li>
<li>Subscription status</li>
</ul>
</section>
<section class="hbc-group">
<h3>Travel <span class="hbc-count">2</span></h3>
<ul>
<li>Travel fare check</li>
<li>Suggest a travel route</li>
</ul>
</section>
</div>
<div class="hbc-callout">
<h3>The optional tiers</h3>
<p>
<b>Drafting (31 tools, off by default).</b> Quotations, sales and purchase orders, goods
receipts, expenses, leads, projects, tasks, employees, products, customers and suppliers,
attendance and follow-ups. Each returns a preview and a draft reference; none of them
writes.
</p>
<p>
<b>Approving from the chat (3 tools, OAuth humans only).</b> List the drafts waiting for a
decision, approve one, or reject one. A machine credential cannot see these tools.
</p>
<p>
<b>Money confirmation (off by default, per company).</b> Supplier payments and cash/bank
transfers, drafted and then confirmed under the rules in section 3 above.
</p>
<p>
<b>All my companies (5 tools).</b> A separate read-only server that lists your companies,
aggregates pending tasks and payables across them, and drills into any one of them. A
company that does not answer is named as missing — it is never quietly counted as
zero.
</p>
</div>
</div>
</section>
{# ══ 6. PRIVACY + SUPPORT ═════════════════════════════════════════════════ #}
<section class="hbc-foot">
<div class="n-wrap-sm">
<h2 class="n-h2">Privacy and support</h2>
<p class="hbc-body">
The connector reads your workspace data to answer your questions, under the same terms as the
rest of the platform. What HoneyBee collects, how it is used and stored, who it is shared with,
how long it is kept and who to contact are set out in full in our privacy policy.
</p>
<div class="hbc-links">
<a href="{{ url('honeybee_privacy') }}" class="n-btn n-btn-primary">
Privacy policy <i class="fa-solid fa-arrow-right" aria-hidden="true"></i>
</a>
<a href="{{ url('honeybee_dpa') }}" class="n-btn n-btn-outline">Data Processing Addendum</a>
<a href="{{ url('honeybee_terms_and_conditions') }}" class="n-btn n-btn-outline">Terms</a>
</div>
<p class="hbc-contact">
Support: <a href="mailto:support@ourhoneybee.eu">support@ourhoneybee.eu</a>
· Privacy: <a href="mailto:privacy@ourhoneybee.eu">privacy@ourhoneybee.eu</a>
· Or use the <a href="{{ url('honeybee_contact') }}">contact form</a>.
</p>
<p class="hbc-xlink">
New to HoneyBee? Start with <a href="{{ url('honeybee_erp') }}">HoneyBee ERP</a>.
</p>
</div>
</section>
</main>
{% include '@HoneybeeWeb/footer/central_footer.html.twig' %}