qtcl-mcp-server
mcpotherAgent-native post-quantum blockchain. 11 tools: send, balance, quantum oracle metrics. Flat fee.
run it
on your own machines, one way per deploy method# once, as root:
docker build -t mcp-local/qtcl:latest https://github.com/shemshallah/qtcl-mcp-server.git
#!/usr/bin/env bash
# qtcl (io.github.shemshallah/qtcl-mcp-server), recipe docker (generated).
# Generated by Hub for toolset "my-agent"; started by mcp-my-agent-qtcl.service.
set -euo pipefail
export HOST=127.0.0.1 PORT=8101
exec docker run --rm --name mcp-my-agent-qtcl -p 127.0.0.1:${PORT}:8000 --env-file /etc/mcp/my-agent.env mcp-local/qtcl:latest
[Unit]
Description=MCP server qtcl (toolset my-agent), generated by Hub
After=network-online.target docker.service
Wants=network-online.target
[Service]
Type=simple
User=mcp
Group=mcp
SupplementaryGroups=docker
EnvironmentFile=/etc/mcp/my-agent.env
Environment=HOME=/var/lib/mcp/qtcl
WorkingDirectory=/var/lib/mcp/qtcl
ExecStart=/opt/mcp/my-agent/bin/qtcl.sh
Restart=on-failure
RestartSec=5
NoNewPrivileges=true
ProtectSystem=strict
ProtectHome=true
PrivateTmp=true
ReadWritePaths=/var/lib/mcp/qtcl
[Install]
WantedBy=multi-user.target
docker build -t qtcl https://github.com/shemshallah/qtcl-mcp-server.git docker run --rm -p 127.0.0.1:8101:8000 qtcl
# Generated by Hub for toolset "my-agent" (2026-10-18T13:53:08+00:00).
# Each package server runs behind a stdio->HTTP bridge and listens on localhost only.
# cp .env.example .env # fill the ${VAR}s
# docker compose up -d && bash smoke.sh
# Remote servers are not here: clients reach them directly (see clients/).
name: mcp-my-agent
services:
qtcl:
build:
context: https://github.com/shemshallah/qtcl-mcp-server.git
ports:
- 127.0.0.1:8101:8000
restart: unless-stopped
x-note: 'CHANGE_ME: built from the repository''s Dockerfile, assuming it serves streamable HTTP at
:8000/mcp. Nothing has run this yet; the worker replaces it with a tested recipe.'
volumes:
npm-cache: {}
uv-cache: {}
# Generated by Hub for toolset "my-agent" (2026-10-18T13:53:08+00:00).
# kubectl create namespace mcp
# kubectl -n mcp create secret generic mcp-credentials --from-env-file=.env
# kubectl apply -f kubernetes.yaml
# Services are cluster-internal: <name>.mcp.svc.cluster.local:8000/mcp. Put an ingress
# with auth in front before exposing any of them.
apiVersion: v1
kind: Namespace
metadata:
name: mcp
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: qtcl
namespace: mcp
labels: &id001
app: qtcl
spec:
replicas: 1
selector:
matchLabels: *id001
template:
metadata:
labels: *id001
spec:
containers:
- name: qtcl
image: CHANGE_ME
ports:
- containerPort: 8000
name: http
env: []
---
apiVersion: v1
kind: Service
metadata:
name: qtcl
namespace: mcp
spec:
selector:
app: qtcl
ports:
- port: 8000
targetPort: http
name: http
# Generated by Hub for toolset "my-agent" (2026-10-18T13:53:08+00:00).
# Credentials come from the Secret 'mcp-credentials' (kubectl create secret generic ... --from-env-file=.env).
# Each server under `servers` is one Deployment + Service; the keys after it configure
# upstream charts a worker verified.
servers:
qtcl:
enabled: true
replicas: 1
port: 8000
path: /mcp
container:
name: qtcl
image: CHANGE_ME
ports:
- containerPort: 8000
name: http
env: []
# helm install my-agent helm/my-agent -n mcp
in the cloud
one click: the provider's deploy form opens filled in, in your own account- koyeb
-
Koyeb builds the repository's Dockerfile from branch main; change the branch in the form if the default one has another name.
Clients connect to the service's https://…koyeb.app address plus /mcp.
- cloud run
-
Cloud Shell clones the repository, builds its Dockerfile and deploys it to Cloud Run.
Cloud Run sends requests to $PORT (8080); the recipe expects :8000, so the server has to read PORT, or set the container port on the service afterwards.
connect to it
copy what your client needs{
"mcpServers": {
"qtcl": {
"command": "CHANGE_ME",
"args": []
}
}
}
#!/usr/bin/env bash # Registers every server with Claude Code (run once; `claude mcp list` to check). set -euo pipefail set -a; [ -f .env ] && source .env; set +a claude mcp add qtcl -- CHANGE_ME
{
"mcpServers": {
"qtcl": {
"command": "CHANGE_ME",
"args": []
}
}
}
{
"servers": {
"qtcl": {
"type": "stdio",
"command": "CHANGE_ME",
"args": []
}
}
}
name: my-agent target: local servers: - hub: io.github.shemshallah/qtcl-mcp-server
- no recipe for target 'local': fill the files by hand
tools · 22
qtcl_create_hybrid_walletCreate a new QTCL wallet with HYBRID post-quantum keys: Falcon-512 (NIST FIPS 206, 128-bit PQ security) + SL(3,p) (~70-bit classical). Returns full keypair dict with both Falcon and SL(3,p) components. Server does NOT retain secret keys. This is the v3 recommended wallet type — quantum-safe by default.Create a new QTCL wallet with HYBRID post-quantum keys: Falcon-512 (NIST FIPS 206, 128-bit PQ security) + SL(3,p) (~70-bit classical). Returns full keypair dict with both Falcon and SL(3,p) components. Server does NOT retain secret keys. This is the v3 recommended wallet type — quantum-safe by default.
pin fcf340ffd0f4a24602c37426fa692ac7260529f803ba4662764bb1504d400317qtcl_create_walletCreate a new QTCL post-quantum wallet backed by a real HypΓ keypair (Schnorr-Γ over SL(3,p), 512-step random walk, SHA3-256² address). Returns private_key, public_key, address, and created_at. Store private_key securely — the server never retains it.Create a new QTCL post-quantum wallet backed by a real HypΓ keypair (Schnorr-Γ over SL(3,p), 512-step random walk, SHA3-256² address). Returns private_key, public_key, address, and created_at. Store private_key securely — the server never retains it.
pin 1f62d22ebceb5fde8a846510c837a198179487daa639f7c07e476c96f48da099qtcl_get_balanceCheck QTCL balance for any address. Returns balance in base units (qsat), UTXO count, and UTXO list. 1 QTCL = 100 qsat.Check QTCL balance for any address. Returns balance in base units (qsat), UTXO count, and UTXO list. 1 QTCL = 100 qsat.
pin 7c20999f675d3abd630452d7d4035890bacee79c502eb490cb9cc6e43f453626qtcl_get_blockRetrieve a block by height (integer) or hash (hex string). Omit both for the latest block.Retrieve a block by height (integer) or hash (hex string). Omit both for the latest block.
pin 88de47759e3f83133612a458e9c501672cd2a6ec18e229762332187bb0208041qtcl_get_chain_infoCurrent blockchain state: height, latest block hash, mempool depth, oracle status, and system health vector.Current blockchain state: height, latest block hash, mempool depth, oracle status, and system health vector.
pin da294aa3ddc92eb8408120137fea32c7f15f609abaa550107cfc9faed0939087qtcl_get_oracle_registryList registered quantum oracle nodes participating in 5-oracle Byzantine consensus (3-of-5 majority).List registered quantum oracle nodes participating in 5-oracle Byzantine consensus (3-of-5 majority).
pin db76592f72a259649819ac636a0fd698f26c56c0bff72e1a8eb9ee0895d1afa9qtcl_get_peersList active P2P peers in the QTCL Kademlia DHT network.List active P2P peers in the QTCL Kademlia DHT network.
pin cb19b5ed4cffcb8c17ce46fd77a1cca7b173367919463c168a951b84114033fcqtcl_get_pqc_statusReturn PQC module status — shows whether Falcon-512 is available, key/signature sizes, security level, and hybrid signature overhead. Use to check if the server supports full hybrid PQ signatures.Return PQC module status — shows whether Falcon-512 is available, key/signature sizes, security level, and hybrid signature overhead. Use to check if the server supports full hybrid PQ signatures.
pin 72866ea1dcbbd211f74c6285ad0c00b102a43944d3a5fb98f9a7936a2f01bed5qtcl_get_priceQTCL network quantum coherence metrics and valuation signals. Note: QTCL has no public USD exchange. Returns W-state fidelity, entanglement witness, and oracle coherence as network health proxy.QTCL network quantum coherence metrics and valuation signals. Note: QTCL has no public USD exchange. Returns W-state fidelity, entanglement witness, and oracle coherence as network health proxy.
pin a0495d26b516b4cf023a19624e9a02fa28cfce444ae45a7bb1b0854d185ae360qtcl_get_quantum_metricsLive quantum coherence metrics: W-state fidelity (≥0.75 healthy), entanglement witness (NPT criterion), oracle consensus round, Mermin inequality test, and kappa=0.11 non-Markovian coherence score.Live quantum coherence metrics: W-state fidelity (≥0.75 healthy), entanglement witness (NPT criterion), oracle consensus round, Mermin inequality test, and kappa=0.11 non-Markovian coherence score.
pin c5af928858013804f830f53f46ff37706da9ae48c24067300c6b5b4ca9fdd11eqtcl_get_recent_transactionsList recent transactions, optionally filtered by address. Returns newest first. Max 50 per call.List recent transactions, optionally filtered by address. Returns newest first. Max 50 per call.
pin b51513844fb5ee2bbd5c54a3ff5e722824f73f0cf5b7b894e27aed63eff04ebeqtcl_get_transactionLook up a QTCL transaction by its SHA3-256 hash. Returns full tx details, status, and block height.Look up a QTCL transaction by its SHA3-256 hash. Returns full tx details, status, and block height.
pin def77eed27d84316b7acd5491e4a06f29efcbcc254e576abefc2e9f66162247fqtcl_get_utxosList unspent transaction outputs (UTXOs) for an address. Returns tx_hash, output_index, amount_base per coin.List unspent transaction outputs (UTXOs) for an address. Returns tx_hash, output_index, amount_base per coin.
pin 493d7a3aca5a65898307bfb0f98ca4b0ae92785a68c23e8d7bc8bf6b4d3a2b1eqtcl_quantum_decryptDecrypt quantum-bound or quantum-assisted ciphertext. Auto-detects mode from the ciphertext dict: quantum_bound → runs QLDPC pipeline on masked key, XOR-unmasks, decrypts attestation → tries classical first, falls back to quantum-assisted recovery classical → pure classical decrypt Returns: Plaintext (hex), plaintext_length, quantum_assisted flag, quantum_mode.Decrypt quantum-bound or quantum-assisted ciphertext. Auto-detects mode from the ciphertext dict: quantum_bound → runs QLDPC pipeline on masked key, XOR-unmasks, decrypts attestation → tries classical first, falls back to quantum-assisted recovery classical → pure classical decrypt Returns: Plaintext (hex), plaintext_length, quantum_assisted flag, quantum_mode.
pin 06fab060a092b34cb55aae65363915cc08369e55a0c5ffed61feaae39de4803fqtcl_quantum_encryptQuantum-bound encryption via IBM QLDPC hardware (ibm_marrakesh/ibm_kingston). Two modes: quantum_bound (async=false, default): XOR-masks the encapsulated key with a hardware-derived quantum key. Runs synchronously with 8192 shots for deterministic results. Recipient MUST use qtcl_quantum_decrypt to recover the key. attestation (async=true): Leaves encapsulated key unchanged, runs hardware in background. Attaches quantum_commitment as metadata. Classical decrypt still works. Returns: Ciphertext dict with quantum_commitment, quantum_status, quantum_mode, quantum_hardened, and all standard encryption fields.Quantum-bound encryption via IBM QLDPC hardware (ibm_marrakesh/ibm_kingston). Two modes: quantum_bound (async=false, default): XOR-masks the encapsulated key with a hardware-derived quantum key. Runs synchronously with 8192 shots for deterministic results. Recipient MUST use qtcl_quantum_decrypt to recover the key. attestation (async=true): Leaves encapsulated key unchanged, runs hardware in background. Attaches quantum_commitment as metadata. Classical decrypt still works. Returns: Ciphertext dict with quantum_commitment, quantum_status, quantum_mode, quantum_hardened, and all standard encryption fields.
pin 43ba8016d9e6e2385e478c0817670ecfe08614746f38361857e19522d029d51dqtcl_quantum_pipelineRun the full QLDPC pipeline directly on IBM quantum hardware. Encodes ciphertext bytes into a hyperbolic QLDPC code, runs on real IBM hardware (8192 shots), decodes syndromes via BP+OSD, and returns the recovered key fragment. Returns: Pipeline result with recovered_key_hex, residual, status, job_id, backend.Run the full QLDPC pipeline directly on IBM quantum hardware. Encodes ciphertext bytes into a hyperbolic QLDPC code, runs on real IBM hardware (8192 shots), decodes syndromes via BP+OSD, and returns the recovered key fragment. Returns: Pipeline result with recovered_key_hex, residual, status, job_id, backend.
pin c6e16e1288d25b17f161d86171e21ac759dc54628b92d10580ad65cc5a1cf0c9qtcl_repair_utxosNuclear UTXO repair: bypasses settlement machinery and directly inserts missing UTXOs from the transactions table. Use when qtcl_retro_settle reports success but UTXOs are still missing. Commits per-UTXO for maximum isolation. Returns repaired_blocks, repaired_utxos, recomputed_wallets counts.Nuclear UTXO repair: bypasses settlement machinery and directly inserts missing UTXOs from the transactions table. Use when qtcl_retro_settle reports success but UTXOs are still missing. Commits per-UTXO for maximum isolation. Returns repaired_blocks, repaired_utxos, recomputed_wallets counts.
pin 62db31343b6160a96bbdb1e9c63667413f78e6662636b224e62fa91a5ee3fc29qtcl_retro_settleRetroactively settle all blocks whose UTXOs are missing from address_utxos. Safe to call repeatedly — idempotent. Returns counts of settled/skipped/error blocks. Use this when miner balance is lower than expected after mining blocks.Retroactively settle all blocks whose UTXOs are missing from address_utxos. Safe to call repeatedly — idempotent. Returns counts of settled/skipped/error blocks. Use this when miner balance is lower than expected after mining blocks.
pin 28de0bf227330dda0465315e3e853fd605ca3ebe810af6c3fb4668ea4a0e0d17qtcl_send_transactionSubmit a signed UTXO transaction to the QTCL network. Flat fee: 1 qsat. Finality: ~18 seconds. WORKFLOW: (1) pick nonce = int(time.time()*1000) [ms epoch]. (2) build payload = JSON.dumps({sender,recipient,amount,nonce}, sort_keys=True). (3) hash = SHA3-256(payload) as 64-char hex. (4) call qtcl_sign_message(message_hex=hash, private_key=key). (5) pass the 'signature_for_tx' field from step 4 as the 'signature' arg here, with the SAME nonce used in steps 1-4. CRITICAL: nonce must be a millisecond timestamp (>1700000000000) to avoid nonce_replay rejection. Never use sequential integers.Submit a signed UTXO transaction to the QTCL network. Flat fee: 1 qsat. Finality: ~18 seconds. WORKFLOW: (1) pick nonce = int(time.time()*1000) [ms epoch]. (2) build payload = JSON.dumps({sender,recipient,amount,nonce}, sort_keys=True). (3) hash = SHA3-256(payload) as 64-char hex. (4) call qtcl_sign_message(message_hex=hash, private_key=key). (5) pass the 'signature_for_tx' field from step 4 as the 'signature' arg here, with the SAME nonce used in steps 1-4. CRITICAL: nonce must be a millisecond timestamp (>1700000000000) to avoid nonce_replay rejection. Never use sequential integers.
pin 1cf7be36ec4f70933ec92c5329b2f46dce6697378bf80e44a39d2991c6582cf4qtcl_sign_messageSign a 32-byte message hash with a HypΓ private key using Schnorr-Γ. To sign a transaction, compute: SHA3-256(JSON.dumps({"sender": from_addr, "recipient": to_addr, "amount": amount_float, "nonce": nonce_int}, sort_keys=True)) → pass the 64-char hex as message_hex. The nonce MUST match the nonce you will use in qtcl_send_transaction. Returns the full signature dict (with canonical R/Z matrix fields) — pass the entire JSON output as the signature field to qtcl_send_transaction. CRITICAL: use the 'signature_for_tx' field from the response as the 'signature' argument to qtcl_send_transaction — do not extract sub-fields.Sign a 32-byte message hash with a HypΓ private key using Schnorr-Γ. To sign a transaction, compute: SHA3-256(JSON.dumps({"sender": from_addr, "recipient": to_addr, "amount": amount_float, "nonce": nonce_int}, sort_keys=True)) → pass the 64-char hex as message_hex. The nonce MUST match the nonce you will use in qtcl_send_transaction. Returns the full signature dict (with canonical R/Z matrix fields) — pass the entire JSON output as the signature field to qtcl_send_transaction. CRITICAL: use the 'signature_for_tx' field from the response as the 'signature' argument to qtcl_send_transaction — do not extract sub-fields.
pin 5985179e20efc84e1a67f64db3a3a630b4e6107869544284e2061b656b5254f8qtcl_sign_message_hybridSign a 32-byte message hash with HYBRID PQC (Falcon-512 + SL(3,p)). Both Falcon and SL(3,p) signatures are computed independently — verification requires BOTH to be valid. message_hex must be 64 hex chars (SHA3-256 of signing payload). private_key_json must be the full JSON output from qtcl_create_hybrid_wallet. Returns hybrid signature dict — pass verbatim as 'signature' to qtcl_send_transaction.Sign a 32-byte message hash with HYBRID PQC (Falcon-512 + SL(3,p)). Both Falcon and SL(3,p) signatures are computed independently — verification requires BOTH to be valid. message_hex must be 64 hex chars (SHA3-256 of signing payload). private_key_json must be the full JSON output from qtcl_create_hybrid_wallet. Returns hybrid signature dict — pass verbatim as 'signature' to qtcl_send_transaction.
pin 407d37783c392b87d33e1f2761cd8c4ab7c4abf16a5bbecb4d9f4a57fbfa2da6qtcl_submit_blockSubmit a fully PoW-solved and HypΓ-signed block to the chain. This is the unified miner submission path. The miner client performs PoW locally, signs the block header, then calls this with the complete payload. Required: height, block_hash, parent_hash, merkle_root, timestamp, nonce, miner_address, difficulty_bits, w_entropy_hash, hyp_signature, miner_public_key_hex. Optional: transactions (JSON array), w_state_fidelity, pq0, pq_curr, pq_last, mermin_value, mermin_violated, quantum_field_16x16x16. Returns: {status, height, block_hash, next_height, miner_reward_qtcl}.Submit a fully PoW-solved and HypΓ-signed block to the chain. This is the unified miner submission path. The miner client performs PoW locally, signs the block header, then calls this with the complete payload. Required: height, block_hash, parent_hash, merkle_root, timestamp, nonce, miner_address, difficulty_bits, w_entropy_hash, hyp_signature, miner_public_key_hex. Optional: transactions (JSON array), w_state_fidelity, pq0, pq_curr, pq_last, mermin_value, mermin_violated, quantum_field_16x16x16. Returns: {status, height, block_hash, next_height, miner_reward_qtcl}.
pin d970374989f98b10f316f6c85792f8e9a2dbab8b89c649a825824a611054ca35
runs · 1
the latest tests of this entry by the hub and its workers, newest first| date | worker | method | status | sandbox | reason |
|---|---|---|---|---|---|
| 2026-10-16 09:49 | local-mac | remotemcp 2025-06-18 | ok22 tools | none | — |