mirror of
https://github.com/anand34577/ferrum.git
synced 2026-09-20 17:43:21 +00:00
4ae41a6f1d
- docs/: GitHub Pages site (landing page, docs, live click-through demo) served straight from /docs, no build step. - web-demo/: source for the demo (a copy of web/ with its API layer mocked in-memory) — see web-demo/README.md to rebuild docs/demo after a change. - web/src/lib/auth.tsx: signOut() no longer clears the whole query cache; wiping ["auth","setup-status"] forced it to refetch and re-armed `loading`, stranding the user on a loading/failed screen instead of the Login page. Only non-auth queries are dropped now. - .gitignore: exclude web-demo/node_modules and web-demo/dist (build output, already published as docs/demo). - Drop PRODUCT.md (internal planning brief, not meant for the public repo). - README: link the new docs/demo site.
108 lines
6.4 KiB
HTML
108 lines
6.4 KiB
HTML
<!doctype html>
|
|
<html lang="en">
|
|
<head>
|
|
<meta charset="utf-8">
|
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
|
<title>API, MCP & audit log — Ferrum Docs</title>
|
|
<meta name="description" content="Generate API keys, call Ferrum's REST API, connect an MCP-capable agent, and find every mutating action in the audit log.">
|
|
<link rel="icon" type="image/svg+xml" href="../assets/favicon.svg">
|
|
<link rel="stylesheet" href="../assets/css/site.css">
|
|
</head>
|
|
<body>
|
|
<header class="topnav">
|
|
<div class="container topnav-row">
|
|
<a href="../index.html" class="brand">
|
|
<span class="brand-mark" aria-label="Ferrum (Fe)"><span class="bm-num">26</span><span class="bm-sym">Fe</span></span>
|
|
Ferrum
|
|
</a>
|
|
<nav class="navlinks">
|
|
<a href="../index.html#features">Product</a>
|
|
<a href="../index.html#look">Screenshots</a>
|
|
<a href="./index.html" aria-current="page">Docs</a>
|
|
<a href="../demo/index.html">Demo</a>
|
|
<a href="https://github.com/anand34577/ferrum/releases" target="_blank" rel="noopener">Releases</a>
|
|
</nav>
|
|
<div class="nav-actions">
|
|
<button class="icon-btn" data-theme-toggle aria-label="Toggle color theme">
|
|
<svg class="i-moon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round"><path d="M20 14.5A8 8 0 1 1 9.5 4a6.5 6.5 0 0 0 10.5 10.5Z"/></svg>
|
|
<svg class="i-sun" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="4"/><path d="M12 2v2M12 20v2M4.9 4.9l1.4 1.4M17.7 17.7l1.4 1.4M2 12h2M20 12h2M4.9 19.1l1.4-1.4M17.7 6.3l1.4-1.4"/></svg>
|
|
</button>
|
|
<a class="icon-btn" href="https://github.com/anand34577/ferrum" target="_blank" rel="noopener" aria-label="View source on GitHub">
|
|
<svg viewBox="0 0 24 24" fill="currentColor"><path d="M12 2C6.48 2 2 6.58 2 12.25c0 4.53 2.87 8.37 6.84 9.73.5.1.68-.22.68-.5 0-.24-.01-1.04-.01-1.88-2.78.62-3.37-1.22-3.37-1.22-.46-1.2-1.11-1.52-1.11-1.52-.9-.64.07-.63.07-.63 1 .07 1.53 1.06 1.53 1.06.89 1.57 2.34 1.11 2.91.85.09-.67.35-1.11.63-1.37-2.22-.26-4.56-1.14-4.56-5.07 0-1.12.39-2.03 1.03-2.75-.1-.26-.45-1.31.1-2.72 0 0 .84-.28 2.75 1.05a9.28 9.28 0 0 1 5 0c1.9-1.33 2.74-1.05 2.74-1.05.56 1.41.2 2.46.1 2.72.65.72 1.03 1.63 1.03 2.75 0 3.94-2.35 4.8-4.58 5.06.36.32.68.94.68 1.9 0 1.37-.01 2.48-.01 2.81 0 .28.18.61.69.5A10.03 10.03 0 0 0 22 12.25C22 6.58 17.52 2 12 2Z"/></svg>
|
|
</a>
|
|
<a class="btn btn-primary btn-sm" href="../demo/index.html">Live demo</a>
|
|
<button class="nav-toggle" data-nav-toggle aria-label="Open menu" aria-expanded="false">
|
|
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round"><path d="M4 7h16M4 12h16M4 17h16"/></svg>
|
|
</button>
|
|
</div>
|
|
</div>
|
|
</header>
|
|
|
|
<div class="container doc-shell">
|
|
<nav class="doc-nav" aria-label="Documentation">
|
|
<div>
|
|
<h5>Getting started</h5>
|
|
<ul>
|
|
<li><a href="./index.html">Overview</a></li>
|
|
<li><a href="./installation.html">Installation</a></li>
|
|
</ul>
|
|
</div>
|
|
<div>
|
|
<h5>Setup</h5>
|
|
<ul><li><a href="./configuration.html">Configuration</a></li></ul>
|
|
</div>
|
|
<div>
|
|
<h5>Using Ferrum</h5>
|
|
<ul><li><a href="./features.html">Features & workflows</a></li></ul>
|
|
</div>
|
|
<div>
|
|
<h5>Integrations</h5>
|
|
<ul><li><a href="./api.html" aria-current="page">API, MCP & audit log</a></li></ul>
|
|
</div>
|
|
</nav>
|
|
|
|
<article class="doc-content">
|
|
<div class="doc-kicker">Integrations</div>
|
|
<h1>API, MCP & audit log</h1>
|
|
<p>Ferrum is scriptable from the ground up: everything the UI does goes through the same REST API, and that same tool catalog is exposed over MCP for agents. Both are off by default.</p>
|
|
|
|
<h2 id="keys">Generating an API key</h2>
|
|
<p>Any user can create a long-lived key from <strong>Profile > API Keys</strong>, scoped to one of two things:</p>
|
|
<ul>
|
|
<li><strong>REST API</strong>: for third-party integrations and scripts, sent as <code>Authorization: Bearer <key></code> against <code>/api/v1/...</code>.</li>
|
|
<li><strong>MCP only</strong>: for Claude Code, Claude Desktop, or any other MCP-capable agent. <strong>Profile > MCP integration</strong> has a ready-to-paste config for the common clients.</li>
|
|
</ul>
|
|
<p>A key only works if an admin has switched the corresponding surface on first.</p>
|
|
|
|
<h2 id="enabling">Turning the surfaces on</h2>
|
|
<p>Under <strong>Settings > API & MCP</strong>, an admin enables the REST API and/or the MCP endpoint, and sets a cap on how many tool calls the AI Assistant's agent loop can make in a single message, a guardrail against a runaway chain of actions from one prompt.</p>
|
|
|
|
<h2 id="rest">Calling the REST API</h2>
|
|
<pre><code>curl https://ferrum.example.com/api/v1/connections \
|
|
-H "Authorization: Bearer <your-api-key>"</code></pre>
|
|
<p>Every route the UI itself calls is available the same way (connections, inventory, guests, backups, alerts, and so on) under <code>/api/v1</code>.</p>
|
|
|
|
<h2 id="mcp">Connecting an MCP agent</h2>
|
|
<p>Point an MCP-capable client at <code>/mcp</code> with an MCP-scoped key, using the config <strong>Profile > MCP integration</strong> generates for you. Once connected, the agent sees the same tool catalog the built-in AI Assistant uses: reading inventory and status is always available; anything that changes state respects the per-message tool-call cap from <strong>Settings > API & MCP</strong>.</p>
|
|
|
|
<h2 id="audit">Audit log</h2>
|
|
<p>Every mutating action is recorded with who did it, what it was, and when, whether it came through the UI, the REST API, or MCP. Admins can review the full history under <strong>Audit Log</strong>, which makes "an agent did this at 2am" as traceable as a person clicking a button.</p>
|
|
|
|
<div class="doc-footnav">
|
|
<a href="./features.html"><span class="lbl">Back</span><span class="ttl">← Features & workflows</span></a>
|
|
<span></span>
|
|
</div>
|
|
</article>
|
|
</div>
|
|
|
|
<footer class="site-footer">
|
|
<div class="container footer-bottom" style="margin-top:0; padding-top:0; border-top:none;">
|
|
<span>© 2026 Ferrum. Open source under the MIT license.</span>
|
|
<a href="https://github.com/anand34577/ferrum" target="_blank" rel="noopener">github.com/anand34577/ferrum</a>
|
|
</div>
|
|
</footer>
|
|
|
|
<script src="../assets/js/site.js"></script>
|
|
</body>
|
|
</html>
|