Spaces:
Sleeping
Sleeping
Download index.html from purecipher/xsecuremcp: direct link, hf CLI and curl.
- Browser
- Download file 17.2 kB
-
https://huggingface.co/spaces/purecipher/xsecuremcp/resolve/main/index.html
- Command line
-
hf download hf://spaces/purecipher/xsecuremcp/index.html
-
curl -L -o index.html https://huggingface.co/spaces/purecipher/xsecuremcp/resolve/main/index.html
17.2 kB
| <html lang="en"> | |
| <head> | |
| <meta charset="utf-8" /> | |
| <meta name="viewport" content="width=device-width, initial-scale=1" /> | |
| <meta name="description" content="Learn how to use xSecureMCP: MCP servers, execution policies, receipts, and registry governance." /> | |
| <title>xSecureMCP — Guide & documentation</title> | |
| <style> | |
| :root { color-scheme: light; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif; color: #213344; background: #f5f7f9; line-height: 1.7; } | |
| * { box-sizing: border-box; } | |
| body { margin: 0; } | |
| a { color: #087b77; text-decoration-thickness: 1px; text-underline-offset: 3px; } | |
| a:hover { color: #064f4d; } | |
| a:focus-visible { outline: 3px solid #36b7b0; outline-offset: 4px; } | |
| .topbar { background: #112c3d; color: #fff; padding: 18px max(24px, calc((100vw - 1200px) / 2)); display: flex; justify-content: space-between; align-items: center; gap: 20px; flex-wrap: wrap; } | |
| .brand { color: #fff; text-decoration: none; font-size: 20px; font-weight: 700; letter-spacing: -.5px; } | |
| .brand span { color: #8cb2c3; font-size: 11px; letter-spacing: 2px; margin-right: 18px; } | |
| .topbar nav { display: flex; gap: 24px; font-size: 14px; } | |
| .topbar nav a { color: #d5e7ee; } | |
| .layout { display: grid; grid-template-columns: 210px minmax(0, 1fr); gap: 48px; max-width: 1200px; padding: 48px 24px 80px; margin: auto; } | |
| aside { position: sticky; top: 28px; align-self: start; max-height: calc(100vh - 56px); overflow-y: auto; font-size: 13px; } | |
| aside p { font-weight: 700; color: #5e7484; text-transform: uppercase; font-size: 11px; letter-spacing: 1.5px; margin: 0 0 16px; } | |
| aside a { display: block; color: #526777; text-decoration: none; padding: 7px 0 7px 14px; border-left: 2px solid #dce5e9; line-height: 1.5; } | |
| aside a:hover { color: #087b77; border-color: #087b77; } | |
| main { background: white; border: 1px solid #e0e7ec; border-radius: 12px; padding: 40px 44px; min-width: 0; } | |
| h1, h2, h3 { color: #132f41; line-height: 1.25; scroll-margin-top: 24px; } | |
| h1 { font-size: clamp(32px, 5vw, 46px); letter-spacing: -1.5px; margin: 0 0 14px; } | |
| h1 + p { font-size: 19px; color: #4b687b; } | |
| h2 { font-size: 25px; letter-spacing: -.5px; border-top: 1px solid #e2e9ed; margin: 42px 0 18px; padding-top: 30px; } | |
| h3 { font-size: 19px; margin-top: 28px; } | |
| p { margin: 0 0 18px; } | |
| ul, ol { padding-left: 24px; } | |
| li { padding-left: 4px; margin: 10px 0; } | |
| code { font-family: ui-monospace, SFMono-Regular, Consolas, monospace; font-size: .85em; background: #edf3f5; border-radius: 4px; padding: 2px 5px; overflow-wrap: anywhere; } | |
| pre { padding: 20px; border: 1px solid #dce7eb; border-radius: 8px; background: #f3f7f9; overflow-x: auto; line-height: 1.6; } | |
| pre code { background: none; padding: 0; overflow-wrap: normal; } | |
| .table-wrap { overflow-x: auto; margin: 22px 0; border: 1px solid #dce6eb; border-radius: 8px; } | |
| table { border-collapse: collapse; width: 100%; font-size: 14px; } | |
| th { text-align: left; background: #edf4f6; color: #24475a; } | |
| th, td { padding: 13px 16px; vertical-align: top; border-bottom: 1px solid #e3ebef; min-width: 140px; } | |
| tr:last-child td { border-bottom: 0; } | |
| td:first-child { min-width: 150px; } | |
| blockquote { border-left: 3px solid #159b94; margin: 24px 0; padding: 12px 20px; background: #eff8f7; } | |
| footer { border-top: 1px solid #e0e7ec; margin-top: 36px; padding-top: 20px; color: #637a89; font-size: 13px; } | |
| .skip { position: absolute; left: -9999px; } | |
| .skip:focus { position: fixed; left: 20px; top: 12px; background: white; padding: 12px; z-index: 2; } | |
| @media (max-width: 850px) { .layout { display: block; padding: 24px 16px; } aside { position: static; max-height: none; margin-bottom: 24px; } aside nav { display: flex; gap: 8px; flex-wrap: wrap; } aside a { padding: 6px 10px; border: 1px solid #dae4e9; border-radius: 6px; background: white; } main { padding: 28px 22px; } .brand span { display: block; margin: 0 0 2px; } } | |
| @media print { .topbar, aside { display: none; } .layout { display: block; padding: 0; } main { border: 0; padding: 0; } } | |
| </style> | |
| </head> | |
| <body id="top"> | |
| <a class="skip" href="#readme">Skip to guide</a> | |
| <header class="topbar"> | |
| <a class="brand" href="#top"><span>PURECIPHER</span>xSecureMCP</a> | |
| <nav aria-label="Project links"> | |
| <a href="https://github.com/PureCipher/xsecuremcp2.0" target="_blank" rel="noopener noreferrer">GitHub ↗</a> | |
| <a href="https://github.com/PureCipher/xsecuremcp2.0/releases/tag/build-latest" target="_blank" rel="noopener noreferrer">Downloads ↗</a> | |
| <a href="/registry/health" target="_blank" rel="noopener noreferrer">API health ↗</a> | |
| </nav> | |
| </header> | |
| <div class="layout"> | |
| <aside><p>On this page</p><nav aria-label="Guide sections"><a href="#what-changes-beyond-mcp-and-why">What changes beyond MCP, and why</a> | |
| <a href="#how-to-use-the-project">How to use the project</a> | |
| <a href="#what-this-space-runs">What this Space runs</a> | |
| <a href="#use-the-python-packages">Use the Python packages</a> | |
| <a href="#configure-your-own-deployment">Configure your own deployment</a> | |
| <a href="#build-provenance">Build provenance</a> | |
| <a href="#license-and-attribution">License and attribution</a></nav></aside> | |
| <main id="readme"> | |
| <h1 id="xsecuremcp">xSecureMCP</h1> | |
| <p><strong>Security and governance for MCP servers and tool registries.</strong></p> | |
| <p>xSecureMCP is PureCipher’s platform for building MCP servers, applying execution policies, recording evidence, and publishing tools through a governed registry. It builds on FastMCP and includes the SecureMCP Python server layer, PureCipher Registry, and PureCipher Publisher CLI.</p> | |
| <p><a href="https://github.com/PureCipher/xsecuremcp2.0" target="_blank" rel="noopener noreferrer">GitHub project</a> · <a href="https://github.com/PureCipher/xsecuremcp2.0/releases/tag/build-latest" target="_blank" rel="noopener noreferrer">Python downloads</a> · <a href="https://github.com/PureCipher/xregistry" target="_blank" rel="noopener noreferrer">Registry console</a> · <a href="https://github.com/PureCipher/xsecuremcp2.0/tree/main/docs/servers/security" target="_blank" rel="noopener noreferrer">Documentation</a></p> | |
| <h2 id="what-changes-beyond-mcp-and-why">What changes beyond MCP, and why</h2> | |
| <p><strong>MCP is the protocol; FastMCP is a Python framework; xSecureMCP adds configurable security and governance components on top.</strong> xSecureMCP does not define a replacement wire protocol. MCP clients still discover and call tools using MCP messages.</p> | |
| <p>MCP already describes <a href="https://modelcontextprotocol.io/specification/2025-11-25/basic/authorization" target="_blank" rel="noopener noreferrer">authorization for HTTP transports</a>, user consent, and <a href="https://modelcontextprotocol.io/specification/2025-11-25" target="_blank" rel="noopener noreferrer">security responsibilities for implementers</a>. FastMCP already provides server/client APIs, middleware, and authentication integration. The additions below are implementation features in this fork, not claims that MCP or FastMCP lack security.</p> | |
| <div class="table-wrap"><table> | |
| <thead> | |
| <tr> | |
| <th>Area</th> | |
| <th>xSecureMCP adds</th> | |
| <th>Why it matters</th> | |
| </tr> | |
| </thead> | |
| <tbody> | |
| <tr> | |
| <td><strong>Execution policy</strong></td> | |
| <td>Configurable policy providers that evaluate operations and can deny execution, with fail-closed handling when configured.</td> | |
| <td>Being authenticated does not mean a caller should be allowed to perform every operation. For example, an assistant may read a record while being forbidden to reset it.</td> | |
| </tr> | |
| <tr> | |
| <td><strong>Consent and contracts</strong></td> | |
| <td>Consent graphs and contract checks that applications can connect to their identity, approval, and resource rules.</td> | |
| <td>Access can depend on who owns the data, what was approved, and the permitted scope of use—not just whether a request is well formed.</td> | |
| </tr> | |
| <tr> | |
| <td><strong>Provenance and execution receipts</strong></td> | |
| <td>Ledger records and portable receipts with outcome claims, input/output digests, and integrity proofs.</td> | |
| <td>Operators and clients can inspect evidence about an observed execution when debugging or reviewing an incident.</td> | |
| </tr> | |
| <tr> | |
| <td><strong>Publication and certification</strong></td> | |
| <td>Publisher manifests, validation, certification checks, registry listings, and optional moderation.</td> | |
| <td>Teams need a review process for what enters their tool catalog, with publisher and trust information alongside connection details.</td> | |
| </tr> | |
| <tr> | |
| <td><strong>Monitoring and response</strong></td> | |
| <td>Configurable behavioral analysis, security events, and escalation components.</td> | |
| <td>A tool that passed an initial review can still need investigation when observed behavior changes.</td> | |
| </tr> | |
| <tr> | |
| <td><strong>Operational governance</strong></td> | |
| <td>Policy audit trails, registry roles, and governance views in the companion console.</td> | |
| <td>Administrators need to review access decisions and manage the tool lifecycle across a team.</td> | |
| </tr> | |
| </tbody> | |
| </table></div> | |
| <p>These features only cover the execution paths and evidence sources connected to them. A catalog listing does not instrument a remote server. Tool annotations are not enforcement, a receipt is not a guarantee of truthful output, and enabling a policy module does not automatically establish regulatory compliance or process isolation.</p> | |
| <p>For example, consider an assistant working with customer records: MCP carries the tool call; authentication establishes the caller; a configured policy decides whether that caller may read or change the record; consent and contract checks evaluate applicable permissions; provenance records the execution that reaches it. Each control answers a different question. Their coverage and ordering depend on the server configuration.</p> | |
| <h2 id="how-to-use-the-project">How to use the project</h2> | |
| <ol> | |
| <li><strong>Try the backend:</strong> use the health request below to inspect this Space. It is the registry service, not a general-purpose agent or the calculator example.</li> | |
| <li><strong>Build a server:</strong> install the matching fork packages, define your tools, and configure <code>SecurityConfig</code> for the controls your application needs.</li> | |
| <li><strong>Connect a client:</strong> point an MCP client at your server’s endpoint. The <a href="https://github.com/PureCipher/xsecuremcp2.0#build-an-mcp-server" target="_blank" rel="noopener noreferrer">server-and-client quickstart</a> demonstrates a tool call and receipt verification.</li> | |
| <li><strong>Check enforcement:</strong> allow one operation, deny another, and inspect the resulting evidence. See the <a href="https://github.com/PureCipher/xsecuremcp2.0#readme" target="_blank" rel="noopener noreferrer">project README</a> for the security configuration and its boundaries.</li> | |
| <li><strong>Share and operate:</strong> use PureCipher Publisher to submit projects to your chosen registry, and the separate xregistry console to manage it. Configure authentication, moderation, and persistent storage for your deployment.</li> | |
| </ol> | |
| <h2 id="what-this-space-runs">What this Space runs</h2> | |
| <p>This Space hosts the <strong>PureCipher Registry backend API</strong> in a Docker container. It supports tool listings, publisher information, certification checks, moderation, and configurable access control.</p> | |
| <p>The App tab displays this guide. Use the health-status link to inspect the running backend. The web console is maintained and deployed separately in <a href="https://github.com/PureCipher/xregistry" target="_blank" rel="noopener noreferrer">xregistry</a>; the backend’s legacy UI is disabled by default.</p> | |
| <div class="table-wrap"><table> | |
| <thead> | |
| <tr> | |
| <th>Endpoint</th> | |
| <th>Purpose</th> | |
| </tr> | |
| </thead> | |
| <tbody> | |
| <tr> | |
| <td><a href="https://purecipher-xsecuremcp.hf.space/registry/health" target="_blank" rel="noopener noreferrer"><code>/registry/health</code></a></td> | |
| <td>Service status, authentication status, and registry counts.</td> | |
| </tr> | |
| <tr> | |
| <td><a href="https://purecipher-xsecuremcp.hf.space/mcp" target="_blank" rel="noopener noreferrer"><code>/mcp</code></a></td> | |
| <td>Streamable HTTP endpoint for MCP clients.</td> | |
| </tr> | |
| </tbody> | |
| </table></div> | |
| <p>Check the running service:</p> | |
| <pre><code class="language-bash">curl https://purecipher-xsecuremcp.hf.space/registry/health | |
| </code></pre> | |
| <p>A running service or a registry listing does not by itself establish that a tool is safe or that its execution has been observed.</p> | |
| <h2 id="use-the-python-packages">Use the Python packages</h2> | |
| <p>In a Python virtual environment, install the four matching fork distributions from the latest tested GitHub build:</p> | |
| <pre><code class="language-bash">python -m pip install --upgrade -r https://github.com/PureCipher/xsecuremcp2.0/releases/download/build-latest/requirements.txt | |
| </code></pre> | |
| <p>The distributions retain the names <code>fastmcp</code>, <code>fastmcp-slim</code>, <code>fastmcp-remote</code>, and <code>fastmcp-tasks</code> for compatibility. They include the <code>securemcp</code> and <code>purecipher</code> modules. Python 3.10 or later is required; builds are validated on Python 3.12.</p> | |
| <p>See the <a href="https://github.com/PureCipher/xsecuremcp2.0#build-an-mcp-server" target="_blank" rel="noopener noreferrer">GitHub quickstart</a> to build a server, or the <a href="https://github.com/PureCipher/xsecuremcp2.0/blob/main/docs/servers/security/purecipher-publisher.mdx" target="_blank" rel="noopener noreferrer">publisher guide</a> to package and submit a project. The <a href="https://github.com/PureCipher/xsecuremcp2.0/releases/tag/build-latest" target="_blank" rel="noopener noreferrer">GitHub Release</a> also provides a ZIP bundle, checksums, and source distributions.</p> | |
| <h2 id="configure-your-own-deployment">Configure your own deployment</h2> | |
| <p>Set configuration in <strong>Space Settings → Variables and secrets</strong>. Keep credentials in secrets.</p> | |
| <div class="table-wrap"><table> | |
| <thead> | |
| <tr> | |
| <th>Setting</th> | |
| <th>Purpose</th> | |
| </tr> | |
| </thead> | |
| <tbody> | |
| <tr> | |
| <td><code>PURECIPHER_SIGNING_SECRET</code></td> | |
| <td>Required signing key for the registry.</td> | |
| </tr> | |
| <tr> | |
| <td><code>DATABASE_URL</code></td> | |
| <td>PostgreSQL connection string for persistent state. Without it, registry data is ephemeral and can be lost on restart.</td> | |
| </tr> | |
| <tr> | |
| <td><code>PURECIPHER_ENABLE_AUTH</code></td> | |
| <td>Enable registry authentication with <code>true</code>, together with the user and JWT configuration in the registry guide.</td> | |
| </tr> | |
| <tr> | |
| <td><code>PURECIPHER_REQUIRE_MODERATION</code></td> | |
| <td>Require review before accepted submissions become public by setting <code>true</code>.</td> | |
| </tr> | |
| </tbody> | |
| </table></div> | |
| <p>Authentication is disabled unless configured; a signing secret alone does not enable it. Check the live health response for the current authentication status. See the <a href="https://github.com/PureCipher/xsecuremcp2.0/blob/main/docs/servers/security/purecipher-registry.mdx" target="_blank" rel="noopener noreferrer">registry guide</a> for deployment and access-control settings.</p> | |
| <p>The container runs as user 1000 and listens on port 8000. It installs the tested Python wheels uploaded to this Space rather than rebuilding the packages from the older source files retained in the repository.</p> | |
| <h2 id="build-provenance">Build provenance</h2> | |
| <div class="table-wrap"><table> | |
| <thead> | |
| <tr> | |
| <th>Field</th> | |
| <th>Value</th> | |
| </tr> | |
| </thead> | |
| <tbody> | |
| <tr> | |
| <td>GitHub source</td> | |
| <td><a href="https://github.com/PureCipher/xsecuremcp2.0/commit/5bd407c3b7812ee3596ef0e1eea9afa5ecff0534" target="_blank" rel="noopener noreferrer"><code>5bd407c3b781</code></a></td> | |
| </tr> | |
| <tr> | |
| <td>Package version</td> | |
| <td><code>0.0.1.dev4090+5bd407c3</code></td> | |
| </tr> | |
| <tr> | |
| <td>Build metadata</td> | |
| <td><a href="https://huggingface.co/spaces/purecipher/xsecuremcp/blob/main/build.json" target="_blank" rel="noopener noreferrer"><code>build.json</code></a></td> | |
| </tr> | |
| </tbody> | |
| </table></div> | |
| <p>Pushes to the GitHub repository’s <code>main</code> branch trigger tests, static checks, clean wheel installation checks, and Docker health checks before publication. Successful builds update this Space and replace its current wheel files. Hub history is retained.</p> | |
| <p>FastMCP release updates are reviewed and merged manually. The publishing workflow does not write to the upstream FastMCP repository.</p> | |
| <h2 id="license-and-attribution">License and attribution</h2> | |
| <p>Maintained by PureCipher. Built on <a href="https://github.com/PrefectHQ/fastmcp" target="_blank" rel="noopener noreferrer">FastMCP</a> and distributed under the <a href="https://github.com/PureCipher/xsecuremcp2.0/blob/main/LICENSE" target="_blank" rel="noopener noreferrer">Apache 2.0 license</a>.</p> | |
| <footer>Published from the versioned xSecureMCP README. <a href="#top">Back to top ↑</a></footer> | |
| </main> | |
| </div> | |
| </body> | |
| </html> | |