dgb-digiid-mcp

dgb-digiid-mcp

Gives AI agents a verifiable identity using Digi-ID passwordless authentication on DigiByte, enabling them to prove who they are by signing challenges without revealing private keys.

Category
Visit Server

README

dgb-digiid-mcp

Give an AI agent a verifiable identity. An MCP server that lets an agent prove who it is using Digi-ID — DigiByte's passwordless authentication — by signing a challenge with a key it never reveals.

The natural companion to dgb-digidollar-mcp: an agent that can prove who it is and pay for what it uses — the two genuinely chain-shaped problems of the agent era, both on a decentralized rail.

Works on testnet or mainnet. Signing and verifying are pure cryptography, so the node does not need to be synced or funded — any DigiByte node with the identity wallet loaded will do. And because no money is involved, it's safe on mainnet from day one.

The flow

Service ──"prove who you are": digiid://mysite/cb?x=<nonce>──▶ Agent
Agent   ──signs the URI with its identity key──────────────▶ (no key revealed)
Agent   ──POST { address, uri, signature } ─────────────────▶ Service /callback
Service ──verifies signature + domain + nonce──────────────▶ authenticated as <address>

The agent's address is its identity. A service recognises the same agent across sessions without ever handling a password or a shared secret.

Proven end to end (see example/service.js): an agent authenticated to a service through the MCP server, and a forged response — the correct challenge signed with the wrong key but claiming the identity address — was rejected with "signature does not verify."

Why it can't be faked

  • The signature is bound to the address. Only the holder of the identity's private key can produce a signature that verifymessage(address, sig, uri) accepts. Claiming someone else's address doesn't help — the math won't verify.
  • Domain-bound. The signed message is the full digiid:// URI including your domain, so a signature the agent made for another site can't be replayed at yours.
  • Nonce / one-time use. Each challenge carries a random nonce the service issued and burns on use, so a captured response can't be replayed.
  • Legacy-address requirement, handled. DigiByte message signing only works with legacy (P2PKH) addresses, not bech32 — the server checks this at startup and fails loudly rather than mysteriously.

Tools (agent side)

Tool What it does
get_identity Return the agent's Digi-ID address — its stable public identity. Reveals no secret.
authenticate Given a digiid:// challenge, sign it and POST the response to the service's callback. Returns the service's reply. The agent's "log in."

Library (service side)

src/digiid.js is a dependency-free module a service uses to challenge and verify:

import { buildChallenge, verifyResponse } from "dgb-digiid-mcp";

const { uri, nonce } = buildChallenge({ domain: "mysite.com" });
// ...show uri to the agent (or as a QR to a human's Digi-ID wallet)...

const result = await verifyResponse(
  { address, uri, signature },
  { verifyMessage, expectedDomain: "mysite.com", isNonceValid }
);
if (result.ok) authenticateSession(result.identity);

Because Digi-ID is a published standard, the same server works for human Digi-ID wallets too — not just agents.

Setup

Point it at any DigiByte node and give it a legacy identity address:

digibyte-cli -rpcwallet=identity getnewaddress "agent" "legacy"   # note the "legacy"
npm install
cp .env.example .env    # RPC creds + DIGIID_ADDRESS

Run the demo (a passwordless login service + the agent authenticating to it):

node --env-file=.env example/service.js     # terminal 1
# then drive the MCP server's `authenticate` tool against the challenge from GET /login

Add to your MCP client (npx dgb-digiid-mcp), env: DGB_RPC_URL, DGB_RPC_USER, DGB_RPC_PASSWORD, DGB_WALLET, DIGIID_ADDRESS.

Related

Independent community project. Not affiliated with the DigiByte Foundation. MIT licensed.

Recommended Servers

playwright-mcp

playwright-mcp

A Model Context Protocol server that enables LLMs to interact with web pages through structured accessibility snapshots without requiring vision models or screenshots.

Official
Featured
TypeScript
Audiense Insights MCP Server

Audiense Insights MCP Server

Enables interaction with Audiense Insights accounts via the Model Context Protocol, facilitating the extraction and analysis of marketing insights and audience data including demographics, behavior, and influencer engagement.

Official
Featured
Local
TypeScript
Magic Component Platform (MCP)

Magic Component Platform (MCP)

An AI-powered tool that generates modern UI components from natural language descriptions, integrating with popular IDEs to streamline UI development workflow.

Official
Featured
Local
TypeScript
VeyraX MCP

VeyraX MCP

Single MCP tool to connect all your favorite tools: Gmail, Calendar and 40 more.

Official
Featured
Local
graphlit-mcp-server

graphlit-mcp-server

The Model Context Protocol (MCP) Server enables integration between MCP clients and the Graphlit service. Ingest anything from Slack to Gmail to podcast feeds, in addition to web crawling, into a Graphlit project - and then retrieve relevant contents from the MCP client.

Official
Featured
TypeScript
Kagi MCP Server

Kagi MCP Server

An MCP server that integrates Kagi search capabilities with Claude AI, enabling Claude to perform real-time web searches when answering questions that require up-to-date information.

Official
Featured
Python
Neon Database

Neon Database

MCP server for interacting with Neon Management API and databases

Official
Featured
Exa Search

Exa Search

A Model Context Protocol (MCP) server lets AI assistants like Claude use the Exa AI Search API for web searches. This setup allows AI models to get real-time web information in a safe and controlled way.

Official
Featured
Qdrant Server

Qdrant Server

This repository is an example of how to create a MCP server for Qdrant, a vector search engine.

Official
Featured
E2B

E2B

Using MCP to run code via e2b.

Official
Featured