mcp-l402-gate-example
Fetches current BTC/USD price and mempool fee estimates from mempool.space.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@mcp-l402-gate-exampleget bitcoin price and mempool fees"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
mcp-l402-gate-example
Minimal MCP server showing @powforge/mcp-l402-gate in action.
One tool, bitcoin_data, fetches current BTC/USD price plus recommended mempool fees from mempool.space. Each call is gated by:
An L402 Lightning invoice (the caller pays sats per call).
A Depth-of-Identity score lookup against the public PowForge oracle. Below the threshold, paying does not get you through.
L402 alone proves a caller paid. L402 + DoI proves they paid and carry a per-pubkey reputation that survives across sessions and costs irreversible work to fake. That second half is the part most MCP billing kits skip.
Quickstart
git clone https://github.com/zekebuilds-lab/mcp-l402-gate-example
cd mcp-l402-gate-example
cp .env.example .env # fill in GATE_HMAC_SECRET and LNBits creds
npm install
npm startServer logs the tool URL and oracle on boot. Default port is 3100.
Related MCP server: l402-kit-mcp
Test it with curl
First call has no auth, so the gate returns a 402 with an invoice:
curl -i -X POST http://localhost:3100/tools/bitcoin_data \
-H 'Content-Type: application/json' \
-H 'X-Caller-Pubkey: 02a1b2c3...your-hex-pubkey' \
-d '{}'Expected response:
HTTP/1.1 402 Payment Required
WWW-Authenticate: L402 macaroon="...", invoice="lnbc1..."
Content-Type: application/json
{
"error": "payment required",
"macaroon": "...",
"invoice": "lnbc1...",
"payment_hash": "..."
}Pay the invoice field (any LN wallet), capture the preimage, then retry:
curl -i -X POST http://localhost:3100/tools/bitcoin_data \
-H 'Content-Type: application/json' \
-H 'X-Caller-Pubkey: 02a1b2c3...your-hex-pubkey' \
-H 'Authorization: L402 <macaroon>:<preimage>' \
-d '{}'You get back the BTC price, mempool fee estimates, and the caller's DoI score.
The manifest is also exposed for MCP clients that introspect tool catalogs:
curl http://localhost:3100/manifest.jsonConfiguration
Variable | Description | Required | Default |
| HMAC key for signing L402 macaroons. Generate with | yes | - |
| Your LNBits instance base URL. | yes | - |
| LNBits invoice/read key. Never use the admin key. | yes | - |
| DoI oracle base URL. | no |
|
| HTTP port. | no |
|
| Sats charged per call. | no |
|
| Minimum DoI composite score to pass the gate. | no |
|
DoI score thresholds
These are the same buckets the oracle returns as rank. Pick the one that matches how expensive a wrong call is:
| Rank | Fits |
0 | unknown | Pure paywall. Identity does not matter. |
10 | emerging | First-call abuse hurts. Sensible default for most public MCP tools. |
40 | active | The tool burns real GPU or has expensive side effects. |
100 | established | Compliance-sensitive or single-tenant SaaS-style endpoints. |
200 | trusted | High-trust admin tooling. |
How the gate works
Without the gate, a 402 + macaroon flow proves the caller paid 10 sats. A fresh attacker wallet pays the same 10 sats. That is fine wire format and weak abuse control.
@powforge/mcp-l402-gate keeps the L402 invoice and adds a second check: when the macaroon verifies, the gate calls the DoI oracle for the caller's pubkey, gets back a Schnorr-signed score, and compares to MIN_SCORE. The score is composed from observable irreversible work across four dimensions (social, access, vouch, economic), so a fresh sybil cannot grind it in a minute.
The full failure-mode table is in @powforge/mcp-l402-gate README.
Files
server.js- the MCP server, ~110 lines..env.example- copy to.envand fill in.package.json- depends onexpressand@powforge/mcp-l402-gate.
Links
Docs and pricing: powforge.dev/mcp
Public DoI oracle: identity.powforge.dev
License
MIT.
This server cannot be installed
Maintenance
Latest Blog Posts
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/zekebuilds-lab/mcp-l402-gate-example'
If you have feedback or need assistance with the MCP directory API, please join our Discord server